2017-09-11 2 views
1

Je suis actuellement en train de coder mon premier bot de discorde et vous, il peut déjà jouer de la musique youtube! : D Mais je suis tombé sur un problème et il semble qu'il n'y a pas d'aide, ou je suis trop aveugle _ (ツ) _/¯ Eh bien, voici le problème:Le robot discord.js lui-même répond - empêche cela de se produire

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

Comme vous le voyez, si quelqu'un tape "bon travail" (ce n'est qu'un exemple), le bot répondra avec "bon travail tout le monde: sourire :), mais alors le spam commencera: le bot lit son propre message et y répond Comment puis-je empêcher le bot de répondre lui-même:/ apprécie chaque aide que je reçois

+0

vérifie pour voir qui a envoyé le message? Si le bot a envoyé le message, ne répondez pas. – Craicerjack

+0

check user ou userID ... – Salketer

+0

Toujours convertir le message en minuscules/majuscules avant de vérifier au lieu de vérifier les deux versions du message dans votre instruction * if *. Juste un conseil pour vous! –

Répondre

4

Utilisez ce dans le message sur l'événement:

if (message.author.bot) return; 

pour plus d'informations: https://anidiotsguide.gitbooks.io/discord-js-bot-guide/coding-guides/a-basic-command-handler.html

+0

Je tiens également à mentionner ceci: le gestionnaire de message reçu est appelé chaque fois que le robot 'voit' un nouveau message. (Et ce message inclut le message du bot lui-même!) La même chose s'applique à votre compte aussi! Essayez d'envoyer un ping à @everyone dans votre propre serveur, et vous verrez la barre de surbrillance jaune surgir même si le message de vous-même. – WQYeo

+0

N'a pas pensé à ça! J'ai généralement un bloc de code (si l'expéditeur n'est pas le bot) entourant tout le code à l'intérieur de l'événement de message, et tout va à l'intérieur de celui-ci, qui doit être filtré. –

2

La raison pour laquelle votre bot répond à vous-même est parce que là où vous mettez:

si (message.content.includes ("Good Job") || message.content.includes (« bon travail »))

Il est la vérification essentiellement le chat si un morceau de texte comprend les mots « bon travail » ou « bon travail ». En tant que votre bot envoie:

message.channel.sendMessage ("Tout le monde est bon: smirk:");

comme une réponse, il crée une boucle, car ce message comprend les mots« bon travail », en cours d'exécution essentiellement le code encore et encore et encore.

Bien sûr, le moyen le plus simple de résoudre ce problème est de changer la réponse qu'il donne pour ne pas inclure les mots Bon travail, mais il y a une meilleure solution pour s'assurer que cela n'arrive pas à toutes les commandes tu pourrais faire.

Comme @ Jörmungandr dit, en cas de message comprennent:

si (message.author.bot) retour;

pour s'assurer que cela n'arrive pas. Il vérifie essentiellement si l'auteur du message est un bot et si c'est le cas, il l'ignore.

+0

Pleas marquera votre question avec la (les) langue (s) que vous utilisez. – jhenderson2099