TypeError: Cannot read property 'user' of undefined error while trying to make a command
TypeError: Cannot read property 'user' of undefined error while trying to make a command
我试图发出一个命令,每次命令是 运行 时 ping 一个随机用户,但我似乎 运行 遇到了问题。
这是我的代码:
const DiscordCommand = require('../../contracts/DiscordCommand');
class KickCommand extends DiscordCommand {
onCommand(message) {
message.delete();
const userList = message.guild.members.cache.array();
var randomNumber = Math.round(Math.random() * message.guild.memberCount);
var pingPerson = userList[randomNumber];
message.channel.send('<@' + pingPerson.user.id + '>').then((msg) => {
msg.delete({ timeout: 100 });
});
}
}
module.exports = KickCommand;
我得到的错误:
TypeError: Cannot read property 'user' of undefined
问题是 Math.round(Math.random() * message.guild.memberCount)
可以 return 大于上一个索引的数字,因为你使用 round()
instead of floor()
。
但是;您可以使用 Collection#random()
从集合中获取唯一的随机值,而不是创建随机生成器函数。
message.guild.members.cache
return是一个集合,所以你可以这样使用它:
class KickCommand extends DiscordCommand {
onCommand(message) {
message.delete();
const pingPerson = message.guild.members.cache.random();
message.channel.send('<@' + pingPerson.user.id + '>').then((msg) => {
msg.delete({ timeout: 100 });
});
}
}
首先 fetch
用户可能也是个好主意:
class KickCommand extends DiscordCommand {
async onCommand(message) {
message.delete();
await message.guild.members.fetch();
const pingPerson = message.guild.members.cache.random();
const msg = await message.channel.send('<@' + pingPerson.user.id + '>');
// msg.delete() doesn't take any parameters in v13, so use setTimeout instead
setTimeout(() => msg.delete(), 100);
}
}
并确保 GUILD_MEMBERS
意图已启用。
我试图发出一个命令,每次命令是 运行 时 ping 一个随机用户,但我似乎 运行 遇到了问题。
这是我的代码:
const DiscordCommand = require('../../contracts/DiscordCommand');
class KickCommand extends DiscordCommand {
onCommand(message) {
message.delete();
const userList = message.guild.members.cache.array();
var randomNumber = Math.round(Math.random() * message.guild.memberCount);
var pingPerson = userList[randomNumber];
message.channel.send('<@' + pingPerson.user.id + '>').then((msg) => {
msg.delete({ timeout: 100 });
});
}
}
module.exports = KickCommand;
我得到的错误:
TypeError: Cannot read property 'user' of undefined
问题是 Math.round(Math.random() * message.guild.memberCount)
可以 return 大于上一个索引的数字,因为你使用 round()
instead of floor()
。
但是;您可以使用 Collection#random()
从集合中获取唯一的随机值,而不是创建随机生成器函数。
message.guild.members.cache
return是一个集合,所以你可以这样使用它:
class KickCommand extends DiscordCommand {
onCommand(message) {
message.delete();
const pingPerson = message.guild.members.cache.random();
message.channel.send('<@' + pingPerson.user.id + '>').then((msg) => {
msg.delete({ timeout: 100 });
});
}
}
首先 fetch
用户可能也是个好主意:
class KickCommand extends DiscordCommand {
async onCommand(message) {
message.delete();
await message.guild.members.fetch();
const pingPerson = message.guild.members.cache.random();
const msg = await message.channel.send('<@' + pingPerson.user.id + '>');
// msg.delete() doesn't take any parameters in v13, so use setTimeout instead
setTimeout(() => msg.delete(), 100);
}
}
并确保 GUILD_MEMBERS
意图已启用。