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

Discord.NET 1.0.2如何修改服务器中SocketMessage的内容?

解决Discord.NET 1.0.2消息内容替换并同步到服务器的问题

我来帮你搞定这个问题!先理清你之前的尝试为什么没成功,再给你一个靠谱的解决方案。

为什么之前的方法失效?

  1. 反射修改本地实例:你通过反射改SocketMessage的Content属性,只是修改了本地内存里的缓存对象,完全不会同步到Discord服务器。Discord的API根本不认可这种“偷偷改本地数据”的操作,必须通过官方提供的API方法来修改服务器上的消息。
  2. RestUserMessage修改失败:你尝试获取RestUserMessage再调用ModifyAsync,其实没必要绕这一步,大概率是因为机器人缺少权限导致失败——Discord修改消息要求机器人必须拥有Manage Messages权限,没这个权限的话API会直接拒绝请求。

可行的解决方案

以下是正确的实现步骤和代码:

1. 确保机器人拥有必要权限

先在Discord服务器的角色设置里,给你的机器人角色开启Manage Messages权限,同时要确认对应频道的权限设置没有覆盖这个权限。

2. 正确的代码实现

用户发送的消息本质是SocketUserMessage类型,它实现了IUserMessage接口,自带ModifyAsync方法可以直接调用,不用额外转换:

private async Task MsgRec(SocketMessage e)
{
    // 跳过机器人自身的消息,避免无限循环
    if (e.Author.IsBot)
        return;

    // 确认这是用户发送的可修改消息
    if (e is IUserMessage userMessage)
    {
        string originalContent = userMessage.Content;
        // 检测脏话(可以用正则匹配大小写变体,更健壮)
        if (originalContent.Contains("fuck"))
        {
            try
            {
                // 替换脏话
                string censoredContent = originalContent.Replace("fuck", "f*ck");
                // 调用API修改服务器上的消息
                await userMessage.ModifyAsync(msg => msg.Content = censoredContent);
            }
            catch (Exception ex)
            {
                // 给发送者返回更详细的错误信息,方便排查
                await e.Author.SendMessageAsync($"修改消息失败:{ex.Message}\n{ex.StackTrace}");
            }
        }
    }
}

3. 优化建议(可选)

如果要匹配更多脏话变体(比如Fuck、FUCK、fUcK),可以用正则表达式来检测和替换:

using System.Text.RegularExpressions;

// ...

if (Regex.IsMatch(originalContent, @"\bfuck\b", RegexOptions.IgnoreCase))
{
    string censoredContent = Regex.Replace(originalContent, @"\bfuck\b", "f*ck", RegexOptions.IgnoreCase);
    await userMessage.ModifyAsync(msg => msg.Content = censoredContent);
}

关键注意点

  • 必须保证机器人有Manage Messages权限,否则ModifyAsync会抛出权限不足的异常。
  • 跳过机器人消息是必要的,不然如果你的机器人发送了包含关键词的消息,会触发自己修改自己的消息,导致循环。
  • 所有服务器上的操作都必须通过Discord.NET提供的异步API方法完成,不要试图修改本地缓存对象。

内容的提问来源于stack exchange,提问作者Zoltán Nagy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 06:58:55