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

我如何让机器人在我对它的信息做出反应后做某事?

薛弘厚
2023-03-14

我试图让机器人等待用户的反应,但我不知道如何设置它。我已经试过了,我也在第一部分中加入了const过滤器,但是当它对消息作出反应时,使用了1️⃣ 机器人回答。

message.channel.send(`the current number is:  ${number}`).then(message => {
    message.react('1️⃣')
    message.react('2️⃣')
    message.react('3️⃣')
});

const filter = (reaction, user) => {
    return ['1️⃣', '2️⃣','3️⃣'].includes(reaction.emoji.name)
        && user.id === message.author.id;
}

message.awaitReactions(filter, { max: 1, time: 20000, errors: ['time'] })
    .then(collected => {
        const reaction = collected.first();
        if (reaction.emoji.name === '1️⃣') {
            message.reply('you reacted with 1');
        } else if (reaction.emoji.name === '2️⃣') {
            message.reply('you reacted with 2');
        } else {
            message.reply('you reacted with 3');
        }
    })
    .catch(collected => {
        message.reply('game has ended');
    });

共有2个答案

韶景曜
2023-03-14

我看不到表情符号,但我会告诉你我是如何做到的(注意:我使用的是一个异步函数,所以我不必使用大量回调,我个人更喜欢它而不是。然后链接):

const msg = await message.channel.send(`the current number is:  ${number}`);
await Promise.all([
    message.react('1️⃣'),
    message.react('2️⃣'),
    message.react('3️⃣')
]);

const filter = (reaction, user) => ['1️⃣', '2️⃣','3️⃣'].includes(reaction.emoji.name) && user.id === message.author.id;
const collector = msg.createReactionCollector(filter, { time: 120000, max: 1 }); //setup here

collector.on('collect', async () => {
    //... your logic after reaction here
});

逄岳
2023-03-14

Discord.js客户端对象具有messageReactionAdd(以及Remove、RemoveAll和当bot删除表情反应时)事件触发器,这为您提供了一个相当简单的解决方案。

let targetUser = "some-long-number"; 
// replace this with the author of the person who fires your 
// reaction related command in your client.on('message') def.
client.on('messageReactionAdd', (reaction, user)) {
  console.log('sample message to verify base functionality');
  if (user != targetUser) return null;
  switch (reaction.emoji.name) {
    case "1️⃣":
      message.reply("you reacted with 1️⃣");
      break;
    case "2️⃣":
      message.reply("you reacted with 2️⃣");
      break;
    case "3️⃣":
      message.reply("you reacted with 3️⃣");
      break;
    default:
      // in case you want to log when they don't reply with the correct emoji.
      break;
  }
}

我可能在某个地方打错了,请随意更正。如果message.reply()

 类似资料:
  • 我正在发出一个有反应的帮助命令,机器人将添加一个反应,然后用户将作出反应,机器人将发布相应的帮助消息。我很困惑为什么我的代码不能工作,因为它没有抛出错误。 收到任何帮助都表示感谢:) Ps:我在嵌入的后面使用这个,所以我希望嵌入对它有一个反应,尽管我已经做了这一点,只是不知道如何在嵌入和反应之间有效地链接代码

  • 问题内容: 可以说我想做一个循环或每秒打印出来的内容,例如“ Mario”。我怎样才能做到这一点?似乎找不到任何可以在任何地方教授此内容的优秀教程= P 问题答案: 您可以使用java.util.Timer。 任务是您要执行的方法,之后是直到第一次执行的时间,间隔是上述任务的两次执行之间的时间。

  • 我正试图通过discord创建一个discord机器人。py并希望创建一个显示成员pfp的命令。但是,我希望bot能够识别何时正在ping,何时正在请求pfp。我如何重新格式化它,使我的机器人识别它是否在成员ping时被引用(假设机器人的名称和id为“bot#1111”) 我希望discord用户输入的reference命令 ,membget@Bot#1111

  • 它返回几个错误,其中大多数显示:<代码> 我对编码很陌生,我只是想用推特API制作一个有趣的机器人,但有很多错误,我不知道该怎么办。 出现的主要错误如下: (从集合导入namedtuple,映射导入错误:无法从“集合”导入名称“映射”) 谁能帮帮我吗? 出现的错误:回溯(最近一次调用):文件“C:\Users\wgama\PycharmProjects\botesquilo\botesquilo.

  • 我为jQuery UI开发了一个新特性,但我不明白在哪里可以找到它们的存储库中的文件。 我更改了https://code.jquery.com/ui/1.12.1/jquery-ui.min.js和https://code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css 但是在它们的存储库中没有名为jQuery-ui.js、jQuery-ui.min.

  • 问题内容: 我在Go中有一个REPL应用,该应用应该对键盘按下事件(每个按下的按键的动作有所不同)做出反应,但是希望在阅读之前按下返回键: 我如何对Go中的按键事件做出反应? 问题答案: 游戏引擎通常实现这种功能。它们通常也与平台无关(通常至少是Windows,Linux,Mac OS X)。例如尝试Azul3D的键盘库。 逻辑就像我的头上一样 要获得当前当前按下的键的列表,只需遍历地图并列出va