【发布时间】:2021-08-07 05:27:34
【问题描述】:
我正在尝试使用 discord API 在用户点击反应后显示用户 Discord.Tag(或昵称)。
在我的代码中,Discord.tag 只是被最后点击反应的用户覆盖。用户可以是±30。
这就是我想要的:
我的代码:
private async Task OnReactionAdded(Cacheable<IUserMessage, ulong> arg1, ISocketMessageChannel arg2, SocketReaction arg3)
{
var User = arg3.User.Value as SocketGuildUser;
ulong MessageID = 843502656663715860;
if (arg3.MessageId != MessageID) return;
if (arg3.Emote.Name != "✅") return;
var message = (RestUserMessage)await arg2.GetMessageAsync(MessageID);
await message.ModifyAsync(x => // Edit message
{
var exampleField = new EmbedFieldBuilder()
.WithName("New Users")
.WithValue($"User: {arg3.User.Value} \n " + //overwritting user
$"User: {arg3.User.Value} \n "); //
x.Embed = new EmbedBuilder()
.AddField(exampleField)
.Build();
});
}
【问题讨论】:
-
您的代码看起来像是在为字段创建内容时创建了一个新的 EmbedFieldBuilder() 实例。您是否能够创建一个构建器,从现场已有的内容开始,然后将新用户的反应附加到它上面?
-
从消息中获取嵌入并修改它,而不是创建一个新的嵌入。当您检索嵌入时,您可以调用
ToEmbedBuilder将其转换为嵌入构建器,以便对其进行编辑。只需通过附加新用户来编辑字段值。然后你可以在消息上调用 modify 并给它你修改后的嵌入。 -
@Anu6is 问题是我不知道如何从消息中获取嵌入。我试过
var emd = message.Embeds,它返回Length = 1。在调试模式下,我找到了消息值:Debug -
Embeds是一个集合。只需获取集合中的第一个项目。message.Embeds.FirstOrDefault()
标签: c# discord discord.net