用户添加反应后在新行上显示昵称
Posted
技术标签:
【中文标题】用户添加反应后在新行上显示昵称【英文标题】:Show a nickname on new line after a user add reaction 【发布时间】: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()
【参考方案1】:
我以不同的方式解决了这个问题。这是用户添加反应的代码
private async Task OnReactionAdded(Cacheable<IUserMessage, ulong> arg1, ISocketMessageChannel arg2, SocketReaction arg3)
var User = arg3.User.Value as SocketGuildUser;
if (arg3.MessageId != 843502656663715860) return;
if (arg3.Emote.Name != "✅") return;
var message = (RestUserMessage)await arg2.GetMessageAsync(843502656663715860);
var newUser = message.Embeds.FirstOrDefault().Fields.FirstOrDefault().Value;
if (newUser.Contains((arg3.User.Value).ToString())) return;
await message.ModifyAsync(x =>
var exampleField = new EmbedFieldBuilder()
.WithName("New Users")
.WithValue($"newUser\narg3.User.Value");
x.Embed = new EmbedBuilder()
.AddField(exampleField)
.Build();
);
还有奖励,如果用户删除反应
代码
private async Task OnReactionRemoved(Cacheable<IUserMessage, ulong> arg1, ISocketMessageChannel arg2, SocketReaction arg3)
if (arg3.MessageId != 843502656663715860) return;
if (arg3.Emote.Name != "✅") return;
var User = arg3.User.Value.ToString();
var message = (RestUserMessage)await arg2.GetMessageAsync(843502656663715860);
var newUser = message.Embeds.FirstOrDefault().Fields.FirstOrDefault().Value;
string newValue = "";
if (newUser.Contains((arg3.User.Value).ToString()))
newValue = newUser.Replace($"\narg3.User.Value", " ");
await message.ModifyAsync(x =>
var exampleField = new EmbedFieldBuilder()
.WithName("New Users")
.WithValue($"newValue");
x.Embed = new EmbedBuilder()
.AddField(exampleField)
.Build();
);
【讨论】:
以上是关于用户添加反应后在新行上显示昵称的主要内容,如果未能解决你的问题,请参考以下文章
绑定 C#、ASP.net 后在 gridview 中添加新行