Mon bot discord bug ? [Résolu]

Signaler
Messages postés
46
Date d'inscription
mercredi 21 février 2018
Statut
Membre
Dernière intervention
14 mars 2020
-
Messages postés
16
Date d'inscription
vendredi 31 mai 2019
Statut
Membre
Dernière intervention
1 juin 2020
-
Hey !

Donc voilà j'ai un petit soucis, j'ai récemment développer un bot discord via glitch, et tout à l'air de marcher correctement.
En fait, je sais pas si ça vient de mon bot ou de discord, mais quand je fais co mon bot et que je tape une commande, le bot me répond pas à une seule reprise mais à plusieurs, et sans arrêt. C'est très étrange, c'est la première fois que ça m'arrive et je sais pas du tout d'où cela cause problème. ??

Petit aperçu du soucis :


Je vous balance le code du bot également ^^ :

const Discord = require("discord.js");
const client = new Discord.Client();
var prefix = "-";
client.login("privé");

client.on("message", message => {
if (message.content.startsWith(prefix + "reload")) {
message.channel
.send("***Chargement en cours...***")
.then(msg => {
setTimeout(function() {}, 2000);
})
.then(msg => client.destroy())
.then(() => client.login);
}

client.on("gulientmberAdd", user => {
let joinEmbed = new Discord.RichEmbed()
.setColor("RANDOM")
.setAuthor(user.user.username, user.user.displayAvatarURL)
.setDescription(
":grin: Bienvenue " + user + " sur le serveur " + user.guild.name + " !"
)
.setFooter("Join")
.setTimestamp();
user.guild.channels.get("680517062145212422").send(joinEmbed);
});

client.on("guildMemberRemove", user => {
let leaveEmbed = new Discord.RichEmbed()
.setColor("RANDOM")
.setAuthor(user.user.username, user.user.displayAvatarURL)
.setDescription(
":cry: Sniff... " +
user +
" a quitté le serveur " +
user.guild.name +
" !"
)
.setFooter("Leave")
.setTimestamp();
user.guild.channels.get("680517062145212422").send(leaveEmbed);
});

client.on("message", message => {
if (message.content.startsWith(prefix + 'slt'));
if (!message.guild) return
message.channel.send("Bonjour " + message.author + " :slight_smile: !");

if (message.content.startsWith(prefix + "userinfo")) {
let member = message.mentions.users.first()
? message.mentions.users.first()
: message.author;
if (!member) return console.log("Veuillez revoir votre variable 'member'.");
let embed = new Discord.RichEmbed()
.setColor("RANDOM")
.setAuthor(message.author.username, message.author.displayAvatarURL)
.setThumbnail(message.author.displayAvatarURL)
.addField("Username", message.author.username)
.addField("Tag", `**#${message.author.discriminator}**`)
.addField("ID", message.author.id)
.addField("Compte crée le", message.author.createdAt)
.setFooter("UserInfo")
.setTimestamp();
message.channel.send(embed);
}

if (message.content.startsWith(prefix + "botinfo")) {
let embed = new Discord.RichEmbed()
.setColor("RANDOM")
.setAuthor(client.user.username, client.user.displayAvatarURL)
.setThumbnail(client.user.displayAvatarURL)
.addField("Username", client.user.username)
.addField("Tag", `**#${client.user.discriminator}**`)
.addField("ID", client.user.id)
.addField("Bot crée le", client.user.createdAt)
.addField("Nombre de serveurs", client.guilds.size)
.setFooter("BotInfo")
.setTimestamp();
message.channel.send(embed);
}

if (message.content.startsWith(prefix + "serverinfo")) {
let embed = new Discord.RichEmbed()
.setColor("RANDOM")
.setAuthor(message.guild.name, message.guild.displayAvatarURL)
.setThumbnail(message.guild.displayAvatarURL)
.addField("Nom", message.guild.name)
.addField("ID", message.guild.id)
.addField("Serveur crée le", message.guild.createdAt)
.addField("Nombre d'utilisateurs", message.guild.memberCount)
.addField("Owner", message.guild.owner)
.setFooter("ServerInfo")
.setTimestamp();
message.channel.send(embed);
}

if (message.content.startsWith(prefix + "say")) {
var text = message.content
.split(" ")
.slice(1)
.join(" ");
if (!text) return message.reply("Usage: Bonjour");
message.channel.send(text);
message.delete();
}

if (message.content.startsWith(prefix + "ping")) {
message.channel.send("**Pong !**");
}

if (message.content.startsWith(prefix + "help")) {
let embed = new Discord.RichEmbed()
.setColor("RANDOM")
.setTitle("***__Voici toutes les commandes du serveur. __***")
.addField("**-say**", "Répète le message envoyé")
.addField("**-userinfo**", "Affiche les détails d'un utilisateur")
.addField("**-botinfo**", "Affiche les détails du bot")
.addField("**-serverinfo**", "Affiche les détails du serveur")
.addField("**-slt**", "Vous renvoie Bonjour")
.addField("**-ping**", "Vous renvoie Pong")
.addField("**-clear/purge**", "Supprime des messages")
.setDescription("*D'autres commandes seront ajoutées prochainement.*")
.setFooter("Help")
.setTimestamp();
message.channel.send(embed);
}
})});


