[英]How to fix? Discord.js Bot keeps going offline because of Value error
我不断收到此错误
TypeError: Cannot read property 'size' of undefined
at Client.client.on.message
(/home/colter/Code/groundskeeper/index.js:38:30)
at emitOne (events.js:116:13)
at Client.emit (events.js:211:7)
at MessageCreateHandler.handle
我检查了错误并将其与示例代码进行了比较。 这一切对我来说都是正确的。
client.on('message', message => {
if (!message.content.startsWith(prefix) || message.author.bot)
return;
const args = message.content.slice(prefix.length).split(/ +/);
const command = args.shift().toLowerCase();
// Here is my syntax for adding commands. So far simple ones, but commands non the less!
if (command === 'ping') {
message.channel.send('Pong');
}
else if (command === 'beep') {
message.channel.send('Boop');
}
else if (command === 'server') {
message.channel.send(`Server name: ${message.guild.name}\nTotal members: ${message.guild.memberCount}`);
}
else if (command === 'user-info') {
message.channel.send(`Your username: ${message.author.username}\nYour ID: ${message.author.id}`);
}
else if (command === 'args-info') {
if (!args.length) {
return message.channel.send(`Your didnt provide any arguments, ${message.author}!`);
}
else if (args[0] === 'foo') {
return message.channel.send('bar');
}
message.channel.send(`first argument: ${args[0]}`);
}
else if (command === 'kick') {
if (!message.mentions.user.size) {
return message.reply('you need to tag a user in order to kick them');
}
const taggedUser = message.mentions.users.first();
message.channel.send(`You wanted to kick: ${taggedUser}`);
}
});
client.login(token);
预期的输出应该是您需要标记用户,以便在我使用 ?kick 命令时将他们从我的机器人中踢出。
在您的代码上:
message.mentions.user.size
正在尝试读取用户的属性大小,即内部提及,即内部消息。 如果消息、提及和用户不存在,则没有要读取的大小属性,您无法读取不存在的内容的属性。 您可以事先检查它是否存在:
if(message.mentions.user) {
if (!message.mentions.user.size) {
return message.reply('you need to tag a user in order to kick them');
}
}
在第 38 行,您有一个看似简单的印刷错误。
user
(singular) 不是MessageMentions
的有效属性。 正确的属性是users
(复数),您在几行之后正确使用它。
也许你可以使用这个,如果你一次只需要踢一个人。
if(!message.guild) return; // Only runs if in a server
const member = message.mentions.members.first(); // This gets the first guild member, not user.
if (member && message.member.hasPermission('KICK_MEMBERS')) { // Only tries to kick them if they exist and have permission
try {
member.kick(args.slice(1).join(' '); // Gives reason, if any and kicks them.
} catch (err) {
console.error(err);
}
} else {
message.channel.send(`You tried to kick: ${args[0]}`);
}
您应该将它用于kick
命令!
client.on("message", (message) => {
// the cmd >> if (message.content.startsWith("{prefix}kick")) {
//permission set to kick members only >> if (!message.member.hasPermission(["KICK_MEMBERS"])) return message.channel.send // not enough perms message >("this bot Found An Error! Error: You Do Not Have Kick Members Permission!")
// >> this is used to define @mentions const member = message.mentions.members.first()
if (!member) {
return message
.reply
// A User didnt mention someone so thy get this error>> (`the bot Found An Error! Error: A User Was Not Mentioned!`)
();
}
// if the bots role doesnt have their role above the user>> if (!member.kickable) {
return message.reply(
`bot Found An Error! Error: Permission Is Not Above The User, Try Again When This Is Fixed!`
);
return (
member
// >> sucess kick message .kick()
.then(() => message.reply(`bot Kicked ${member.user.tag} Sucessfully!`))
);
// error bot message >> .catch(error => message.reply('Error! Please Try Again!`))
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.