【问题标题】:Muted role only working in channels everyone can see | Bot discord.js仅在所有人都可以看到的频道中工作的静音角色 |机器人 discord.js
【发布时间】:2020-03-02 17:40:35
【问题描述】:

好的,所以我有一个机器人,静音角色适用于每个人都可以看到的频道,但是当员工被静音时,他们无法在一般聊天中聊天,但可以在员工聊天中聊天,员工聊天只有员工+可见代码以防万一需要更改

const { red_dark } = require("../../colors.json");
const ms = require("ms");

module.exports = {
      name: "mute",
      description: "Mutes a member in the discord!",
      usage: "!mute <user> <reason>",
      category: "moderation",
      accessableby: "Members",
      aliases: ["m", "nospeak"],
  run: async (bot, message, args) => {
// check if the command caller has permission to use the command

if(!message.member.hasPermission("MANAGE_ROLES", "ADMINISTRATOR") || !message.guild.owner) return message.channel.send(":x: **You do not have the permission to use this command!**");

if(!message.guild.me.hasPermission(["MANAGE_ROLES", "ADMINISTRATOR"])) return message.channel.send(":x: **I do not have the permission to add roles!**")

//define the reason and mutee

let tomute = message.guild.member(message.mentions.users.first() || message.guild.members.get(args[0]));

if(!tomute) return message.reply("Couldn't find user.");


let muterole = message.guild.roles.find(`name`, "Muted");
//start of create role
if(!muterole){
  try{
    muterole = await message.guild.createRole({
      name: "Muted",
      color: "#ff0000",
      permissions:[]
    })
    message.guild.channels.forEach(async (channel, id) => {
      await channel.overwritePermissions(muterole, {
        SEND_MESSAGES: false,
        ADD_REACTIONS: false,
        CONNECT: false
      });
    });
  }catch(e){
    console.log(e.stack);
  }
}
//end of create role
let mutetime = args[1];
if(!mutetime) return message.reply(":X: You didn't specify a time!");

await(tomute.addRole(muterole.id));
message.reply(`<@${tomute.id}> has been muted for ${ms(ms(mutetime))}`);
         tomute.send(`Hello, you have been muted in ${message.guild.name} for: **${mutetime}**`).catch(err => console.log(err))

setTimeout(function(){
  tomute.removeRole(muterole.id);
  message.channel.send(`<@${tomute.id}> is no longer muted! Welcome Back!!`);
}, ms(mutetime));
  }
}```

【问题讨论】:

    标签: node.js discord discord.js


    【解决方案1】:

    首先,由于新的 NodeJS 更新,此行不正确:

    let muterole = message.guild.roles.find(`name`, "Muted");

    应该改成这样:

    let muterole = message.guild.roles.find(r =&gt; r.name === "Muted");

    除此之外,它必须是一些频道权限。我最近发现如果用户(没有特定的 mod/管理权限)在他们的角色之一上有“发送消息”以允许,他们绕过静音。要更改这一点,允许他们的角色,您必须将其设置为 null(中间的灰色选项),以拒绝他们通过静音角色交谈。示例:

    如果我尝试将具有“Beta 测试人员”角色的任何人静音,他们仍然可以在此特定频道中交谈,即使被静音的人被拒绝。

    我希望这有点道理,我希望我消除了一些困惑,这会有所帮助! 祝你有美好的一天

    【讨论】:

      猜你喜欢
      • 2019-01-31
      • 2021-05-04
      • 1970-01-01
      • 2019-07-31
      • 1970-01-01
      • 2021-01-07
      • 1970-01-01
      • 2021-07-04
      • 2020-07-17
      相关资源
      最近更新 更多