예제 #1
0
        public async Task <ActionResult> DeleteConfirmed(int id)
        {
            GlobalBan globalBan = await db.GlobalBans.FindAsync(id);

            db.GlobalBans.Remove(globalBan);
            await db.SaveChangesAsync();

            return(RedirectToAction("Index"));
        }
예제 #2
0
        public async Task <ActionResult> Edit([Bind(Include = "Id,TelegramId,Reason,Expires,BannedBy,BanDate,Name")] GlobalBan globalBan)
        {
            if (ModelState.IsValid)
            {
                db.Entry(globalBan).State = EntityState.Modified;
                await db.SaveChangesAsync();

                return(RedirectToAction("Index"));
            }
            return(View(globalBan));
        }
예제 #3
0
        public async Task <ActionResult> Create([Bind(Include = "Id,TelegramId,Reason,Expires,BannedBy,BanDate,Name")] GlobalBan globalBan)
        {
            if (ModelState.IsValid)
            {
                db.GlobalBans.Add(globalBan);
                await db.SaveChangesAsync();

                return(RedirectToAction("Index"));
            }

            return(View(globalBan));
        }
예제 #4
0
        // GET: GlobalBans/Delete/5
        public async Task <ActionResult> Delete(int?id)
        {
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            GlobalBan globalBan = await db.GlobalBans.FindAsync(id);

            if (globalBan == null)
            {
                return(HttpNotFound());
            }
            return(View(globalBan));
        }
예제 #5
0
        private static bool IsQueueable(string orderString, ulong id, out string msg)
        {
            if (!TwitchCrossBot.Bot.Config.AcceptingCommands || TwitchCrossBot.Bot.Config.SkipConsoleBotCreation)
            {
                msg = "Sorry, I am not currently accepting queue requests!";
                return(false);
            }

            if (string.IsNullOrWhiteSpace(orderString))
            {
                msg = "No valid order text.";
                return(false);
            }

            if (GlobalBan.IsBanned(id.ToString()))
            {
                msg = "You have been banned for abuse. Order has not been accepted.";
                return(false);
            }

            msg = string.Empty;
            return(true);
        }
예제 #6
0
        public static void PermBan(Update u, string[] args)
        {
            foreach (var e in u.Message.Entities)
            {
                switch (e.Type)
                {
                case MessageEntityType.Mention:
                    //get user
                    var username = u.Message.Text.Substring(e.Offset + 1, e.Length - 1);
                    using (var db = new WWContext())
                    {
                        var player = db.Players.FirstOrDefault(x => x.UserName == username);
                        if (player != null)
                        {
                            var game = Bot.GetGroupNodeAndGame(u.Message.Chat.Id);
                            game?.SmitePlayer(player.TelegramId);
                            //add the ban
                            var ban = new GlobalBan
                            {
                                Expires    = (DateTime)SqlDateTime.MaxValue,
                                Reason     = args[1].Split(' ').Skip(1).Aggregate((a, b) => a + " " + b), //skip the players name
                                TelegramId = player.TelegramId,
                                BanDate    = DateTime.Now,
                                BannedBy   = u.Message.From.FirstName,
                                Name       = player.Name
                            };
                            db.GlobalBans.Add(ban);
                            UpdateHandler.BanList.Add(ban);
                            db.SaveChanges();
                            Send("User has been banned", u.Message.Chat.Id);
                        }
                    }
                    break;

                case MessageEntityType.TextMention:
                    using (var db = new WWContext())
                    {
                        var player = db.Players.FirstOrDefault(x => x.TelegramId == e.User.Id);
                        if (player != null)
                        {
                            var game = Bot.GetGroupNodeAndGame(u.Message.Chat.Id);
                            game?.SmitePlayer(player.TelegramId);
                            //add the ban
                            var ban = new GlobalBan
                            {
                                Expires    = (DateTime)SqlDateTime.MaxValue,
                                Reason     = args[1].Split(' ').Skip(1).Aggregate((a, b) => a + " " + b), //skip the players name
                                TelegramId = player.TelegramId,
                                BanDate    = DateTime.Now,
                                BannedBy   = u.Message.From.FirstName,
                                Name       = player.Name
                            };
                            db.GlobalBans.Add(ban);
                            UpdateHandler.BanList.Add(ban);
                            db.SaveChanges();
                            Send("User has been banned", u.Message.Chat.Id);
                        }
                    }
                    break;
                }
            }
            if (args.Length < 2 || String.IsNullOrEmpty(args[1]))
            {
                return;
            }
            //now check for ids
            var toBan     = new List <int>();
            var did       = 0;
            var banReason = "";

            foreach (var arg in args[1].Split(' '))
            {
                if (int.TryParse(arg, out did))
                {
                    toBan.Add(did);
                }
                else
                {
                    banReason += arg + " ";
                }
            }
            banReason = banReason.Trim();
            if (toBan.Count > 0)
            {
                foreach (var uid in toBan)
                {
                    using (var db = new WWContext())
                    {
                        var player = db.Players.FirstOrDefault(x => x.TelegramId == uid);
                        if (player != null)
                        {
                            var game = Bot.GetGroupNodeAndGame(u.Message.Chat.Id);
                            game?.SmitePlayer(player.TelegramId);
                            //add the ban
                            var ban = new GlobalBan
                            {
                                Expires    = (DateTime)SqlDateTime.MaxValue,
                                Reason     = args[1].Split(' ').Skip(1).Aggregate((a, b) => a + " " + b), //skip the players name
                                TelegramId = player.TelegramId,
                                BanDate    = DateTime.Now,
                                BannedBy   = u.Message.From.FirstName,
                                Name       = player.Name
                            };
                            db.GlobalBans.Add(ban);
                            UpdateHandler.BanList.Add(ban);
                            db.SaveChanges();
                            Send($"User {player.Name} (@{player.UserName}) has been banned", u.Message.Chat.Id);
                        }
                    }
                }
            }
        }
