每次運行命令時,我都試圖發出一個命令來 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
uj5u.com熱心網友回復:
問題是Math.round(Math.random() * message.guild.memberCount)當您使用round()而不是floor().
然而; Collection#random()您可以使用從集合中獲取唯一隨機值,而不是創建隨機生成器函式。
message.guild.members.cache回傳一個集合,所以你可以像這樣使用它:
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啟用了意圖。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/440646.html
上一篇:引起:java.lang.UnsatisfiedLinkError:org.apache.hadoop.io.nativeio.NativeIO$Windows.access0(Ljava/lang/
下一篇:節點專案與實踐
