Beispiel #1
0
        private async Task GuildRoleUpdated(DiscordClient sender, GuildRoleUpdateEventArgs e)
        {
            var roleUpdEntry = await GetNewEntryAsync() as DiscordAuditLogRoleUpdateEntry;

            if (roleUpdEntry == null)
            {
                return;
            }
            _entryBuilder = EmbedBuilderExtensions.CreateForAudit(roleUpdEntry,
                                                                  "Обновление роли",
                                                                  $"Обновлена роль {roleUpdEntry.Target.Name}");
            _entryBuilder.AddNamePropertyChange(roleUpdEntry.NameChange);

            _entryBuilder.AddPropertyChange("Возможность упоминания", roleUpdEntry.MentionableChange);
            _entryBuilder.AddPropertyChange("Уникальность", roleUpdEntry.HoistChange);
            _entryBuilder.AddPropertyChange("Позиция", roleUpdEntry.PositionChange);

            if (roleUpdEntry.ColorChange != null)
            {
                _entryBuilder.AddField("Измёнён цвет", roleUpdEntry.Target.Mention, true);
            }

            if (roleUpdEntry.PermissionChange != null)
            {
                _entryBuilder.AddField("Обновление привилегий", roleUpdEntry.PermissionChange.ToRusString());
            }

            await SendMessageToAuditAsync(embed : _entryBuilder);
        }
Beispiel #2
0
        private async Task GuildRoleDeleted(DiscordClient sender, GuildRoleDeleteEventArgs e)
        {
            var roleDelEntry = await GetNewEntryAsync() as DiscordAuditLogRoleUpdateEntry;

            _entryBuilder = EmbedBuilderExtensions.CreateForAudit(roleDelEntry, "Удаление роли", $"Удалена роль {roleDelEntry.Target.Mention}");
            await SendMessageToAuditAsync(embed : _entryBuilder);
        }
Beispiel #3
0
        private async Task ChannelUpdated(DiscordClient sender, ChannelUpdateEventArgs e)
        {
            _newEntry = await GetNewEntryAsync();

            _entryBuilder = new DiscordEmbedBuilder();

            string commonType  = e.ChannelAfter.Type.ToRusCommon();
            string channelName = e.ChannelAfter.Name;


            var  entryType         = _newEntry?.ActionType;
            bool checkForSameEntry = false;

            switch (entryType)
            {
            case (AuditLogActionType.ChannelUpdate):
            {
                checkForSameEntry = true;        //Important because in second case we have defense by ow == null, and if any small updates happen don't wanna send same channel update entries
                var cuEntry = _newEntry as DiscordAuditLogChannelEntry;
                _entryBuilder = EmbedBuilderExtensions.CreateForAudit(cuEntry,
                                                                      $"Обновление параметров {commonType}",
                                                                      $"Обновлены параметры у {commonType} {channelName}");

                _entryBuilder.AddNamePropertyChange(cuEntry.NameChange);

                _entryBuilder.AddPropertyChange("Битрейт", cuEntry.BitrateChange);
                _entryBuilder.AddPropertyChange("NSFW", cuEntry.NsfwChange);
                _entryBuilder.AddPropertyChange("Слоумод", cuEntry.PerUserRateLimitChange);
                _entryBuilder.AddPropertyChange("Тема", cuEntry.TopicChange);
                break;
            }

            default:     // case if overwrite entry
            {
                var owsBefore = e.ChannelBefore.PermissionOverwrites;
                var owsAfter  = e.ChannelAfter.PermissionOverwrites;
                OverwriteUpdateInformation owUpdInfo = new OverwriteUpdateInformation(owsBefore, owsAfter);
                if (_newEntry != null)
                {
                    _entryBuilder = EmbedBuilderExtensions.CreateForAudit(_newEntry);
                    _entryBuilder.AddField("Изменённые оверврайты", string.Join("\n", owUpdInfo.Changes));
                }

                var ow = owUpdInfo.GetAffectedOverwrite();
                if (ow == null)
                {
                    return;                     //If we don't have overwriteupdates at all
                }
                _entryBuilder.SetTitle($"{owUpdInfo.Action} оверврайтов");

                string subj = ow.Type == OverwriteType.Role ?
                              "роли " + ow.GetRoleAsync().Result.Name :
                              "пользователя " + ow.GetMemberAsync().Result.Username;

                _entryBuilder.SetDescription($"{owUpdInfo.Action} оверврайтов для {subj} у {e.ChannelAfter.Type.ToRusCommon()} {channelName} ");
            }
            break;
            }
            await SendMessageToAuditAsync(checkForSameEntry, embed : _entryBuilder); //Don't set true on defense from same entry,
        }
