首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Discord.NET向SocketMessage添加反应

Discord.NET向SocketMessage添加反应
EN

Stack Overflow用户
提问于 2017-10-14 11:25:45
回答 3查看 13.7K关注 0票数 2

我正在使用Discord.NET版本1.0.2来澄清问题

我的Discord机器人应用程序中有一个MessageReceived任务:

代码语言:javascript
复制
private async Task MessageReceived(SocketMessage message)

这个任务,正如已经可以推断的那样,在每次收到与该机器人不一致的消息时运行。然而,我正在尝试弄清楚如何在机器人收到的消息中添加反应。在SocketMessage下,没有向接收到的消息添加反应的方法。我在网上查找,发现RestUserMessage包含AddReactionAsync(IEmote, RequestOptions)方法。然后,我将Socket Message强制转换为RestUserMessage

代码语言:javascript
复制
var rMessage = (RestUserMessage) await message.Channel.GetMessageAsync(message.Id);

在我的RestUserMessage变量rMessage下运行AddReactionAsync方法可以正常工作,但从我的在线阅读和文档中可以看出,参数没有被正确获取。

IEmote看起来是一个字符串,但字符串不满足此参数,说明不存在从StringIEmote的转换。我尝试将此String转换为IEmote,但不起作用。

作为new RequestOptions()RequestOptions变量似乎可以很好地满足参数要求。

我的完整代码是:

代码语言:javascript
复制
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向消息添加反应的正确方式吗?如果不是,什么是正确的?

我所做的研究:

代码语言:javascript
复制
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
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-10-15 00:48:50

如果您转到Emojipedia,并获取unicode版本,如下所示:

复制之后,您必须创建一个新的Emoji对象,如下所示:

代码语言:javascript
复制
var YourEmoji = new Emoji("");

然后,您可以向所需的消息添加响应,我将使用Context.Message

代码语言:javascript
复制
Context.Message.AddReactionAsync(YourEmoji);
票数 6
EN

Stack Overflow用户

发布于 2018-01-11 21:47:44

未知的解决方案适用于常规表情,但不适用于特定于行会的表情。

这是我想出的解决方案:

代码语言:javascript
复制
SocketGuild guild = ((SocketGuildChannel) message.Channel).Guild;
IEmote emote = guild.Emotes.First(e => e.Name == "my-custom-emote");
message.AddReactionAsync(emote);
票数 2
EN

Stack Overflow用户

发布于 2020-08-11 21:27:04

您已经找到了添加表情符号的方法,但我将继续介绍在消息中添加公会表情符号的其他方法。在这种情况下,您需要表情符号的原始字符串。不要把它和Emoji搞混了,Emoji代表的是Unicode表情符号,而Emote来自Discord.Net,代表自定义表情符号。多亏了IEmote接口,AddReactionAsync方法才能接受这两个对象。

代码语言:javascript
复制
Emote emote = Emote.Parse("<:craig_cat:603083214281506817>")

在本例中,我们使用名为craig_cat的表情符号和提供的ID创建了一个表情对象。为了获得要解析的原始字符串,在您的不一致客户端中,只需发送表情符号(:craig_cat:),但前面要加一个反斜杠(\)。

注意,在动画表情符号的情况下,它将如下所示:

代码语言:javascript
复制
Emote emote = Emote.Parse("<a:running:703588456198307900>")

标点符号前必须有一个a才能将其识别为动画表情符号。

在这两种情况下,都可以通过以下示例将其添加到消息中:

代码语言:javascript
复制
Context.Message.AddReactionAsync(emote); //Adds the reaction to the user's message that triggered the task (works only in a command)

大多数其他接口/对象也支持此方法,但强制转换会有所帮助。

您还可以随时使用此原始格式在消息中包含表情符号。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46740554

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档