【问题标题】:How to add emojis on a bot message and be able to "vote"?如何在机器人消息上添加表情符号并能够“投票”?
【发布时间】:2021-03-26 10:47:29
【问题描述】:

我创建了 Discord Bot 的 MEME 命令,该命令发布了来自 phpMyAdmin DB 的 meme 列表。但事实并非如此。我想在该机器人消息上添加特定的表情符号,人们可以按下这些表情符号并进行投票。

它是这样发布的:

这是我想做的:

    [Command("meme")]
    public async Task meme(CommandContext commandInfo, int id = -1, SocketUserMessage userMsg, string emoteName)
    {
        var description = "";

        MySqlClient.Connect();

        if (id == -1)
        {
            var query = "SELECT * FROM memes;";
            var memeReader = MySqlClient.GetDataReader(query);

            if (memeReader == null) return;

            while (memeReader.Read())
            {
                var memeid = memeReader.GetUInt64("id");
                var title = memeReader.GetString("title");

                description += $"**{memeid}** {title}\n";
            }
        }
        
        var memeEmbed = new DiscordEmbedBuilder()
        {
            Color = DiscordColor.Gold,
            Title = "**The Meme of The Year**",
            Description = description
        };

        var msg = await commandInfo.Channel.SendMessageAsync(embed: memeEmbed);
    } 

【问题讨论】:

    标签: c# discord bots emoji vote


    【解决方案1】:

    添加反应

    假设您使用的是 Discord.Net,您需要使用 AddReactionAsync 方法对自己的消息做出反应。

    添加表情符号

    表情符号是 unicode 字符。要使用它们,请将 utf 代码(例如 "\uD83D\uDC4C")作为参数传递给 Emoji` 对象的构造函数。

    await userMsg.AddReactionAsync(new Emoji("\U0001f643"));
    

    添加表情

    Emote 是一个“自定义表情符号”,可由服务器管理员/模组设置。

    您需要传递自定义表情字符串作为参数,例如"<:thonkang:282745590985523200>"

    捕获不存在的表情的安全包装器可能看起来像这样(取自文档)。

    public async Task ReactWithEmoteAsync(SocketUserMessage userMsg, string escapedEmote)
    {
        if (Emote.TryParse(escapedEmote, out var emote))
        {
            await userMsg.AddReactionAsync(emote);
        }
    }
    

    https://docs.stillu.cc/guides/emoji/emoji.html

    计数反应

    作为第二步,您需要倾听用户事件,当他们对您的帖子做出反应时。这应该在单独的事件处理程序中完成,因为您的投票可能会持续几个小时/几天。

    这是how to implement an event handler上的一个例子

    然后您需要跟踪反应并将其与匹配的数据库条目相关联。

    【讨论】:

      猜你喜欢
      • 2021-10-12
      • 2020-06-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-02
      • 2021-09-13
      相关资源
      最近更新 更多