public async Task LogMessageDeletedAsync(Cacheable <IMessage, ulong> message, ISocketMessageChannel channel, SocketGuild guild) { var deletedMessage = message.HasValue ? message.Value : MessageCache.TryRemove(message.Id); var entity = new AuditLogItem() { Type = AuditLogType.MessageDeleted, CreatedAt = DateTime.Now, GuildIdSnowflake = guild.Id, }; if (deletedMessage == null) { entity.SetData(MessageDeletedAuditData.Create(channel)); } else { await ProcessMessageDeletedWithCacheAsync(entity, channel, deletedMessage, guild); } if (MessageCache.Exists(message.Id)) { MessageCache.TryRemove(message.Id); } await MessageCache.AppendAroundAsync(channel, message.Id, 100); await GrillBotRepository.AddAsync(entity); await GrillBotRepository.CommitAsync(); }
public async Task LogMessageEditedAsync(Cacheable <IMessage, ulong> before, SocketMessage after, ISocketMessageChannel channel, SocketGuild guild) { var oldMessage = before.HasValue ? before.Value : MessageCache.Get(before.Id); if (!IsMessageEdited(oldMessage, after)) { return; } var userId = await UserSearchService.GetUserIDFromDiscordUserAsync(guild, after.Author); var entity = new AuditLogItem() { Type = AuditLogType.MessageEdited, CreatedAt = DateTime.Now, GuildIdSnowflake = guild.Id, UserId = userId }; entity.SetData(MessageEditedAuditData.Create(channel, oldMessage, after)); await GrillBotRepository.AddAsync(entity); await GrillBotRepository.CommitAsync(); MessageCache.Update(after); }
public async Task AddReplyAsync(SocketGuild guild, string mustContains, string reply, string compareType, bool disabled, bool caseSensitive, string channel) { if (BotState.AutoReplyItems.Any(o => o.MustContains == mustContains)) { throw new ArgumentException($"Automatická odpověď **{mustContains}** již existuje."); } var item = new AutoReplyItem() { MustContains = mustContains, IsDisabled = disabled, ReplyMessage = reply, CaseSensitive = caseSensitive, GuildIDSnowflake = guild.Id, ChannelIDSnowflake = channel == "*" ? (ulong?)null : Convert.ToUInt64(channel) }; item.SetCompareType(compareType); await GrillBotRepository.AddAsync(item); await GrillBotRepository.CommitAsync(); BotState.AutoReplyItems.Add(item); }
public async Task LogUserLeftAsync(SocketGuildUser user) { if (user == null) { return; } var ban = await user.Guild.FindBanAsync(user); RestAuditLogEntry dcAuditLogItem; if (ban != null) { dcAuditLogItem = (await user.Guild.GetAuditLogDataAsync(actionType: ActionType.Ban))? .FirstOrDefault(o => (o.Data as BanAuditLogData)?.Target.Id == user.Id); } else { dcAuditLogItem = (await user.Guild.GetAuditLogDataAsync(actionType: ActionType.Kick))? .FirstOrDefault(o => (o.Data as KickAuditLogData)?.Target.Id == user.Id); } long?executor = null; if (dcAuditLogItem != null) { executor = await UserSearchService.GetUserIDFromDiscordUserAsync(user.Guild, dcAuditLogItem.User); } var entity = new AuditLogItem() { Type = AuditLogType.UserLeft, CreatedAt = DateTime.Now, GuildIdSnowflake = user.Guild.Id, UserId = executor }; entity.SetData(UserLeftAuditData.Create(user.Guild, user, ban != null, ban?.Reason)); await GrillBotRepository.AddAsync(entity); await GrillBotRepository.CommitAsync(); }
public async Task LogCommandAsync(Optional <CommandInfo> command, ICommandContext context) { if (context.Guild == null || !command.IsSpecified) { return; } var userId = await UserSearchService.GetUserIDFromDiscordUserAsync(context.Guild, context.User); var entity = new AuditLogItem() { Type = AuditLogType.Command, CreatedAt = DateTime.Now, GuildIdSnowflake = context.Guild.Id, UserId = userId }; entity.SetData(CommandAuditData.CreateDbItem(context, command.Value)); await GrillBotRepository.AddAsync(entity); await GrillBotRepository.CommitAsync(); }
public async Task LogUserJoinAsync(SocketGuildUser user) { if (user == null || !user.IsUser()) { return; } var userEntity = await GrillBotRepository.UsersRepository.GetOrCreateUserAsync(user.Guild.Id, user.Id, UsersIncludes.None); await GrillBotRepository.CommitAsync(); var entity = new AuditLogItem() { Type = AuditLogType.UserJoined, CreatedAt = DateTime.Now, GuildIdSnowflake = user.Guild.Id, UserId = userEntity.ID }; entity.SetData(UserJoinedAuditData.Create(user.Guild)); await GrillBotRepository.AddAsync(entity); await GrillBotRepository.CommitAsync(); }
public async Task TriggerBackgroundTaskAsync(object data) { if (data is not DownloadAuditLogBackgroundTask task) { return; } var guild = Client.GetGuild(task.GuildId); if (guild == null) { return; } if (!AuditServiceHelper.IsTypeDefined(task.ActionType)) { return; } var logs = await guild.GetAuditLogDataAsync(100, task.ActionType); if (logs.Count == 0) { return; } var auditLogType = AuditServiceHelper.AuditLogTypeMap[task.ActionType]; var logIds = (await GrillBotRepository.AuditLogs.GetLastAuditLogIdsQuery(guild.Id, auditLogType).ToListAsync()) .ConvertAll(o => Convert.ToUInt64(o)); foreach (var log in logs) { if (logIds.Contains(log.Id)) { continue; } var userId = await GetOrCreateUserId(guild, log.User); var item = new AuditLogItem() { CreatedAt = log.CreatedAt.LocalDateTime, DcAuditLogIdSnowflake = log.Id, UserId = userId, GuildIdSnowflake = guild.Id, Type = auditLogType }; var logMappingMethod = AuditServiceHelper.AuditLogDataMap[task.ActionType]; if (logMappingMethod != null) { var mappedItem = logMappingMethod(log.Data); if (mappedItem != null) { item.SetData(mappedItem); } } await GrillBotRepository.AddAsync(item); } await GrillBotRepository.CommitAsync(); }