/// <summary> /// Respond to bulk deletion by bulk deleting the bot’s messages. /// </summary> /// <param name="e">Discord information.</param> static public async Task BulkDelete(DiscordClient sender, MessageBulkDeleteEventArgs e) { // Ignore bots / DMs if (e.Messages?[0]?.Author?.IsBot == true || e.Channel?.Guild == null) { return; } foreach (var item in e.Messages) { // Ignore messages not in cache if (!Cache.ContainsKey(item.Id)) { continue; } ulong id = item.Id; // Delete bot’s message if possible try { DiscordMessage message = await e.Channel.GetMessageAsync(Cache[id]); Cache.Remove(id); await message.DeleteAsync(); } catch (Exception ex) { Program.LogMessage($"Deleting the bot’s message {Cache[id]} returned an exception: {ex}"); } } }
private async Task OnMessagesBulkDeleted(MessageBulkDeleteEventArgs e) { if (MessagesBulkDeleted != null) { await MessagesBulkDeleted(e); } }
public static async Task BulkDeleteEventHandlerAsync(TheGodfatherBot bot, MessageBulkDeleteEventArgs e) { if (e.Guild is null) { return; } if (!LoggingService.IsLogEnabledForGuild(bot, e.Guild.Id, out LoggingService logService, out LocalizedEmbedBuilder emb)) { return; } if (LoggingService.IsChannelExempted(bot, e.Guild, e.Channel, out GuildConfigService gcs)) { return; } emb.WithLocalizedTitle(DiscordEventType.MessagesBulkDeleted, "evt-msg-del-bulk", e.Channel); emb.AddLocalizedTitleField("str-count", e.Messages.Count, inline: true); using var ms = new MemoryStream(); using var sw = new StreamWriter(ms); foreach (DiscordMessage msg in e.Messages) { sw.WriteLine($"[{msg.Timestamp}] {msg.Author}"); sw.WriteLine(string.IsNullOrWhiteSpace(msg.Content) ? "?" : msg.Content); sw.WriteLine(msg.Attachments.Select(a => $"{a.FileName} ({a.FileSize})").JoinWith(", ")); sw.Flush(); } ms.Seek(0, SeekOrigin.Begin); DiscordChannel?chn = gcs.GetLogChannelForGuild(e.Guild); await(chn?.SendFileAsync($"{e.Channel.Name}-deleted-messages.txt", ms, embed: emb.Build()) ?? Task.CompletedTask); }
public void Enrich(Scope scope, MessageBulkDeleteEventArgs evt) { scope.AddBreadcrumb("", "event.messageDelete", data: new Dictionary <string, string>() { { "channel", evt.Channel.Id.ToString() }, { "guild", evt.Channel.Id.ToString() }, { "messages", string.Join(",", evt.Messages.Select(m => m.Id)) }, }); scope.SetTag("shard", evt.Client.ShardId.ToString()); }
private Task _discordClient_MessagesBulkDeleted(DiscordClient sender, MessageBulkDeleteEventArgs e) { _ = Task.Run(async() => { foreach (var message in e.Messages) { await HandleDeletedMessageAsync(message, true); } }); return(Task.CompletedTask); }
public Task Handle(DiscordClient shard, MessageBulkDeleteEventArgs evt) { // Same as above, but bulk async Task Inner() { await Task.Delay(MessageDeleteDelay); _logger.Information("Bulk deleting {Count} messages in channel {Channel}", evt.Messages.Count, evt.Channel.Id); await _db.Execute(c => _repo.DeleteMessagesBulk(c, evt.Messages.Select(m => m.Id).ToList())); } _ = Inner(); return(Task.CompletedTask); }
internal static Task BulkMessagesDeleted(DiscordClient _1, MessageBulkDeleteEventArgs e) { _ = Task.Run(async() => { if (e.Guild.Id != 699555747591094344) { return; } if (e.Channel.Id == 722905404354592900 || //senate e.Channel.Id == 838088490704568341 || //muted e.Channel.Id == 792486366138073180) //parstapo { return; } if (e.Messages.Count == 0) { await DiscordObjectService.Instance.LogsChannel.SendMessageAsync("Messages bulk deleted, but none in cache!"); } else { string toSave = ""; for (int index = e.Messages.Count - 1; index >= 0; index--) { if (e.Messages[index].Content is null) { continue; } toSave += e.Messages[index].Timestamp + " - " + $"{e.Messages[index].Author.Username}#{e.Messages[index].Author.Discriminator} ({e.Messages[index].Author.Id})" + ":\n" + e.Messages[index].Content + (e.Messages[index].IsEdited ? $" (edited at {e.Messages[index].EditedTimestamp})\n" : "\n"); } File.WriteAllText("Bulklog.txt", toSave); using FileStream stream = new FileStream("Bulklog.txt", FileMode.Open); DiscordMessageBuilder embed = new DiscordMessageBuilder() .WithFile(stream) .WithContent("Bulk delete logs dumped to text file.\n" + "Creation Time: " + Formatter.Timestamp(DateTime.Now, TimestampFormat.LongTime)); await DiscordObjectService.Instance.LogsChannel.SendMessageAsync(embed); } }); return(Task.CompletedTask); }
public static async Task BulkDeleteEventHandlerAsync(FreudShard shard, MessageBulkDeleteEventArgs e) { if (e.Channel.IsPrivate) { return; } var logchn = shard.SharedData.GetLogChannelForGuild(shard.Client, e.Channel.Guild); if (logchn is null || e.Channel.IsExempted(shard)) { return; } var emb = FormEmbedBuilder(EventOrigin.Message, $"Bulk message deletiong occured ({e.Messages.Count} total)", $"In channel {e.Channel.Mention}"); await logchn.SendMessageAsync(embed : emb.Build()); }
public static Task OnMessagesBulkDeleted(DiscordClient _, MessageBulkDeleteEventArgs args) { if (args.Channel.IsPrivate) { return(Task.CompletedTask); } if (!MessageQueue.TryGetValue(args.Channel.Id, out var queue)) { return(Task.CompletedTask); } lock (queue.syncObj) foreach (var m in args.Messages) { queue.Evict(m.Id); } return(Task.CompletedTask); }
private static async Task Discord_MessageBulkDelete(MessageBulkDeleteEventArgs ea) { foreach (var msg in ea.Messages) { if (msg == null) { continue; } var chn = msg.Channel; if (chn == null) { continue; } if (ea.Channel.Guild == null || (ea.Channel.Guild != null && !DatabaseClient.Ignored.Contains(ea.Channel.Guild.Id))) { await DatabaseClient.LogMessageDeleteAsync(msg); } } }
public static async Task BulkDeleteEventHandlerAsync(KioskAppShard shard, MessageBulkDeleteEventArgs e) { if (e.Channel.IsPrivate) { return; } DiscordChannel logchn = shard.SharedData.GetLogChannelForGuild(shard.Client, e.Channel.Guild); if (logchn is null) { return; } using (DatabaseContext db = shard.Database.CreateContext()) if (db.LoggingExempts.Any(ee => ee.Type == ExemptedEntityType.Channel && ee.Id == e.Channel.Id)) { return; } DiscordEmbedBuilder emb = FormEmbedBuilder(EventOrigin.Message, $"Bulk message deletion occured ({e.Messages.Count} total)", $"In channel {e.Channel.Mention}"); await logchn.SendMessageAsync(embed : emb.Build()); }
private Task MessagesBulkDeleted(MessageBulkDeleteEventArgs e) { /* This would kill my bot */ return(Task.CompletedTask); }
public async Task Handle(MessageBulkDeleteEventArgs evt) { // Same as above, but bulk _logger.Information("Bulk deleting {Count} messages in channel {Channel}", evt.Messages.Count, evt.Channel.Id); await _data.DeleteMessagesBulk(evt.Messages.Select(m => m.Id).ToList()); }
private static void MessageBulkDelete(BaseDiscordClient client, Embed embed, MessageBulkDeleteEventArgs messageBulkDeleteEventArgs) { embed.Title = $"{DiscordEmoji.FromGuildEmote(client, EmojiLibrary.Erase)} Message bulk deleted"; embed.Description = new StringBuilder().AppendLine($"{messageBulkDeleteEventArgs.Messages.Count} messages deleted in {messageBulkDeleteEventArgs.Channel.Mention}.").ToString(); embed.Color = DiscordColor.IndianRed; }
private Task Client_MessagesBulkDeleted(MessageBulkDeleteEventArgs e) { e.Client.DebugLogger.LogMessage(LogLevel.Info, "BotApp", e.ToString(), DateTime.Now); return(Task.CompletedTask); }
public static async Task BulkDeleteEventHandlerAsync(TheGodfatherShard shard, MessageBulkDeleteEventArgs e) { DiscordChannel logchn = shard.SharedData.GetLogChannelForGuild(shard.Client, e.Channel.Guild); if (logchn == null) { return; } DiscordEmbedBuilder emb = FormEmbedBuilder(EventOrigin.Message, $"Bulk message deletion occured ({e.Messages.Count} total)", $"In channel {e.Channel.Mention}"); await logchn.SendMessageAsync(embed : emb.Build()); }
private Task Event_MessagesBulkDeleted(DiscordClient d, MessageBulkDeleteEventArgs e) { d.Logger.LogDebug(BotEventId, "Event_MessagesBulkDeleted."); return(Task.CompletedTask); }