踢和禁止命令不再适用于我,即使我没有改变它
Posted
技术标签:
【中文标题】踢和禁止命令不再适用于我,即使我没有改变它【英文标题】:Kick and ban command isnt working for me anymore, even though I havent changed it 【发布时间】:2019-10-22 14:37:03 【问题描述】:我在一两天前成功地进行了踢球和禁令,今天我再次对其进行测试,但它突然无法正常工作,我不知道为什么。除了设置的颜色,我不相信我在命令中更改了任何内容。
现在kick @user
在发送后也不会删除。但是,嵌入发送告诉我该人已被踢。我正在使用 discord.js 和 Visual Studio 代码。我也是编码和制作机器人的新手。
我尝试更改 message.guild.member(kUser).kick(kReason) 并更改事情的顺序。
// A command to ban certain people aand will then send me a dm
case 'ban':
if(message.member.roles.find("name", "Owner"))
let bUser = message.guild.member(message.mentions.members.first() || message.guild.members.get(args[0]));
if (!bUser) return message.channel.send("Who is being banned?");
let bReason = args.join("Banned ").slice(3);
message.delete();
let banEmbed = new Discord.RichEmbed()
.setDescription("Ban Management")
.setColor(0xf44242)
.addField("Banned User", `$bUser.user.tag with ID $bUser.id`)
.addField("Banned By", `<@$message.author.id> with ID $message.author.id`)
.addField("Banned In", message.channel.name)
.addField("Time", message.createdAt)
.addField("Reason", bReason);
// sends me a dm
bot.users.get("485655477812723712").send(banEmbed); // 485655477812723712 is second sofiras id
message.guild.member(bUser).ban(bReason)
else
message.channel.sendMessage('You have not been granted this ability');
break;
// command to kick certain people and then send me a dm
case 'kick':
if(message.member.roles.find("name", "Owner"))
let kUser = message.guild.member(message.mentions.members.first() || message.guild.members.get(args[0]));
if (!kUser) return message.channel.send("Who is being kicked?");
let kReason = args.join("Kicked ").slice(4);
let kickEmbed = new Discord.RichEmbed()
.setDescription("Ban Management")
.setColor(0xf44242)
.addField("Kicked User", `$kUser.user.tag with ID $kUser.id`)
.addField("kicked By", `<@$message.author.id> with ID $message.author.id`)
.addField("Kicked In", message.channel.name)
.addField("Time", message.createdAt)
.addField("Reason", kReason);
// sends me a dm
bot.users.get("485655477812723712").send(kickEmbed); // 485655477812723712 is second sofiras id
message.guild.member(kUser).kick(kReason)
else
message.channel.sendMessage('You have not been granted this ability')
break;
我希望当我发送该人将被踢或禁止的命令时,删除该命令/消息,然后将我发送到嵌入,然而,它只是发送嵌入。不会删除命令/消息,也不会踢或禁止该成员。
【问题讨论】:
是否抛出任何错误? 【参考方案1】:我没有看到您在代码中的任何位置删除命令消息。message.delete()
当您禁止或踢出成员时,您没有正确使用options
参数。bUser.ban( reason: bReason )
/ kUser.kick( reason: kReason )
我在下面的代码中进行了一些其他改进,例如捕获被拒绝的承诺、删除冗余代码、在禁止之前执行更多检查、将函数传递给 Collection.find()
,以及删除已弃用的 Channel.sendMessage()
称呼。我只对其中一个命令执行了此操作,因为您可以在这两个命令中实现这些改进。
// Async context needed in order to use the keyword 'await'
case 'ban':
try
if (!message.member.roles.find(r => r.name === 'Owner')) return await message.channel.send(':x: Insufficient permission.');
const banning = message.mentions.members.first() || message.guild.members.get(args[0]);
if (!banning) return await message.channel.send(':x: No user provided.');
if (banning.id === bot.user.id) return await message.channel.send(':x: Think you\'re smart?');
if (!banning.bannable || banning.roles.find(r => r.name === 'Owner')) return await message.channel.send(':x: Insufficient permission.');
const reason = args.slice(1).join(' ') || '*None*'; // Assuming args[1] is the reason
await message.delete();
var embed = new Discord.RichEmbed()
.setColor(0xf44242)
.setTitle('**Ban Management**')
.setDescription('A user has been banned.')
.addField('User', `$banning.user ($banning.user.tag)`)
.addField('Moderator', `$message.author ($message.author.tag)`)
.addField('Location', `$message.channel ($message.channel.name)`)
.addField('Reason', `$reason`)
.setTimestamp();
const me = bot.users.get('485655477812723712');
await me.send(embed);
await banning.ban( reason: reason );
catch(err)
console.error(err);
【讨论】:
无论我做什么,我都无法让它工作,尽管我确实知道发生了什么变化。不是为什么代码不起作用。我忘记了我已经更换了我所在的服务器,所以当我回到旧的服务器时,它运行良好,尽管发生的问题很少。所以我现在真的很困惑。但是哦,好吧。我不知道为什么只有 kick and ban 命令在新服务器中不起作用,或者为什么我“如果(msg.author.bot)返回;”开始显示“TypeError:无法读取未定义的 discord.js 的属性 'bot'”。 听起来msg
不是消息。检查您的消息事件参数。
这是代码,它没有给我带来问题。 bot.on("guildMemberAdd", member => let msg = "message" if (msg.author.bot) return; bot.users.get("485655477812723712").send(member + "已加入你的服务器!" ) .catch(console.error); )
guildMemberAdd
事件中没有 message
。由于您将变量 msg
声明为字符串,因此没有 author
属性。您可以使用member.user.bot
而不是msg.author.bot
。
哦,对了。错误的一个:p 我只是不想在有人离开时被发送 2 dms。就好像有人被踢或禁止我收到一个 dm,然后当有人离开时我收到一个 dm。所以我会得到两个。我只是想避免这一切,我猜。 // sends me a dm that someone left bot.on("guildMemberRemove", member => if (member.user.bot) return; bot.users.get("485655477812723712").send(member + 'has left the server') )
以上是关于踢和禁止命令不再适用于我,即使我没有改变它的主要内容,如果未能解决你的问题,请参考以下文章