【问题标题】:discord.js - How to get random user ID's of users with reactiondiscord.js - 如何获得有反应的用户的随机用户 ID
【发布时间】:2022-01-12 17:49:17
【问题描述】:

我想从对特定消息有反应的用户那里获取随机用户 ID。

    await msg.react("<:SenkoSad:788848057844367411>")
    setTimeout(()=> {
        const winner = msg.reactions.cache.get("<:SenkoSad:788848057844367411>").users.cache.random().id
        message.channel.send(`Random user from emotes: <@${winner}>`)
    }, time-Date.now())

这里是错误: TypeError: Cannot read properties of undefined (reading 'users')
在线const winner = msg.reactions.cache.get("&lt;:SenkoSad:788848057844367411&gt;").users.cache.random().id

【问题讨论】:

    标签: node.js discord discord.js bots


    【解决方案1】:

    尝试将线路切换到:

    const winner = msg.reactions.cache.get("788848057844367411").users.cache.random().id
    

    我不完全确定,但也许 get() 期望 Snowflake 用于自定义表情符号,而不是您提供的格式。

    【讨论】:

    • 它有效,但每次我试图获得“获胜者”结果 ID 都是机器人的 ID
    • 还有其他人对这条消息做出反应吗?如果机器人有唯一的反应,那么机器人将是唯一可能的赢家。
    • 是的,另外两个用户对消息做出了反应
    【解决方案2】:

    尝试使用@metro's 答案,但使用filter 函数

    喜欢:

    msg.reactions.cache.get("788848057844367411").users.cache.filter(e => !e.bot).random().id
    

    【讨论】:

    • TypeError: Cannot read properties of undefined (reading 'id')
    • 这可能意味着除了机器人的反应之外没有其他反应
    【解决方案3】:

    通过使用reactions.cache.get("788848057844367411"),您将获得MessageReaction

    请注意,要获得反应,您需要提供 unicode 表情符号(如果它们是默认表情符号)或 ID(在这种情况下是 78884805784444367411,仅ID,而不是表情符号名称)。

    MessageReaction.users 返回一个ReactionsUserManager,它的缓存包括所有对此消息做出反应的用户,包括机器人本身,所以你应该添加一个过滤器:.users.cache.filter(user =&gt; !user.bot)

    至于该错误,您可以做些什么来避免此错误是您检查用户数量(不包括机器人)是否大于 0 的条件。

    if(msg.reactions.cache.get("788848057844367411").users.cache.filter(user => !user.bot).size > 0) {
        // If there can be a winner
    } else {
        // If nobody reacted
    }
    

    【讨论】:

    • 它总是显示没有人做出反应,即使有 3 个用户的反应。
    【解决方案4】:

    我使用了@Teyrox 的代码,但是当时间到了并且我对消息做出反应时,机器人会说“没有赢家”,但这不是真的。

    if (msg.reactions.cache.get("788848057844367411").users.cache.filter(user => !user.bot).size > 0) {
        const winner = msg.reactions.cache.get("788848057844367411").users.cache.filter(user => !user.client).random().id
        client.channels.cache.get(args[0]).send(`Winner: @<${winner}>`)
    } else {
        client.channels.cache.get(args[0]).send("No winner.")
    }
    

    【讨论】:

      猜你喜欢
      • 2020-11-29
      • 1970-01-01
      • 1970-01-01
      • 2021-08-15
      • 2021-07-04
      • 2023-04-11
      • 1970-01-01
      • 2020-12-16
      • 2018-08-21
      相关资源
      最近更新 更多