c# - Discord.NET 基于审核日志的邀请跟踪器未发送所需消息
问题描述
我向那些看到我上一篇文章的人道歉。我发现它太模糊了,我只是不在正确的顶部空间,但希望这篇文章能提供有关该问题的足够信息。我一直在尝试调试这个基于审计日志的邀请跟踪器一段荒谬的时间并且已经失去理智。这背后的想法是,使用onmemberjoin
事件,机器人可以使用审核日志来获取用户用于加入行会的邀请,并将包含有关该信息的日志发送到指定的日志通道。我可以在调试中看到正在收集审计日志,但没有发送消息。从我尝试调试获得的信息来看,它似乎在foreach
和之间停止了if
以某种方式声明它下面的行,我不知道这怎么可能。如果有人可以帮助我找到问题,我将非常感激。
private async Task OnMemberJoin(SocketGuildUser arg)
{
var g = arg.Guild;
var channelId = await _servers.GetLogsAsync(g.Id);
var chnlIdInt = Convert.ToInt64(channelId);
if (chnlIdInt == 0) return;
if (!g.CurrentUser.GuildPermissions.ViewAuditLog)
{
await _serverHelper.SendLogAsync(g, "Bot Does Not Have Sufficient Permissions",
"A event logger has failed its task because I do\nnot have `View Audit Log` permissions. To solve this error please\ngive me that permission");
return;
}
var auditlogs = await g.GetAuditLogsAsync(1, null, null, null, ActionType.InviteUpdated)
.FlattenAsync();
foreach (var audit in auditlogs)
if (audit.User is IUser && audit.Data is InviteUpdateAuditLogData d1)
{
var inv3 = _client.Guilds
.OfType<InviteUpdateAuditLogData>()
.FirstOrDefault(x => x.After.Code.ToString().IndexOf(
d1.After.Code,
StringComparison.OrdinalIgnoreCase) !=
-1);
if (inv3 == null) return;
if (inv3 is IInvite iInvite)
{
var uses = d1.Before.MaxUses.Value - d1.After.MaxUses.Value;
await _serverHelper.SendLogAsync(g, "Invite Used",
$"An invite has been used.\nInvite: {iInvite.Url}\nTotal invite uses: `{uses.ToString()}`\nInvite created by: {iInvite.Inviter.Mention}");
return;
}
}
解决方案
推荐阅读
- html - 如何在 ASP.Net Core Web 应用程序的 ReactJS 应用程序中添加 DataTable
- snowflake-cloud-data-platform - 有没有办法在 SnowSQL 文件中添加不会导致错误的注释?
- python - 使用 numpy 布尔索引操作 2D 矩阵需要很长时间
- kde - 如何仅更改标题栏颜色 KDE Plasma
- r - 在 R 中加载多个 .csv 文件,对其进行编辑并另存为由字符字符串列表命名的新 .csv 文件
- php - 将时间戳转换为日期?
- mysql - 当一列可以包含空值时,在两列上创建唯一索引的最佳方法
- javascript - 将浏览器实例保存在 process.env 中
- r - geom_line 随着 ggplotly 消失
- r - 如何将另一个 DF 中的数据添加到另一个数据帧(r)