Discord.NET C # Изменение содержимого SocketMessage - PullRequest
0 голосов
/ 10 мая 2018

Поэтому я слушаю событие, когда кто-либо на сервере отправляет сообщение на любой текстовый канал с моим ботом.Я хочу обнаружить ненормативную лексику типа «ебать» и изменить его на «f * ck».Я не смог заменить свое сообщение обычным образом только отражением, но это не помогло, поскольку он заменил его только в экземпляре SocketMessage, но не изменило сообщение на сервере.

Есть ли какое-нибудь решение для этого?

Framework: 4.6 Discord.NET: 1.0.2

Код:

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);
    }
}

Обновление Я также пробовал это безлюбой успех:

var rMessage = (RestUserMessage) await e.Channel.GetMessageAsync(e.Id);
await rMessage.ModifyAsync(msg => msg.Content = e.Content.Replace("fuck", "f*ck"));

Ответы [ 2 ]

0 голосов
/ 16 декабря 2018

Discord, как и другие программы чата, не позволяет изменять сообщения пользователей.Вы не можете подвергать цензуре то, что написал пользователь, вы можете только удалить все сообщение.

0 голосов
/ 11 мая 2018

может быть, вы могли бы попробовать что-то вроде этого

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);
    }
}
...