Beispiel #4
0
        private async Task GuildBanRemoved(DiscordClient sender, GuildBanRemoveEventArgs e)
        {
            var unbanEntry = await GetNewEntryAsync() as DiscordAuditLogBanEntry;

            _entryBuilder = EmbedBuilderExtensions.CreateForAudit(unbanEntry, "Разбан", $"Пользователь {unbanEntry.Target.Username} был разбанен");
            await SendMessageToAuditAsync(embed : _entryBuilder);
        }
Beispiel #5
0
        private async Task GuildMemberRemoved(DiscordClient c, GuildMemberRemoveEventArgs e)
        {
            var kickEntry = await GetNewEntryAsync() as DiscordAuditLogKickEntry;

            if (kickEntry != null)
            {
                _entryBuilder = EmbedBuilderExtensions.CreateForAudit(kickEntry, "Кик", $"Пользователь {kickEntry.Target.Username} был кикнут");
                var reason = kickEntry.Reason.IsRelevant() ? kickEntry.Reason : "Не указана";
                _entryBuilder.AddField("Причина", reason);
                await SendMessageToAuditAsync(embed : _entryBuilder);
            }
            else
            {
                var banEntry = await GetNewEntryAsync() as DiscordAuditLogBanEntry;

                if (banEntry != null)
                {
                    return;
                }
                _entryBuilder = new DiscordEmbedBuilder();
                _entryBuilder.SetAuthor(e.Member);
                _entryBuilder.SetTitle("Пользователь покинул нас");
                _entryBuilder.SetDescription($"{e.Member.Mention} joined {e.Member.JoinedAt.LocalDateTime}");
                await SendMessageToAuditAsync(content : $"Пользователь {e.Member.Mention} покинул нас");
            }
        }
Beispiel #6
0
        private async Task GuildRoleCreated(DiscordClient sender, GuildRoleCreateEventArgs e)
        {
            var rcEntry = await GetNewEntryAsync() as DiscordAuditLogRoleUpdateEntry;

            _entryBuilder = EmbedBuilderExtensions.CreateForAudit(rcEntry, "Создание роли", $"Создана роль {rcEntry.Target.Name}");

            await SendMessageToAuditAsync(embed : _entryBuilder);
        }
Beispiel #7
0
        private async Task ChannelCreated(DiscordClient sender, ChannelCreateEventArgs e)
        {
            var ccEntry = await GetNewEntryAsync() as DiscordAuditLogChannelEntry;

            string commonType = ccEntry.Target.Type.ToRusCommon();
            string type       = ccEntry.Target.Type == ChannelType.Category ? "" : $", тип канала: {ccEntry.Target.Type.ToRusString()}";

            _entryBuilder = EmbedBuilderExtensions.CreateForAudit(ccEntry, $"Создание {commonType}");
            _entryBuilder.SetDescription($"Создание {commonType} {ccEntry.NameChange.After} {type}");
            await SendMessageToAuditAsync(embed : _entryBuilder);
        }
