開発ガイド
新しいミームを追加する

新しいミームを追加する

このページでは新しいミームを追加する方法について説明します。


ミームが追加される流れ

  1. ミームの処理を書く
  2. ミームを登録する
  3. ミームのテストケースを追加する

ミーム追加の判断基準

はらちょは基本的にくだらない機能は大歓迎としています。(それは面白いからです。)

ミームも一緒で、基本的に面白ければ何でもいいです。ただ何でも OK にしていると溢れてしまうため追加前に #無法地帯 で話をちょろっと出すのもいいかもしれません。

ミームを追加する

ミームの処理を書く

ミームの処理は src/service/command/meme 配下に書いてきます。

src/service/command/meme/n.ts
import type { MemeTemplate } from '../../../model/meme-template.js';
 
export const n: MemeTemplate<never, never> = {
  commandNames: ['n'],
  description: '〜Nった',
  flagsKeys: [],
  optionsKeys: [],
  errorMessage: 'このままだと <@521958252280545280> みたいに留年しちゃう....',
  generate(args) {
    return `${args.body}Nった`;
  }
};

ミームは MemeTemplate という型で定義されています。

この型の中身に従って書いていきます。

MemeTemplate.commandNames

ミームに使用されるコマンドを配列で指定します。必須になります。

  • ['hoge'] - !hoge というコマンドで実行できます。
  • ['hoge', 'fuga'] - !hoge!fuga というコマンドで実行できます。
⚠️

他のミームとは重複しないようにしてください。

MemeTemplate.description

ミームコマンドに対し --help フラグを使うと表示されるヘルプの説明欄を指定します。

わかりやすくすることをオススメします。

src/service/command/meme/n.ts
export const n: MemeTemplate<never, never> = {
  commandNames: ['n'],
  description: '〜Nった'
  // ...
};

引数で変わるところを で表現するとわかりやすいです。

MemeTemplate.flagsKeys

ミームのフラグを定義します。

src/service/command/meme/takopi.ts
const takopiFlags = ['f'] as const;
const takopiOptions = ['c'] as const;
export const takopi: MemeTemplate<
  typeof takopiFlags[number],
  typeof takopiOptions[number]
> = {
  commandNames: ['takopi'],
  description:
    '「〜、出して」\n`-f` で教員と自分の名前の位置を反対にします。\n`-c <教員の名前> <出すもの>`で教員の名前も変更可能です。',
  flagsKeys: takopiFlags,

MemeTemplate.optionsKeys

ミームのオプションを定義します。

src/service/command/meme/takopi.ts
const takopiFlags = ['f'] as const;
const takopiOptions = ['c'] as const;
export const takopi: MemeTemplate<
  typeof takopiFlags[number],
  typeof takopiOptions[number]
> = {
  commandNames: ['takopi'],
  description:
    '「〜、出して」\n`-f` で教員と自分の名前の位置を反対にします。\n`-c <教員の名前> <出すもの>`で教員の名前も変更可能です。',
  flagsKeys: takopiFlags,
  optionsKeys: takopiOptions,

MemeTemplate.errorMessage

引数不足時のエラーメッセージを定義します。

src/service/command/meme/n.ts
export const n: MemeTemplate<never, never> = {
  commandNames: ['n'],
  description: '〜Nった',
  flagsKeys: [],
  optionsKeys: [],
  errorMessage: 'このままだと <@521958252280545280> みたいに留年しちゃう....',

ミームを登録する

ミームの処理を書いたら src/service/command/meme/index.ts に登録します。

src/service/command/meme/index.ts

変数 memes にミームを書きエクスポートすることで登録が完了します。