#java #discord #discord-jda
#java #Discord #discord-jda
Вопрос:
Недавно я пытался создать команду настройки отключения звука, она создает роль отключения звука, но когда вы отключаете кого-то, они все равно могут разговаривать. Любая помощь?
Мой код:
if (raw.replace("S!", "").equals("mutesetup")) {
if (event.getMember().hasPermission(Permission.MANAGE_PERMISSIONS, Permission.MANAGE_ROLES)) {
if (true) {
event.getChannel().sendMessage("Sorry but this command is currently being fixed...").queue();
return;
}
event.getChannel().sendMessage("Starting setup...").queue();
event.getGuild().createRole().setName("Muted").setPermissions(Permission.EMPTY_PERMISSIONS).queue();
event.getChannel().sendMessage("Mute role successfully created!").queue();
} else {
event.getChannel().sendMessage("Sorry but you must have the `Manage Permissions` and `Manage Roles` permissions to use this command").queue();
}
}
Комментарии:
1. В документах discord API описано, что разрешение предоставляется, если оно есть у другой роли (также
@everyone
). Для этого необходимо настроить переопределения каналов.
Ответ №1:
Создавая роль EMPTY_PERMISSIONS
, которая устанавливает все разрешения роли по УМОЛЧАНИЮ, что означает, что она будет использовать уровень разрешений других ролей (в соответствии с иерархией ролей), который пользователь имеет для указанного разрешения или @everyone
роли, если оно неприменимо для других ролей, и только тогда, если у роли everyone оно отключено, так же будут ли они.
Чтобы сделать отключенную роль неспособной отправлять сообщения / разговаривать, вам нужно установить разрешение на отправку сообщений / разрешение на разговор, чтобы запретить в каналах / категориях, которые вы хотите, чтобы они не могли так разговаривать:
category.createPermissionOverride(role).setDeny(Permission.MESSAGE_WRITE, Permission.VOICE_SPEAK).queue();
Ответ №2:
Прежде всего, попробуйте, возможно, отформатировать свой код в следующий раз, чтобы он был понятным.
Но чтобы вернуться к вашему вопросу, вы, конечно, должны также настроить разрешения вашей вновь созданной роли (поскольку имя не имеет значения с точки зрения прав). В принципе, вам нужно только запретить разрешения на разговор, чтобы Discord также понимал, что пользователи имеют в вашей недавно созданной роли, разрешено ли им говорить или нет, могут ли они писать сообщения и так далее.
Вам нужно только добавить следующее в свой код после создания роли, чтобы вы могли сообщить Discord, что пользователи могут или не могут делать с вашей ролью (как сказано выше)
Если вы добавите следующий код, пользователи с вашей ролью больше НЕ смогут разговаривать, и сообщения больше не отправляются:
category.createPermissionOverride(role).setDeny(Permission.VOICE_SPEAK, Permission.MESSAGE_WRITE).queue();
Конечно, вы можете сделать то же самое со всеми другими разрешениями. Противоположностью Deny (НЕТ) будет Grant (Да). Лучше всего прочитать этот раздел, чтобы лучше понять систему разрешений Discord: как мне настроить разрешения?