web-dev-qa-db-ja.com

discord.jsボットは自身に応答します

私は現在、最初の不和なボットをコーディングしていますが、すでにYouTube音楽を再生できます。

if (message.content.includes("Good Job") || 
    message.content.includes("good job")) {
    message.channel.sendMessage("Good Job everyone :smirk:");
}

ご覧のとおり、誰かが「良い仕事」と入力すると(これは一例です)、ボットは「良い仕事をみんな:smirk :)で返信しますが、スパムが開始されます。ボットは自分のメッセージを読んで返信します。

ボットが自分に応答しないようにするにはどうすればよいですか?

10
gitgudgithub

これをメッセージメッセージイベントで使用します。

if (message.author.bot) return;

詳細: https://anidiotsguide.gitbooks.io/discord-js-bot-guide/coding-guides/a-basic-command-handler.html

17
Jörmungandr

ボットが自分に返信する理由は、どこに置くかです。

if(message.content.includes( "Good Job")|| message.content.includes( "good job"))

基本的には、テキストに「-良い仕事」または「良い仕事」という単語が含まれているかどうかをチャットでチェックしています。ボットが送信するもの:

message.channel.sendMessage( "皆さん、グッドジョブ:smirk:");

答えとして、そのメッセージには単語 "Good Job"が基本的に含まれているため、ループが作成されます。コードを何度も何度も実行します。

もちろん、これを修正する最も簡単な方法は、単語Good Jobを含めないように答えを変更することですが、これを行わないようにするためのより良い解決策がありますあなたが作るかもしれないすべてのコマンドのために起こります。

@Jörmungandrが言ったように、メッセージイベントの下には次のものが含まれます。

if(message.author.bot)return;

それが起こらないことを確認するために。メッセージの作成者がボットであるかどうかを本質的にチェックし、ボットである場合は無視します。

discord.js

4
// In message event
if(message.author.id === client.user.id) return;

// I would recommend a variable like this for splits on words
// const args = message.content.trim().split(/\s+/g); 
// You could also .slice() off a prefix if you have one

if(/good job/i.test(message.content)) {
  message.channel.send('Good job everyone :smirk:'); // sendMessage is deprecated, use send instead
}
2
yaas

メッセージを送信したユーザーがボットかどうかを確認するだけです。例えば:

if (!msg.author.bot) {
    <Your code to execute if the user is not a bot.>
} 

これがお役に立てば幸いです。ありがとうございます。

0