当前位置: 首页 > 知识库问答 >
问题:

获取用户在Discord中对带有特定表情符号的消息做出反应的对象列表

弘浩瀚
2023-03-14

下面是用Discord.js编写的不和谐机器人的代码片段:

client.channels.fetch('channelID here').then(function (channel) {
 channel.messages.fetch('messageID here').then(function (message) {
  console.log(message.reactions.cache.get('EmojiID here').users);
 });
});

它在控制台中获得以下输出:

ReactionUserManager {
  cacheType: [class Collection extends Collection],
  cache: Collection [Map] {},
  reaction: MessageReaction {
    message: Message {
      channel: [TextChannel],
      deleted: false,
      id: 'MessageID here',
      type: 'DEFAULT',
      system: false,
      content: 'What role do you want?\n' +
        'React with:\n' +
        '<:Red:870224025811558450>  for <@&870162738561814578> \n' +
        '<:Blue:870224213976444959> for <@&870162842983206922> \n' +
        '<:Yellow:870224106061172776> for <@&870162885412810773>\n' +
        'You will be assigned the role corresponding to your most recent reaction.\n' +
        'Unreact to remove the role.',
      author: [User],
      pinned: false,
      tts: false,
      nonce: null,
      embeds: [],
      attachments: Collection [Map] {},
      createdTimestamp: 1627548937713,
      editedTimestamp: 1627617831107,
      reactions: [ReactionManager],
      mentions: [MessageMentions],
      webhookID: null,
      application: null,
      activity: null,
      _edits: [],
      flags: [MessageFlags],
      reference: null
    },
    me: true,
    users: [Circular],
    _emoji: ReactionEmoji {
      animated: undefined,
      name: 'Red',
      id: 'EmojiID here',
      deleted: false,
      reaction: [Circular]
    },
    count: 2
  }
}

我可以在输出中看到计数:2。我想得到这两个用户的对象列表。如何做到这一点?

共有1个答案

路欣荣
2023-03-14

你是如此接近ReactionUserManager是一个经理;这意味着它有一个缓存属性,返回用户对象的集合。

您还可以获取用户:

client.channels.fetch('channelID').then(function (channel) {
 channel.messages.fetch('messageID').then(function (message) {
  const reaction = message.reactions.cache.get('EmojiID')
  reaction.users.fetch().then(function (users) {
    console.log(users)
  })
 })
})

如果可以使用async await(即,您使用的是异步函数),则可以使其更具可读性:

const channel = await client.channels.fetch('channelID')
const message = await channel.messages.fetch('messageID')
const reaction = message.reactions.cache.get('EmojiID')
const users = await reaction.users.fetch()

console.log(users)

// e.g. add a role to each user
users.each(async (user) => {
  // get the member object as users don't have roles
  const member = await message.guild.members.fetch(user.id)
  member.roles.add('ROLE ID')
})
 类似资料:
  • 我有问题得到反应角色的工作与自定义表情符号。如果我使用不和谐表情符号,它会嵌入消息,创建反应,并在点击反应时应用角色。 然而,如果我使用一个自定义的emoji,它会嵌入消息并创建正确的反应,但是它不提供当emoji被点击时的角色。 我使用了相同的编码,当交换不和谐和自定义的表情符号,唯一的改变是表情符号的ID。 我使用的完整代码是: 我们将非常感谢对此提供任何帮助。

  • 问题内容: 如果我有一个水果列表,其中包含各种实现,如,等。该列表是必需的,因为其他方法会对列表中的所有水果执行常规操作。 如何将特定类型的所有对象从列表中删除?例如所有的苹果?进行instanceof / if-else检查非常难看,尤其是在有许多不同的类时。 如何改善以下内容? 问题答案: 您应该知道-实例是不好的代码实践。 编写.getType()(返回的对象的枚举类型)怎么办?

  • 问题内容: 我有一个简单的pojos(一个用户类)的列表,其中包含约15个简单字段和1个arrayList。这些代表用户,可能会将100或1000个用户存储在内存中,以避免每次都从外部系统检索它们。(我正在使用Ehcache) 我想通过junit测试知道K个用户列表使用了多少内存。 我的直觉是,即使像一千个这样的简单pojo也不会以任何方式威胁(换言之,小于100 Ko) 在此先感谢您的协助。我非

  • 在机器人发送消息后,我想要一个表情符号反应。下面的代码仅在我键入命令后执行。例如,以下是一些示例输出: 输出不正确: 用户输入:规则显示表情反应机器人消息 正确输出:用户输入:规则Bot消息显示有表情反应

  • 问题内容: 说我有一个对象列表,其中包含两个字段和,均为String类型。 如果有可能,如何在不迭代列表的情况下获取所有值的列表? 问题答案: 对象是对内存地址的引用。然后,该对象的字段是指向其他内存地址的其他引用。因此,对象列表是引用列表。因此,列表不可能直接访问对象字段(由引用给出的引用)。最简洁的答案是不。 注意:无论如何,您都会找到可以实现所需功能的API,但该API仍在内部循环。

  • 我在网上找不到任何关于这个话题的东西。有没有办法告诉你的机器人对旧消息做出反应?类似的东西: 1-烤面包机:嘿 2-乔纳森:!!反应 会让机器人对烤面包机说“嘿”做出反应吗?或者做一些更老的事情,比如对消息作出反应5条消息向上。我没有这方面的代码,但我知道不和谐。js很好,并且知道如何正常地向消息添加反应。