예제 #7
0
        private static void CheckMessages()
        {
            for (int i = 0; i < Math.Min(100, mQueue.Count); i++)
            {
                var m = mQueue.Dequeue();

                if (Commands.ContainsKey(m.From.Id))
                {
                    Commands[m.From.Id].Add(m);
                }
                else
                {
                    Commands.Add(m.From.Id, new List <Message> {
                        m
                    });
                }
            }

            var top  = Commands.Where(x => x.Value.Count > 15).OrderByDescending(x => x.Value.Count).Select(x => x.Value).ToList();
            var menu = new Menu(2);
            Dictionary <int, bool> ToBan = new Dictionary <int, bool>();

            using (var sw = new StreamWriter("log.log"))
            {
                foreach (var t in top)
                {
                    var user      = t[0].From;
                    var startTime = t[0].Date;
                    var endTime   = t[t.Count - 1].Date;
                    var ticks     = (endTime - startTime).Ticks;
                    ticks /= t.Count;
                    var avg = new TimeSpan(ticks);
                    var msg = ($"User @{user.Username} ({user.Id}): {t.Count} - Average time between commands: {avg}\r\n");
                    msg  = t.Aggregate(msg, (a, b) => a + $"{b.Text}: {b.Date}\r\n");
                    msg += "\r\n";
                    sw.WriteLine(msg);
                    Console.WriteLine(msg);
                    ToBan.Add(user.Id, t.Count >= 40); // if it's 40 or more messages, ban permanently immediately
                    menu.Buttons.Add(InlineKeyboardButton.WithCallbackData($"{user.Id}: {t.Count}", user.Id.ToString()));
                }
            }
            if (menu.Buttons.Count > 0)
            {
                using (var db = new WWContext())
                {
                    foreach (var spam in ToBan)
                    {
                        var id        = spam.Key;
                        var permanent = spam.Value;
                        var player    = db.Players.FirstOrDefault(x => x.TelegramId == id);

                        if (player != null)
                        {
                            if (player.TempBanCount == null)
                            {
                                player.TempBanCount = 0;
                            }
                            permanent = ++player.TempBanCount > 3 || permanent;
                        }

                        var globalban = db.GlobalBans.FirstOrDefault(x => x.TelegramId == id);
                        if (globalban != null)
                        {
                            if (globalban.Expires > new DateTime(3000, 1, 1))
                            {
                                continue;                    // ignore if alr perm banned
                            }
                            db.GlobalBans.Remove(globalban); // else, remove the old ban so the new one counts.
                        }

                        //add the ban
                        var ban = new GlobalBan
                        {
                            Expires = permanent
                                ? (DateTime)SqlDateTime.MaxValue
                                : DateTime.UtcNow.AddDays(7),
                            Reason     = $"{(spam.Value ? "INSANE" : "HEAVY")} Spam / Flood",
                            TelegramId = id,
                            BanDate    = DateTime.UtcNow,
                            BannedBy   = "AntiFlood System",
                            Name       = player?.Name ?? "Unknown User"
                        };
                        db.GlobalBans.Add(ban);
                    }
                    db.SaveChanges();
                }

                menu.Buttons.Add(InlineKeyboardButton.WithCallbackData("Close", "close"));
                Api.SendTextMessageAsync(DevGroup, "Here is the report:", replyMarkup: menu.CreateMarkupFromMenu());

                using (var fs = new FileStream("log.log", FileMode.Open))
                {
                    try
                    {
                        Api.SendDocumentAsync(DevGroup, new InputOnlineFile(fs, "Spam Log.txt")).Wait();
                    }
                    catch (Exception exc)
                    {
                        var trace = exc.StackTrace;
                        var error = "";
                        do
                        {
                            error += exc.Message + "\n\n";
                            exc    = exc.InnerException;
                        }while (exc != null);
                        Api.SendTextMessageAsync(DevGroup, error + trace).Wait();
                    }
                }
            }
        }