You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让C#开发的Discord机器人响应提及?求排查修复方案

我来帮你排查并修复这个问题~你的机器人目前只处理了c! 开头的指令逻辑,完全没加入「被提及」的检测分支,这就是无法触发GIF回复的核心原因。咱们一步步来解决:

问题排查点

  1. 缺失提及检测逻辑:现有代码只判断了消息是否以c! 开头,没有检查消息中是否@了机器人,自然不会触发回复。
  2. 潜在循环风险:如果没过滤机器人自身的消息,可能会导致机器人回复自己的提及,陷入无限循环。
  3. 权限验证:要确保机器人在目标频道有发送消息、嵌入链接的权限,否则GIF会发送失败。

修复后的完整代码示例

// 假设你的类中有DiscordSocketClient实例,命名为_client
private async Task HandleCommandAsync(SocketMessage arg)
{
    var message = arg as SocketUserMessage;
    // 过滤无效消息和机器人自身消息,避免循环
    if (message is null || message.Author.IsBot) return;

    // 检测是否被当前机器人提及
    bool isBotMentioned = message.MentionedUsers.Contains(_client.CurrentUser);
    if (isBotMentioned)
    {
        // 替换成你想要发送的GIF链接
        string targetGifUrl = "https://your-gif-url-here.gif";
        await message.Channel.SendMessageAsync(targetGifUrl);
        // 如果你希望被提及后还能继续处理c!指令,就删掉下面的return
        return;
    }

    // 保留你原来的c!指令处理逻辑
    int argPos = 0;
    if (message.HasStringPrefix("c! ", ref argPos))
    {
        // 你的指令解析、执行代码
        // ...
    }
}

关键细节说明

  • 提及检测:通过message.MentionedUsers.Contains(_client.CurrentUser)精准判断消息是否@了当前机器人,确保不会误触发其他机器人的提及。
  • 循环防护:message.Author.IsBot判断能过滤掉机器人自己发送的消息,避免出现机器人回复自己的死循环。
  • GIF发送:直接传入GIF的公开URL即可,Discord会自动解析并展示动图,无需额外处理嵌入格式。

如果还是无法触发,建议检查:

  • 机器人在对应频道的「发送消息」「嵌入链接」权限是否开启
  • 消息中是否是直接@机器人账号,而不是仅用昵称提及

内容的提问来源于stack exchange,提问作者cory

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 08:52:18