Beispiel #8
0
        private async Task InviteDeleted(DiscordClient sender, InviteDeleteEventArgs e)
        {
            var invDelEntry = await GetNewEntryAsync() as DiscordAuditLogInviteEntry;

            _entryBuilder = EmbedBuilderExtensions.CreateForAudit(invDelEntry, "Удаление приглашения");
            var invite = e.Invite;

            _entryBuilder.SetDescription("Удаление приглашения " + invite.Code);
            _entryBuilder.AddField("Количество использований", invite.Uses.ToString());

            await SendMessageToAuditAsync(embed : _entryBuilder);
        }
Beispiel #9
0
        private async Task GuildBanAdded(DiscordClient sender, GuildBanAddEventArgs e)
        {
            var banEntry = await GetNewEntryAsync() as DiscordAuditLogBanEntry;

            _entryBuilder = EmbedBuilderExtensions.CreateForAudit(banEntry, "Бан", $"Пользователь {banEntry.Target.DisplayName} был забанен");

            var reason = banEntry.Reason.IsRelevant() ? banEntry.Reason : "Не указана";

            _entryBuilder.AddField("Причина", reason);

            await SendMessageToAuditAsync(embed : _entryBuilder);
        }
Beispiel #10
0
        private async Task IntegrationsUpdated(DiscordClient sender, GuildIntegrationsUpdateEventArgs e)
        {
            var intsEntry = await GetNewEntryAsync() as DiscordAuditLogIntegrationEntry;

            if (intsEntry == null)
            {
                return;
            }
            _entryBuilder = EmbedBuilderExtensions.CreateForAudit(intsEntry, "Обновление интеграций");
            _entryBuilder.SetDescription("Для более подробной информации обратитесь в журнал аудита");
            await SendMessageToAuditAsync(true, embed : _entryBuilder);
        }
Beispiel #11
0
        private async Task ChannelPinsUpdated(DiscordClient sender, ChannelPinsUpdateEventArgs e)
        {
            var pinEntry = await GetNewEntryAsync() as DiscordAuditLogMessagePinEntry;

            _entryBuilder = EmbedBuilderExtensions.CreateForAudit(pinEntry);
            var action = pinEntry.ActionType == AuditLogActionType.MessagePin ? "Закрепление" : "Открепление";

            _entryBuilder.SetTitle(action + " сообщения");
            _entryBuilder.SetDescription($"{action} сообщения в канале {pinEntry.Channel.Name}");
            var msg = await pinEntry.Channel.GetMessageAsync(pinEntry.Message.Id);

            _entryBuilder.AddMesage(msg);
            _entryBuilder.AddField("Прямая ссылка", msg.JumpLink.AbsoluteUri);

            await SendMessageToAuditAsync(embed : _entryBuilder);
        }
        public async Task Trivia()
        {
            var map = Anime.authorMap;

            String val = default(String);

            map.TryGetValue(Context.Message.Author.Username, out val);

            if (val != default(String))
            {
                Console.WriteLine(val);

                Anime anime = null;

                if (val.ToLower().Contains("onepiece"))
                {
                    anime = new AnimeInfo.OnePiece();
                }
                else if (val.ToLower().Contains("boku"))
                {
                    anime = new AnimeInfo.MyHero();
                }
                else if (val.ToLower().Contains("hunter"))
                {
                    anime = new AnimeInfo.HunterHunter();
                }

                String res = await anime.getTriviaInfo(val);

                res = (res != String.Empty) ? res : "could not find trivia info";

                var triviaEmbed = new EmbedBuilder();
                EmbedBuilderExtensions.WithColor(triviaEmbed.WithTitle("Trivia"), 0, 100, 100);
                triviaEmbed.WithDescription(res);

                await Context.Channel.SendMessageAsync("", false, triviaEmbed);

                return;
            }
            else
            {
                Console.WriteLine("nonexistant");
                await ReplyAsync("Please request info on a character");
            }
        }
