Discord bot Kick and Ban 命令不起作用
Posted
技术标签:
【中文标题】Discord bot Kick and Ban 命令不起作用【英文标题】:Discord bot Kick & Ban command not working 【发布时间】:2021-01-05 05:43:06 【问题描述】:我正在学习 javascript,并决定编写一个 Discord 机器人,但我无法让它踢或禁止。我尝试了几种不同的代码,但除了这个之外,它们都给了我错误。唯一的问题是当我不和谐地执行命令时它什么也不做。同样,如果这是一个菜鸟错误,我很抱歉,但我正在学习
这是我的代码
const Discord = require('discord.js');
const prefix, token = require(`./config.json`);
const client = new Discord.Client();
client.once('ready', () =>
console.log('Im online now');
);
client.on('message', message =>
if (message.content.startsWith(`$prefixping`))
message.channel.send('Pong.');
else if (message.content.startsWith(`$prefixbeep`))
message.channel.send('Boop.');
else if (message.content === `$prefixserver`)
message.channel.send(`Server: $message.guild.name\ there is: $message.guild.memberCount in the server`);
else if (message.content === 'no u')
message.channel.send('no u')
)
client.on('message', async (message) =>
if(message.content.startsWith(`+kick)`))
if(message.member.hasPermission('KICK_MEMBERS'))
if(!message.mentions.users.size)
return message.reply("Who am I supposed!");
var user= message.mentions.members.first();
message.channel.send('<@user.id> has just been kicked');
user.kick();
else
message.reply(message.channel.send('You cant do that'));
)
client.on('message', async (message) =>
if(message.content.startsWith(`+ban)`))
if(message.member.hasPermission('BAN_MEMBERS'))
if(!message.mentions.users.size)
return message.reply("Who am I supposed to ban?!");
var user= message.mentions.members.first();
message.channel.send('<@user.id> Has just been banned');
user.ban();
else
message.reply(message.channel.send('you cant do that'));
)
client.login(token);
【问题讨论】:
每个机器人不应有多个Client#message
事件。
这有点猜测,但您的代码会检查命令 +ban)
和 +kick)
。你确定额外的')'是故意的吗?因为这样你就必须使用+kick) @Toten#1234
的命令。我猜你希望命令是+kick @Toten#1234
,但这只是猜测
【参考方案1】:
首先,欢迎来到 JavaScript 和 discord.js 世界!如果您是初学者,我强烈建议您阅读official discord.js guide。
其次,message.mentions.members.first
返回一个ID,如果我没记错的话,你必须把它放在方法message.guild.member
的参数中。
看起来像 这个:
let kickUser = message.guild.member(message.mentions.users.first());
例如,我的踢命令看起来像 this:
exports.run = async (bot, message, args) =>
let kUser = message.guild.member(message.mentions.users.first());
if (!kUser) return message.channel.send("Je n'ai pas trouvé l'utilisateur");
let kReason = args.join(" ").slice(22);
if (!message.member.hasPermission("KICK_MEMBERS")) return message.channel.send("Permission refusée");
if (kUser.hasPermission("KICK_MEMBERS")) return message.channel.send("Cette personne ne peut pas être kick !");
if (!kReason) return message.channel.send("Tu n'a pas mentionné de raison");
let kickEmbed = new Discord.MessageEmbed()
.setDescription("Kick")
.setColor("#ff750c")
.setThumbnail(kUser.user.avatarURL())
.addField("Utilisateur kick", `$kUser ID : $kUser.id`)
.addField("Kick par", `<@$message.author.id> ID: $message.author.id`)
.addField("Channel", message.channel)
.addField("Date", message.createdAt)
.addField("Raison", kReason);
let kickchannel = bot.channels.cache.find(x => x.id === config.discord.modlogChannelID);
if (!kickchannel) return message.channel.send("Je n'ai pas pu trouver le channel de modération (adm error)");
message.guild.member(kUser).kick(kReason);
message.delete();
kickchannel.send(kickEmbed);
;
希望这会有所帮助! (我的代码可能不适用于新版本的 discord.js,因为它已经使用一年了,我没有升级它,但逻辑在这里)。
【讨论】:
“其次,message.mentions.members.first 返回一个id,如果我没记错的话,你必须把它放在方法message.guild.member的参数中”。不,message.mentions.members.first()
会起作用。以上是关于Discord bot Kick and Ban 命令不起作用的主要内容,如果未能解决你的问题,请参考以下文章
Python discord bot“找不到命令'ban'”错误