Как мне добавить вещь с несколькими гильдиями в Discord.js

#node.js #discord.js

Вопрос:

Я работаю над этим кодом отключения звука:

 if (cmd === "mute") {
      if (
        message.member.permissions.has(
          "ADMINISTRATOR",
          "KICK_MEMBERS",
          "BAN_MEMBERS",
          "MANAGE_ROLES"
        )
      ) {
        const target = message.mentions.members.first();
        if (target) {
          let mainRole = message.guild.roles.cache.find(
            (role) => role.name === "{🍁}Scouts (VERIFIED)"
          );
          let muteRole = message.guild.roles.cache.find(
            (role) => role.name === "Muted"
          );

          let memberTarget = message.guild.members.cache.get(target.id);
          // timer mute
          if (!args[1]) {
            memberTarget.roles.remove(mainRole.id);
            memberTarget.roles.add(muteRole.id);
            message.channel.send(`<@${memberTarget.user.id}> has been muted`);
            return;
          }
          // manually mute
          memberTarget.roles.remove(mainRole.id);
          memberTarget.roles.add(muteRole.id);
          message.channel.send(
            `<@${memberTarget.user.id}> has been muted for ${ms(ms(args[1]))}`
          );

          setTimeout(function () {
            memberTarget.roles.remove(muteRole.id);
            memberTarget.roles.add(mainRole.id);
          }, ms(args[1]));
        } else {
          message.channel.send(" I can't mute this member !");
        }
      } else {
        message.channel.send("You can't mute members !");
      }
    }
 

Я пытаюсь сделать так, чтобы мне не приходилось постоянно меняться

 let mainRole = message.guild.roles.cache.find( (role) => role.name === "{🍁}Scouts (VERIFIED)" )"
 

вместо этого я пытаюсь заставить это работать на нескольких серверах/гильдиях, не меняя его. Как я могу этого достичь?

Комментарии:

1. К вашему сведению, я бы не стал искать роль, используя ее имя, так как они могут измениться, что может сломать вашего бота. Вместо этого используйте идентификатор.

Ответ №1:

Вы можете проверить, существует ли роль в этой гильдии, если она ее не создает!

 if(!muteRole) {
const muteRole = 
message.guild.roles.create({
  data: {
    name: "Muted",
  },
  reason: 'Creating Mute role',
});
message.guild.channels.cache.forEach(async (channel, id) => {
             await channel.createOverwrite(muteRole, {
                SEND_MESSAGES: false,
                MANAGE_MESSAGES: false,
                READ_MESSAGES: false,
                ADD_REACTIONS: false
             });
          });
memberTarget.roles.set([]); // removed all roles 
memberTarget.roles.add(muteRole.id);
return message.channel.send("Mute role not found! Created Muted Role and muted user ");
} 
 

Это позволит вашему боту создать роль, если в этой гильдии ее нет, и GuildMemberRolesManager#set([]) удалит все роли у пользователя, поэтому вам не придется каждый раз удалять «определенные» роли!

Комментарии:

1. Эй! Итак, я попробовал это вчера, и по какой-то причине это просто не сработало, не было ответа, что он сделал роль отключения звука, и он не отключил звук участника ( когда я создал для него роль отключения звука ) Кроме того, есть ли способ установить таймер? Нравится mute @user 10m ? Любая помощь будет очень признательна, спасибо !

2. Конечно, он не ответит, если уже есть роль отключения звука, я добавил ответ в случае, если роли отключения звука нет, вам нужно использовать свой собственный код с моим текущим ответом, эту штуку на основе таймера можно сделать с помощью базы данных, подумайте о переключении на нее!

3. Я уже подключен к базе данных, MongoDB, если быть точным, но сейчас я сталкиваюсь с множеством ошибок , это говорит ReferenceError: muteRole is not defined о том, что прошу прощения за то, что задаю так много вопросов, спасибо за ваше терпение !

4. let muteRole = message.guild.roles.cache.find( (role) => role.name === "Muted" вы определили его прямо здесь себя, также если вы подключены к MongoDB посмотрите, как вы можете создать временный приглушает вам нужна правильная схема для ее вещи, может пойти сложно, если у вас остались вопросы, пожалуйста, свяжитесь со мной в раздоре я 0_0#6666 вы также можете связаться со мной по вступлении моем сервере тут