Обработчик событий Discord Bot MessageDeleted работает некорректно

Я хочу создать бота раздора, который регистрирует удаленное сообщение.

Поэтому я сделал обработчик событий MessageDeleted, но он работает неправильно.

Я не могу найти, что не так с моим кодом.

Результат

private async Task Client_MessageDeleted(Cacheable<IMessage, ulong> arg1, ISocketMessageChannel channel)
{
    Task<IMessage> msg = arg1.GetOrDownloadAsync();
    EmbedBuilder embed = new EmbedBuilder();

    embed.WithColor(40, 200, 150);
    embed.AddField("deleted message", msg.ToString());

    await channel.SendMessageAsync("", false, embed.Build());
}

person Busted    schedule 11.01.2019    source источник


Ответы (3)


Как указывали другие, вы должны дождаться своей задачи. Однако вы упускаете одну важную настройку — включение кеша сообщений. С Discord.Net и событием MessageDeleted, чтобы получить сообщение, вы должны включить кэширование, поскольку вы не можете получить удаленное сообщение с сервера Discord. Чтобы включить кеширование, установите MessageCacheSize в объекте DiscordSocketConfig и передайте его в DiscordSocketClient.

Настройка кэша

var config = new DiscordSocketConfig {MessageCacheSize = 100};
var client = new DiscordSocketClient(config);

Получение удаленного сообщения из кеша

private Task OnMessageDeleted(Cacheable<IMessage, ulong> msg, ISocketMessageChannel channel)
{
    Console.WriteLine(msg.HasValue ? 
        msg.Value.Content : 
        "A message was deleted, but its content could not be retrieved from cache.");
    return Task.CompletedTask;
}

Это событие подробно описано в документации Discord.Net, см. MessageDeleted событие.

person Still    schedule 11.01.2019

Раньше я не разрабатывал Discord Bot, так что простите меня за невежество, но я предполагаю эту строку:

Task<IMessage> msg = arg1.GetOrDownloadAsync();

На самом деле должно быть:

IMessage msg = await arg1.GetOrDownloadAsync();
person rshepp    schedule 11.01.2019

заменять

embed.AddField("deleted message", msg.ToString());

с

embed.AddField("deleted message", msg.Content);

через https://discord.foxbot.me/docs/api/Discord.IMessage.html

person user326608    schedule 11.01.2019
comment
Я заменил msg.ToString на msg.Content. Но на этот раз это не работает. - person Busted; 11.01.2019