C# 如何使用discord.net 2.2.0 C获取discord中消息作者的昵称#

C# 如何使用discord.net 2.2.0 C获取discord中消息作者的昵称#,c#,discord.net,C#,Discord.net,如何使用Discord.net 2.2.0获取Discord中消息作者的昵称 private async Task MessageReceivedAsync(SocketMessage message) { if (StartBit == 0) { await message.Channel.SendMessageAsync("Test"); } StartBit = 1; // The bot should never respond to i

如何使用Discord.net 2.2.0获取Discord中消息作者的昵称

private async Task MessageReceivedAsync(SocketMessage message)
{
    if (StartBit == 0)
    { 
    await message.Channel.SendMessageAsync("Test");
    }
    StartBit = 1;
    // The bot should never respond to itself.
    if (message.Author.Id == _client.CurrentUser.Id)
        return;
    var UName = message.Author.Username;
    var UID = message.Author.Id;
}

不幸的是,长时间搜索和阅读文档后,我什么也没有得到。

尝试将您的消息转换为SocketUserMessage。我已经附上了正确的代码,请编辑您的文章,使代码是正确的

private async Task MessageReceivedAsync(SocketMessage msg) 
{ 
    SocketUserMessage message = msg as SocketUserMessage;

    if (StartBit == 0) 
    { 
        await message.Channel.SendMessageAsync("Test");
    } 
    StartBit = 1; 

    // The bot should never respond to itself.
    if (message.Author.Id == _client.CurrentUser.Id) return; 

    var UName = message.Author.Username; 
    var UID = message.Author.Id; 

}

尝试将您的邮件强制转换为SocketUserMessage。我已经附上了正确的代码,请编辑您的文章,使代码是正确的

private async Task MessageReceivedAsync(SocketMessage msg) 
{ 
    SocketUserMessage message = msg as SocketUserMessage;

    if (StartBit == 0) 
    { 
        await message.Channel.SendMessageAsync("Test");
    } 
    StartBit = 1; 

    // The bot should never respond to itself.
    if (message.Author.Id == _client.CurrentUser.Id) return; 

    var UName = message.Author.Username; 
    var UID = message.Author.Id; 

}

如果你想获得作者的昵称,你可以将其转换为SocketGuildUser,但要注意,如果是DM,则可以为空

var UNick=(message.Author作为SocketGuildUser)。昵称;
您可能还应该检查消息是否来自用户而不是系统

if(!(sockMessage是SocketUserMessage消息))
返回;
所以你的代码看起来像这样

private async Task MessageReceivedAsync(SocketMessage sockMessage)
{ 
//检查是否有用户发布了该消息
如果(!(sockMessage是SocketUserMessage消息))
返回;
//检查它是否不是DM
如果(!(msg.Author作为SocketGuildUser作者))
返回;
如果(起始位==0)
{ 
wait message.Channel.SendMessageAsync(“测试”);
}
StartBit=1;
//我通常会检查作者是否不是机器人,但你可以把它改回去
if(message.Author.IsBot)
返回;
var UName=author.Username;
var UNick=作者昵称;
var UID=author.Id;
}

归功于

如果你想获得作者的昵称,你可以将其转换为SocketGuildUser,但是要注意,如果是DM,它可以为空

var UNick=(message.Author作为SocketGuildUser)。昵称;
您可能还应该检查消息是否来自用户而不是系统

if(!(sockMessage是SocketUserMessage消息))
返回;
所以你的代码看起来像这样

private async Task MessageReceivedAsync(SocketMessage sockMessage)
{ 
//检查是否有用户发布了该消息
如果(!(sockMessage是SocketUserMessage消息))
返回;
//检查它是否不是DM
如果(!(msg.Author作为SocketGuildUser作者))
返回;
如果(起始位==0)
{ 
wait message.Channel.SendMessageAsync(“测试”);
}
StartBit=1;
//我通常会检查作者是否不是机器人,但你可以把它改回去
if(message.Author.IsBot)
返回;
var UName=author.Username;
var UNick=作者昵称;
var UID=author.Id;
}

归功于

您需要将
消息转换为
作者
SocketGuildUser
。默认情况下,
作者
将是一个
SocketUser
,它只有
用户名
,而没有
昵称
,因为昵称仅在
公会
上下文中有效。由于也可以通过直接消息发送消息,因此使用了
SocketUser
变体。基本上,如果将
作者
安全地强制转换为
SocketGuildUser
返回
null
,则消息通过DM发送。如果施法成功,您将无法访问
帮会
昵称
,您需要将
消息施法。作者
作为
SocketGuildUser
。默认情况下,
作者
将是一个
SocketUser
,它只有
用户名
,而没有
昵称
,因为昵称仅在
公会
上下文中有效。由于也可以通过直接消息发送消息,因此使用了
SocketUser
变体。基本上,如果将
作者
安全地强制转换为
SocketGuildUser
返回
null
,则消息通过DM发送。如果施法成功,您将无法访问
公会
昵称
抱歉,我是第一次写信给您。我还没有弄明白如何编辑这里的信息。很抱歉,我写的信息不正确,我是第一次写。我还没有弄明白如何编辑这里的信息。