Как настроить разрешения роли Discord с помощью Discord. NET? - PullRequest
1 голос
/ 05 апреля 2020

Итак, я пытаюсь закодировать бота Discord с помощью Discord. NET API в C#, и я столкнулся с проблемой настройки разрешений для ролей с помощью бота. Я пытаюсь сделать команду отключения текстового канала, создав роль " Muted ". Однако я не могу отказать в разрешении на Send Messages. Вот что я попробовал:

// Mute Command:
[Command("mute")]
[RequireUserPermission(GuildPermission.KickMembers)]
[RequireBotPermission(GuildPermission.KickMembers)]
public async Task Mute(IGuildUser user, int duration, string reason)
{
   var role = await Context.Guild.CreateRoleAsync("Muted");
   role.Permissions.SendMessages = false;
   Threading.Sleep(duration);
   await role.DeleteAsync();
}

Что не работает. Также попытался заменить role.Permissions.SendMessages = false; на role.Permissions.SendMessages.Equal(false);, который тоже не работал. Я посмотрел на документацию API и до сих пор не нашел решения. Какие-нибудь решения для этого?

1 Ответ

0 голосов
/ 06 апреля 2020

Свойство Permissions в IRole имеет только геттер, что означает, что вы не можете устанавливать объекты Permissions или какие-либо свойства в объекте Permissions после его создания. Вы можете получить данные только от объекта. Вы можете видеть на изображении ниже:

Определение IRole

Функция CreateRoleAsync имеет параметр GuildPermissions (который является вторым параметром), который вы можете передать пользовательскому GuildPermissions объект в. При создании нового экземпляра GuildPermissions вам нужно будет использовать конструктор, который принимает около 20 параметров, которые устанавливают разные права доступа.

Вот пример кода:

public void CreateRoleWithCustomPermissions()
{
   var myCustomPermissions = new GuildPermissions(false,
                                                false,
                                                false,
                                                false,
                                                false,
                                                false,
                                                false,
                                                false,
                                                false, // this one is for sendMessages
                                                false,
                                                false,
                                                false,
                                                false,
                                                false,
                                                true,
                                                false,
                                                false,
                                                true,
                                                false,
                                                false,
                                                false,
                                                false,
                                                false,
                                                false,
                                                false,
                                                false,
                                                false,
                                                false,
                                                false);

   var role = await Context.Guild.CreateRoleAsync("Muted", myCustomPermissions);
}
...