首页 > 解决方案 > 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());
}

标签: c#discord.net

解决方案


正如其他人指出的那样,您必须等待您的任务。但是,您缺少一项关键配置 - 启用消息缓存。使用 Discord.Net 和 MessageDeleted 事件,为了检索消息,您必须启用缓存,因为您无法从 Discord 服务器检索已删除的消息。要启用缓存,请MessageCacheSizeDiscordSocketConfig对象中设置 并将其传递给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 事件


推荐阅读