javascript - 尝试踢自己(机器人)时显示消息
问题描述
我在命令中做出回应。我在尝试踢自己并工作时做出了回应,但现在我试图在尝试踢机器人时做出回应但它不起作用。
踢命令代码:
module.exports = {
name: 'kick',
aliases: ["k"],
description: "kick a member",
execute(message, Discord, client) {
if(message.member.permissions.has("KICK_MEMBERS")){
const member = message.mentions.members.first();
let mention = message.mentions.members.first();
if (message.mentions.members.size < 1) return message.reply('You must mention someone to kick them.').catch(console.error);
if (message.mentions.members.first().id === message.author.id) return message.reply("I can't let you do that, self-harm is bad:facepalm:");
if (message.mentions.members.id === client.member.id) return message.reply("You pleblord, how can you use a bot to kick itself?:joy:");
if (message.mentions.members.first().id === "521311050193436682") return message.reply("You can't kick my Developer:wink:");
if (reason.length < 1) reason = 'No reason supplied';
if (!message.guild.member(user).kickable) return message.reply('I cannot kick that member');
const embed = new Discord.MessageEmbed()
.setColor(0x0000FF)
.setTimestamp()
.addField('Action:', 'Kick')
.addField('User:', `${user.username}#${user.discriminator} (${user.id})`)
.addField('Moderator:', `${message.author.username}#${message.author.discriminator}`)
.addField('Reason', reason)
.setFooter(`© Cryptonix X Mod Bot by ${customisation.ownername}`);
if(user.bot) return;
message.mentions.users.first().send({embed}).catch(e =>{
if(e) return;
});
message.guild.member(user).kick();
let logchannel = message.guild.channels.cache.find(x => x.name = 'logs');
if (!logchannel){
message.channel.send({embed});
}else{
client.channels.cache.get(logchannel.id).send({embed});
message.channel.send({embed});
}
if(user.bot) return;
message.mentions.users.first().send({embed}).catch(e =>{
if(e) return ;
});
}
else{
let newEmbed = new MessageEmbed()
.setColor('#e4e265')
.setTitle('')
.setURL('')
.setDescription("Eeeh wait! You can't use that command <a:yepaa:797528125894295567>")
.setImage('')
.setFooter('');
message.channel.send(newEmbed).then(r => r.delete({ timeout: 10000 }));
}
}
};
这是我尝试在不和谐聊天中运行命令时遇到的错误
TypeError: Cannot read property 'member' of undefined
at Object.execute (C:\Users\ayman\Desktop\sharky music\commands\kick.js:15:56)
(kick.js:15:16 是尝试踢机器人时机器人响应的行)
解决方案
如果您仔细观察,您已经定义了成员,
const member = message.mentions.members.first();
并且 let mention = message.mentions.members.first();
!message.guild.member(user).kickable
在您从他们的代码中更改用户值后,您错过了更改 (user).kickable 哪个返回的成员未定义,因为机器人找不到“用户”而不是“提及”
member和mention都是djs中定义的值。所以我会说把它改成上面提到的东西。
你可以尝试:删除const member = message.mentions.members.first();
改成:
const mentioned = message.mentions.members.first();
!message.guild.member(mentioned).kickable
if(mentioned.bot) return;
message.mentions.mentioned.first().send({embed}).catch(e =>{if(e) return;});
最后踢它 message.guild.member(mentioned).kick();
不知道它是否有效,但希望毕竟成员将被定义!
认为詹姆斯可能会得到回答,因为他已经在评论中发布了,但我只是把我的想法留在这里。如果我错了,请纠正我。
推荐阅读
- javascript - three.js 线在更新其几何图形的顶点时消失
- opengl - 片段着色器是否仅针对可见片段运行?
- mule - 根据从另一个数据编织调用的查找函数中的参数,将 .csv 文件中的值转换为数据编织中的 json 格式
- python - 如何更改图像的直方图?
- java - 登录 Apache Camel 期间 DefaultExchangeFormatter 中的 ConcurrentModificationException
- android - MPAndroidChart - 如何在 y 轴(左轴)上仅绘制最大值和最小值的网格线?
- c++ - 在文本文件的特定行插入行
- ajax - 谷歌脚本中的jsonp ajax
- c# - C# - 日期时间/整数表单验证(必填字段不应为空/空)
- google-sheets - 使用数组公式和 countif 根据特定单元格进行查找