Beispiel #13
0
        private async Task VoiceStateUpdated(DiscordClient sender, VoiceStateUpdateEventArgs e)
        {
            _newEntry = await GetNewEntryAsync();

            if (_newEntry.ActionType == AuditLogActionType.MemberUpdate)
            {
                var muEntry = _newEntry as DiscordAuditLogMemberUpdateEntry;
                _entryBuilder = EmbedBuilderExtensions.CreateForAudit(_newEntry);
                _entryBuilder.SetTitle("Обновление пользователя");
                _entryBuilder.AddPropertyChange("Мут", muEntry.MuteChange);
                _entryBuilder.AddPropertyChange("Заглушение", muEntry.DeafenChange);
            }
            else
            {
                return;
            }
            await SendMessageToAuditAsync(true, embed : _entryBuilder);
        }
Beispiel #14
0
        private async Task ChannelDeleted(DiscordClient sender, ChannelDeleteEventArgs e)
        {
            _newEntry = await GetNewEntryAsync();

            var cdEntry = _newEntry as DiscordAuditLogChannelEntry;

            if (cdEntry == null)
            {
                return;                  // Defense from cases when we delete category with channels under it
            }
            var cType = cdEntry.Target.Type;

            _entryBuilder = EmbedBuilderExtensions.CreateForAudit(cdEntry, "Удаление " + cType.ToRusCommon());
            var shortDesc = $"Удаление {cType.ToRusCommon()} {cdEntry.Target.Name}";
            var desc      = cType == ChannelType.Category ? shortDesc : shortDesc + $", тип канала: {cType.ToRusString()}";

            _entryBuilder.SetDescription(desc);
            await SendMessageToAuditAsync(true, embed : _entryBuilder);
        }
Beispiel #15
0
        private async Task InviteCreated(DiscordClient sender, InviteCreateEventArgs e)
        {
            var invCreateEntry = await GetNewEntryAsync() as DiscordAuditLogInviteEntry;

            _entryBuilder = EmbedBuilderExtensions.CreateForAudit(invCreateEntry, "Создание приглашения");
            var invite = e.Invite;

            _entryBuilder.SetDescription("Создание приглашения " + invite.Code);
            if (invite.Channel != null)
            {
                _entryBuilder.AddField("Предназначен для: ", invite.Channel.Name);
            }

            _entryBuilder.AddField("Время истечения", (invite.MaxAge / 3600).ToString() + 'ч');

            _entryBuilder.AddField("Максимальное количество использований", invite.MaxUses.ToString());

            _entryBuilder.AddField("Членство только на время приглашения", invite.IsTemporary.ToString());

            await SendMessageToAuditAsync(embed : _entryBuilder);
        }
Beispiel #16
0
        private async Task MessageDeleted(DiscordClient sender, MessageDeleteEventArgs e)
        {
            var mdEntry = await GetNewEntryAsync() as DiscordAuditLogMessageEntry;

            var  msg          = e.Message;
            bool isSelfDelete = mdEntry == null;

            if (msg?.Author == null) //Происходит при перезапуске бота или если сообщение устарело //msg !=null is not working properly
            {
                string user = isSelfDelete ? "" : ", Удаливший: " + mdEntry.UserResponsible.Mention;
                await SendMessageToAuditAsync(content : $"Некэшированое сообщение удалено в канале " + e.Channel.Name + user);

                return;
            }
            DiscordEmbedBuilder entryBuilder = new DiscordEmbedBuilder();

            if (isSelfDelete)
            {
                if (msg.Author.IsBot)
                {
                    return;
                }
                entryBuilder.SetAuthor(msg.Author);
                entryBuilder.WithFooter($"Время действия {DateTime.Now.ToLongDateString()}");
            }
            else
            {
                if (mdEntry.UserResponsible.IsBot)
                {
                    return;
                }
                entryBuilder = EmbedBuilderExtensions.CreateForAudit(mdEntry);
            }
            entryBuilder.SetTitle("Удаление сообщения");
            entryBuilder.SetDescription("Сообщение удалено в канале " + e.Channel.Name);
            entryBuilder.AddMesage(msg);
            await SendMessageToAuditAsync(embed : entryBuilder);
        }
