Beispiel #1
0
        private static void Client_OnMessageReceived(DiscordSocketClient client, MessageEventArgs args)
        {
            if (!string.IsNullOrEmpty(args.Message.Content))
            {
                var messages = Messages[args.Message.Guild.Id];
                messages.RemoveAll(m => m.SentAt < DateTime.UtcNow - MessageExpiration);

                messages.Add(args.Message);

                if (messages.Count >= MaxMessages && messages.Select(x => x.Content).Distinct().Count() == 1)
                {
                    Console.WriteLine("Raid detected");

                    var msgsCopy = new List <DiscordMessage>(messages);
                    messages.Clear();

                    foreach (var msg in msgsCopy)
                    {
                        BanQueue.Enqueue(msg.Author.Member);
                    }

                    // if we're on a bot account, we can delete messages from multiple users much faster than we can ban them. let's keep the chat clean :)
                    if (client.User.Type == DiscordUserType.Bot)
                    {
                        foreach (var group in msgsCopy.GroupBy(m => m.Channel.Id))
                        {
                            client.DeleteMessages(group.Key, group.Select(m => m.Id).ToList());
                        }
                    }
                }
            }
        }
Beispiel #2
0
        private static void Client_OnMessageReceived(DiscordSocketClient client, MessageEventArgs args)
        {
            if (!string.IsNullOrEmpty(args.Message.Content))
            {
                var messages = Messages[args.Message.Guild.Id];
                messages.RemoveAll(m => m.SentAt < DateTime.UtcNow - MessageExpiration);

                messages.Add(args.Message);

                if (messages.Count >= MaxMessages && messages.Select(x => x.Content).Distinct().Count() == 1)
                {
                    Console.WriteLine("Raid detected");

                    var msgsCopy = new List <DiscordMessage>(messages);
                    messages.Clear();

                    foreach (var msg in msgsCopy)
                    {
                        BanQueue.Enqueue(msg.Author.Member);
                    }

                    if (client.User.Type == DiscordUserType.Bot)
                    {
                        foreach (var group in msgsCopy.GroupBy(m => m.Channel.Id))
                        {
                            client.DeleteMessages(group.Key, group.Select(m => m.Id).ToList());
                        }
                    }
                    else
                    {
                        // we have to go the slow route :(
                        foreach (var msg in msgsCopy)
                        {
                            msg.Delete();
                        }
                    }
                }
            }
        }