デバッグ表示を分かりやすく2(v4.3)

This commit is contained in:
Last2014 2025-07-05 14:06:37 +09:00
parent c3ab3a8456
commit 568ae7abf6
9 changed files with 46 additions and 13 deletions

View File

@ -8,9 +8,14 @@ uwuzuで動作するお知らせBOTです。
examples/config.tsをプロジェクトルートへ移動し各設定を更新してください。
## 設定項目
time.stopTimes.start: 時報休止期間の開始時刻(HH)
time.stopTimes.stop: 時報休止期間の停止時刻(HH)
earthquake.reconnectTimes地震情報のWebSocketが切断されたときに自動再接続する時間(ミリ秒)
earthquake.websocketUrl地震情報のWebSocket接続先URL
earthquake.areasCsvUrl地域情報のデータベース(CSV)ファイルのURL
earthquake.maxScaleMin: 地震発生投稿の最低震度(10-70)
earthquake.rateLimit: 地域情報更新のレート制限(分)
weather.splitCount天気お知らせの返信の分割数(4分割を推奨)

5
asciiart.txt Normal file
View File

@ -0,0 +1,5 @@
# # ##### ####### ### ##### ####### # # # # # # ###### # #
## # # # # # ## # # # # # # # # # # #
# ## # # # # # # ###### # # # # # # # # ## # #
# ## # # # # ## # # # # # # # # # #
# # ##### # ### ##### ####### ###### # # ###### ###### #######

View File

@ -6,6 +6,10 @@ import timeNotice from "./scripts/timeNotice.js";
import weatherNotice from "./scripts/weatherNotice.js";
import earthquakeNotice from "./scripts/earthquakeNotice.js";
// アスキーアート読み込み
import asciiArt from "./scripts/asciiart.js";
asciiArt();
// フォローバック機能読み込み
import followBack from "./scripts/followBack.js";

View File

@ -1,6 +1,6 @@
{
"name": "noticeuwuzu",
"version": "v4.2@uwuzu1.5.4",
"version": "v4.3@uwuzu1.5.4",
"description": "uwuzu Notice Bot",
"main": "dist/main.js",
"scripts": {
@ -29,6 +29,7 @@
"@types/dotenv": "^6.1.1",
"@types/node-cron": "^3.0.11",
"date-fns": "^4.1.0",
"fs": "^0.0.1-security",
"node-cron": "^4.1.1",
"tsx": "^4.20.3",
"typescript": "^5.8.3",

5
scripts/asciiart.ts Normal file
View File

@ -0,0 +1,5 @@
import * as fs from "fs";
export default function asciiArt() {
console.log(fs.readFileSync("asciiart.txt", "utf-8"));
}

View File

@ -20,13 +20,13 @@ class P2PEarthquakeClient {
if (this.isConnecting) return;
this.isConnecting = true;
console.log("P2P地震情報に接続中");
console.log("地震情報サーバーに接続中");
try {
this.ws = new WebSocket(config.earthquake.websocketUrl);
this.ws.on("open", () => {
console.log("P2P地震情報に接続しました");
console.log("地震情報サーバーに接続しました");
this.isConnecting = false;
if (this.reconnectTimer) {
@ -45,7 +45,7 @@ class P2PEarthquakeClient {
});
this.ws.on("close", (code: number, reason: Buffer) => {
console.log(`接続が閉じられました: ${code} - ${reason.toString()}`);
console.log(`切断されました: ${code} - ${reason.toString()}`);
this.isConnecting = false;
this.scheduleReconnect();
});
@ -75,7 +75,7 @@ class P2PEarthquakeClient {
this.executeEventFunc(message);
break;
case 555: // 地域情報更新情報
console.log("地域情報更新情報を受信しました");
console.log("地域情報更新を受信しました");
this.executeEventFunc(message);
break;
default:
@ -91,6 +91,7 @@ class P2PEarthquakeClient {
private scheduleReconnect(): void {
if (this.reconnectTimer) return;
console.log("地震情報サーバーから切断されました");
console.log(`${this.reconnectInterval / 1000}秒後に再接続を試みます`);
this.reconnectTimer = setTimeout(() => {
this.reconnectTimer = null;
@ -361,6 +362,9 @@ async function event(earthquakeInfo: any): Promise<void> {
`);
rateLimit = new Date();
} else {
console.log("レート制限に満たしていないため投稿されませんでした");
return;
}
}
}
@ -376,7 +380,7 @@ async function ueuse(text: string) {
const resData = await res.json();
console.log(JSON.stringify(resData));
console.log(`地震情報投稿:${JSON.stringify(resData)}`);
}
export default function earthquakeNotice(): void {

View File

@ -3,18 +3,20 @@ import type * as types from "types/types";
import config from "../config.js";
export default async function followBack() {
console.log("----------------");
// フォロワーを取得
const resMe = await fetch(
`https://${config.uwuzuServer}/api/me?token=${config.apiToken}`,
{
method: "GET",
// uwuzu.netで/api/meのPOSTが死んでいるため簡易的にGET
// uwuzu v1.5.4で/api/meのPOSTが死んでいるため簡易的にGET
},
);
const meData: types.meApi = await resMe.json();
console.log(meData);
console.log(`BOTプロフィール${meData}`);
const followers: Array<string> = meData.follower;
@ -35,6 +37,6 @@ export default async function followBack() {
const followData: types.followApi = await resFollow.json();
console.log(JSON.stringify(followData));
console.log(`フォロー:${JSON.stringify(followData)}`);
}
}

View File

@ -23,7 +23,12 @@ if (start < stop) {
export default async function timeNotice() {
if (inRange === false) {
console.log("----------------");
if (inRange) {
console.log("時報休止期間のため投稿されませんでした");
return;
} else {
// 投稿
const resUeuse = await fetch(
`https://${config.uwuzuServer}/api/ueuse/create`,
@ -38,6 +43,6 @@ export default async function timeNotice() {
const ueuseData: types.ueuseCreateApi = await resUeuse.json();
console.log(JSON.stringify(ueuseData));
console.log(`時報投稿:${JSON.stringify(ueuseData)}`);
}
}

View File

@ -5,6 +5,8 @@ import type * as types from "types/types.js";
import config from "../config.js";
export default async function weatherNotice() {
console.log("----------------");
// 仮投稿
const resUeuse = await fetch(
`https://${config.uwuzuServer}/api/ueuse/create`,
@ -22,7 +24,7 @@ export default async function weatherNotice() {
const ueuseData: types.ueuseCreateApi = await resUeuse.json();
console.log(JSON.stringify(ueuseData));
console.log(`天気仮投稿:${JSON.stringify(ueuseData)}`);
// インデックス
@ -114,6 +116,6 @@ export default async function weatherNotice() {
const replyData: types.ueuseCreateApi = await resReply.json();
console.log(JSON.stringify(replyData));
console.log(`天気投稿:${JSON.stringify(replyData)}`);
}
}