c# - Discord Bot MessageDeleted 事件处理程序无法正常工作

标签 c# discord.net

我想制作一个不和谐机器人来记录已删除的消息。

所以我创建了 MessageDeleted 事件处理程序,但它无法正常工作。

我找不到我的代码有什么问题。

Result

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

最佳答案

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

关于c# - Discord Bot MessageDeleted 事件处理程序无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54140724/

相关文章:

c# - 在 Discord.net 中连接到语音 channel 并发送音频

c# - 为什么 C# 上的 GetChannel 返回空值? (不和谐机器人)

c# - Discord.Net 设置机器人的昵称

c# - 尝试从 IGuild 获取 IGuildUser 时如何修复 "Nullpointer Exception"

c# - Itemscontrol 中的 Itemscontrol 并将它们与自定义数据绑定(bind)

c# - 如何将接口(interface)方法的返回类型定义为另一个接口(interface)?

c# - 在异步委托(delegate)中捕获异常

c# - MVC 4 - Razor - 将变量传递到 href url

c# - 从 C# 获取 Powershell 错误

c# - 如何复制并说出用户的输入?