【问题标题】:How do I get Discord member, mentioned in the message and grant him a role?我如何获得消息中提到的 Discord 成员并授予他角色?
【发布时间】:2020-08-25 04:05:39
【问题描述】:

这是我想出的代码

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 类的变量并将其设置为 ctx.Guild.GetMemberAsync() 返回的 DiscordMember,但出于某种原因,Visual Studio 告诉我DiscordMember,由GetMemberAsync() 返回的DiscordMember 与我尝试创建的DiscordMember 不同,以便以后用于.GrantRoleAsync(),这让我很困惑。

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

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

【问题讨论】:

  • 请不要在您的问题标题中添加标签。您已经为此目的使用了一个完全足够的标记系统。

标签: c# discord dsharp+


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2021-10-11
    • 2021-01-12
    • 2021-03-26
    • 2018-07-24
    • 2019-04-16
    • 2020-02-26
    • 2020-07-31
    • 2019-05-21
    • 2021-04-15
    相关资源
    最近更新 更多