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

标签: c#discord.net

解决方案


推荐阅读