如何获得消息中提到的Discord成员并授予他角色?

时间:2020-05-09 15:01:23

标签: c# discord dsharp+

那是我想出的代码

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() ,这让我很困惑。

编辑1 ** 而且我必须补充一点,如果我将DiscordMember替换为var,则该行将成为

var member = ctx.Guild.GetMemberAsync(user); 然后除了给我一个关于转换失败的例外以外,我根本无法为.GrantRoleAsync()变量(CS1061例外)调用member方法

1 个答案:

答案 0 :(得分:0)

GetMemberAsync是一种异步方法,您需要通过在其前面放置await关键字来等待它,就像下面对GrantRoleAsync所做的那样。然后,它将返回DiscordMember而不是Task<DiscordMember>

至于您的编辑。您的类型现在为Task<DiscordMember>,这意味着您将不会获得DiscordMember的方法,而是会得到Task<T>的方法