Beispiel #17
0
        private async Task WebhooksUpdated(DiscordClient sender, WebhooksUpdateEventArgs e)
        {
            var webhookEntry = await GetNewEntryAsync() as DiscordAuditLogWebhookEntry;

            _entryBuilder = EmbedBuilderExtensions.CreateForAudit(webhookEntry);
            string action;

            switch (webhookEntry.ActionType)
            {
            case (AuditLogActionType.WebhookCreate):
            {
                action = "Создание";
            }
            break;

            case (AuditLogActionType.WebhookUpdate):
            {
                action = "Обновление";
                _entryBuilder.AddNamePropertyChange(webhookEntry.NameChange);
                _entryBuilder.AddChannelPropertyChange("Канал", webhookEntry.ChannelChange);
                _entryBuilder.AddPropertyChange("Аватар", webhookEntry.AvatarHashChange);
            }
            break;

            case (AuditLogActionType.WebhookDelete):
            {
                action = "Удаление";
            }
            break;

            default: return;
            }
            _entryBuilder.SetTitle(action + " вебхука");
            _entryBuilder.SetDescription($"{action} вебхука {webhookEntry.Target.Name}");

            await SendMessageToAuditAsync(embed : _entryBuilder);
        }
Beispiel #18
0
        private async Task GuildMemberUpdated(DiscordClient sender, GuildMemberUpdateEventArgs e)
        {
            var muEntry = await GetNewEntryAsync() as DiscordAuditLogMemberUpdateEntry;

            if (muEntry == null)
            {
                return;
            }
            _entryBuilder = EmbedBuilderExtensions.CreateForAudit(muEntry, $"Изменение пользователя {muEntry.Target.Username}");
            if (muEntry.UserResponsible.IsBot)
            {
                return;
            }
            if (HasBlacklistedWord(muEntry.NicknameChange?.After))
            {
                await muEntry.Target.ModifyAsync((x) => x.Nickname = muEntry.Target.Username);

                return;
            }
            _entryBuilder.AddNamePropertyChange(muEntry.NicknameChange);
            _entryBuilder.AddRoles("Добавленные", muEntry.AddedRoles);
            _entryBuilder.AddRoles("Удалённые", muEntry.RemovedRoles);
            await SendMessageToAuditAsync(true, embed : _entryBuilder);
        }
Beispiel #19
0
        private async Task GuildUpdated(DiscordClient sender, GuildUpdateEventArgs e)
        {
            var guEntry = await GetNewEntryAsync() as DiscordAuditLogGuildEntry;

            if (guEntry == null)
            {
                return;                  //Defense from something(xD)
            }
            _entryBuilder = EmbedBuilderExtensions.CreateForAudit(guEntry, "Обновление параметров сервера");

            _entryBuilder.AddNamePropertyChange(guEntry.NameChange);
            _entryBuilder.AddPropertyChange("Регион", guEntry.RegionChange);
            _entryBuilder.AddPropertyChange("Уровень фильтрации откровенного контента", guEntry.ExplicitContentFilterChange);
            _entryBuilder.AddPropertyChange("Требования к верификации", guEntry.VerificationLevelChange);
            _entryBuilder.AddPropertyChange("Аватар", guEntry.IconChange);
            _entryBuilder.AddPropertyChange("Стандартные настройки уведомлений", guEntry.NotificationSettingsChange);
            _entryBuilder.AddPropertyChange("Двухфакторная аутентификация", guEntry.MfaLevelChange);
            _entryBuilder.AddPropertyChange("Изображение при инвайте", guEntry.SplashChange);

            _entryBuilder.AddChannelPropertyChange("Афк", guEntry.AfkChannelChange);
            _entryBuilder.AddChannelPropertyChange("Системный", guEntry.SystemChannelChange);

            await SendMessageToAuditAsync(embed : _entryBuilder);
        }