雀魂 Discord用 募集Bot

今月は仕事が忙しかったのでラズパイは触っていません。。。。
雀魂のDiscord 募集Botをコピペして作ったのでメモ書き

# 参考URL(というかスプレッドシートの所以外コピペさせて貰いました
https://note.com/katsuo3130/n/nb3fe0e003b80


# 変更箇所
Discord.js v14のテンプレートコードを使用して、
スプレッドシートは使用しないのでそれ以外をコピペ。
コマンド登録の所を雀魂用に変更

```ruby:commands/file.js コマンド登録
const { SlashCommandBuilder  } = require('discord.js');
module.exports = {
    data: new SlashCommandBuilder()
        .setName('募集')
        .setDescription('募集を掛けます')
        .addStringOption(option =>
            option.setName('モード')
                .setDescription('選択してください')
                .setRequired(true)
                .addChoices(
                  {name:'四人麻雀', value:'四人麻雀'},
                  {name:'三人麻雀', value:'三人麻雀'},
                  {name:'期間限定', value:'期間限定'}
                ))
          .addStringOption(option =>
            option.setName('長考時間')
                .setDescription('選択してください')
                .setRequired(true)
                .addChoices(
                  {name:'5+20秒', value:'5+20秒'},
                  {name:'3+5秒', value:'3+5秒'},
                  {name:'5+10秒', value:'5+10秒'},
                  {name:'60+0秒', value:'60+0秒'},
                  {name:'300+0秒', value:'300+0秒'}
                ))
        .addStringOption(option =>
            option.setName('時間')
                .setDescription('21時～、今から、など入力ください')
                .setRequired(true))
        .addStringOption(option =>
            option.setName('人数')
                .setDescription('@1～3、など入力ください')
                .setRequired(true))
        .addStringOption(option =>
            option.setName('局数')
                .setDescription('選択してください')
                .addChoices(
                  {name:'一局戦', value:'一局戦'},
                  {name:'東風戦', value:'東風戦'},
                  {name:'半荘戦', value:'半荘戦'},
                  {name:'CPU戦', value:'CPU戦'}
                ))
          .addStringOption(option =>
            option.setName('詳細')
                .setDescription('有効で変更がある場合、入力ください'))
        .addUserOption(option =>
            option.setName('参加者①')
                .setDescription('事前に決まっている参加者①'))
        .addUserOption(option =>
            option.setName('参加者②')
                .setDescription('事前に決まっている参加者②')),
    async execute(interaction) {
    }
}
```

募集のコメントも少し変更

```ruby:code.js 募集部分
 if (interaction.commandName === "募集"){
    const detail = interaction.options.getString('モード');
    const Timethink = interaction.options.getString('長考時間');
    const count = interaction.options.getString('人数');
    const time = interaction.options.getString('時間');
    const conditions = interaction.options.getString('局数') ?? null;
    const Advanced = interaction.options.getString('詳細') ?? null;    
    const member1 = interaction.options.getUser('参加者①') ?? null;
    const member2 = interaction.options.getUser('参加者②') ?? null;
    
    let message = `### ${user.toString()}` + 'さんの' + detail + '募集！';
    const embed = new EmbedBuilder()
      .setTitle(detail + '募集！')
      .addFields(
        { name:'募集人数', value: count},
        { name:'長考時間', value: Timethink},
        { name:'開始時間', value: time},
        { name:'局数', value: conditions ?? 'なし'},
        { name:'詳細', value: Advanced ?? 'なし'},
      )
      .setColor('Random')
```

# 動作
動かすとこんな感じ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3852763/bf47d9a8-8d03-8398-4605-f39c0ec61b3a.png)

期間限定モードとか選んだ場合は長考時間の設定しかない場合があったので、
局数とか詳細は任意
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3852763/f34b94c8-d9e9-761f-76ba-54de2c2e870a.png)


雀魂したことないので、
詳細を指定する場合があるかわからないが一応詳細を入力できる
詳細を入力した場合の処理は特に作ってないので
そこはbotにリプしてもらうなど運用に任せたいと思う。