【问题标题】:Discord.NET Adding Reactions to a SocketMessageDiscord.NET 向 SocketMessage 添加反应
【发布时间】:2018-03-26 05:13:53
【问题描述】:

我正在使用 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 下为RestUserMessage 运行AddReactionAsync 方法可以工作,但是从我的在线阅读和文档中可以看出,参数没有正确获取。

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

【问题讨论】:

    标签: c# discord discord.net


    【解决方案1】:

    如果您前往Emojipedia,并获取 unicode 版本,如下所示:

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

    var YourEmoji = new Emoji("?");
    

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

    Context.Message.AddReactionAsync(YourEmoji);
    

    【讨论】:

    • 这仅适用于由单个 unicode 代码点组成的表情符号。
    【解决方案2】:

    Unknown 的解决方案适用于常规表情,但不适用于公会特定表情。

    这是我想出的解决方案:

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

    【讨论】:

    • 如果您是通过命令执行此操作,使用var guild = Context.Guild; 可能会更简洁
    【解决方案3】:

    您已经找到了添加表情符号的方法,但我会跟进另一种方法,将公会表情符号添加到消息中。在这种情况下,您需要表情符号的原始字符串。不要将它与 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)
    

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

    您也可以随时使用这种原始格式将表情符号包含在消息中。

    【讨论】:

      猜你喜欢
      • 2019-09-22
      • 1970-01-01
      • 2021-08-04
      • 2019-09-29
      • 2021-03-11
      • 2019-09-06
      • 2022-01-02
      • 2020-10-27
      • 1970-01-01
      相关资源
      最近更新 更多