c# - 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());
}
解决方案
正如其他人指出的那样,您必须等待您的任务。但是,您缺少一项关键配置 - 启用消息缓存。使用 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 事件。
推荐阅读
- android-studio - 检测长按 RecyclerView 适配器的项目
- c++ - std::scoped_lock - 互斥体向量?
- c# - 只允许 {'delete' , 'backspace' , 一个 '.' , '-' , numbers '0 to 9'} 在文本框 C#/winforms
- python - 如何在python中的for循环中使用线程
- javascript - 如何将数组字符串转换为数组?
- machine-learning - 你能在Detectron2中同时运行人体姿态估计和物体检测吗
- android - 为什么在我的 android 项目中生成 3 个构建文件夹?
- python - 如何在列表中添加倍数?
- ruby-on-rails - 在 netlify 上托管
- reactjs - 如何将组件传递给助手?