diff --git a/src/model/meme-template.ts b/src/model/meme-template.ts index 91754390..cc74484d 100644 --- a/src/model/meme-template.ts +++ b/src/model/meme-template.ts @@ -18,6 +18,11 @@ export interface MemeTemplate< > { commandNames: readonly string[]; description: string; + /** + * はらちょドキュメントサイト(haracho.approvers.dev): + * 各ミームリファレンスのページ名を指定する。 + */ + pageName: string; flagsKeys?: readonly FLAGS_KEY[]; optionsKeys?: readonly OPTIONS_KEY[]; requiredPositionalKeys?: readonly REQ_POSITIONAL_KEY[]; diff --git a/src/service/command/channel-info.ts b/src/service/command/channel-info.ts index f57f2b48..1c4cbed3 100644 --- a/src/service/command/channel-info.ts +++ b/src/service/command/channel-info.ts @@ -25,7 +25,8 @@ const SCHEMA = { export class ChannelInfo implements CommandResponder { help: Readonly = { title: 'チャンネル秘書艦', - description: '指定したチャンネルの情報を調べてくるよ' + description: '指定したチャンネルの情報を調べてくるよ', + pageName: 'channel-info' }; readonly schema = SCHEMA; diff --git a/src/service/command/command-message.ts b/src/service/command/command-message.ts index 10b094c2..40ac3b45 100644 --- a/src/service/command/command-message.ts +++ b/src/service/command/command-message.ts @@ -80,6 +80,12 @@ export interface SentMessage { export interface HelpInfo { title: string; description: string; + /** + * はらちょドキュメントサイト(haracho.approvers.dev): + * 各コマンドリファレンスのページ名を指定する。 + * 例: !ping コマンドのリファレンスが `haracho.approvers.dev/commands/ping` にある場合は `ping` を docId に指定する。 + */ + pageName: string; } export interface CommandResponder { diff --git a/src/service/command/debug.ts b/src/service/command/debug.ts index 27211895..80f82598 100644 --- a/src/service/command/debug.ts +++ b/src/service/command/debug.ts @@ -30,7 +30,8 @@ export class DebugCommand implements CommandResponder { help: Readonly = { title: 'デバッガーはらちょ', description: - 'メッセージIDを渡すと、同じチャンネル内にあればそれをコードブロックとして表示するよ' + 'メッセージIDを渡すと、同じチャンネル内にあればそれをコードブロックとして表示するよ', + pageName: 'debug' }; readonly schema = SCHEMA; diff --git a/src/service/command/dice.ts b/src/service/command/dice.ts index e6b70592..30bf9910 100644 --- a/src/service/command/dice.ts +++ b/src/service/command/dice.ts @@ -51,7 +51,8 @@ const SCHEMA = { export class DiceCommand implements CommandResponder { help: Readonly = { title: 'ダイスロール', - description: '賽子が振れるみたいだよ' + description: '賽子が振れるみたいだよ', + pageName: 'dice' }; readonly schema = SCHEMA; diff --git a/src/service/command/guild-info.ts b/src/service/command/guild-info.ts index 8b6e65e0..bff02721 100644 --- a/src/service/command/guild-info.ts +++ b/src/service/command/guild-info.ts @@ -76,7 +76,8 @@ const SCHEMA = { export class GuildInfo implements CommandResponder { help: Readonly = { title: 'ギルド秘書艦', - description: '限界開発鯖の情報を持ってくるよ' + description: '限界開発鯖の情報を持ってくるよ', + pageName: 'guild-info' }; readonly schema = SCHEMA; diff --git a/src/service/command/gyokuon.ts b/src/service/command/gyokuon.ts index c92a05e5..4259cc82 100644 --- a/src/service/command/gyokuon.ts +++ b/src/service/command/gyokuon.ts @@ -22,7 +22,9 @@ export class GyokuonCommand implements CommandResponder { help: Readonly = { title: 'こるくの玉音放送', description: - 'VC内にこるくの玉音放送を再生するよ。引数無しで即起動。どの方式でもコマンド発行者がVCに居ないと動かないよ。' + 'VC内にこるくの玉音放送を再生するよ。引数無しで即起動。どの方式でもコマンド発行者がVCに居ないと動かないよ。', + // 音声機能関連の機能は voice/ 以下にドキュメントを置いているため + pageName: 'voice/colk' }; readonly schema = SCHEMA; diff --git a/src/service/command/help.ts b/src/service/command/help.ts index 1e04b671..debb32f3 100644 --- a/src/service/command/help.ts +++ b/src/service/command/help.ts @@ -15,7 +15,8 @@ const SCHEMA = { export class HelpCommand implements CommandResponder { help: Readonly = { title: 'はらちょヘルプ', - description: 'こんな機能が搭載されてるよ' + description: 'こんな機能が搭載されてるよ', + pageName: 'help' }; readonly schema = SCHEMA; @@ -36,6 +37,7 @@ export class HelpCommand implements CommandResponder { private buildField({ title, description, + pageName, names, params }: Readonly): EmbedPage { @@ -52,6 +54,7 @@ export class HelpCommand implements CommandResponder { const patterns = patternsWithDesc.map(([pattern]) => pattern); return { title, + url: `https://haracho.approvers.dev/references/commands/${pageName}`, description: `${description} \`${names.join('/')}${['', ...patterns].join(' ')}\` ${argsDescriptions}` diff --git a/src/service/command/judging.ts b/src/service/command/judging.ts index 1be48afc..4f459695 100644 --- a/src/service/command/judging.ts +++ b/src/service/command/judging.ts @@ -66,7 +66,8 @@ const SCHEMA = { export class JudgingCommand implements CommandResponder { help: Readonly = { title: JUDGING_TITLE, - description: 'プログラムが適格かどうか判定してあげるよ' + description: 'プログラムが適格かどうか判定してあげるよ', + pageName: 'judge' }; readonly schema = SCHEMA; diff --git a/src/service/command/kaere.ts b/src/service/command/kaere.ts index 594308d5..f326bb05 100644 --- a/src/service/command/kaere.ts +++ b/src/service/command/kaere.ts @@ -122,7 +122,9 @@ export class KaereCommand implements CommandResponder { help: Readonly = { title: 'Kaere一葉', description: - 'VC内の人類に就寝を促すよ。引数なしで即起動。どの方式でもコマンド発行者がVCに居ないと動かないよ' + 'VC内の人類に就寝を促すよ。引数なしで即起動。どの方式でもコマンド発行者がVCに居ないと動かないよ', + // 音声機能関連の機能は voice/ 以下にドキュメントを置いているため + pageName: 'voice/kaere' }; readonly schema = SCHEMA; diff --git a/src/service/command/kokusei-chousa.ts b/src/service/command/kokusei-chousa.ts index 9339da12..18ad2376 100644 --- a/src/service/command/kokusei-chousa.ts +++ b/src/service/command/kokusei-chousa.ts @@ -24,7 +24,8 @@ const SCHEMA = { export class KokuseiChousa implements CommandResponder { help: Readonly = { title: '国勢調査', - description: '限界開発鯖の人類の数、Botの数とBot率を算出するよ。' + description: '限界開発鯖の人類の数、Botの数とBot率を算出するよ。', + pageName: 'kokusei' }; readonly schema = SCHEMA; diff --git a/src/service/command/meme.ts b/src/service/command/meme.ts index 6f951cc4..0d125f09 100644 --- a/src/service/command/meme.ts +++ b/src/service/command/meme.ts @@ -32,7 +32,8 @@ const SCHEMA = { export class Meme implements CommandResponder { help: Readonly = { title: 'ミーム構文機能', - description: '何これ……引数のテキストを構文にはめ込むみたいだよ' + description: '何これ……引数のテキストを構文にはめ込むみたいだよ', + pageName: 'meme' }; readonly schema = SCHEMA; @@ -87,6 +88,7 @@ export class Meme implements CommandResponder { if (argv.help) { await message.reply({ title: meme.commandNames.map((name) => `\`${name}\``).join('/'), + url: `https://haracho.approvers.dev/references/commands/meme/${meme.pageName}`, description: meme.description }); return; diff --git a/src/service/command/meme/clang.ts b/src/service/command/meme/clang.ts index 11caeeb9..fb20127c 100644 --- a/src/service/command/meme/clang.ts +++ b/src/service/command/meme/clang.ts @@ -9,6 +9,7 @@ export const clang: MemeTemplate< > = { commandNames: ['clang', 'c'], description: '〜の天才\n9つの〜を操る', + pageName: 'clang', requiredPositionalKeys: positionalKeys, errorMessage: 'エラーの天才\n9つの引数エラーを操る', generate({ requiredPositionals: { domain, way } }) { diff --git a/src/service/command/meme/dousurya.ts b/src/service/command/meme/dousurya.ts index 40cdea6c..afe546bc 100644 --- a/src/service/command/meme/dousurya.ts +++ b/src/service/command/meme/dousurya.ts @@ -9,6 +9,7 @@ export const dousurya: MemeTemplate< > = { commandNames: ['dousurya', 'dousureba'], description: '限界みたいな鯖に住んでる〜はどうすりゃいいですか?', + pageName: 'dousurya', requiredPositionalKeys: positionalKeys, errorMessage: 'どうしようもない。', generate(args) { diff --git a/src/service/command/meme/failure.ts b/src/service/command/meme/failure.ts index 4039bed2..08725d8a 100644 --- a/src/service/command/meme/failure.ts +++ b/src/service/command/meme/failure.ts @@ -12,6 +12,7 @@ export const failure: MemeTemplate< > = { commandNames: ['failure', 'fail'], description: `「〜〜〜」\n「わかりました。それは一般に失敗と言います、ありがとうございます」\n* \`-k <失敗部分> <説明>\` で失敗部分を変更できます。 \n [元ネタ](${sourceLink})`, + pageName: 'failure', optionsKeys: failureOption, requiredPositionalKeys: positionalKeys, errorMessage: diff --git a/src/service/command/meme/hukueki.ts b/src/service/command/meme/hukueki.ts index 09ff0740..9ac9ebb9 100644 --- a/src/service/command/meme/hukueki.ts +++ b/src/service/command/meme/hukueki.ts @@ -9,6 +9,7 @@ export const hukueki: MemeTemplate< > = { commandNames: ['hukueki'], description: 'ねぇ、将来何してるだろうね\n〜はしてないといいね\n困らないでよ', + pageName: 'hukueki', requiredPositionalKeys: positionalKeys, errorMessage: '服役できなかった。', generate(args) { diff --git a/src/service/command/meme/kenjou.ts b/src/service/command/meme/kenjou.ts index 25f73fa1..62e7c769 100644 --- a/src/service/command/meme/kenjou.ts +++ b/src/service/command/meme/kenjou.ts @@ -10,6 +10,7 @@ export const kenjou: MemeTemplate< commandNames: ['kenjou'], description: '[健常者エミュレーター](https://healthy-person-emulator.memo.wiki/)の構文ジェネレーター。\n健常者エミュレーターWikiにありそうなタイトルを指定すればうまくいきます。', + pageName: 'kenjou', requiredPositionalKeys: positionalKeys, errorMessage: 'はらちょのミーム機能を使うときは引数を忘れない方がいい - 健常者エミュレータ事例集Wiki', diff --git a/src/service/command/meme/koume.ts b/src/service/command/meme/koume.ts index 74f74745..65e97a61 100644 --- a/src/service/command/meme/koume.ts +++ b/src/service/command/meme/koume.ts @@ -9,6 +9,7 @@ export const koume: MemeTemplate< > = { commandNames: ['koume'], description: '〜と思ったら〜♪\n\n〜でした〜♪\n\n引数は2つ必要です。', + pageName: 'koume', requiredPositionalKeys: positionalKeys, errorMessage: 'MEMEを表示しようと思ったら〜♪ 引数が足りませんでした〜♪ チクショー!!', diff --git a/src/service/command/meme/lolicon.ts b/src/service/command/meme/lolicon.ts index c828da68..2b17c75a 100644 --- a/src/service/command/meme/lolicon.ts +++ b/src/service/command/meme/lolicon.ts @@ -9,6 +9,7 @@ export const lolicon: MemeTemplate< > = { commandNames: ['lolicon'], description: 'だから僕は〜を辞めた', + pageName: 'lolicon', requiredPositionalKeys: positionalKeys, errorMessage: 'こるくはロリコンをやめられなかった。', generate(args, author) { diff --git a/src/service/command/meme/moeta.ts b/src/service/command/meme/moeta.ts index a59e7b97..dda613e1 100644 --- a/src/service/command/meme/moeta.ts +++ b/src/service/command/meme/moeta.ts @@ -12,6 +12,7 @@ export const moeta: MemeTemplate< > = { commandNames: ['moeta', 'yuki'], description: `「久留米の花火大会ね、寮から見れたの?」\n「うん ついでに〜が燃えた」\n${source}`, + pageName: 'moeta', requiredPositionalKeys: positionalKeys, errorMessage: source, generate(args) { diff --git a/src/service/command/meme/n.ts b/src/service/command/meme/n.ts index 6bd5f219..275db733 100644 --- a/src/service/command/meme/n.ts +++ b/src/service/command/meme/n.ts @@ -5,6 +5,7 @@ const positionalKeys = ['context'] as const; export const n: MemeTemplate = { commandNames: ['n'], description: '〜Nった', + pageName: 'n', requiredPositionalKeys: positionalKeys, errorMessage: 'このままだと <@521958252280545280> みたいに留年しちゃう....', generate(args) { diff --git a/src/service/command/meme/nigetane.ts b/src/service/command/meme/nigetane.ts index 3d145001..c91f868b 100644 --- a/src/service/command/meme/nigetane.ts +++ b/src/service/command/meme/nigetane.ts @@ -12,6 +12,7 @@ export const nigetane: MemeTemplate< > = { commandNames: ['nigetane'], description: '… 〜から悪くないって、… (from Arcaea "Final Verdict")', + pageName: 'nigetane', requiredPositionalKeys: positionalKeys, errorMessage: '……手遅れなのは頭(おつむ)からなのかな。', generate: ({ requiredPositionals: { reason } }) => template(reason) diff --git a/src/service/command/meme/nine.ts b/src/service/command/meme/nine.ts index ba61c025..6c2338b0 100644 --- a/src/service/command/meme/nine.ts +++ b/src/service/command/meme/nine.ts @@ -6,6 +6,7 @@ export const nine: MemeTemplate = { commandNames: ['nine'], description: '〇〇は〇〇が9割', + pageName: 'nine', requiredPositionalKeys: positionalKeys, errorMessage: '人は引数ミスが9割', generate({ requiredPositionals: { subject, entity } }) { diff --git a/src/service/command/meme/ojaru.ts b/src/service/command/meme/ojaru.ts index 1413eaf6..4fb5e077 100644 --- a/src/service/command/meme/ojaru.ts +++ b/src/service/command/meme/ojaru.ts @@ -12,6 +12,7 @@ export const ojaru: MemeTemplate< commandNames: ['ojaru'], description: 'あっぱれおじゃる様!見事ミーム構文を使いこなされました!`-g`オプションを使用なさってデンボの口調の変更も可能でございます!', + pageName: 'ojaru', flagsKeys: ojaruFlags, requiredPositionalKeys: positionalKeys, errorMessage: diff --git a/src/service/command/meme/syakai.ts b/src/service/command/meme/syakai.ts index f028fac3..d931519f 100644 --- a/src/service/command/meme/syakai.ts +++ b/src/service/command/meme/syakai.ts @@ -9,6 +9,7 @@ export const syakai: MemeTemplate< > = { commandNames: ['syakai'], description: '「首相、~に否定的な考え ― 『社会が変わってしまう』」', + pageName: 'syakai', requiredPositionalKeys: positionalKeys, errorMessage: '極めて慎重に検討すべき課題だ', generate(args) { diff --git a/src/service/command/meme/takopi.ts b/src/service/command/meme/takopi.ts index abe61d74..0206aa3d 100644 --- a/src/service/command/meme/takopi.ts +++ b/src/service/command/meme/takopi.ts @@ -12,6 +12,7 @@ export const takopi: MemeTemplate< commandNames: ['takopi'], description: '「〜、出して」\n`-f` で教員と自分の名前の位置を反対にします。\n`-c <教員の名前> <出すもの>`で教員の名前も変更可能です。', + pageName: 'takopi', flagsKeys: takopiFlags, optionsKeys: takopiOptions, requiredPositionalKeys: positionalKeys, diff --git a/src/service/command/meme/tsureteike.ts b/src/service/command/meme/tsureteike.ts index 418e80f3..5c133951 100644 --- a/src/service/command/meme/tsureteike.ts +++ b/src/service/command/meme/tsureteike.ts @@ -16,6 +16,7 @@ export const tsureteike: MemeTemplate< commandNames: ['tsureteike', 'hunt'], description: '「この中に〜はいるか 連れて行け」\nex.) `!tsureteike プログラマ Rustは知っているか? ゲームですか? 錆のこと? 🦀`', + pageName: 'tsureteike', requiredPositionalKeys: positionalKeys, errorMessage: '構文ミスだ、問答無用で連れて行け', generate({ requiredPositionals }) { diff --git a/src/service/command/meme/web3.ts b/src/service/command/meme/web3.ts index 39a836f5..7aabc8e4 100644 --- a/src/service/command/meme/web3.ts +++ b/src/service/command/meme/web3.ts @@ -6,6 +6,7 @@ export const web3: MemeTemplate = { commandNames: ['web3'], description: '「いちばんやさしい〜の教本」', + pageName: 'web3', requiredPositionalKeys: positionalKeys, errorMessage: 'TCP/IP、SMTP、HTTPはGoogleやAmazonに独占されています。', generate(args) { diff --git a/src/service/command/party.ts b/src/service/command/party.ts index 5f16deb8..9158ab40 100644 --- a/src/service/command/party.ts +++ b/src/service/command/party.ts @@ -94,7 +94,9 @@ export class PartyCommand implements CommandResponder { help: Readonly = { title: 'Party一葉', description: - 'VC内の人類に押しかけてPartyを開くよ。引数なしで即起動。どの方式でもコマンド発行者がVCに居ないと動かないよ' + 'VC内の人類に押しかけてPartyを開くよ。引数なしで即起動。どの方式でもコマンド発行者がVCに居ないと動かないよ', + // 音声機能関連の機能は voice/ 以下にドキュメントを置いているため + pageName: 'voice/party' }; readonly schema = SCHEMA; diff --git a/src/service/command/ping.ts b/src/service/command/ping.ts index 70416064..15bc5e9b 100644 --- a/src/service/command/ping.ts +++ b/src/service/command/ping.ts @@ -19,7 +19,8 @@ const SCHEMA = { export class PingCommand implements CommandResponder { help: Readonly = { title: 'Ping', - description: '現在のレイテンシを表示するよ。' + description: '現在のレイテンシを表示するよ。', + pageName: 'ping' }; readonly schema = SCHEMA; diff --git a/src/service/command/role-create.ts b/src/service/command/role-create.ts index b76a8e3f..001d079d 100644 --- a/src/service/command/role-create.ts +++ b/src/service/command/role-create.ts @@ -35,7 +35,8 @@ const SCHEMA = { export class RoleCreate implements CommandResponder { help: Readonly = { title: 'ロール作成', - description: 'ロールを作成するよ' + description: 'ロールを作成するよ', + pageName: 'role-create' }; readonly schema = SCHEMA; diff --git a/src/service/command/role-info.ts b/src/service/command/role-info.ts index 5a68c846..642a3a9c 100644 --- a/src/service/command/role-info.ts +++ b/src/service/command/role-info.ts @@ -42,7 +42,8 @@ const SCHEMA = { export class RoleInfo implements CommandResponder { help: Readonly = { title: 'ロール秘書艦', - description: '指定したロールの情報を調べてくるよ' + description: '指定したロールの情報を調べてくるよ', + pageName: 'role-info' }; readonly schema = SCHEMA; diff --git a/src/service/command/role-rank.ts b/src/service/command/role-rank.ts index 9a19b30f..4f1d63f3 100644 --- a/src/service/command/role-rank.ts +++ b/src/service/command/role-rank.ts @@ -21,7 +21,8 @@ const SCHEMA = { export class RoleRank implements CommandResponder { help: Readonly = { title: 'ロール数ランキング', - description: '各メンバーごとのロール数をランキング形式で表示するよ' + description: '各メンバーごとのロール数をランキング形式で表示するよ', + pageName: 'role-rank' }; readonly schema = SCHEMA; diff --git a/src/service/command/stfu.ts b/src/service/command/stfu.ts index 359f52b2..43958acc 100644 --- a/src/service/command/stfu.ts +++ b/src/service/command/stfu.ts @@ -41,7 +41,8 @@ export class SheriffCommand implements CommandResponder { help: Readonly = { title: '治安統率機構', description: - 'はらちょがうるさいときに治安維持するためのコマンドだよ。最新メッセージから 50 件以内のはらちょのメッセージを指定の個数だけ削除するよ。' + 'はらちょがうるさいときに治安維持するためのコマンドだよ。最新メッセージから 50 件以内のはらちょのメッセージを指定の個数だけ削除するよ。', + pageName: 'stfu' }; readonly schema = SCHEMA; diff --git a/src/service/command/typo-record.ts b/src/service/command/typo-record.ts index 384d8c5b..bae080f9 100644 --- a/src/service/command/typo-record.ts +++ b/src/service/command/typo-record.ts @@ -117,7 +117,8 @@ const SCHEMA = { export class TypoReporter implements CommandResponder { help: Readonly = { title: '今日のTypo', - description: '「〜だカス」をTypoとして一日間記録するよ' + description: '「〜だカス」をTypoとして一日間記録するよ', + pageName: 'typo' }; readonly schema = SCHEMA; diff --git a/src/service/command/user-info.ts b/src/service/command/user-info.ts index 6be0095c..2ae8fce9 100644 --- a/src/service/command/user-info.ts +++ b/src/service/command/user-info.ts @@ -38,7 +38,8 @@ export class UserInfo implements CommandResponder { help: Readonly = { title: 'ユーザー秘書艦', description: - '指定したユーザーの情報を調べてくるよ。限界開発鯖のメンバーしか検索できないから注意してね。' + '指定したユーザーの情報を調べてくるよ。限界開発鯖のメンバーしか検索できないから注意してね。', + pageName: 'user-info' }; readonly schema = SCHEMA; diff --git a/src/service/command/version.ts b/src/service/command/version.ts index ccb13864..c0c9292a 100644 --- a/src/service/command/version.ts +++ b/src/service/command/version.ts @@ -16,7 +16,8 @@ const SCHEMA = { export class GetVersionCommand implements CommandResponder { help: Readonly = { title: 'はらちょバージョン', - description: '現在の私のバージョンを出力するよ。' + description: '現在の私のバージョンを出力するよ。', + pageName: 'version' }; readonly schema = SCHEMA;