discord.jsでディスボードのbump通知を作る

5 min read読了の目安(約4500字

この記事では、discord.jsでディスボード(https://disboard.org)のbump通知をしてくれるコードを紹介します(各部分解説付き)

動作に必要なもの

  • Node.js

  • discord.js

  • 24時間365日起動し続けることができるできる環境

→setTimeoutを使っているので再起動したら通知できないからです。

データベースとか使った方法もまた今度考えようかな。

コード全文

client.on("message", async message => {
    if (message.author.id == "302050872383242240") {
      if (
        message.embeds[0].color == "2406327" &&
        message.embeds[0].url == "https://disboard.org/" &&
        (message.embeds[0].description.match(/表示順をアップしたよ/) ||
          message.embeds[0].description.match(/Bump done/) ||
          message.embeds[0].description.match(/Bump effectué/) ||
          message.embeds[0].description.match(/Bump fatto/) ||
          message.embeds[0].description.match(/Podbito serwer/) ||
          message.embeds[0].description.match(/Успешно поднято/) ||
          message.embeds[0].description.match(/갱신했어/) ||
          message.embeds[0].description.match(/Patlatma tamamlandı/))
      ) {
        const noti = await message.channel.send({
          embed: {
            title: "Bumpが実行されました!",
            description:
              "再度実行可能になったらお知らせします。",
            color: 7506394
          }
        });
        noti.delete({ timeout: 7200000 });
        setTimeout(() => {
          message.channel.send({
            embed: {
              title: "Bumpできます!",
              description: "コマンド`!d bump`を送信できます。",
              color: 7506394
            }
          });
        }, 7200000);
      } else if (
        message.embeds[0].color == "15420513" &&
        message.embeds[0].url == "https://disboard.org/" &&
        (message.embeds[0].description.match(
          /このサーバーを上げられるようになるまで/
        ) ||
          message.embeds[0].description.match(
            /あなたがサーバーを上げられるようになるまで/
          ))
      ) {
        var splcontent_a = message.embeds[0].description.split("と");
        console.log(splcontent_a[1]);
        var splcontent_b = splcontent_a[1].split("分");
        console.log(splcontent_b[0]);
        var waittime_bump = splcontent_b[0];

        message.channel.send({
          embed: {
            title: "Bumpに失敗したようです…",
            description: waittime_bump + "分後にもう一度お試しください。",
            color: 7506394
          }
        });
      }
    }
});

コードの解説

(コメントアウト部分が解説になってます)

client.on("message", async message => {
    if (message.author.id == "302050872383242240") {
    // 反応するのをディスボードのみにする
      if (
        message.embeds[0].color == "2406327" &&
        message.embeds[0].url == "https://disboard.org/" &&
        (message.embeds[0].description.match(/表示順をアップしたよ/) ||
          message.embeds[0].description.match(/Bump done/) ||
          message.embeds[0].description.match(/Bump effectué/) ||
          message.embeds[0].description.match(/Bump fatto/) ||
          message.embeds[0].description.match(/Podbito serwer/) ||
          message.embeds[0].description.match(/Успешно поднято/) ||
          message.embeds[0].description.match(/갱신했어/) ||
          message.embeds[0].description.match(/Patlatma tamamlandı/))
      ) {
      // bumpに成功した場合
        const noti = await message.channel.send({
          embed: {
            title: "Bumpが実行されました!",
            description:
              "再度実行可能になったらお知らせします。",
            color: 7506394
          }
        });
        noti.delete({ timeout: 50000 });
        setTimeout(() => {
          message.channel.send({
            embed: {
              title: "Bumpできます!",
              description: "コマンド`!d bump`を送信できます。",
              color: 7506394
            }
          });
        }, 7200000);
      } else if (
        message.embeds[0].color == "15420513" &&
        message.embeds[0].url == "https://disboard.org/" &&
        (message.embeds[0].description.match(
          /このサーバーを上げられるようになるまで/
        ) ||
          message.embeds[0].description.match(
            /あなたがサーバーを上げられるようになるまで/
          ))
      ) {
      // bumpに失敗した場合
        var splcontent_a = message.embeds[0].description.split("と");
        console.log(splcontent_a[1]);
        var splcontent_b = splcontent_a[1].split("分");
        console.log(splcontent_b[0]);
        var waittime_bump = splcontent_b[0];
	// splitで待ち時間のみを切り出す

        message.channel.send({
          embed: {
            title: "Bumpに失敗したようです…",
            description: waittime_bump + "分後にもう一度お試しください。",
            color: 7506394
          }
        });
      }
    }
});

おわり

拙い文でしたがここまでお読みくださりありがとうございました...!

動かないじゃん!とか、ここ読みにくい!書き直せ!とかがあれば、どうぞ下のコメント欄までお願いします。