【问题标题】:Discord js check reaction user roleDiscord js检查反应用户角色
【发布时间】:2020-08-06 02:29:17
【问题描述】:

我正在尝试通过对按钮做出反应来关闭工单。但反应必须由“支持”角色给出。我做不到。在这一点上,reaction.message.member.roles.has 对我没有帮助。这是我的代码;

client.on("messageReactionAdd", (reaction, user) => {
  if(reaction.message.member.roles.has('ROLE')) {
  let id = user.id.toString().substr(0, 4) + user.discriminator;
  let chan = `ticket-${id}`;

  const supchan = reaction.message.guild.channels.find(
    (channel) => channel.name === chan
  );
  const chan_id = supchan ? supchan.id : null;

  if (
    reaction.emoji.name === "????" &&
    !user.bot &&
    user.id != "ID"
  ) {
    reaction.removeAll();

    const channel = client.channels.find("name", chan);
    const delMsg = new Discord.RichEmbed()
      .setColor("#E74C3C")
      .setDescription(`:boom: Ticket will be deleted in 5 seconds.`);

    channel.send(delMsg).then(() => {
      var counter = 0;

      const intervalObj = setInterval(() => {
        counter++;
        if (counter == 5) {
          const message = reaction.message;
          message.delete();

感谢您的帮助!

【问题讨论】:

  • 您好!目前尚不完全清楚您要达到的目标。你能详细说明一下吗?你得到什么错误(如果有的话)?
  • 很抱歉。当指定角色单击表情符号时,没有任何反应。只有票的所有者可以使用此代码关闭

标签: javascript node.js discord discord.js


【解决方案1】:

所有这些都包含在 messageReactionAdd 事件中

// Replace "message_id" with the proper message id
// Checks if it's the correct message
if (reaction.message.id == "message_id") {

     // Check if author of ticket message is from the same user who reacted
     if (reaction.message.author == user) {

          // Check correct emoji
          if (reaction.emoji.name == "?") {
               // Code to close ticket
          }

     }

}

编辑: 同样,这将被包裹在 messageReactionAdd 事件中:

// Try to get the ticket message
// If there's none then the user was never opened a ticket so we simply return the code
const ticketMessage = client.tickets.get(user);
if (!ticketMessage) return;

// Checks if it's the correct message
if (reaction.message.id == ticketMessage.id) {

     // Check correct emoji
     if (reaction.emoji.name == "?") {
         // Code to close ticket
     }

}

我删除了检查反应消息作者的代码,因为获取 ticketMessage 已经处理了该问题。请注意,这意味着您可以确保用户只能打开一张票。

【讨论】:

  • 但 message_id 并不总是相同的。如果人员创建了工单,则人员创建工单,机器人创建通道。
  • 是的。因此,基本上在创建票证的命令中,您将该用户保存在 Map 中,其中用户作为键,值作为消息。例如:client.tickets = new Map()。在您的命令中:client.tickets.set(message.author, ticket_msg)。假设您已经这样做了,请查看上面编辑过的答案。
猜你喜欢
  • 2020-06-29
  • 2021-06-25
  • 2019-04-30
  • 2021-07-18
  • 2020-08-16
  • 2019-08-10
  • 2021-08-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多