0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Discord きのこの山即レス(+α)Bot

0
Last updated at Posted at 2026-02-20

はじめに

こんにちは。Never3924です。
突然ですが皆様は明治のたけのこの里かきのこの里1をご存知でしょうか?
そしてどちらが好きでしょうか。
私はきのこの山です。

計画

「きのこの山とたけのこの里どっちが好き?」と投稿されたら「きのこの山」と即レスするbotを作ります。
あと言論統制もします

NodeJS x discord.js で行こうと思います

Bot作成

まずBotを作成します。
image.png
名前を決めて…
image.png
説明文も決めて画像も出しましょう。

トークンをコピーするのを忘れないようにしてください。
そして.envAPI_KEYとして記述しておきます。

プログラムする

index.js
import { Client, Events, GatewayIntentBits } from "discord.js";
import { config } from "dotenv";

config();

function getEnv(key) {
    const value = process.env[key];
    if (value === undefined) {
        throw new Error(`Key ${key} is not defined`);
    }

    return value;
}

async function main() {
    const API_KEY = getEnv("API_KEY");

    const client = new Client({
        intents: [
            GatewayIntentBits.Guilds,
            GatewayIntentBits.GuildMessages,
            GatewayIntentBits.MessageContent,
        ],
    });

    client.once(Events.ClientReady, (readyClient) => {
        console.log(`Ready! Logged in as ${readyClient.user.tag}`);
    });

    // ここに処理書く

    client.login(API_KEY);
}

main();

ドキュメントからコピペしてきたテンプレですね。

即レス

即レス部分から作ります。
メッセージが送信されたイベントを取得し、それに
「きのこの山」「たけのこの里」「どっち」「好き」
が含まれていたら
「きのこの山」
とレスします。(順不同)

const validate =
    /(?=.*き.*の.*こ.*の.*山)(?=.*た.*け.*の.*こ.*の.*里)(?=.*ど.*っ.*ち)(?=.*好.*き)/;
    
client.on(Events.MessageCreate, (msg) => {
if (validate.test(msg.content)) {
    // 即レス
}

こんなもんでしょう。次は即レスです

await msg.reply("きのこの山");

一行で終わってハッピー

動作確認

動作中のgif
完璧!

これだけだとつまんないですし、言論統制でもしましょうか。
「たけのこの里」を検知すると伏せ字またはきのこの山に置き換えるとか。
今回は置き換えの方でいきます。

先ほどの検知と被るとめんどくさいので、即レスしたあとに付け足しておきましょう。

// イベントごとに再定義していると若干重いかもしれないので外で定義しておく
const validateTake = /た.*け.*の.*こ.*の.*里/g;

// ... 略 ...

if (validateTake.test(msg.content)) {
    await msg.edit(msg.content.replace(validateTake, "きのこの山")); // 言論統制!
}

動作確認

DiscordAPIError[50005]: Cannot edit a message authored by another user
... 略 ...

どうやら、他人のメッセージを編集することは出来ないようですね。残念。

最後に

きのこの山即レスBotを作りました。なにげに語の間にスラッシュとか入れられても反応します。

この記事には対立を煽る意図はありません。
ただのクソアプリとして楽しんでいただけたら幸いです。

では、さようなら。

  1. この並びに意図はありません。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?