Пример #1
0
        /// <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}");
                }
            }
        }
Пример #2
0
 private async Task OnMessagesBulkDeleted(MessageBulkDeleteEventArgs e)
 {
     if (MessagesBulkDeleted != null)
     {
         await MessagesBulkDeleted(e);
     }
 }
Пример #3
0
        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);
        }
Пример #4
0
 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());
 }
Пример #5
0
        private Task _discordClient_MessagesBulkDeleted(DiscordClient sender, MessageBulkDeleteEventArgs e)
        {
            _ = Task.Run(async() =>
            {
                foreach (var message in e.Messages)
                {
                    await HandleDeletedMessageAsync(message, true);
                }
            });

            return(Task.CompletedTask);
        }
Пример #6
0
        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);
        }
Пример #7
0
        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);
        }
Пример #8
0
        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());
        }
Пример #9
0
        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);
        }
Пример #10
0
        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);
                }
            }
        }
Пример #11
0
        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());
        }
Пример #12
0
 private Task MessagesBulkDeleted(MessageBulkDeleteEventArgs e)
 {
     /* This would kill my bot */
     return(Task.CompletedTask);
 }
Пример #13
0
 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());
 }
Пример #14
0
 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;
 }
Пример #15
0
 private Task Client_MessagesBulkDeleted(MessageBulkDeleteEventArgs e)
 {
     e.Client.DebugLogger.LogMessage(LogLevel.Info, "BotApp", e.ToString(), DateTime.Now);
     return(Task.CompletedTask);
 }
Пример #16
0
        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());
        }
Пример #17
0
 private Task Event_MessagesBulkDeleted(DiscordClient d, MessageBulkDeleteEventArgs e)
 {
     d.Logger.LogDebug(BotEventId, "Event_MessagesBulkDeleted.");
     return(Task.CompletedTask);
 }