我正在使用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
似乎是一个字符串,但字符串不符合此参数,表示没有从String
到IEmote
的转换。我尝试将此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
答案 0 :(得分:4)
如果您转到Emojipedia,请抓住unicode版本,如下所示:
复制之后,你必须创建一个新的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)
大多数其他接口/对象也支持此方法,但是强制转换会有所帮助。
您还可以随时使用此原始格式在消息中包含表情符号。