1
1

Discord.js これだけはするな!もしくは陥りやすい間違い集もしくはTips

Last updated at Posted at 2023-01-19

Discord.js 禁忌リスト

なんでこれを書こうと思った?

初心者のときバカなことばっかりやってたからです

client.on("messageCreate")の濫用

//長いのでカット!

client.on('messageCreate', async msg => {
    if(msg.content === "hello") {
        msg.reply("HELLO!");
    }
});
client.on('messageCreate', async msg => {
    if(msg.content === "good morning") {
        msg.reply("GM");
    }
});
client.on('messageCreate', async msg => {
    if(msg.content === "good afternoon") {
        msg.reply("Good afternoon!");
    }
});
client.on('messageCreate', async msg => {
    if(msg.content === "night") {
        msg.reply("Night");
    }
});
client.on('messageCreate', async msg => {
    if(msg.content === "apple") {
        msg.reply("Orange");
    }
});

バカみたいに重くなります。絶対にやめてください。

こうしてください

client.on('messageCreate', async msg => {
    if(msg.content === "hello") {
        msg.reply("Hello!");
    }
    if(msg.content === "good morning") {
        msg.reply("Good morning!");
    }
    //以下同様
});

else if使わない人です、はい
Node.jsやってる人なら当たり前のことですが私は馬鹿でした

client(v14)のmessageCreateイベントにはメッセージ編集イベントは飛んでこない

いつから変わったんでしたっけ。

clientのmessageCreateのmessageの内容を取得したい場合はmessage.contentを使う

client.on('messageCreate', async msg => {
    if(msg === "hello") {
        msg.reply("Hello!");
    }
});

これだと実行されません
messageオブジェクトの中身はJSONだったはずなので
なおreplyとかは生のmessageオブジェクトじゃないとダメです

var濫用禁止

var option = "";

//...
{
    const option = "";
}


//...

どこでも禁止。
地獄絵図になります
改変されちゃこまるclientとかplayerはconstが定石。

audioPlayerはMaxListenerの設定必須(必須じゃありません)

setMaxListenersはイベントのリスナーの数制限です…一切関係ないです…

本当は何もせずにも動いてくれるはずなんですが私の環境ではなぜか聞こえなかったので…。
もし同じようなことに遭遇された方がいたときのために一応。

const player = createAudioPlayer({
    behaviors: {
        noSubscriber: NoSubscriberBehavior.Pause,
    },
});
//ここ
player.setMaxListeners(100);

100にしてるのは気まぐれのはずです
もちろんもっと下げてもOK

YouTubeのサムネイルの取得

YouTubeのサムネイルの構成は以下のようになっています

https://img.youtube.com/vi/id/hqdefault.jpg

hqdefault.jpgに関してはクオリティです
オプションは何個かありますがDiscordで使うならhqdefaultで十分
idは

https://youtube.com/watch?v=//ここ
https://www.youtube.com/watch?v=//ここ

です
覚えておくと便利かも

messageCreateにbotかどうか判断させる

if(msg.author.bot) {return;}

をつけてください。でないとBot自身が送信したメッセージにBotが応答しつづける、みたいな事が起きてしまいます。

repl.itで音楽Botを作る方法

npm install tweetnacl prism-media

本来sodiumやsodium-nativeなどの暗号化パッケージを入れるのですがrepl.itの場合はなぜかフリーズしてしまったためtweetnaclを使います。
prism-mediaを入れるのは@discordjs/voiceを入れたときに入らないからです。音楽再生用のパッケージのため、入れないとエラーが走ります。

現状はこれで動いてますね。

repl.itでパッケージがインストールできなくなった場合

rm -r node_modules

でnode_modulesを削除します。
そのあと

npm install

を実行すれば治るはずです。

追記について

やる気が出次第どんどん追加します

1
1
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
1
1