Je crée mon propre Discord Bot parce que je ne fais pas confiance aux plus gros (Dyno, Hime, NosoBot, etc.) Et mon bot est à peu près terminé. Le seul problème est que mon code permet à tous les membres d'utiliser ces commandes. Je veux seulement que les gens puissent utiliser les fonctions pour lesquelles ils ont des autorisations. Le code fonctionne, mais comment puis-je faire en sorte qu'il n'autorise que les personnes autorisées à exclure / exclure?
6 Réponses :
Créez un rôle sur le serveur et vérifiez le rôle dans votre code
Par exemple
if (message.content.startsWith("$kick")) { if (!message.member.roles.find("name", "Admin")) return; // Easy way to get member object though mentions. var member = message.mentions.members.first(); // Kick member.kick().then((member) => { // Successmessage message.channel.send(":wave: " + member.displayName + " has been successfully kicked :point_right: "); }).catch(() => { // Failmessage message.channel.send("Access Denied"); }); } }); client.on("message", (message) => { if (message.content.startsWith("$ban")) { if (!message.member.roles.find("name", "Admin")) return; // Easy way to get member object though mentions. var member = message.mentions.members.first(); // ban member.ban().then((member) => { // Successmessage message.channel.send(":wave: " + member.displayName + " has been successfully banned https://gfycat.com/playfulfittingcaribou :point_right: "); }).catch(() => { // Failmessage message.channel.send("Access Denied"); }); } });
Quitterait la méthode si l'utilisateur n'a pas le rôle
Donc, le code ressemblerait à quelque chose comme ça
if(!message.member.roles.find("name", "Admin")) return;
Une meilleure approche serait de créer une fonction qui renvoie si l'utilisateur a l'autorisation ou non et d'utiliser dans votre code
Je continue de voir cette réponse, où pourrais-je mettre cela?
Merci beaucoup, je crée deux robots et tous les deux ont eu ce problème!
L'autorisation "KICK_MEMBERS" vous indique s'ils ont l'autorisation d'exclure des membres, d'où le nom.
L'autorisation "BAN_MEMBERS" vous indique s'ils ont l'autorisation d'exclure des membres, d'où le nom.
Votre commande Kick:
if (msg.member.hasPermission("BAN_MEMBERS")) { if (msg.members.mentions.first()) { try { msg.members.mentions.first().ban(); } catch { msg.reply("I do not have permissions to ban" + msg.members.mentions.first()); } } else { msg.reply("You do not have permissions to ban" + msg.members.mentions.first()); } }
Votre commande d'exclusion:
if (msg.member.hasPermission("KICK_MEMBERS")) { if (msg.members.mentions.first()) { try { msg.members.mentions.first().kick(); } catch { msg.reply("I do not have permissions to kick " + msg.members.mentions.first()); } } else { msg.reply("You do not have permissions to kick " + msg.members.mentions.first()); } }
La raison de try et
catch
garantissent que si le bot n'a pas les autorisations pour expulser ou bannir cet utilisateur, cela ne provoquera pas d'erreur.
Autre remarque:
Il n'est pas nécessaire de créer un autre événement bot.on ('message')
. Au lieu de cela, utilisez simplement un elseif
if (message.content.startsWith ( $ {prefix} kick
)) {
let member = message.mentions.members.first(); member.kick().then((member) => { message.channel.send(`:wave: ${member.displayName} has been kicked`); }).catch(() => { if (!message.member.hasPermission(['KICK_MEMBERS', 'ADMINISTRATOR'])) { message.reply("You cannot kick members"); } else if (member.hasPermission(['KICK_MEMBERS', 'BAN_MEMBERS', 'ADMINISTRATOR'])) { message.reply("You cannont kick this member"); } }) } if (message.content.startsWith(`${prefix}ban`)) { let member = message.mentions.members.first(); member.ban().then((member) => { message.channel.send(`:wave: ${member.displayName} has been kicked`); }).catch(() => { if (!message.member.hasPermission(['BAN_MEMBERS', 'ADMINISTRATOR'])) { message.reply("You cannot ban members"); } else if (member.hasPermission(['KICK_MEMBERS', 'BAN_MEMBERS', 'ADMINISTRATOR'])) { message.reply("You cannont ban this member"); } }) }
J'ai utilisé ceci pour l'autorisation des rôles:
if(message.member.roles.find(r => r.name === 'name of role')){ //Enter command coding here }else{ return message.channel.send('Enter Speech here') } break;
Cela pourrait peut-être vous aider, je ne sais pas.
Hey, j'ai quelque chose de mieux pour vous
const Discord = require('discord.js'); if (message.content.startsWith(${prefix}BAN)) => { if (!message.guild.member(message.author).hasPermission('BAN_MEMBERS')) { return message.channel.send('You do not have the permission for ban users" !'); } if (!message.guild.member(client.user).hasPermission('BAN_MEMBERS')) { return message.channel.send('I don\'t have the permission for ban users" !'); } if (message.mentions.users.size === 0) { return message.channel.send('You need to ping a user !'); } let banMember = message.guild.member(message.mentions.users.first()); if (!banMember) { return message.channel.send('User not found!'); } banMember.ban().then((member) => { message.channel.send(member.displayName + " has left the server") message.channel.send(member.displayName + " has been successfully banned by " + message.author); }) }
Il suffit de supprimer BAN et de le remplacer par KICK
if (message.content.startWith(`${prefix}ban`)){ let buser = message.guild.member(message.mentions.users.first() || message.guild.members.get(args[0])); if (!buser) return message.channel.send("Please provid a user to ban") let reason = args.join(" ").slice(22) if (!reason) return message.channel.send("Please provide a reason") if(!message.member.hasPermission("BAN_MEMBERS")) return message.channel.send("You don't have acces to this command") if (buser.hasPermission("BAN_MEMBERS")) return message.channel.send("This user has the perm ban user") let embed = new Discord.RichEmbed() buser.ban() .setAuthor("Ban") .setDescription(`The user ${buser} has been ban for: ${reason}\n by the admin ${message.author.tag}`) bot.channels.get("an channel id").send(embed); }
En plus de la réponse que vous avez fournie, pensez à fournir une brève explication des raisons et de la manière dont cela résout le problème.