Voilà si vous pouviez m'aider ça m'aiderait beaucoup, merci ! :D

2 réponses

Messages postés
3644
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
23 octobre 2020
971
Bonjour,

Dans ton code, là :
if (message.content.startsWith(prefix + 'slt'));
if (!message.guild) return
message.channel.send("Bonjour " + message.author + " :slight_smile: !");

C'est un peu fait à l'envers...
Le « ; » après le if doit être enlevé ; De plus, comme il n'y a pas d'accolades, le message.channel.send est exécuté indépendamment du if. Donc à chaque message il répond, et du coup ensuite, se répond à lui-même.
if (!message.guild)
    return;
if (message.content.startsWith(prefix + 'slt'))
    message.channel.send("Bonjour " + message.author + " :slight_smile: !");

Déjà ça, ça ira mieux.
Tu peux aussi empêcher dès le début qu'il se réponde à lui-même :
if (!message.guild)
    return;
if (client.user.username == message.author)
    return;
if (message.content.startsWith(prefix + 'slt'))
    message.channel.send("Bonjour " + message.author + " :slight_smile: !");

(Je crois que ça peut se faire comme ça. J'ai jamais développé pour Discord, mais j'ai eu l'impression en lisant ton code que client.user.username était le nom de ton bot)

Xavier
Messages postés
46
Date d'inscription
mercredi 21 février 2018
Statut
Membre
Dernière intervention
14 mars 2020

Merci beaucoup !!!

Le problème est résolu ^^
Messages postés
16
Date d'inscription
vendredi 31 mai 2019
Statut
Membre
Dernière intervention
1 juin 2020

Déjà y a un problème tu as deux fois
client.on("message", message => {})
dans ton code.
Commence par tout rassembler ensemble.

Et puis pour ce soucis c'est normal qu'il te réponde à l'infini, car ton bot exécute les commandes relatives aux messages DÈS qu'il détecte un message dans le serveur.

Autrement dit quand il va répondre à ta commande il va détecter son propre message et donc se répondre, et ainsi de suite jusqu'à ce que ton processeur fume...

Donc ajoute une condition au tout début (juste après le
client.on("message", message => {
) pour empêcher que ton bot ou un autre bot fasse ce genre de boucle.

La condition que j'utilise est celle-ci :
if(!msg.content.toLowerCase().startsWith(client.config.prefix) || msg.author.bot) return;


La partie
!msg.content.toLowerCase().startsWith(client.config.prefix)
permet de vérifier que le message ne contient pas le préfixe de ta commande et
msg.author.bot
permet de vérifier si l'auteur du message est bien un bot.

Quand l'une de ces 2 conditions est validée on quitte la fonction et le message n'est pas pris en compte par le bot.

Le problème devrait être résolu.