最新消息: 电脑我帮您提供丰富的电脑知识,编程学习,软件下载,win7系统下载。

等待在公共频道回答问题

IT培训 admin 3浏览 0评论

等待在公共频道回答问题

下面的代码是导致没有错误控制台。我键入命令后,第一message.reply线执行正常,但机器人似乎不承认有人类型“接受”或“拒绝”。与此搞乱了相当长的时间。我在私人信息做类似以下的命令和它的作品。但由于这部分原因是在公共频道,它似乎并没有工作。

module.exports.run = async(bot, message, args) => {

  //!endbrawl winner [username] loser [username]

  let messageArray = message.content.split(" ")
  let winner = messageArray[2]
  let loser = messageArray[4]

  message.reply(`${message.author} wants to close this brawl with ${winner} as the victor and ${loser} as the loser. \n ${winner}, do you accept the result? If yes, type 'accept'. If not, type 'deny'.`);
  let winnerUser = message.mentions.users.first();
  let filter = m => m.author.id == winnerUser.id;
  message.channel.awaitMessages(filter, {
    maxMatches: 1,
  }).then(collected => {
    if (message.author.bot) return;
    if (collected.first().content === "accept") {
      return message.reply(`${winner} has accepted the proposed result.`)
      // put in code asking loser to agree with proposed result
    } else if (collected.first().content === "deny") {
      return message.reply(`${winner} has denied the proposed result.`)
    } else {
      return message.reply(`${winner}, your reply was invalid.`)
    }
  })
}

我一直在寻求办法解决这个问题,但是大多数涉及私人信息或什么告诉我不起作用。在任何一次的尝试都没有错误。这似乎只是它甚至没有看的答复。

感谢您的任何和所有帮助!这是非常感谢!

回答如下:
message.channel.awaitMessages(filter, {
    max: 1,
  }).then(...);

max意味着,将被处理为1消息maximun数:这意味着,如果不被笔者发来的一条消息,机器人将停止侦听新的消息。其他消息甚至可以是你的机器人的回复,因为你不能等待的设置awaitMessages前完成。 尝试使用maxMatches代替max的。

message.channel.awaitMessages(filter, {
    maxMatches: 1,
  }).then(...);

参考:MessageCollectorOptions


随着中说,想要获胜者能够发送消息,所以你需要改变你的filter功能。 首先,您需要获得冠军的用户对象,然后进行filter,这样它会检查自己的ID。

let winnerUser = message.mentions.users.first();
let filter = m => m.author.id == winnerUser.id;

你也可以匹配来自平原提及的ID,但我觉得它更容易使用的对象,而不是。

等待在公共频道回答问题

下面的代码是导致没有错误控制台。我键入命令后,第一message.reply线执行正常,但机器人似乎不承认有人类型“接受”或“拒绝”。与此搞乱了相当长的时间。我在私人信息做类似以下的命令和它的作品。但由于这部分原因是在公共频道,它似乎并没有工作。

module.exports.run = async(bot, message, args) => {

  //!endbrawl winner [username] loser [username]

  let messageArray = message.content.split(" ")
  let winner = messageArray[2]
  let loser = messageArray[4]

  message.reply(`${message.author} wants to close this brawl with ${winner} as the victor and ${loser} as the loser. \n ${winner}, do you accept the result? If yes, type 'accept'. If not, type 'deny'.`);
  let winnerUser = message.mentions.users.first();
  let filter = m => m.author.id == winnerUser.id;
  message.channel.awaitMessages(filter, {
    maxMatches: 1,
  }).then(collected => {
    if (message.author.bot) return;
    if (collected.first().content === "accept") {
      return message.reply(`${winner} has accepted the proposed result.`)
      // put in code asking loser to agree with proposed result
    } else if (collected.first().content === "deny") {
      return message.reply(`${winner} has denied the proposed result.`)
    } else {
      return message.reply(`${winner}, your reply was invalid.`)
    }
  })
}

我一直在寻求办法解决这个问题,但是大多数涉及私人信息或什么告诉我不起作用。在任何一次的尝试都没有错误。这似乎只是它甚至没有看的答复。

感谢您的任何和所有帮助!这是非常感谢!

回答如下:
message.channel.awaitMessages(filter, {
    max: 1,
  }).then(...);

max意味着,将被处理为1消息maximun数:这意味着,如果不被笔者发来的一条消息,机器人将停止侦听新的消息。其他消息甚至可以是你的机器人的回复,因为你不能等待的设置awaitMessages前完成。 尝试使用maxMatches代替max的。

message.channel.awaitMessages(filter, {
    maxMatches: 1,
  }).then(...);

参考:MessageCollectorOptions


随着中说,想要获胜者能够发送消息,所以你需要改变你的filter功能。 首先,您需要获得冠军的用户对象,然后进行filter,这样它会检查自己的ID。

let winnerUser = message.mentions.users.first();
let filter = m => m.author.id == winnerUser.id;

你也可以匹配来自平原提及的ID,但我觉得它更容易使用的对象,而不是。

与本文相关的文章

发布评论

评论列表 (0)

  1. 暂无评论