Как мне получить участника Discord, упомянутого в сообщении, и предоставить ему роль? - PullRequest
0 голосов
/ 09 мая 2020

Это код, который я придумал

var roleMuted = ctx.Guild.GetRole(role id);
var userId = ctx.Message.MentionedUsers.First().Id;
DiscordMember member = ctx.Guild.GetMemberAsync(user); //exception here
await member.GrantRoleAsync(roleMuted);

Это дает мне исключение

CS0029 Невозможно неявно преобразовать тип "System.Threading.Tasks.Task< DSharpPlus.Entities.DiscordMember>" в "DSharpPlus.Entities.DiscordMember"

Как вы можете видеть здесь, в этой строке я намерен создать переменную класса DiscordMember и установить для нее значение DiscordMember, которое было возвращено ctx.Guild.GetMemberAsync(), но по какой-то причине Visual Studio сообщает мне, что DiscordMember, возвращенный GetMemberAsync(), не совпадает с DiscordMember, который я пытаюсь создать, чтобы позже использовать для .GrantRoleAsync(), что меня сильно смущает.

edit1 ** И я должен добавить, что если я заменю DiscordMember на var, чтобы строка была

var member = ctx.Guild.GetMemberAsync(user);, тогда вместо того, чтобы дать мне исключение, о неудачном преобразовании, я просто не могу позвонить .GrantRoleAsync() метод для переменной member (исключение CS1061)

1 Ответ

0 голосов
/ 10 мая 2020

GetMemberAsync - это асинхронный метод, вам нужно дождаться его, поставив перед ним ключевое слово await, как вы это сделали ниже с помощью GrantRoleAsync. Затем это вернет DiscordMember вместо Task<DiscordMember>.

Что касается вашего редактирования. Ваш тип теперь Task<DiscordMember>, что означает, что вы не получите методы для DiscordMember, а вместо этого получите методы для Task<T>

...