我正在使用Discord.NET版本1.0.2来澄清问题
我的Discord机器人应用程序中有一个MessageReceived任务:
private async Task MessageReceived(SocketMessage message)这个任务,正如已经可以推断的那样,在每次收到与该机器人不一致的消息时运行。然而,我正在尝试弄清楚如何在机器人收到的消息中添加反应。在SocketMessage下,没有向接收到的消息添加反应的方法。我在网上查找,发现RestUserMessage包含AddReactionAsync(IEmote, RequestOptions)方法。然后,我将Socket Message强制转换为RestUserMessage
var rMessage = (RestUserMessage) await message.Channel.GetMessageAsync(message.Id);在我的RestUserMessage变量rMessage下运行AddReactionAsync方法可以正常工作,但从我的在线阅读和文档中可以看出,参数没有被正确获取。
IEmote看起来是一个字符串,但字符串不满足此参数,说明不存在从String到IEmote的转换。我尝试将此String转换为IEmote,但不起作用。
作为new RequestOptions(),RequestOptions变量似乎可以很好地满足参数要求。
我的完整代码是:
private async Task MessageReceived(SocketMessage message)
{
var rMessage = (RestUserMessage) await message.Channel.GetMessageAsync(message.Id);
rMessage.AddReactionAsync(???, new RequestOptions());
}如何正确地实现此IEmote参数和/或如何定义IEmote变量。另外,定义一个new RequestOptions()变量也是满足这个参数的正确方法。这也是通过Discord.NET向消息添加反应的正确方式吗?如果不是,什么是正确的?
我所做的研究:
https://github.com/RogueException/Discord.Net/issues/490
https://discord.foxbot.me/docs/api/Discord.Rest.RestUserMessage.html
https://discord.foxbot.me/docs/api/Discord.IEmote.html
https://discord.foxbot.me/docs/api/Discord.RequestOptions.html发布于 2017-10-15 00:48:50
如果您转到Emojipedia,并获取unicode版本,如下所示:

复制之后,您必须创建一个新的Emoji对象,如下所示:
var YourEmoji = new Emoji("");然后,您可以向所需的消息添加响应,我将使用Context.Message:
Context.Message.AddReactionAsync(YourEmoji);发布于 2018-01-11 21:47:44
未知的解决方案适用于常规表情,但不适用于特定于行会的表情。
这是我想出的解决方案:
SocketGuild guild = ((SocketGuildChannel) message.Channel).Guild;
IEmote emote = guild.Emotes.First(e => e.Name == "my-custom-emote");
message.AddReactionAsync(emote);发布于 2020-08-11 21:27:04
您已经找到了添加表情符号的方法,但我将继续介绍在消息中添加公会表情符号的其他方法。在这种情况下,您需要表情符号的原始字符串。不要把它和Emoji搞混了,Emoji代表的是Unicode表情符号,而Emote来自Discord.Net,代表自定义表情符号。多亏了IEmote接口,AddReactionAsync方法才能接受这两个对象。
Emote emote = Emote.Parse("<:craig_cat:603083214281506817>")在本例中,我们使用名为craig_cat的表情符号和提供的ID创建了一个表情对象。为了获得要解析的原始字符串,在您的不一致客户端中,只需发送表情符号(:craig_cat:),但前面要加一个反斜杠(\)。
注意,在动画表情符号的情况下,它将如下所示:
Emote emote = Emote.Parse("<a:running:703588456198307900>")标点符号前必须有一个a才能将其识别为动画表情符号。
在这两种情况下,都可以通过以下示例将其添加到消息中:
Context.Message.AddReactionAsync(emote); //Adds the reaction to the user's message that triggered the task (works only in a command)大多数其他接口/对象也支持此方法,但强制转换会有所帮助。
您还可以随时使用此原始格式在消息中包含表情符号。
https://stackoverflow.com/questions/46740554
复制相似问题