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

如何在不和谐中创建动态聊天。js机器人?

程志新
2023-03-14

有了这个,我的意思是像角色机器人一的反应这样的聊天:当你执行命令rr!为了创建一个新的反应角色,它要求您输入一个通道,在您在一个全新的消息中回答后,机器人的消息被编辑,您必须在另一个新消息中回答新问题。这怎么可能呢?我希望我已经正确地解释了自己。谢啦


共有2个答案

丁均
2023-03-14

从某种意义上说,实现这一点的方法是为bot读取消息的每个通道保持一个“状态”。其想法是,每当BOT从某个频道获得新消息时,它首先检查它是否已经在会话的中间。根据此状态的值和输入,bot将执行相应的操作。

var state = 0;

//on rr!reactionrole
{
switch(state) {
 case 0: //start the conversation and change the state to 1; break;
 case 1: //continue the conversation, edit the message, set state to 2; break;
 //other cases
}
}
松智勇
2023-03-14

不一致js有一种方法可以用于此目的,MessageCollector。一旦您将其设置为textconnel,它将根据CollectorFilterMessageCollectorOptions收集消息。

也就是说,要获得答案,但要无缝编辑原始问题消息,只需在存储的消息ID方法上使用消息#edit()

例如:

const questions = ['What role?', 'What message?', 'What emoji?'];

const question = await message.channel.send(questions[0]); // store the question message object to a constant to be used later

const filter = msg => msg.author.id === message.author.id; // creates the filter where it will only look for messages sent by the message author
const collector = message.channel.createMessageCollector(filter, { time: 60 * 1000 }); // creates a message collector with a time limit of 60 seconds - upon that, it'll emit the 'end' event

const answers = []; // basic way to store to the answers, for this example

collector.on('collect', msg => { // when the collector finds a new message
  answers.push(msg.content);
  questions.shift();
  if (questions.length <= 0) return collector.stop('done'); // sends a string so we know the collector is done with the answers
  question.edit(questions[0]).catch(error => { // catch the error if the question message was deleted - or you could create a new question message
    console.error(error);
    collector.stop();
  });
});

collector.on('end', (collected, reason) => {
  if (reason && reason === 'stop') {
    // when the user has answered every question, do some magic
  }
  message.channel.send('You did not answer all the questions in time or the original message was deleted!');
});

注意:我还没有测试过这个,它的制作也不是很好,但是你应该能够根据自己的使用来调整它。我建议阅读这本指南,它将解释更多关于异步收集器和更多有趣的东西!

 类似资料:
  • 我需要知道如何让不和谐机器人断开语音频道。目前这是我加入语音频道的代码 我需要密码来断开与语音频道的连接

  • 本文向大家介绍Python如何实现机器人聊天,包括了Python如何实现机器人聊天的使用技巧和注意事项,需要的朋友参考一下 今天午休的时候,无意之中看了一篇博客,名字叫Python实现机器人,感觉挺有的意思的。 于是用其写了一个简单的Python聊天,源码如下所示: 注意:如果出现某某模块找不到的时候,记得使用pip安装对应的模块。 效果图如下所示: 唯一美中不足的是英文,不过没关系,国内有图灵机

  • 本文向大家介绍Node.js中使用socket创建私聊和公聊聊天室,包括了Node.js中使用socket创建私聊和公聊聊天室的使用技巧和注意事项,需要的朋友参考一下 先给大家展示效果图: 在上篇文章给大家介绍使用Angular和Nodejs、socket.io搭建聊天室及多人聊天室,本文继续介绍Node.js中使用socket创建私聊和公聊聊天室,具体详情请看下文吧。 nodejs的应用中,关于

  • 我正在尝试使用discord删除已创建的角色,该角色使用的是。js。 终端中的错误显示: DiscordAPIError:缺少权限 虽然我已经给了我的机器人所有权限。 代码:

  • 问题内容: 最近我一直在阅读关于bout node js的文章,并且聊天功能似乎非常好。但是,我见过的唯一聊天示例基本上是将聊天服务器广播到固定的URL(例如会议室)。是否可以部分使用节点js创建更像gchat的聊天客户端?-在当前页面上弹出一个聊天窗口,然后在多个页面中保留。有人看到过这样的例子吗? 如果不是,是否有其他技术用于此目的的建议(我知道其他问题已回答)? 谢谢。 问题答案: 我将为您

  • 智能机器人可以做到的事情可以很复杂:文字、语音、视频识别与合成;自然语言理解、人机对话;以及驱动硬件设备形成的“机器”人。作为一个只有技术和时间而没有金钱的IT人士,我仅做自然语言和人工智能相关的内容,不涉及硬件,也不涉及不擅长的多媒体识别和合成。所以索性就做一个可以和你说话,帮你解决问题的聊天机器人吧。