#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 вы также можете связаться со мной по вступлении моем сервере тут