Discord.NET 向 SocketMessage 添加反应
Discord.NET Adding Reactions to a SocketMessage
我正在使用 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);
运行 我的变量 rMessage
for RestUserMessage
下的 AddReactionAsync
方法有效,但参数没有正确获取,正如我从网上阅读和文档。
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
如果您转到 Emojipedia,并获取 unicode 版本,如下所示:
复制后,您必须创建一个新的 Emoji
对象,如下所示:
var YourEmoji = new Emoji("");
然后您可以对所需的消息添加反应,我将使用 Context.Message
:
Context.Message.AddReactionAsync(YourEmoji);
Unknown 的解决方案适用于常规表情,但不适用于公会特定表情。
这是我想出的解决方案:
SocketGuild guild = ((SocketGuildChannel) message.Channel).Guild;
IEmote emote = guild.Emotes.First(e => e.Name == "my-custom-emote");
message.AddReactionAsync(emote);
您已经找到了添加表情符号的方法,但我会继续介绍一种将公会表情符号添加到消息中的方法。在这种情况下,您需要表情符号的原始字符串。不要将它与 Emoji 混淆,Emoji
代表 Unicode 表情符号,但 Emote
来自 Discord.Net,代表自定义表情符号。由于 IEmote
接口,AddReactionAsync
方法接受两个对象。
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)
大多数其他 interfaces/objects 也支持此方法,转换会有所帮助。
您也可以随时使用这种原始格式在消息中包含表情符号。
我正在使用 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);
运行 我的变量 rMessage
for RestUserMessage
下的 AddReactionAsync
方法有效,但参数没有正确获取,正如我从网上阅读和文档。
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
如果您转到 Emojipedia,并获取 unicode 版本,如下所示:
复制后,您必须创建一个新的 Emoji
对象,如下所示:
var YourEmoji = new Emoji("");
然后您可以对所需的消息添加反应,我将使用 Context.Message
:
Context.Message.AddReactionAsync(YourEmoji);
Unknown 的解决方案适用于常规表情,但不适用于公会特定表情。
这是我想出的解决方案:
SocketGuild guild = ((SocketGuildChannel) message.Channel).Guild;
IEmote emote = guild.Emotes.First(e => e.Name == "my-custom-emote");
message.AddReactionAsync(emote);
您已经找到了添加表情符号的方法,但我会继续介绍一种将公会表情符号添加到消息中的方法。在这种情况下,您需要表情符号的原始字符串。不要将它与 Emoji 混淆,Emoji
代表 Unicode 表情符号,但 Emote
来自 Discord.Net,代表自定义表情符号。由于 IEmote
接口,AddReactionAsync
方法接受两个对象。
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)
大多数其他 interfaces/objects 也支持此方法,转换会有所帮助。
您也可以随时使用这种原始格式在消息中包含表情符号。