我正试图从做出反应的人中随机挑选一个用户
当我运行它时,它说“ message.guild.members.random不是函数”
获得随机用户的正确方法是什么?谢谢!
bot.on("messageReactionAdd", async (reaction, user) => {
let msg = reaction.message,
emoji = reaction.emoji;
if (emoji.name == "❎" && user == message.author) {
let winner = message.guild.members.random().user.id;
message.channel.send(
"Congraulations! <@" +
winner +
"> won " +
prize +
"\nDM <@" +
per +
"> to claim your prize.",
);
}
if (reaction.partial) {
try {
await reaction.fetch();
} catch (error) {
console.log("error: ", error);
return;
}
}
});
答案 0 :(得分:0)
guild.members返回一个GuildManager类,然后您可以使用fetch()方法来获取所有这些行会成员:
let guildMembers = await message.guild.members.fetch()
// now you can randomly get a memeber through Math.random function
let winner = guildMembers[Math.floor(Math.random() * Math.floor(guildMembers.length)).user.id
答案 1 :(得分:0)
第一个错误:您正在使用v12的局部函数,并且将SELECT DENSE_RANK() OVER (ORDER BY Fruit, Color), Fruit, Color
from #temp
ORDER BY FRUIT
用作v11的集合。
第二种可能的错误:您正在比较两个对象message.guild.members
和user
,它们可能不是相同的引用,因此您应该只检查其ID msg.author
假设您更新到v12:
由于您使用的是partials,可能是公会未完成,因此将if.reaction.partial语句向上移动。
user.id === msg.author.id
由于局部变量是新的,而且我没有使用太多,所以不确定if (reaction.partial) {
try {
await reaction.fetch();
} catch (error) {
console.log("error: ", error);
return;
}
}
是否可以是局部变量。因此,您可能也想获取它。
此后,您必须进行更改
reaction.message
=> message.guild.members
然后您可以使用message.guild.members.cache
注意:您不必将其转换为用户即可获取ID,只需执行
.random
您还可以简化以下任一方发送的消息:
let winner = message.guild.members.cache.random().id
或
message.channel.send(`Congratulations! <@${winner}> won ${prize} \nDM <@${per}> to claim your prize`);
未来错误:
您允许任何用户使用此功能,因为您无需检查mod角色/权限