仅在每个人都能看到的频道中工作的角色静音Bot discord.js

时间:2020-02-28 22:09:59

标签: node.js discord discord.js

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

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));
  }
}```

1 个答案:

答案 0 :(得分:0)

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

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

应更改为以下内容:

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

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

enter image description here

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

我希望这在一定程度上是合理的,并且希望我能消除一些困惑,这对您有所帮助! 祝你有美好的一天