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

在一个特定用户说出一个特定的关键字(discord.js)之前,我如何一直从多个用户获取输入?

濮佑运
2023-03-14

所以我一直在尝试在discord上制作一个拍卖机器人。我已经知道了如何处理单个项目,但我在捆绑包方面遇到了问题。

我的目标-让用户在拍卖捆绑包时提供任何/所有物品的信息,直到他说出关键字“完成”。机器人存储第一条消息的url(嵌入由机器人发送),然后在用户说完成之前不做任何事情。这两个用户是1.用户自己,2.他想拍卖的物品的机器人。

我尝试使用消息收集器,但机器人直接忽略了它。在网上搜索并试图适应我的情况后,我发现最接近的事情是在for循环中使用async/wait和waitMessages。之后,也失败了,我试图使用一个链的然后()与waitMessages.这是我的代码片段。任何帮助都很感激。

let flg =0 
if(arguments[3] === 'bundle'){
    message.channel.send('Say `done` when you have info-ed all your pokemons')
            
    await message.channel.awaitMessages(m => m.author.id === '666956518511345684' || m.author.id === message.author.id, {time : 30000, errors : ['time']}).then(col1 => {
        if (col1.first().author.id === '666956518511345684')
            details.poke = col1.first().url
            }).then(col2 => {
                   if (col2.first().author.id === message.author.id)
                      while(flg = 0){
                           if (col2.first().content.toLowerCase() === 'done')
                              flg = 1
                      }
                })

共有2个答案

秦毅
2023-03-14

我再次尝试消息收集器,我让它工作不知何故。以下是方法:

let i = 0
let filter = m => {m.author.id === '<Bot's id>' || m.author.id === message.author.id}
let collector = message.channel.createMessageCollector(filter, {time : 30000})
collector.on('collect', m => {
     if (m.author.id === '<bot's id>' && i === 0){
          details.poke = m.url
          i = 1
     }
     if (m.author.id === message.author.id && m.content.toLowerCase() === 'done'){
          collector.stop()
     }
})
collector.on('end', col => { //code here })

变量i是一个标志,因为我只需要bot发送的第一条消息的url。它可以被删除/更多的标志可以添加到您的需要/要求。让我知道你是否需要更多的帮助。

禄奇希
2023-03-14

让收集器忽略bot消息,获取多个输入并检查消息内容。一旦时间耗尽,或者达到最大输入,将返回消息集合。

if(arguments[3] === 'bundle'){
   message.channel.send('Say `done` when you have info-ed all your pokemons')
   const filter = m => {
      return !m.user.bot && ['666956518511345684', message.author.id].includes(m.author.id) && m.content.toLowerCase() === 'done';
   }
   message.channel.awaitMessages(filter, {
      // Take a max of 5 inputs for example
      max: 5
      time: 30000,
      errors: ['time']
   }).then(collected => {
      // Your code
   })
}

TextChannel上的文档#waitMessages()

 类似资料:
  • 我需要我的机器人回复一个特定的角色,如果用户没有这个角色,机器人会回复另一条消息说“你不允许执行这个命令”,这是我的代码:

  • 我正在使用规范来构建使用Java的web服务。我使用过滤器进行身份验证和授权,为每个请求调用所有过滤器,我不需要为某个请求只指定一个过滤器,我如何做到这一点?我只想阻止另一个过滤器调用。我不使用,而是使用扩展带有注释的类,如下所示:

  • 问题内容: 1.问题 例如,有没有一种方法可以从小部件列表ListView.builder的第二个(index = 1)项目开始? 就我而言,我正在尝试在a的顶部添加一些空白区域,ListView以便用户可以将顶部卡片滚动到更靠近他的拇指的位置。一种解决方法是Container在List小部件的顶部和底部添加empty ,以模拟空白空间。但是,将在屏幕上显示,用户可能会感到困惑,并且不知道仅通过滚

  • 我想我的代码中的“admin-cli”是错误的,但这是master域中的客户端ID。这是不是身份证错了?如何使请求使特定用户的所有角色工作?

  • 问题内容: 我正在尝试从表中进行SQL查询,-从所有对用户中以用户36作为发送者或接收者的最后一条消息,并将它们与用户表结合起来以获取名称。我已经设法创建了这样的东西,但仍然想问一下是否还有更简单的方法。有效的解决方案。MySQL版本-5.5.31 询问: 谢谢。更新。样本消息表中的数据: mysql> SELECT id,sender_user_id,receiver_user_id,文本,日期