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(), });