discord.js-如何从反应中选择随机用户

时间:2020-06-10 07:07:49

标签: javascript node.js discord.js

我正试图从做出反应的人中随机挑选一个用户

当我运行它时,它说“ 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;
    }
  }
});

2 个答案:

答案 0 :(得分:0)

the answer lays here

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.membersuser,它们可能不是相同的引用,因此您应该只检查其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角色/权限