【问题标题】:Bot doesn't edit role permissions for each channelBot 不会编辑每个频道的角色权限
【发布时间】:2020-10-21 22:29:37
【问题描述】:

我正在尝试制作反垃圾邮件,当机器人应该为每个频道编辑静音角色的权限时,没有任何反应。

首先我创建角色

const mute_role = message.guild.roles.cache.find(r => r.name == "Muted");
  if (!mute_role) {
    try {
      mute_role = await message.guild.roles.create({
        data: {
          name: "Muted",
          color: "#000000",
          permissions: []
        }
      })

然后我编辑角色对所有公会频道的权限

message.guild.channels.cache.forEach(async (channel, id) => {
        await channel.updateOverwrite(mute_role, 
          {
            SEND_MESSAGES: false,
            ADD_REACTIONS: false,
          }
        );
      });
    } catch (e) {
      console.log(e.stack);
    }
  }

在这样做之后,它应该继续到代码的其余部分,但它似乎跳过了那部分,因为它继续到反垃圾邮件并在垃圾邮件被触发时添加角色

这是反垃圾邮件的完整代码

bot.on('message', async message => {
  if (message.author.bot) return;
  const mute_role = message.guild.roles.cache.find(r => r.name == "Muted");
  if (!mute_role) {
    try {
      mute_role = await message.guild.roles.create({
        data: {
          name: "Muted",
          color: "#000000",
          permissions: []
        }
      })
      message.guild.channels.cache.forEach(async (channel, id) => {
        await channel.updateOverwrite(mute_role, 
          {
            SEND_MESSAGES: false,
            ADD_REACTIONS: false,
          }
        );
      });
    } catch (e) {
      console.log(e.stack);
    }
  }
  if (usersMap.has(message.author.id)) {
    const userData = usersMap.get(message.author.id);
    const { lastMessage, timer } = userData;
    const difference = message.createdTimestamp - lastMessage.createdTimestamp;
    let msgCount = userData.msgCount;
    console.log(difference);

    if (difference > DIFF) {
      clearTimeout(timer);
      console.log('Cleared timeout');
      userData.msgCount = 1;
      userData.lastMessage = message;
      userData.timer = setTimeout(() => {
        usersMap.delete(message.author.id);
        console.log('Removed from RESET');
      }, TIME);
      usersMap.set(message.author.id, userData);
    }
    else {
      msgCount++;
      console.log(msgCount)
      if (parseInt(msgCount) === LIMIT) {
        message.member.roles.add(mute_role);
        message.channel.send(`${message.author} has been muted for spamming`);
        setTimeout(() => {
          message.member.roles.remove(mute_role);
          message.channel.send(`${message.author} has been unmuted`);
        }, TIME);
      }
      else {
        userData.msgCount = msgCount;
        usersMap.set(message.author.id, userData);
      }
    }
  }
  else {
    let fn = setTimeout(() => {
      usersMap.delete(message.author.id);
      console.log('Removed from map');
    }, TIME);
    usersMap.set(message.author.id, {
      msgCount: 1,
      lastMessage: message,
      timer: fn
    })
  }
})

【问题讨论】:

    标签: javascript discord.js


    【解决方案1】:

    好的,我刚刚发现它为什么不起作用

    而不是使用

    const mute_role = message.guild.roles.cache.find(r => r.name == "Muted");
    

    我只需要使用

    let mute_role = message.guild.roles.cache.find(r => r.name == "Muted");
    

    现在它可以工作并覆盖频道权限

    【讨论】:

    • 将此标记为正确答案并关闭您的问题,以便可能遇到相同问题的其他人更容易找到正确的解决方案。
    猜你喜欢
    • 2021-03-02
    • 1970-01-01
    • 2018-12-29
    • 2020-08-09
    • 1970-01-01
    • 2020-01-28
    • 2021-05-28
    • 2021-06-22
    • 2022-12-12
    相关资源
    最近更新 更多