Discord.NET向SocketMessage添加反应

时间:2017-10-14 03:25:45

标签: c# discord discord.net

我正在使用Discord.NET版本1.0.2来清理

我的Discord Bot应用程序中有一个MessageReceived任务:

private async Task MessageReceived(SocketMessage message)

此任务(已经可以扣除)每次在Discord中收到消息时都会运行此任务。我试图弄清楚如何为机器人收到的消息添加反应。在SocketMessage下,没有方法可以对收到的消息添加反应。我在线查看,发现RestUserMessage包含方法AddReactionAsync(IEmote, RequestOptions)。然后,我将Socket Message投放到RestUserMessage,如此

var rMessage = (RestUserMessage) await message.Channel.GetMessageAsync(message.Id);

在我的变量AddReactionAsync下为rMessage运行RestUserMessage方法有效,但参数未正确使用,因为我可以从在线阅读和文档中看到。

IEmote似乎是一个字符串,但字符串不符合此参数,表示没有从StringIEmote的转换。我尝试将此String投射到IEmote,但这不起作用。

RequestOptions变量似乎完全符合new 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

3 个答案:

答案 0 :(得分:4)

如果您转到Emojipedia,请抓住unicode版本,如下所示: enter image description here

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

var YourEmoji = new Emoji("");

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

Context.Message.AddReactionAsync(YourEmoji);

答案 1 :(得分:2)

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

这是我提出的解决方案:

SocketGuild guild = ((SocketGuildChannel) message.Channel).Guild;
IEmote emote = guild.Emotes.First(e => e.Name == "my-custom-emote");
message.AddReactionAsync(emote);

答案 2 :(得分:0)

您已经找到添加表情符号的方法,但是我将继续介绍向消息添加公会表情符号的其他方法。在这种情况下,您需要表情符号的原始字符串。不要将其与表情符号混淆,Emoji代表Unicode表情符号,但是Emote来自Discord.Net,代表自定义表情符号。由于AddReactionAsync接口,IEmote方法可以接受两个对象。

Emote emote = Emote.Parse("<:craig_cat:603083214281506817>")

在这种情况下,我们将创建一个名为craig_cat的表情符号并提供ID的Emote对象。 为了获取原始字符串以进行解析,在您的Discord客户端中,只需发送表情符号(: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)

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

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