From 953c49583c62e4401d0e07e818461d3a771bbfd7 Mon Sep 17 00:00:00 2001 From: Last2014 Date: Sun, 3 May 2026 15:10:37 +0900 Subject: [PATCH] =?UTF-8?q?Chg:=20=E6=9C=80=E5=A4=A7=E9=9C=87=E5=BA=A6?= =?UTF-8?q?=E3=81=8C=E6=8A=95=E7=A8=BF=E3=81=AB=E5=BF=85=E8=A6=81=E3=81=AA?= =?UTF-8?q?=E5=80=A4=E3=81=AB=E6=BA=80=E3=81=9F=E3=81=AA=E3=81=84=E5=A0=B4?= =?UTF-8?q?=E5=90=88=E3=81=AE=E3=82=B3=E3=83=B3=E3=82=BD=E3=83=BC=E3=83=AB?= =?UTF-8?q?=E8=A1=A8=E7=A4=BA=E3=82=92=E5=A4=89=E6=9B=B4=20/=20Feat:=20?= =?UTF-8?q?=E8=BF=94=E4=BF=A1=E3=81=A7=E3=81=AF=E3=81=AA=E3=81=84=E3=83=A6?= =?UTF-8?q?=E3=83=BC=E3=82=BA=E3=81=AE=E8=87=AA=E4=B8=BB=E7=9A=84=E3=81=AA?= =?UTF-8?q?=E6=96=87=E5=AD=97=E6=95=B0=E5=88=B6=E9=99=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config/example.yaml | 6 ++++++ src/feature/earthquakeNotice.ts | 10 +++++----- src/lib/client.ts | 15 +++++++++++++-- src/lib/config.ts | 1 + 4 files changed, 25 insertions(+), 7 deletions(-) diff --git a/config/example.yaml b/config/example.yaml index ab1c040..5059566 100644 --- a/config/example.yaml +++ b/config/example.yaml @@ -33,5 +33,11 @@ ueuse: # 再試行の間隔(ミリ秒) number # 正数のみが有効です。 retryInterval: 1000 + # 公開されたユーズの自主規制文字数 number + # 返信ではない(公開された)ユーズで使用する自主的な文字数制限です。 + # 返信では、サーバーの設定に従います。 + # 0にすると、返信ではないユーズでもサーバーの設定に従います。 + # 0以上の整数が有効です。 + maxLengthWithPublic: 512 # デバッグモードにするかどうか boolean debug: false \ No newline at end of file diff --git a/src/feature/earthquakeNotice.ts b/src/feature/earthquakeNotice.ts index e9572a4..9ad8767 100644 --- a/src/feature/earthquakeNotice.ts +++ b/src/feature/earthquakeNotice.ts @@ -116,7 +116,7 @@ const processMessage = async (message: any) => { message.earthquake.maxScale !== -1 && message.earthquake.maxScale < config.earthquake.requireMaxScale ) { - console.log("投稿に必要な最大震度に満たないため、スキップします"); + console.log(`最大震度(${scaleMessages[message.earthquake.maxScale]})が投稿に必要な値(${scaleMessages[config.earthquake.requireMaxScale]})に満たないため、スキップします`); break; } @@ -143,7 +143,7 @@ const processMessage = async (message: any) => { } const grouped: Record }> = {}; - + for (const point of message.points) { const { addr, scale, pref } = point; const label = scaleMessages[String(scale)] ?? "不明"; @@ -163,7 +163,7 @@ const processMessage = async (message: any) => { .sort((a, b) => b[1].scale - a[1].scale) .map(([label, { prefs }]) => { const prefLines = Object.entries(prefs) - .map(([pref, addrs]) => `${pref}: ${addrs.join("・")}`) + .map(([pref, addrs]) => `**${pref}:** ${addrs.join("・")}`) .join(EOL); return `【${label}】${EOL}${prefLines}`; @@ -281,7 +281,7 @@ const processMessage = async (message: any) => { ? `から${scaleMessages[String(Math.floor(area.scaleTo))]}` : ""), kind: kindMessages[area.kindCode] ?? "😕主要動の***到達予想は***ありません。", - arrivalTime: area.arrivalTime !== undefined + arrivalTime: typeof area.arrivalTime === "string" && area.arrivalTime !== "" ? format(new Date(area.arrivalTime), "yyyy年M月d日 H:mm:ss") : "不明", }) + EOL.repeat(2); @@ -306,7 +306,7 @@ const processMessage = async (message: any) => { magnitude: message.earthquake.hypocenter.magnitude === undefined || message.earthquake.hypocenter.magnitude === -1 ? "不明" - : `M${message.earthquake.hypocenter.magnitude}`, + : `M${message.earthquake.hypocenter.magnitude.toFixed(1)}`, areas: areasMsg !== "" ? EOL.repeat(2) + areasMsg.trim() : "", diff --git a/src/lib/client.ts b/src/lib/client.ts index 0024124..a038d99 100644 --- a/src/lib/client.ts +++ b/src/lib/client.ts @@ -15,7 +15,6 @@ export default client; export const createUeuse = async (data: ApiMap["ueuse/create"]["body"], title: string) => { const mem = Memory.memory; - const maxLength = mem.max_length; const excessedMessage = "👉返信に続きがあります。"; let lines = data.text.split(EOL); @@ -26,7 +25,13 @@ export const createUeuse = async (data: ApiMap["ueuse/create"]["body"], title: s count++; let currentText = ""; - const limit = maxLength - (excessedMessage.length + EOL.length * 2); + const currentMaxLength = (data.replyid !== undefined || firstUniqid !== "") + ? mem.max_length + : config.ueuse.maxLengthWithPublic === 0 + ? mem.max_length + : config.ueuse.maxLengthWithPublic; + + const limit = currentMaxLength - (excessedMessage.length + EOL.length * 2); while (lines.length > 0) { const nextLine = lines[0]; @@ -50,6 +55,8 @@ export const createUeuse = async (data: ApiMap["ueuse/create"]["body"], title: s } } + currentText = currentText.trimEnd(); + if (lines.length > 0) { currentText += EOL.repeat(2) + excessedMessage; } @@ -87,5 +94,9 @@ export const createUeuse = async (data: ApiMap["ueuse/create"]["body"], title: s firstUniqid = postedUniqid; console.log(`${title}を投稿(${count}):`, postedUniqid); + + while (lines.length > 0 && lines[0]?.trim() === "") { + lines.shift(); + } } } \ No newline at end of file diff --git a/src/lib/config.ts b/src/lib/config.ts index 76c9c64..960c708 100644 --- a/src/lib/config.ts +++ b/src/lib/config.ts @@ -37,6 +37,7 @@ const schema = z.object({ ueuse: z.object({ maxRetries: z.number().int().positive(), retryInterval: z.number().positive(), + maxLengthWithPublic: z.number().int().nonnegative(), }), debug: z.boolean().optional(), });