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); }
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); }
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, }
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); }
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} покинул нас"); } }
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); }
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); }
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); }
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); }
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); }
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"); } }
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); }
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); }
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); }
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); }
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); }
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); }
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); }