首页 > 解决方案 > 如何让我的 Discord C# 响应提及?

问题描述

我正在开发一个 C# discord 机器人,我已经成功地让机器人响应以“c!”开头的短语并使用正确的命令进行响应,但是我希望机器人在机器人回复时使用 GIF提到。如果有人可以帮助解释为什么这不起作用以及如何解决它会很好。这是我现在的代码:

    private async Task HandleCommandAsync(SocketMessage arg)
    {
        var message = arg as SocketUserMessage;

        if (message is null || message.Author.IsBot) return;

        int argPos = 0;

        if (message.HasStringPrefix("", ref argPos))
        {
            var context = new SocketCommandContext(_client, message);

            var result = await _commands.ExecuteAsync(context, argPos, _services);

            if (!result.IsSuccess)
                Console.WriteLine(result.ErrorReason);
        }

        if (message.HasMentionPrefix(_client.CurrentUser, ref argPos))
        {
            var embed = new EmbedBuilder();
            embed.WithImageUrl("https://cdn.discordapp.com/attachments/138522037181349888/438774275546152960/Ping_Discordapp_GIF-downsized_large.gif");

            await ReplyAsync("", false, embed.Build());
        }

标签: c#discord.net

解决方案


我同意 Solarcloud 关于分离模块的说法,但这就是您必须将代码修改为:

private async Task HandleCommandAsync(SocketMessage arg)
{
    var message = arg as SocketUserMessage;

    if (message is null || message.Author.IsBot) return;

    int argPos = 0;

    if (message.HasStringPrefix("", ref argPos))
    {
        var context = new SocketCommandContext(_client, message);

        var result = await _commands.ExecuteAsync(context, argPos, _services);

        if (!result.IsSuccess)
            Console.WriteLine(result.ErrorReason);
    }

    if (message.content.contains(_client.CurrentUser.Mention.Replace("!", "")))
    {
        var embed = new EmbedBuilder();
        embed.WithImageUrl("https://cdn.discordapp.com/attachments/138522037181349888/438774275546152960/Ping_Discordapp_GIF-downsized_large.gif");

        await ReplyAsync("", false, embed.Build());
    }

替换只是以防您的机器人 ID 返回@<!123456789>,摆脱它可以正常工作。


推荐阅读