首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Discord.NET C#更改SocketMessage的内容

Discord.NET C#更改SocketMessage的内容
EN

Stack Overflow用户
提问于 2018-05-10 20:36:55
回答 2查看 2K关注 0票数 0

因此,每当服务器上的任何人使用我的机器人向任何文本通道发送消息时,我都会监听事件。我想检测出像“操”这样的脏话,然后把它改成“他妈的”。我无法正常地仅用反射替换我的消息,但它没有帮助,因为它只在SocketMessage实例中替换了它,但它不会更改服务器上的消息。

有什么解决方案吗?

框架: 4.6 Discord.NET: 1.0.2

代码:

代码语言:javascript
复制
private async Task MsgRec(SocketMessage e)
{
    try
    {
        if (e.Content.Contains("fuck"))
        {
            foreach(PropertyInfo info in typeof(SocketMessage).GetProperties())
            {
                if (info.Name == "Content")
                {
                    info.SetValue(e,e.Content.Replace("fuck", "f*ck"));
                }
            }
        }
    }
    catch (Exception ex)
    {
        await e.Author.SendMessageAsync(ex.StackTrace);
    }
}

更新:我也试过了,但没有成功:

代码语言:javascript
复制
var rMessage = (RestUserMessage) await e.Channel.GetMessageAsync(e.Id);
await rMessage.ModifyAsync(msg => msg.Content = e.Content.Replace("fuck", "f*ck"));
EN

回答 2

Stack Overflow用户

发布于 2018-12-16 23:23:23

Discord和其他聊天程序一样,不允许您更改用户的消息。您不能审查用户写的内容,您只能删除整个邮件。

票数 2
EN

Stack Overflow用户

发布于 2018-05-11 20:53:31

也许你可以试试这样的东西

代码语言:javascript
复制
private async Task MsgRec(SocketMessage e)
{
    var msg = e as SocketUserMessage;
    if (msg == null) return;
    if (msg.Content.Contains("fuck"))
    {
        var newMsg = msg.Content.Replace("fuck", "f*ck");
        await Context.Channel.SendMessageAsync(newMsg);
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50273161

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档