internal bool getHistoryStatus(TgMessage RawMessage)
        {
            if (Config.ReasonChannelID == 0)
            {
                TgApi.getDefaultApiConnection().sendMessage(RawMessage.GetMessageChatInfo().id, "沒有證據頻道。");
                return(true);
            }

            int banstatSpace = RawMessage.text.IndexOf(" ");

            if (banstatSpace == -1)
            {
                if (RawMessage.reply_to_message.forward_from != null)
                {
                    BanUser ban = Config.GetDatabaseManager().GetUserBanStatus(RawMessage.reply_to_message.forward_from.id);
                    if (ban.ReasonMessageID != 0)
                    {
                        TgApi.getDefaultApiConnection().forwardMessage(RawMessage.GetMessageChatInfo().id, Config.ReasonChannelID, ban.ReasonMessageID);
                    }
                    else
                    {
                        TgApi.getDefaultApiConnection().sendMessage(RawMessage.GetMessageChatInfo().id, "沒有證據紀錄。");
                    }
                    return(true);
                }

                if (RawMessage.reply_to_message != null)
                {
                    BanUser ban = Config.GetDatabaseManager().GetUserBanStatus(RawMessage.reply_to_message.GetSendUser().id);
                    if (ban.ReasonMessageID != 0)
                    {
                        TgApi.getDefaultApiConnection().forwardMessage(RawMessage.GetMessageChatInfo().id, Config.ReasonChannelID, ban.ReasonMessageID);
                    }
                    else
                    {
                        TgApi.getDefaultApiConnection().sendMessage(RawMessage.GetMessageChatInfo().id, "沒有證據紀錄。");
                    }
                    return(true);
                }
            }

            if (int.TryParse(RawMessage.text.Substring(banstatSpace + 1), out int userid))
            {
                BanUser ban = Config.GetDatabaseManager().GetUserBanStatus(userid);
                if (ban.ReasonMessageID != 0)
                {
                    TgApi.getDefaultApiConnection().forwardMessage(RawMessage.GetMessageChatInfo().id, Config.ReasonChannelID, ban.ReasonMessageID);
                }
                else
                {
                    TgApi.getDefaultApiConnection().sendMessage(RawMessage.GetMessageChatInfo().id, "沒有證據紀錄。");
                }
                return(true);
            }

            TgApi.getDefaultApiConnection().sendMessage(RawMessage.GetMessageChatInfo().id, "您的輸入有錯誤,請回覆或是輸入 UserID",
                                                        RawMessage.message_id);
            return(true);
        }
Exemplo n.º 2
0
        public ActionResult Ban(int commentId = 0, int userId = 0)
        {
            BanModelView model   = new BanModelView();
            BanUser      banUser = new BanUser
            {
                IdUser    = userId,
                LastBan   = new DateTime(),
                BeginBan  = new DateTime(),
                IdComment = commentId
            };

            model.UserBan = banUser;
            return(View(model));
        }
Exemplo n.º 3
0
        internal bool banstatus(TgMessage RawMessage)
        {
            int banstatSpace = RawMessage.text.IndexOf(" ");

            if (banstatSpace == -1)
            {
                string  banmsg = "";
                BanUser ban;
                ban    = Temp.GetDatabaseManager().GetUserBanStatus(RawMessage.GetSendUser().id);
                banmsg = "发送者:\n" + RawMessage.GetSendUser().GetUserTextInfo() + "\n\n" + ban.GetBanMessage();
                if (ban.Ban == 0)
                {
                    banmsg += "\n\n对于被封禁的用户,您可以通过 [点击这里](https://t.me/CNBlackListBot?start=soam_req_unban) 以请求解封。";
                }
                if (RawMessage.reply_to_message != null)
                {
                    ban     = Temp.GetDatabaseManager().GetUserBanStatus(RawMessage.reply_to_message.GetSendUser().id);
                    banmsg += "\n\n------\n\n被回复的消息的原发送用户:\n" +
                              RawMessage.reply_to_message.GetSendUser().GetUserTextInfo() + "\n\n" +
                              ban.GetBanMessage();
                    if (RawMessage.reply_to_message.forward_from != null)
                    {
                        ban     = Temp.GetDatabaseManager().GetUserBanStatus(RawMessage.reply_to_message.forward_from.id);
                        banmsg += "\n\n------\n\n被回复的消息转发自用户:\n" +
                                  RawMessage.reply_to_message.forward_from.GetUserTextInfo() + "\n\n" +
                                  ban.GetBanMessage();
                    }
                }
                TgApi.getDefaultApiConnection().sendMessage(RawMessage.GetMessageChatInfo().id, banmsg, RawMessage.message_id);
                return(true);
            }
            else
            {
                if (int.TryParse(RawMessage.text.Substring(banstatSpace + 1), out int userid))
                {
                    BanUser ban = Temp.GetDatabaseManager().GetUserBanStatus(userid);
                    TgApi.getDefaultApiConnection().sendMessage(RawMessage.GetMessageChatInfo().id, "这位用户" + ban.GetBanMessage(), RawMessage.message_id);
                    return(true);
                }
                else
                {
                    TgApi.getDefaultApiConnection().sendMessage(RawMessage.GetMessageChatInfo().id, "您的输入有误,请输入正确的 UID", RawMessage.message_id);
                    return(true);
                }
            }
        }
Exemplo n.º 4
0
 internal void CallGroups(BanUser user)
 {
     if (Temp.DisableAdminTools)
     {
         return;
     }
     if (user.Level == 1)
     {
         return;
     }
     using (var db = new BlacklistDatabaseContext())
     {
         List <GroupCfg> groupCfg = null;
         try
         {
             groupCfg = db.GroupConfig
                        .Where(cfg => cfg.SubscribeBanList == 0)
                        .ToList();
         }
         catch (InvalidOperationException)
         {
             return;
         }
         if (groupCfg == null)
         {
             return;
         }
         foreach (GroupCfg cfg in groupCfg)
         {
             var userInChatInfo = TgApi.getDefaultApiConnection().getChatMember(cfg.GroupID, user.UserID);
             if (userInChatInfo.ok)
             {
                 if (userInChatInfo.result.status == "member")
                 {
                     TgApi.getDefaultApiConnection().kickChatMember(cfg.GroupID, user.UserID, GetTime.GetUnixTime() + 86400);
                     TgApi.getDefaultApiConnection().sendMessage(
                         cfg.GroupID,
                         "新的被封禁用户:\n\n" + user.GetBanMessage() + "\n\n由于您订阅了封禁列表,已根据您的设定自动移除。"
                         );
                 }
             }
             Thread.Sleep(3000);
         }
     }
 }
Exemplo n.º 5
0
        public ActionResult Newcomment(string gamekey = "", Comment comment = null, CommentViewModel model = null)
        {
            // try again input value, for solve problem with error model
            if (!ModelState.IsValid)
            {
                ModelState.AddModelError("", "Fill field correctly");
                if (model != null)
                {
                    model.CommentList = _commentService.GameComments(gamekey).ToList();
                    return(View("GameComments", model));
                }
            }

            // detect isBan user?
            BanUser banUser = _commentService.UserBanDetected(CurrentUser.Id);

            if (banUser != null)
            {
                return(View("BanMessage", banUser));
            }
            comment.User = CurrentUser;

            // if answer was quote
            if (model.QuoteTag != null)
            {
                model.Comment.User  = CurrentUser;
                model.Comment.Body += model.QuoteTag;
                _commentService.Newcomment(model.ParentComment, model.Comment, model.GameKey);
                return(GameComments(gamekey));
            }
            // if answer was answer to some comment
            if (model.ParentComment != null)
            {
                model.Comment.User = CurrentUser;
                _commentService.Newcomment(model.ParentComment, model.Comment, model.GameKey);
            }
            else
            {
                _commentService.Newcomment(gamekey, comment);
            }

            return(GameComments(gamekey));
        }
Exemplo n.º 6
0
        /// <summary>
        /// Bans a user
        /// </summary>
        /// <param name="order">The info</param>
        /// See <see cref="Areas.Admin.Models.BanUser"/> to see the param info
        /// <returns>The IActionResult of the ban action</returns>
        public IActionResult banUser([FromBody] BanUser order)
        {
            User user       = TokenUserManager.getUserFromToken(HttpContext, _context);
            User targetUser = new User();

            if (!AdminPolicy.isAdmin(user, _context))
            {
                return(BadRequest("notAllowed"));
            }

            if (!existUser(ref targetUser, order.publicUserId))
            {
                return(BadRequest());
            }
            if (validOrder(targetUser, order.ban))
            {
                return(BadRequest());
            }

            try
            {
                targetUser.open = !targetUser.open;
                _context.Update(targetUser);

                _context.SaveChanges();
                if (order.ban)
                {
                    manageGroups(targetUser);
                }

                EmailSender.sendBanNotification(targetUser.email, targetUser.nickname, order.ban);

                string retMessage = order.ban ? "SuccessfullUserBan" : "SuccessfullUserUnban";
                return(Ok(new { success = retMessage }));
            }
            catch (Exception)
            {
                return(BadRequest(500));
            }
        }
Exemplo n.º 7
0
        internal bool banstatus(TgMessage RawMessage)
        {
            int banstatSpace = RawMessage.text.IndexOf(" ");

            if (banstatSpace == -1)
            {
                string  banmsg = "";
                BanUser ban;
                ban    = Temp.GetDatabaseManager().GetUserBanStatus(RawMessage.GetSendUser().id);
                banmsg = "發送者 : " + RawMessage.GetSendUser().GetUserTextInfo_ESCMD() + "\n" + ban.GetBanMessage_ESCMD();
                if (RAPI.getIsInHKWhitelist(RawMessage.GetSendUser().id))
                {
                    banmsg = banmsg + ",使用者為港人";
                }
                else if (RAPI.getIsInWhitelist(RawMessage.GetSendUser().id))
                {
                    banmsg = banmsg + ",使用者在白名單內";
                }
                if (ban.Ban == 0)
                {
                    banmsg += "\n對於被封鎖的使用者,你可以通過 [點選這裡](https://t.me/" + Temp.CourtGroupName + ") 以請求解除。";
                }
                if (RawMessage.reply_to_message != null)
                {
                    ban     = Temp.GetDatabaseManager().GetUserBanStatus(RawMessage.reply_to_message.GetSendUser().id);
                    banmsg += "\n\n被回覆的訊息的原發送使用者 : " +
                              RawMessage.reply_to_message.GetSendUser().GetUserTextInfo_ESCMD() + "\n" +
                              ban.GetBanMessage_ESCMD();
                    if (RAPI.getIsInHKWhitelist(RawMessage.reply_to_message.GetSendUser().id))
                    {
                        banmsg = banmsg + ",使用者為港人";
                    }
                    else if (RAPI.getIsInWhitelist(RawMessage.reply_to_message.GetSendUser().id))
                    {
                        banmsg = banmsg + ",使用者在白名單內";
                    }
                    if (RawMessage.reply_to_message.forward_from != null)
                    {
                        ban     = Temp.GetDatabaseManager().GetUserBanStatus(RawMessage.reply_to_message.forward_from.id);
                        banmsg += "\n\n被回覆的訊息轉發自使用者 : " +
                                  RawMessage.reply_to_message.forward_from.GetUserTextInfo_ESCMD() + "\n" +
                                  ban.GetBanMessage_ESCMD();
                        if (RAPI.getIsInHKWhitelist(RawMessage.reply_to_message.forward_from.id))
                        {
                            banmsg = banmsg + ",使用者為港人";
                        }
                        else if (RAPI.getIsInWhitelist(RawMessage.reply_to_message.forward_from.id))
                        {
                            banmsg = banmsg + ",使用者在白名單內";
                        }
                    }

                    if (RawMessage.reply_to_message.forward_from_chat != null)
                    {
                        banmsg += "\n\n被回覆的訊息轉發自頻道 : \n" +
                                  RawMessage.reply_to_message.forward_from_chat.GetChatTextInfo();
                        if (RAPI.getIsInWhitelist(RawMessage.reply_to_message.forward_from_chat.id))
                        {
                            banmsg = banmsg + "\n頻道在白名單內";
                        }
                    }
                }

                TgApi.getDefaultApiConnection().sendMessage(RawMessage.GetMessageChatInfo().id, banmsg,
                                                            RawMessage.message_id, TgApi.PARSEMODE_MARKDOWN);
                return(true);
            }

            if (int.TryParse(RawMessage.text.Substring(banstatSpace + 1), out int userid))
            {
                BanUser ban = Temp.GetDatabaseManager().GetUserBanStatus(userid);
                TgApi.getDefaultApiConnection().sendMessage(RawMessage.GetMessageChatInfo().id,
                                                            "這位使用者" + ban.GetBanMessage_ESCMD(), RawMessage.message_id, TgApi.PARSEMODE_MARKDOWN);
                return(true);
            }

            TgApi.getDefaultApiConnection().sendMessage(RawMessage.GetMessageChatInfo().id, "您的輸入有錯誤,請輸入正確的 UserID",
                                                        RawMessage.message_id);
            return(true);
        }
Exemplo n.º 8
0
        internal void CallGroups(BanUser user)
        {
            if (Config.DisableAdminTools)
            {
                return;
            }
            if (user.Level == 1)
            {
                return;
            }
            using (var db = new BlacklistDatabaseContext())
            {
                List <GroupCfg> groupCfg = null;
                try
                {
                    groupCfg = db.GroupConfig
                               .Where(cfg => cfg.SubscribeBanList == 0)
                               .ToList();
                }
                catch (InvalidOperationException)
                {
                    return;
                }

                if (groupCfg == null)
                {
                    return;
                }

                var random = new Random();
                groupCfg = groupCfg.OrderBy(x => random.Next()).ToList();

                foreach (GroupCfg cfg in groupCfg)
                {
                    var userInChatInfo = TgApi.getDefaultApiConnection().getChatMember(cfg.GroupID, user.UserID);
                    if (userInChatInfo.ok)
                    {
                        if (userInChatInfo.result.status == "member")
                        {
                            try
                            {
                                new Thread(delegate()
                                {
                                    Console.WriteLine("[SubscribeBanList] Ban " + user.UserID +
                                                      " in " + cfg.GroupID);
                                    //TgApi.getDefaultApiConnection().restrictChatMember(
                                    //    cfg.GroupID,
                                    //    user.UserID,
                                    //    GetTime.GetUnixTime() + 10,
                                    //    false);
                                    SendMessageResult result = TgApi.getDefaultApiConnection().sendMessage(
                                        cfg.GroupID,
                                        "使用者 : `" + user.UserID + "`\n" + user.GetBanMessageMarkdown() +
                                        "\n\n由於開啟了 SubscribeBanList ,已嘗試自動移除。",
                                        ParseMode: TgApi.PARSEMODE_MARKDOWN);
                                    Thread.Sleep(5000);
                                    TgApi.getDefaultApiConnection()
                                    .kickChatMember(cfg.GroupID, user.UserID, GetTime.GetUnixTime() + 28800);
                                }).Start();
                            }
                            catch
                            {
                            }
                        }
                    }
                    Thread.Sleep(500);
                }
            }
        }
Exemplo n.º 9
0
 internal void CallGroupsInThread(BanUser user)
 {
     new Thread(delegate() { CallGroups(user); }).Start();
 }
        public CallbackMessage OnSupergroupMemberJoinReceive(TgMessage RawMessage, string JsonMessage,
                                                             UserInfo JoinedUser)
        {
            DatabaseManager dbmgr    = Temp.GetDatabaseManager();
            GroupCfg        groupCfg = dbmgr.GetGroupConfig(RawMessage.GetMessageChatInfo().id);

            if (groupCfg.AntiBot == 0 && JoinedUser.is_bot && !TgApi.getDefaultApiConnection()
                .checkIsAdmin(RawMessage.GetMessageChatInfo().id, RawMessage.from.id))
            {
                SetActionResult result = TgApi.getDefaultApiConnection()
                                         .kickChatMember(RawMessage.GetMessageChatInfo().id, JoinedUser.id, GetTime.GetUnixTime() + 300);
                if (result.ok)
                {
                    TgApi.getDefaultApiConnection().sendMessage(
                        RawMessage.GetMessageChatInfo().id,
                        "機器人 : " + JoinedUser.GetUserTextInfo() + "\n由於開啟了 AntiBot ,已自動移除機器人。"
                        );
                }
                else
                {
                    TgApi.getDefaultApiConnection().sendMessage(
                        RawMessage.GetMessageChatInfo().id,
                        "機器人 : " + JoinedUser.GetUserTextInfo() + "\n由於開啟了 AntiBot ,但沒有 (Ban User) 權限,請設定正確的權限。"
                        );
                }

                new Task(() =>
                {
                    long banUtilTime = GetTime.GetUnixTime() + 86400;
                    Temp.GetDatabaseManager().BanUser(
                        0,
                        RawMessage.GetSendUser().id,
                        0,
                        banUtilTime,
                        "自動封鎖 - 拉入機器人 " + JoinedUser.GetUserTextInfo(),
                        RawMessage.GetMessageChatInfo().id,
                        0,
                        RawMessage.GetSendUser()
                        );
                }).Start();
            }

            if (JoinedUser.id == TgApi.getDefaultApiConnection().getMe().id)
            {
                if (RAPI.getIsBlockGroup(RawMessage.GetMessageChatInfo().id))
                {
                    new Thread(delegate()
                    {
                        TgApi.getDefaultApiConnection().sendMessage(RawMessage.GetMessageChatInfo().id, "此群組禁止使用本服務。");
                        Thread.Sleep(1000);
                        TgApi.getDefaultApiConnection().leaveChat(RawMessage.GetMessageChatInfo().id);
                    }).Start();
                    return(new CallbackMessage());
                }

                if (RawMessage.GetMessageChatInfo().type == "group")
                {
                    TgApi.getDefaultApiConnection().sendMessage(RawMessage.GetMessageChatInfo().id,
                                                                "一般群組無法使用本服務,如有疑問請至 @ChineseBlackList ");
                    Thread.Sleep(2000);
                    TgApi.getDefaultApiConnection().leaveChat(RawMessage.GetMessageChatInfo().id);
                    return(new CallbackMessage());
                }

                if (!new CheckHelper().CheckAdminInReportGroup(RawMessage.GetMessageChatInfo().id))
                {
                    new Thread(delegate()
                    {
                        TgApi.getDefaultApiConnection().sendMessage(RawMessage.GetMessageChatInfo().id,
                                                                    "群管理必須加入[項目群組](https://t.me/" + Temp.ReportGroupName + ")才可使用本服務。", ParseMode: TgApi.PARSEMODE_MARKDOWN);
                        Thread.Sleep(2000);
                        TgApi.getDefaultApiConnection().leaveChat(RawMessage.GetMessageChatInfo().id);
                    }).Start();
                    return(new CallbackMessage());
                }

                TgApi.getDefaultApiConnection().sendMessage(
                    RawMessage.GetMessageChatInfo().id,
                    "歡迎使用 @" + TgApi.getDefaultApiConnection().getMe().username + "\n" +
                    "1.請在群組中给予 @" + TgApi.getDefaultApiConnection().getMe().username + " 管理員權限\n" +
                    "2.使用 /help 可查閱使用說明\n" +
                    "預設開啟的功能有 BlackList AutoKick AntiHalal SubscribeBanList,可以根據需要來調整。\n\n" +
                    "注意 : 加入機器人即同意讓渡部分 Ban Users 權限予本項目組,並授權本組依據 @ChineseBlackList 置頂規定,代表群管理對群組內成員逕行封鎖\n" +
                    "如不同意請立即移除此機器人,且禁止違背群主意願私自添加",
                    RawMessage.message_id
                    );
                return(new CallbackMessage());
            }

            if (Temp.DisableBanList)
            {
                return(new CallbackMessage());
            }

            if (Temp.CourtGroupName != null && RawMessage.GetMessageChatInfo().username == Temp.CourtGroupName)
            {
                BanUser banUser = dbmgr.GetUserBanStatus(JoinedUser.id);
                if (banUser.Ban == 0)
                {
                    string resultmsg = "這位使用者被封鎖了\n請先閱讀置頂及公告區\n未依規定發表的任何訊息皆不回應\n\n" + banUser.GetBanMessage_ESCMD();
                    TgApi.getDefaultApiConnection().sendMessage(
                        RawMessage.GetMessageChatInfo().id,
                        resultmsg,
                        RawMessage.message_id,
                        TgApi.PARSEMODE_MARKDOWN
                        );
                }
                else
                {
                    if (RAPI.getIsInWhitelist(JoinedUser.id))
                    {
                        return(new CallbackMessage());
                    }
                    TgApi.getDefaultApiConnection().sendMessage(
                        RawMessage.GetMessageChatInfo().id,
                        "您未被封鎖,請離開,本群僅提供被 CNBL 封鎖者申訴",
                        RawMessage.message_id,
                        TgApi.PARSEMODE_MARKDOWN
                        );

                    TgApi.getDefaultApiConnection().restrictChatMember(
                        RawMessage.GetMessageChatInfo().id,
                        JoinedUser.id,
                        0, false, false, false, false);
                    new Thread(delegate()
                    {
                        Thread.Sleep(30000);
                        try
                        {
                            TgApi.getDefaultApiConnection().kickChatMember(
                                RawMessage.GetMessageChatInfo().id,
                                JoinedUser.id,
                                GetTime.GetUnixTime() + 300
                                );
                            TgApi.getDefaultApiConnection().restrictChatMember(
                                RawMessage.GetMessageChatInfo().id,
                                JoinedUser.id,
                                0, true, false, false, false);
                        }
                        catch
                        {
                        }
                    }).Start();
                }

                return(new CallbackMessage());
            }

            if (groupCfg.BlackList == 0)
            {
                BanUser banUser   = dbmgr.GetUserBanStatus(JoinedUser.id);
                string  resultmsg = "";
                if (banUser.Ban == 0)
                {
                    string banReason;
                    if (banUser.ChannelMessageID != 0 && Temp.MainChannelName != null)
                    {
                        banReason = "[原因請點選這裡查看](https://t.me/" + Temp.MainChannelName + "/" +
                                    banUser.ChannelMessageID + ")\n";
                    }
                    else
                    {
                        banReason = "\n原因 : " + RAPI.escapeMarkdown(banUser.Reason) + "\n";
                    }
                    if (banUser.Level == 0)
                    {
                        resultmsg += "警告 : 這個使用者「將會」對群組造成負面影響\n" +
                                     banReason +
                                     "\n若有誤判,可以到 [這個群組](https://t.me/" + Temp.CourtGroupName + ") 尋求申訴";
                        if (groupCfg.AutoKick == 0)
                        {
                            try
                            {
                                SetActionResult result = TgApi.getDefaultApiConnection().kickChatMember(
                                    RawMessage.GetMessageChatInfo().id,
                                    JoinedUser.id,
                                    GetTime.GetUnixTime() + 300
                                    );
                                if (!result.ok)
                                {
                                    resultmsg += "\n注意 : 由於開啟了 AutoKick 但沒有 Ban Users 權限" +
                                                 ",請關閉此功能或給予權限(Ban users)。";
                                }
                            }
                            catch
                            {
                            }
                        }
                    }
                    else if (banUser.Level == 1)
                    {
                        resultmsg += "警告 : 這個使用者「可能」對群組造成負面影響" + banReason + "\n" +
                                     "請群組管理員多加留意\n" +
                                     "對於被警告的使用者,你可以通過 [這個群組](https://t.me/" + Temp.CourtGroupName + ") 以請求解除。";
                    }
                }
                else
                {
                    return(new CallbackMessage());
                }

                new Thread(delegate()
                {
                    SendMessageResult autodeletespammessagesendresult = TgApi.getDefaultApiConnection().sendMessage(
                        RawMessage.GetMessageChatInfo().id,
                        resultmsg,
                        RawMessage.message_id,
                        TgApi.PARSEMODE_MARKDOWN
                        );
                    Thread.Sleep(60000);
                    TgApi.getDefaultApiConnection().deleteMessage(
                        autodeletespammessagesendresult.result.chat.id,
                        autodeletespammessagesendresult.result.message_id
                        );
                }).Start();

                return(new CallbackMessage {
                    StopProcess = true
                });
            }

            return(new CallbackMessage());
        }
        protected override void Seed(GameStoreContext context)
        {
            context.Database.CreateIfNotExists();
            context.Database.ExecuteSqlCommand("ALTER TABLE Games ADD CONSTRAINT uqc_Key UNIQUE ([Key])");
            context.Database.ExecuteSqlCommand("ALTER TABLE Genres ADD CONSTRAINT uqc_Name UNIQUE ([Name])");
            context.Database.ExecuteSqlCommand("ALTER TABLE Platforms ADD CONSTRAINT uqc_Type UNIQUE ([Name])");
            context.Database.ExecuteSqlCommand("ALTER TABLE Publishers ADD CONSTRAINT uqc_CompanyName UNIQUE ([CompanyName])");
            context.Database.ExecuteSqlCommand("ALTER TABLE Users ADD CONSTRAINT uqc_Login UNIQUE ([Login])");
            context.Database.ExecuteSqlCommand("ALTER TABLE Users ADD CONSTRAINT uqc_Email UNIQUE ([Email])");
            context.Database.ExecuteSqlCommand("ALTER TABLE Roles ADD CONSTRAINT uqc_RoleName UNIQUE ([NameRole])");

            #region Platforms
            Platform platformDesktop = new Platform {
                Name = "Desktop", IsDeleted = false
            };
            Platform platformConsole = new Platform {
                Name = "Console", IsDeleted = false
            };

            context.Platforms.Add(new Platform {
                Name = "Mobile", IsDeleted = false
            });
            context.Platforms.Add(new Platform {
                Name = "Browser", IsDeleted = false
            });
            context.Platforms.Add(platformDesktop);
            context.Platforms.Add(platformConsole);
            #endregion

            context.SaveChanges();

            #region Publishers
            Publisher publisher = new Publisher();
            publisher.CompanyName = "NoPublisher";
            publisher.Description = "Game have no publishers";
            publisher.HomePage    = "none";
            publisher.Id          = 1;
            publisher.IsDeleted   = false;
            context.Publisher.Add(publisher);
            #endregion

            context.SaveChanges();

            #region Genres
            Genre genre = new Genre();
            genre.Name      = "Strategy";
            genre.SubGenres = new List <Genre>
            {
                new Genre {
                    Name = "RTS", ParentGenre = genre, IsDeleted = false
                },
                new Genre {
                    Name = "TBS", ParentGenre = genre, IsDeleted = false
                }
            };
            context.Genres.Add(genre);

            genre           = new Genre();
            genre.Name      = "Action";
            genre.SubGenres = new List <Genre>
            {
                new Genre {
                    Name = "FPS", ParentGenre = genre, IsDeleted = false
                },
                new Genre {
                    Name = "TPS", ParentGenre = genre, IsDeleted = false
                }
            };
            context.Genres.Add(genre);

            genre           = new Genre();
            genre.Name      = "RPG";
            genre.SubGenres = new List <Genre>
            {
                new Genre {
                    Name = "MMORPG", ParentGenre = genre, IsDeleted = false
                },
                new Genre {
                    Name = "Action RPG", ParentGenre = genre, IsDeleted = false
                },
                new Genre {
                    Name = "Tactical RPG", ParentGenre = genre, IsDeleted = false
                }
            };
            context.Genres.Add(genre);

            genre           = new Genre();
            genre.Name      = "Sports";
            genre.SubGenres = new List <Genre>
            {
                new Genre {
                    Name = "Football", ParentGenre = genre, IsDeleted = false
                },
                new Genre {
                    Name = "Golf", ParentGenre = genre, IsDeleted = false
                }
            };
            context.Genres.Add(genre);

            genre           = new Genre();
            genre.Name      = "Races";
            genre.SubGenres = new List <Genre>
            {
                new Genre {
                    Name = "Rally", ParentGenre = genre, IsDeleted = false
                },
                new Genre {
                    Name = "Arcade", ParentGenre = genre, IsDeleted = false
                },
                new Genre {
                    Name = "Formula", ParentGenre = genre, IsDeleted = false
                },
                new Genre {
                    Name = "Off-road", ParentGenre = genre, IsDeleted = false
                }
            };
            context.Genres.Add(genre);

            genre           = new Genre();
            genre.Name      = "Adventure";
            genre.SubGenres = new List <Genre>();
            genre.IsDeleted = false;
            context.Genres.Add(genre);
            #endregion

            context.SaveChanges();



            #region Games
            Game game = new Game();

            game.Key         = "001";
            game.Name        = "Warcraft III: Reign of Chaos";
            game.Description = "Warcraft III: Reign of Chaos is a high fantasy real-time strategy video game released " +
                               "by Blizzard Entertainment on July 3, 2002 in the U.S. It is the second sequel to Warcraft: Orcs & Humans, " +
                               "and it is the third game set in the Warcraft fictional Universe. An expansion pack, The Frozen Throne, " +
                               "was released on July 1, 2003.";
            game.RegisterGenreToGame(context.Genres.FirstOrDefault(g => g.Name == "Strategy"));
            game.RegisterGenreToGame(context.Genres.FirstOrDefault(g => g.Name == "RTS"));
            game.RegisterPlatformToGame(platformDesktop);
            game.RegisterPublisherToGame(publisher);
            game.IsDeleted      = false;
            game.Price          = 10.3;
            game.UnitsInStock   = 30;
            game.Discontinued   = false;
            game.GameProduction = new DateTime(2000, 6, 20);
            game.Picture        = "100x100.gif";
            context.Games.Add(game);
            context.SaveChanges();

            game             = new Game();
            game.Key         = "002";
            game.Name        = "Fallout 3";
            game.Description = "Fallout 3 takes place in the year 2277, 36 years after the setting of " +
                               "Fallout 2 and 200 years after the nuclear apocalypse that devastated the game's world " +
                               "in a future where international conflicts between the United States and China culminated " +
                               "in a Sino-American war in 2077, due to the scarcity of petroleum reserves that ran the economies " +
                               "of both countries. The player character is an inhabitant of Vault 101, a survival shelter designed " +
                               "to protect up to 1,000 humans from the nuclear fallout. When the player character's father disappears " +
                               "under mysterious circumstances, the Overseer, or the leader of the vault, initiates martial law, " +
                               "and sends security forces after the player, who is forced to escape from the Vault and journey into " +
                               "the ruins of Washington, D.C. to track him down. Along the way the player is assisted by a number of " +
                               "human survivors and must battle a myriad of enemies that inhabit the area now known as the \"Capital Wasteland\".";
            game.RegisterGenreToGame(context.Genres.FirstOrDefault(g => g.Name == "Action"));
            game.RegisterGenreToGame(context.Genres.FirstOrDefault(g => g.Name == "TPS"));
            game.RegisterGenreToGame(context.Genres.FirstOrDefault(g => g.Name == "FPS"));
            game.RegisterGenreToGame(context.Genres.FirstOrDefault(g => g.Name == "Action RPG"));
            game.RegisterPlatformToGame(platformDesktop);
            game.RegisterPlatformToGame(platformConsole);
            game.RegisterPublisherToGame(publisher);
            game.IsDeleted      = false;
            game.Discontinued   = false;
            game.Price          = 7.7;
            game.UnitsInStock   = 50;
            game.GameProduction = new DateTime(2003, 4, 10);
            game.Picture        = "100x100.gif";
            context.Games.Add(game);
            context.SaveChanges();

            game             = new Game();
            game.Key         = "003";
            game.Name        = "Uncharted 3: Drake's Deception";
            game.Description = "Uncharted 3: Drake's Deception is a 2011 action-adventure third-person shooter " +
                               "platform video game, the third game in the Uncharted series, developed by Naughty Dog, " +
                               "with a story written by script-writer Amy Hennig. It is the sequel to one of the most critically " +
                               "acclaimed video games of 2009, Uncharted 2: Among Thieves.[1] The game was released by Sony Computer" +
                               "Entertainment for the PlayStation 3, in North America on November 1, 2011, Europe on November 2, 2011, " +
                               "and Australia on November 3, 2011. A Game of the Year Edition, containing all additional content that was " +
                               "a part of the Fortune Hunters' Club deal, was released on September 19, 2012, for Europe.";
            game.RegisterGenreToGame(context.Genres.FirstOrDefault(g => g.Name == "Adventure"));
            game.RegisterGenreToGame(context.Genres.FirstOrDefault(g => g.Name == "TPS"));
            game.RegisterGenreToGame(context.Genres.FirstOrDefault(g => g.Name == "Action"));
            game.RegisterPlatformToGame(platformConsole);
            game.RegisterPublisherToGame(publisher);
            game.IsDeleted      = false;
            game.Price          = 10.7;
            game.UnitsInStock   = 36;
            game.Discontinued   = false;
            game.GameProduction = new DateTime(2005, 3, 09);
            game.Picture        = "100x100.gif";
            context.Games.Add(game);
            context.SaveChanges();

            game             = new Game();
            game.Key         = "004";
            game.Name        = "Carmageddon";
            game.Description = "Carmageddon is a graphically violent vehicular combat 1997 PC video game. " +
                               "It was later ported to other platforms, and spawned a series of follow-up titles. " +
                               "It was inspired by the 1975 cult classic movie Death Race 2000. The game was produced by Stainless Games, " +
                               "published by Interplay and SCi.";
            game.RegisterGenreToGame(context.Genres.FirstOrDefault(g => g.Name == "Races"));
            game.RegisterGenreToGame(context.Genres.FirstOrDefault(g => g.Name == "Arcade"));
            game.RegisterPlatformToGame(platformDesktop);
            game.RegisterPlatformToGame(platformConsole);
            game.RegisterPublisherToGame(publisher);
            game.IsDeleted      = false;
            game.Price          = 77.7;
            game.UnitsInStock   = 33;
            game.Discontinued   = false;
            game.GameProduction = new DateTime(2004, 4, 12);
            game.Picture        = "100x100.gif";
            context.Games.Add(game);
            #endregion

            context.SaveChanges();



            context.SaveChanges();

            #region Role
            Role r1 = new Role
            {
                NameRole = "Administrator"
            };
            Role r2 = new Role
            {
                NameRole = "Manager"
            };
            Role r3 = new Role
            {
                NameRole = "Moderator"
            };
            Role r4 = new Role
            {
                NameRole = "User"
            };
            Role r5 = new Role
            {
                NameRole = "Guest"
            };
            Role r6 = new Role
            {
                NameRole = "Publisher"
            };


            context.Roles.Add(r1);
            context.Roles.Add(r2);
            context.Roles.Add(r3);
            context.Roles.Add(r4);
            context.Roles.Add(r5);
            context.Roles.Add(r6);
            #endregion
            context.SaveChanges();


            #region User
            User u1 = new User
            {
                Login     = "******",
                Email     = "*****@*****.**",
                UserRoles = new List <Role> {
                    r1
                },
                Password  = "******",
                Birthdate = new DateTime(1993, 07, 26)
            };
            User u2 = new User
            {
                Login     = "******",
                Email     = "*****@*****.**",
                UserRoles = new List <Role> {
                    r2
                },
                Password  = "******",
                Birthdate = new DateTime(1993, 07, 26)
            };
            User u3 = new User
            {
                Login     = "******",
                Email     = "*****@*****.**",
                UserRoles = new List <Role> {
                    r3
                },
                Password  = "******",
                Birthdate = new DateTime(1993, 07, 26)
            };
            User u4 = new User
            {
                Login     = "******",
                Email     = "*****@*****.**",
                UserRoles = new List <Role> {
                    r4
                },
                Password  = "******",
                Birthdate = new DateTime(1993, 07, 26)
            };
            User u6 = new User
            {
                Login     = "******",
                Email     = "*****@*****.**",
                UserRoles = new List <Role> {
                    r6
                },
                Password  = "******",
                Birthdate = new DateTime(1993, 07, 26)
            };


            User u7 = new User
            {
                Login     = "******",
                Email     = "*****@*****.**",
                UserRoles = new List <Role> {
                    r4
                },
                Password  = "******",
                Birthdate = new DateTime(1993, 07, 26)
            };

            User u8 = new User
            {
                Login     = "******",
                Email     = "*****@*****.**",
                UserRoles = new List <Role> {
                    r4
                },
                Password  = "******",
                Birthdate = new DateTime(1993, 07, 26)
            };

            User u9 = new User
            {
                Login     = "******",
                Email     = "*****@*****.**",
                UserRoles = new List <Role> {
                    r4
                },
                Password  = "******",
                Birthdate = new DateTime(1993, 07, 26)
            };

            context.Users.Add(u1);
            context.Users.Add(u2);
            context.Users.Add(u3);
            context.Users.Add(u4);
            context.Users.Add(u6);
            context.Users.Add(u7);
            context.Users.Add(u8);
            context.Users.Add(u9);
            base.Seed(context);
            #endregion



            #region Comments
            Comment comment = new Comment
            {
                AuthorName = "Koleso",
                Body       = "It's good game. I want to buy it!",
                Id         = 1,
                ParentName = null,
                Game       = context.Games.FirstOrDefault(),
                User       = u4
            };

            context.Comments.Add(comment);
            comment = new Comment
            {
                AuthorName = "Vanka Vetrov",
                Body       = "Really hard core",
                Id         = 2,
                ParentName = null,
                Game       = context.Games.FirstOrDefault(),
                User       = u7
            };
            context.Comments.Add(comment);
            context.SaveChanges();

            comment = new Comment
            {
                AuthorName = "Kovalchyk Petr",
                Body       = "FFFFFFFFFFFFFFFFFUUUUUUUUUUUUUUUU!",
                Id         = 3,
                ParentName = "Koleso",
                Comments   = null,
                Game       = context.Games.FirstOrDefault(),
                User       = u8
            };
            context.Comments.FirstOrDefault().Comments.Add(comment);

            comment = new Comment
            {
                AuthorName = "Nekiy User",
                Body       = "GOOOOOOOOOOOOOD!!!!",
                Id         = 4,
                ParentName = "Koleso",
                Comments   = null,
                Game       = context.Games.FirstOrDefault(),
                User       = u9
            };
            context.Comments.FirstOrDefault().Comments.Add(comment);
            #endregion

            context.SaveChanges();
            #region Orders
            OrderDetail orderDetail = new OrderDetail {
                Id = 0, ProuctId = game.Id.ToString(), Price = game.Price, Quantity = 1, Discount = 0, OrderType = OrderType.Game, Product = game
            };
            context.OrderDetails.Add(orderDetail);



            Model.Entities.Order order = new Model.Entities.Order {
                User = u2, OrderDate = DateTime.Now, OrderDetails = new List <OrderDetail> {
                    orderDetail
                }, OrderStatus = OrderStatus.InProgress, ShippedDate = null
            };
            context.Orders.Add(order);

            orderDetail = new OrderDetail {
                Id = 1, ProuctId = game.Id.ToString(), Price = game.Price, Quantity = 1, Discount = 0, OrderType = OrderType.Game, Product = game
            };
            context.OrderDetails.Add(orderDetail);
            order = new Model.Entities.Order {
                User = u2, OrderDate = new DateTime(2012, 7, 25), OrderDetails = new List <OrderDetail> {
                    orderDetail
                }, OrderStatus = OrderStatus.InProgress, ShippedDate = null
            };
            context.Orders.Add(order);

            orderDetail = new OrderDetail {
                Id = 2, ProuctId = game.Id.ToString(), Price = game.Price, Quantity = 1, Discount = 0, OrderType = OrderType.Game, Product = game
            };
            context.OrderDetails.Add(orderDetail);

            order = new Model.Entities.Order {
                User = u4, OrderDate = new DateTime(2013, 6, 13), OrderDetails = new List <OrderDetail> {
                    orderDetail
                }, OrderStatus = OrderStatus.InProgress, ShippedDate = null
            };
            context.Orders.Add(order);
            #endregion

            context.SaveChanges();

            #region localization
            var enLanguage = new Language()
            {
                Id = 1, Code = "en", Name = "English"
            };
            var ruLanguage = new Language()
            {
                Id = 2, Code = "ru", Name = "Russian"
            };
            context.Language.Add(enLanguage);
            context.Language.Add(ruLanguage);
            var dota2GameLang = new GameLang()
            {
                Id = 1, LanguageId = 2, Description = "компьютерная многопользовательская командная игра жанра MOBA, реализация известной карты DotA для игры Warcraft III в отдельном клиенте. Осенью 2009 года компания Valve приняла на работу основного разработчика DotA — IceFrog"
            };
            context.GameLang.Add(dota2GameLang);
            #endregion


            BanUser banUser = new BanUser();
            banUser.IdUser    = 8;
            banUser.ReasonBan = "test ban";
            banUser.BeginBan  = DateTime.Now;
            banUser.LastBan   = DateTime.Now.AddMonths(1);
            context.BanUser.Add(banUser);
            context.SaveChanges();



            base.Seed(context);
            context.SaveChanges();
        }
Exemplo n.º 12
0
        public CallbackMessage ReceiveAllNormalMessage(TgMessage BaseMessage, string JsonMessage)
        {
            if (RAPI.getIsBlockGroup(BaseMessage.GetMessageChatInfo().id))
            {
                new Thread(delegate()
                {
                    TgApi.getDefaultApiConnection().sendMessage(BaseMessage.GetMessageChatInfo().id, "此群組禁止使用本服務。");
                    Thread.Sleep(2000);
                    TgApi.getDefaultApiConnection().leaveChat(BaseMessage.GetMessageChatInfo().id);
                }).Start();
                return(new CallbackMessage());
            }

            if (BaseMessage.GetMessageChatInfo().type == "group")
            {
                TgApi.getDefaultApiConnection().sendMessage(BaseMessage.GetMessageChatInfo().id,
                                                            "一般群組無法使用本服務,如有疑問請至 @ChineseBlackList ");
                Thread.Sleep(2000);
                TgApi.getDefaultApiConnection().leaveChat(BaseMessage.GetMessageChatInfo().id);
                return(new CallbackMessage());
            }

            if (!new CheckHelper().CheckAdminInReportGroup(BaseMessage.GetMessageChatInfo().id))
            {
                new Thread(delegate()
                {
                    TgApi.getDefaultApiConnection().sendMessage(BaseMessage.GetMessageChatInfo().id,
                                                                "群管理必須加入[項目群組](https://t.me/" + Temp.ReportGroupName + ")才可使用本服務。", ParseMode: TgApi.PARSEMODE_MARKDOWN);
                    Thread.Sleep(2000);
                    TgApi.getDefaultApiConnection().leaveChat(BaseMessage.GetMessageChatInfo().id);
                }).Start();
                return(new CallbackMessage());
            }

            string forward_from_id = null;

            if (BaseMessage.forward_from_chat != null)
            {
                forward_from_id = BaseMessage.forward_from_chat.id.ToString();
                if (RAPI.getIsInWhitelist(BaseMessage.forward_from_chat.id))
                {
                    return(new CallbackMessage());
                }
            }

            if (BaseMessage.chat.type != "group" && BaseMessage.chat.type != "supergroup")
            {
                return(new CallbackMessage());
            }
            string chatText = null;

            if (BaseMessage.text != null)
            {
                chatText = BaseMessage.text.ToLower();
            }
            else if (BaseMessage.caption != null)
            {
                chatText = BaseMessage.caption.ToLower();
            }
            else
            {
                return(new CallbackMessage());
            }
            // Call Admin START
            int atAdminPath = chatText.IndexOf("@admin");

            if (atAdminPath == -1)
            {
                atAdminPath = chatText.IndexOf("!admin");
            }
            if (atAdminPath == -1)
            {
                atAdminPath = chatText.IndexOf("/admin");
            }
            if (atAdminPath != -1)
            {
                int textLen = chatText.Length;
                if (textLen == 6)
                {
                    CallAdmin(BaseMessage);
                }
                else if (textLen >= 8)
                {
                    if (atAdminPath == 0)
                    {
                        if (chatText[7] == ' ')
                        {
                            CallAdmin(BaseMessage);
                        }
                    }
                    else if (atAdminPath == textLen - 6)
                    {
                        if (chatText[textLen - 7] == ' ')
                        {
                            CallAdmin(BaseMessage);
                        }
                    }
                    else
                    {
                        if (chatText[atAdminPath - 1] == ' ' && chatText[atAdminPath + 7] == ' ')
                        {
                            CallAdmin(BaseMessage);
                        }
                    }
                }

                if (Temp.InternGroupID != 0)
                {
                    TgApi.getDefaultApiConnection().forwardMessage(
                        Temp.InternGroupID,
                        BaseMessage.GetMessageChatInfo().id,
                        BaseMessage.GetReplyMessage().message_id
                        );
                    TgApi.getDefaultApiConnection().sendMessage(
                        Temp.InternGroupID,
                        BaseMessage.GetMessageChatInfo().GetChatTextInfo() + "\n\nReport By" + BaseMessage.GetSendUser().GetUserTextInfo()
                        );
                }
            }
            // Call Admin END

            if (Temp.ReportGroupID != 0 && BaseMessage.GetMessageChatInfo().id == Temp.ReportGroupID)
            {
                if (BaseMessage.forward_from != null)
                {
                    BanUser banUser = Temp.GetDatabaseManager().GetUserBanStatus(BaseMessage.forward_from.id);
                    if (banUser.Ban == 0)
                    {
                        string resultmsg = "使用者被封鎖了\n" + banUser.GetBanMessage_ESCMD();
                        TgApi.getDefaultApiConnection().sendMessage(
                            BaseMessage.GetMessageChatInfo().id,
                            resultmsg,
                            BaseMessage.message_id,
                            TgApi.PARSEMODE_MARKDOWN
                            );
                    }
                    else
                    {
                        int                max_point      = 0;
                        SpamMessage        max_point_spam = new SpamMessage();
                        List <SpamMessage> spamMsgList    = Temp.GetDatabaseManager().GetSpamMessageList();
                        foreach (SpamMessage smsg in spamMsgList)
                        {
                            int points = 0;
                            switch (smsg.Type)
                            {
                            case 0:
                                points = +new SpamMessageChecker().GetEqualsPoints(smsg.Messages, chatText);
                                break;

                            case 1:
                                points = +new SpamMessageChecker().GetRegexPoints(smsg.Messages, chatText);
                                break;

                            case 2:
                                points = +new SpamMessageChecker().GetSpamPoints(smsg.Messages, chatText);
                                break;

                            case 3:
                                points = +new SpamMessageChecker().GetIndexOfPoints(smsg.Messages, chatText);
                                break;

                            case 4:
                                points = +new SpamMessageChecker().GetHalalPoints(chatText + BaseMessage.forward_from.full_name());
                                break;

                            case 5:
                                points = +new SpamMessageChecker().GetIndiaPoints(chatText + BaseMessage.forward_from.full_name());
                                break;

                            case 6:
                                points = new SpamMessageChecker().GetContainsPoints(smsg.Messages,
                                                                                    chatText + " " + forward_from_id);
                                break;

                            case 7:
                                points = new SpamMessageChecker().GetRussiaPoints(chatText + BaseMessage.forward_from.full_name());
                                break;

                            case 8:
                                points = new SpamMessageChecker().GetNamePoints(smsg.Messages,
                                                                                BaseMessage.forward_from.full_name());
                                break;
                            }

                            if (points >= smsg.MinPoints)
                            {
                                if (points > max_point)
                                {
                                    max_point      = points;
                                    max_point_spam = smsg;
                                }
                            }
                        }

                        if (max_point > 0)
                        {
                            new Thread(delegate()
                            {
                                TgApi.getDefaultApiConnection().sendMessage(
                                    BaseMessage.GetMessageChatInfo().id,
                                    "使用者未被封鎖,由於符合`" + max_point_spam.FriendlyName + "`規則,現已自動封鎖",
                                    BaseMessage.message_id,
                                    TgApi.PARSEMODE_MARKDOWN
                                    );
                                long banUtilTime = 0;
                                if (max_point_spam.BanDays == 0 && max_point_spam.BanHours == 0 && max_point_spam.BanMinutes == 0)
                                {
                                    banUtilTime = 0;
                                }
                                else
                                {
                                    banUtilTime = GetTime.GetUnixTime() + max_point_spam.BanDays * 86400 + max_point_spam.BanHours * 3600 +
                                                  max_point_spam.BanMinutes * 60;
                                }
                                new Task(() =>
                                {
                                    Temp.GetDatabaseManager().BanUser(
                                        0,
                                        BaseMessage.forward_from.id,
                                        max_point_spam.BanLevel,
                                        banUtilTime,
                                        max_point_spam.FriendlyName + "\n分數 : " + max_point,
                                        BaseMessage.GetMessageChatInfo().id,
                                        BaseMessage.message_id,
                                        BaseMessage.forward_from
                                        );
                                }).Start();
                            }).Start();
                        }
                        else
                        {
                            TgApi.getDefaultApiConnection().sendMessage(
                                BaseMessage.GetMessageChatInfo().id,
                                "使用者未被封鎖,如要舉報請附上截圖",
                                BaseMessage.message_id,
                                TgApi.PARSEMODE_MARKDOWN
                                );
                        }
                    }
                    return(new CallbackMessage());
                }
            }

            if (RAPI.getIsInWhitelist(BaseMessage.from.id))
            {
                return(new CallbackMessage());
            }

            if (TgApi.getDefaultApiConnection().checkIsAdmin(BaseMessage.chat.id, BaseMessage.from.id))
            {
                return(new CallbackMessage());
            }

            // ALTI HALAL Start
            GroupCfg cfg = Temp.GetDatabaseManager().GetGroupConfig(BaseMessage.chat.id);

            if (cfg.AntiHalal == 0)
            {
                int                max_point      = 0;
                SpamMessage        max_point_spam = new SpamMessage();
                List <SpamMessage> spamMsgList    = Temp.GetDatabaseManager().GetSpamMessageList();
                foreach (SpamMessage smsg in spamMsgList)
                {
                    int points = 0;
                    switch (smsg.Type)
                    {
                    case 4:
                        points = +new SpamMessageChecker().GetHalalPoints(chatText + BaseMessage.from.full_name());
                        break;

                    case 5:
                        points = +new SpamMessageChecker().GetIndiaPoints(chatText + BaseMessage.from.full_name());
                        break;

                    case 7:
                        points = new SpamMessageChecker().GetRussiaPoints(chatText + BaseMessage.from.full_name());
                        break;
                    }

                    if (points >= smsg.MinPoints)
                    {
                        if (points > max_point)
                        {
                            max_point      = points;
                            max_point_spam = smsg;
                        }
                    }
                }

                if (max_point > 0)
                {
                    //Send alert and delete alert after 60 second
                    new Thread(delegate()
                    {
                        string msg = "";
                        if (Temp.ReportGroupName == Temp.CourtGroupName)
                        {
                            msg = "偵測到 " + max_point_spam.FriendlyName +
                                  " ,已自動回報,如有誤報請加入 @" + Temp.ReportGroupName + " 以報告誤報。";
                        }
                        else
                        {
                            msg = "偵測到 " + max_point_spam.FriendlyName +
                                  " ,已自動回報,如有誤報請加入 @" + Temp.ReportGroupName + " 以報告誤報" +
                                  " ,如有疑慮請加入 @" + Temp.CourtGroupName + " 提出申訴。";
                        }

                        SendMessageResult autodeletespammessagesendresult = TgApi.getDefaultApiConnection()
                                                                            .sendMessage(
                            BaseMessage.GetMessageChatInfo().id,
                            msg
                            );
                        ProcessMessage(max_point_spam, BaseMessage.message_id, BaseMessage.GetMessageChatInfo().id,
                                       BaseMessage.GetSendUser(), max_point);
                        Thread.Sleep(30000);
                        TgApi.getDefaultApiConnection().deleteMessage(
                            autodeletespammessagesendresult.result.chat.id,
                            autodeletespammessagesendresult.result.message_id
                            );
                    }).Start();
                    return(new CallbackMessage {
                        StopProcess = true
                    });
                }
                //{
                //    List<SpamMessage> spamMsgList = Temp.GetDatabaseManager().GetSpamMessageList();
                //    int halalPoints = new SpamMessageChecker().GetHalalPoints(chatText);
                //    int indiaPoints = new SpamMessageChecker().GetIndiaPoints(chatText);
                //    int russiaPoints = new SpamMessageChecker().GetRussiaPoints(chatText);
                //    if (halalPoints >= 8 || indiaPoints >= 16)
                //    {
                //        //If not in ban status , ban user.
                //        if (Temp.GetDatabaseManager().GetUserBanStatus(BaseMessage.from.id).Ban != 0)
                //            new Task(() =>
                //            {
                //                Temp.GetDatabaseManager().BanUser(
                //                    0,
                //                    BaseMessage.from.id,
                //                    0,
                //                    0,
                //                    "\n自動封鎖 : 無法理解的語言",
                //                    BaseMessage.GetMessageChatInfo().id,
                //                    BaseMessage.message_id,
                //                    BaseMessage.from
                //                );
                //            }).Start();

                //new Task(() =>
                //{
                //    TgApi.getDefaultApiConnection().forwardMessage(
                //        Temp.ReasonChannelID,
                //        BaseMessage.GetMessageChatInfo().id,
                //        BaseMessage.message_id);
                //}).Start();

                //Kick user and delete spam message
                //        new Task(() =>
                //        {
                //            TgApi.getDefaultApiConnection().kickChatMember(BaseMessage.chat.id, BaseMessage.from.id, GetTime.GetUnixTime() + 300);
                //            TgApi.getDefaultApiConnection().deleteMessage(BaseMessage.chat.id, BaseMessage.message_id);
                //        }).Start();

                //        BanUser banstat = Temp.GetDatabaseManager().GetUserBanStatus(BaseMessage.GetSendUser().id);

                //        if (banstat.Ban == 0)
                //            TgApi.getDefaultApiConnection().kickChatMember(
                //                BaseMessage.GetMessageChatInfo().id,
                //                BaseMessage.GetSendUser().id,
                //                GetTime.GetUnixTime() + 300
                //            );

                //Send alert and delete alert after 60 second
                //        new Thread(delegate()
                //        {
                //            SendMessageResult autodeletespammessagesendresult = TgApi.getDefaultApiConnection().sendMessage(
                //                BaseMessage.GetMessageChatInfo().id,
                //                "偵測到無法理解的語言,已自動回報,如有誤報請加入 @" + Temp.ReportGroupName + " 以報告誤報。"
                //            );
                //            Thread.Sleep(60000);
                //            TgApi.getDefaultApiConnection().deleteMessage(
                //                autodeletespammessagesendresult.result.chat.id,
                //                autodeletespammessagesendresult.result.message_id
                //            );
                //        }).Start();
                //        return new CallbackMessage {StopProcess = true};
                //    }
            }
            // ALTI HALAL AND INDIA END

            // AUTO DELETE SPAM MESSAGE START
            if (Temp.DisableBanList == false && cfg.AutoDeleteSpamMessage == 0)
            {
                int                max_point      = 0;
                SpamMessage        max_point_spam = new SpamMessage();
                List <SpamMessage> spamMsgList    = Temp.GetDatabaseManager().GetSpamMessageList();
                foreach (SpamMessage smsg in spamMsgList)
                {
                    int points = 0;
                    switch (smsg.Type)
                    {
                    case 0:
                        points = +new SpamMessageChecker().GetEqualsPoints(smsg.Messages, chatText);
                        break;

                    case 1:
                        points = +new SpamMessageChecker().GetRegexPoints(smsg.Messages, chatText);
                        break;

                    case 2:
                        points = +new SpamMessageChecker().GetSpamPoints(smsg.Messages, chatText);
                        break;

                    case 3:
                        points = +new SpamMessageChecker().GetIndexOfPoints(smsg.Messages, chatText);
                        break;

                    case 6:
                        points = new SpamMessageChecker().GetContainsPoints(smsg.Messages,
                                                                            chatText + " " + forward_from_id);
                        break;

                    case 8:
                        points = new SpamMessageChecker().GetNamePoints(smsg.Messages,
                                                                        BaseMessage.from.full_name());
                        break;
                    }

                    if (points >= smsg.MinPoints)
                    {
                        if (points > max_point)
                        {
                            max_point      = points;
                            max_point_spam = smsg;
                        }
                    }
                }

                if (max_point > 0)
                {
                    //Send alert and delete alert after 60 second
                    new Thread(delegate()
                    {
                        string msg = "";
                        if (Temp.ReportGroupName == Temp.CourtGroupName)
                        {
                            msg = "偵測到 " + max_point_spam.FriendlyName +
                                  " ,已自動回報,如有誤報請加入 @" + Temp.ReportGroupName + " 以報告誤報。";
                        }
                        else
                        {
                            msg = "偵測到 " + max_point_spam.FriendlyName +
                                  " ,已自動回報,如有誤報請加入 @" + Temp.ReportGroupName + " 以報告誤報。" +
                                  " ,如有疑慮請加入 @" + Temp.CourtGroupName + " 提出申訴。";
                        }
                        SendMessageResult autodeletespammessagesendresult = TgApi.getDefaultApiConnection()
                                                                            .sendMessage(
                            BaseMessage.GetMessageChatInfo().id,
                            msg
                            );

                        ProcessMessage(max_point_spam, BaseMessage.message_id, BaseMessage.GetMessageChatInfo().id,
                                       BaseMessage.GetSendUser(), max_point);
                        Thread.Sleep(30000);
                        TgApi.getDefaultApiConnection().deleteMessage(
                            autodeletespammessagesendresult.result.chat.id,
                            autodeletespammessagesendresult.result.message_id
                            );
                    }).Start();
                    return(new CallbackMessage {
                        StopProcess = true
                    });
                }
            }


            // AUTO DELETE SPAM MESSAGE END

            // Auto DELETE Command START
            if (cfg.AutoDeleteCommand == 0)
            {
                if (BaseMessage.entities != null)
                {
                    ContentEntities tmpEntities = BaseMessage.entities[0];
                    Log.i(tmpEntities.type + "" + tmpEntities.offset);
                    if (tmpEntities.type == "bot_command" && tmpEntities.offset == 0)
                    {
                        new Thread(delegate()
                        {
                            SendMessageResult autodeletecommandsendresult = TgApi.getDefaultApiConnection().sendMessage(
                                BaseMessage.GetMessageChatInfo().id,
                                "請您不要亂玩機器人的指令,有問題請聯絡群組管理員。"
                                );
                            Thread.Sleep(60000);
                            TgApi.getDefaultApiConnection().deleteMessage(
                                autodeletecommandsendresult.result.chat.id,
                                autodeletecommandsendresult.result.message_id
                                );
                        }).Start();
                        TgApi.getDefaultApiConnection().deleteMessage(BaseMessage.chat.id, BaseMessage.message_id);
                    }
                }
            }
            // Auto DELETE Command END

            // Admin ONLY START
            if (cfg.AdminOnly == 0)
            {
                throw new StopProcessException();
            }
            // Admin ONLY END
            return(new CallbackMessage());
        }
        public CallbackMessage ReceiveAllNormalMessage(TgMessage BaseMessage, string JsonMessage)
        {
            if (BaseMessage.chat.type != "group" && BaseMessage.chat.type != "supergroup")
            {
                return(new CallbackMessage());
            }
            string chatText = null;

            if (BaseMessage.text != null)
            {
                chatText = BaseMessage.text.ToLower();
            }
            else if (BaseMessage.caption != null)
            {
                chatText = BaseMessage.caption.ToLower();
            }
            else
            {
                return(new CallbackMessage());
            }
            // Call Admin START
            int atAdminPath = chatText.IndexOf("@admin");

            if (atAdminPath != -1)
            {
                int textLen = chatText.Length;
                if (textLen == 6)
                {
                    CallAdmin(BaseMessage);
                }
                else if (textLen >= 8)
                {
                    if (atAdminPath == 0)
                    {
                        if (chatText[7] == ' ')
                        {
                            CallAdmin(BaseMessage);
                        }
                    }
                    else if (atAdminPath == textLen - 6)
                    {
                        if (chatText[textLen - 7] == ' ')
                        {
                            CallAdmin(BaseMessage);
                        }
                    }
                    else
                    {
                        if (chatText[atAdminPath - 1] == ' ' && chatText[atAdminPath + 7] == ' ')
                        {
                            CallAdmin(BaseMessage);
                        }
                    }
                }
            }
            // Call Admin END

            if (TgApi.getDefaultApiConnection().checkIsAdmin(BaseMessage.chat.id, BaseMessage.from.id))
            {
                return(new CallbackMessage());
            }

            // ALTI HALAL AND INDIA START
            GroupCfg cfg = Temp.GetDatabaseManager().GetGroupConfig(BaseMessage.chat.id);

            if (cfg.AntiHalal == 0)
            {
                List <SpamMessage> spamMsgList = Temp.GetDatabaseManager().GetSpamMessageList();
                int halalPoints = new SpamMessageChecker().GetHalalPoints(chatText);
                int indiaPoints = new SpamMessageChecker().GetIndiaPoints(chatText);
                if (halalPoints >= 8 || indiaPoints >= 16)
                {
                    SendMessageResult result = TgApi.getDefaultApiConnection().forwardMessage(
                        Temp.AdminGroupID,
                        BaseMessage.GetMessageChatInfo().id,
                        BaseMessage.message_id
                        );
                    if (Temp.GetDatabaseManager().GetUserBanStatus(BaseMessage.from.id).Ban != 0)
                    {
                        new Task(() =>
                        {
                            Temp.GetDatabaseManager().BanUser(
                                0,
                                BaseMessage.from.id,
                                1,
                                0,
                                "System AUTO BAN: \n清真或印度消息",
                                BaseMessage.GetMessageChatInfo().id,
                                BaseMessage.message_id,
                                BaseMessage.from
                                );
                        }).Start();
                    }
                    new Task(() =>
                    {
                        TgApi.getDefaultApiConnection().kickChatMember(BaseMessage.chat.id, BaseMessage.from.id, 0);
                        TgApi.getDefaultApiConnection().deleteMessage(BaseMessage.chat.id, BaseMessage.message_id);
                    }).Start();
                    BanUser banstat = Temp.GetDatabaseManager().GetUserBanStatus(BaseMessage.GetSendUser().id);
                    if (banstat.Ban == 0)
                    {
                        TgApi.getDefaultApiConnection().kickChatMember(
                            BaseMessage.GetMessageChatInfo().id,
                            BaseMessage.GetSendUser().id,
                            GetTime.GetUnixTime() + 86400
                            );
                    }
                    if (result.ok)
                    {
                        new Thread(delegate() {
                            TgApi.getDefaultApiConnection().sendMessage(
                                Temp.AdminGroupID,
                                BaseMessage.GetSendUser().GetUserTextInfo() + "\n\n" + banstat.GetBanMessage() + "\n\n" +
                                BaseMessage.GetMessageChatInfo().GetChatTextInfo() + "\n\n" +
                                "匹配到的规则: 清真或印度消息\n" +
                                "清真得分: " + halalPoints + "\n" +
                                "印度得分: " + indiaPoints,
                                result.result.message_id
                                );
                        }).Start();
                    }
                    new Thread(delegate() {
                        SendMessageResult autodeletespammessagesendresult = TgApi.getDefaultApiConnection().sendMessage(
                            BaseMessage.GetMessageChatInfo().id,
                            "检查到清真或印度消息,已尝试上报用户行为,如有误报请加入 @" + Temp.MainChannelName + " 提供的群组以报告误报。"
                            );
                        Thread.Sleep(60000);
                        TgApi.getDefaultApiConnection().deleteMessage(
                            autodeletespammessagesendresult.result.chat.id,
                            autodeletespammessagesendresult.result.message_id
                            );
                    }).Start();
                    return(new CallbackMessage()
                    {
                        StopProcess = true
                    });
                }
            }
            // ALTI HALAL AND INDIA END

            // AUTO DELETE SPAM MESSAGE START
            if (Temp.DisableBanList == false && cfg.AutoDeleteSpamMessage == 0)
            {
                List <SpamMessage> spamMsgList = Temp.GetDatabaseManager().GetSpamMessageList();
                foreach (SpamMessage smsg in spamMsgList)
                {
                    int points = 0;
                    switch (smsg.Type)
                    {
                    case 0:
                        points = new SpamMessageChecker().GetEqualsPoints(smsg.Messages, chatText);
                        break;

                    case 1:
                        points = new SpamMessageChecker().GetRegexPoints(smsg.Messages, chatText);
                        break;

                    case 2:
                        points = new SpamMessageChecker().GetSpamPoints(smsg.Messages, chatText);
                        break;

                    case 3:
                        points = new SpamMessageChecker().GetIndexOfPoints(smsg.Messages, chatText);
                        break;

                    case 4:
                        points = new SpamMessageChecker().GetHalalPoints(chatText);
                        break;

                    case 5:
                        points = new SpamMessageChecker().GetIndiaPoints(chatText);
                        break;
                    }
                    if (points >= smsg.MinPoints)
                    {
                        SendMessageResult result = TgApi.getDefaultApiConnection().forwardMessage(
                            Temp.AdminGroupID,
                            BaseMessage.GetMessageChatInfo().id,
                            BaseMessage.message_id
                            );
                        ProcessMessage(smsg, BaseMessage.message_id, BaseMessage.GetMessageChatInfo().id, BaseMessage.GetSendUser());
                        BanUser banstat = Temp.GetDatabaseManager().GetUserBanStatus(BaseMessage.GetSendUser().id);
                        if (banstat.Ban == 0)
                        {
                            TgApi.getDefaultApiConnection().kickChatMember(
                                BaseMessage.GetMessageChatInfo().id,
                                BaseMessage.GetSendUser().id,
                                GetTime.GetUnixTime() + 86400
                                );
                        }
                        if (result.ok)
                        {
                            new Thread(delegate() {
                                TgApi.getDefaultApiConnection().sendMessage(
                                    Temp.AdminGroupID,
                                    BaseMessage.GetSendUser().GetUserTextInfo() + "\n\n" + banstat.GetBanMessage() + "\n\n" +
                                    BaseMessage.GetMessageChatInfo().GetChatTextInfo() + "\n\n" +
                                    "匹配到的规则: " + smsg.FriendlyName + "\n" +
                                    "得分: " + points,
                                    result.result.message_id
                                    );
                            }).Start();
                        }
                        new Thread(delegate() {
                            SendMessageResult autodeletespammessagesendresult = TgApi.getDefaultApiConnection().sendMessage(
                                BaseMessage.GetMessageChatInfo().id,
                                "检查到 " + smsg.FriendlyName +
                                " ,已尝试上报用户行为,如有误报请加入 @" + Temp.MainChannelName + " 提供的群组以报告误报。"
                                );
                            Thread.Sleep(60000);
                            TgApi.getDefaultApiConnection().deleteMessage(
                                autodeletespammessagesendresult.result.chat.id,
                                autodeletespammessagesendresult.result.message_id
                                );
                        }).Start();
                        return(new CallbackMessage()
                        {
                            StopProcess = true
                        });
                    }
                }
            }
            // AUTO DELETE SPAM MESSAGE END

            // Auto DELETE Command START
            if (cfg.AutoDeleteCommand == 0)
            {
                if (BaseMessage.entities != null)
                {
                    ContentEntities tmpEntities = BaseMessage.entities[0];
                    Log.i(tmpEntities.type + "" + tmpEntities.offset);
                    if (tmpEntities.type == "bot_command" && tmpEntities.offset == 0)
                    {
                        new Thread(delegate() {
                            SendMessageResult autodeletecommandsendresult = TgApi.getDefaultApiConnection().sendMessage(
                                BaseMessage.GetMessageChatInfo().id,
                                "请您不要乱玩机器人命令,如有疑问请您联系群组的管理员。"
                                );
                            Thread.Sleep(60000);
                            TgApi.getDefaultApiConnection().deleteMessage(
                                autodeletecommandsendresult.result.chat.id,
                                autodeletecommandsendresult.result.message_id
                                );
                        }).Start();
                        TgApi.getDefaultApiConnection().deleteMessage(BaseMessage.chat.id, BaseMessage.message_id);
                    }
                }
            }
            // Auto DELETE Command END

            // Admin ONLY START
            if (cfg.AdminOnly == 0)
            {
                throw new StopProcessException();
            }
            // Admin ONLY END
            return(new CallbackMessage());
        }
Exemplo n.º 14
0
 public void BanUser(BanUser userBan)
 {
     _unitOfWork.BanUserRepository.Insert(userBan);
     _unitOfWork.Save();
 }
Exemplo n.º 15
0
        public CallbackMessage OnSupergroupCommandReceive(TgMessage RawMessage, string JsonMessage, string Command)
        {
            try
            {
                GroupCfg cfg = Temp.GetDatabaseManager().GetGroupConfig(RawMessage.chat.id);
                if (cfg.AdminOnly == 0 && TgApi.getDefaultApiConnection().checkIsAdmin(RawMessage.chat.id, RawMessage.from.id) == false)
                {
                    return(new CallbackMessage()
                    {
                    });
                }
                if (SharedCommand(RawMessage, JsonMessage, Command))
                {
                    return(new CallbackMessage());
                }
                switch (Command)
                {
                case "/soamenable":
                    if (cfg.AdminOnly == 0 && TgApi.getDefaultApiConnection().checkIsAdmin(RawMessage.chat.id, RawMessage.from.id) == false)
                    {
                        return new CallbackMessage()
                               {
                                   StopProcess = true
                               }
                    }
                    ;
                    new SoamManager().SoamEnable(RawMessage);
                    break;

                case "/soamdisable":
                    if (cfg.AdminOnly == 0 && TgApi.getDefaultApiConnection().checkIsAdmin(RawMessage.chat.id, RawMessage.from.id) == false)
                    {
                        return new CallbackMessage()
                               {
                                   StopProcess = true
                               }
                    }
                    ;
                    new SoamManager().SoamDisable(RawMessage);
                    break;

                case "/__get_exception":
                    throw new Exception();

                case "/soamstat":
                case "/soamstatus":
                    if (cfg.AdminOnly == 0 && TgApi.getDefaultApiConnection().checkIsAdmin(RawMessage.chat.id, RawMessage.from.id) == false)
                    {
                        return new CallbackMessage()
                               {
                                   StopProcess = true
                               }
                    }
                    ;
                    new SoamManager().SoamStatus(RawMessage);
                    break;

                case "/bkick":
                    if (Temp.DisableBanList)
                    {
                        TgApi.getDefaultApiConnection().sendMessage(
                            RawMessage.chat.id,
                            "非常抱歉,当前的编译已经禁用了封禁用户的功能,请您重新下载源码并编译以启用此功能。",
                            RawMessage.message_id
                            );

                        break;
                    }
                    if (RawMessage.reply_to_message == null)
                    {
                        TgApi.getDefaultApiConnection().sendMessage(RawMessage.chat.id, "请回复一条消息", RawMessage.message_id);
                        return(new CallbackMessage());
                    }
                    BanUser ban = Temp.GetDatabaseManager().GetUserBanStatus(RawMessage.reply_to_message.from.id);
                    if (ban.Ban == 0)
                    {
                        if (ban.Level == 0)
                        {
                            SetActionResult bkick_result = TgApi.getDefaultApiConnection().kickChatMember(
                                RawMessage.chat.id,
                                RawMessage.reply_to_message.from.id,
                                GetTime.GetUnixTime() + 86400
                                );
                            if (bkick_result.ok)
                            {
                                TgApi.getDefaultApiConnection().sendMessage(RawMessage.chat.id, "已移除", RawMessage.message_id);
                                return(new CallbackMessage());
                            }
                            else
                            {
                                TgApi.getDefaultApiConnection().sendMessage(
                                    RawMessage.chat.id,
                                    "无法移除,可能是机器人没有适当的管理员权限。",
                                    RawMessage.message_id
                                    );
                                return(new CallbackMessage());
                            }
                        }
                        else
                        {
                            TgApi.getDefaultApiConnection().sendMessage(
                                RawMessage.chat.id,
                                "无法移除,因为此用户的封禁级别没有达到要求,请您联系群组的管理员来处理。" +
                                "如果您认为这位用户将会影响大量群组,您亦可联系 @" + Temp.MainChannelName + " 提供的群组。",
                                RawMessage.message_id
                                );
                            return(new CallbackMessage());
                        }
                    }
                    else
                    {
                        TgApi.getDefaultApiConnection().sendMessage(
                            RawMessage.chat.id,
                            "无法移除,因为此用户没有被机器人列入全局封禁列表中,请您联系群组的管理员来处理。" +
                            "如果您认为这位用户将会影响大量群组,您亦可联系 @" + Temp.MainChannelName + " 提供的群组。",
                            RawMessage.message_id
                            );
                        return(new CallbackMessage());
                    }
                }
                return(new CallbackMessage());
            }
            catch (StopProcessException) { return(new CallbackMessage()
                {
                    StopProcess = true
                }); }
            catch (Exception e)
            {
                RAPI.GetExceptionListener().OnException(e, JsonMessage);
                throw e;
            }
        }
        public CallbackMessage OnSupergroupMemberJoinReceive(TgMessage RawMessage, string JsonMessage, UserInfo JoinedUser)
        {
            if (JoinedUser.id == TgApi.getDefaultApiConnection().getMe().id)
            {
                TgApi.getDefaultApiConnection().sendMessage(
                    RawMessage.GetMessageChatInfo().id,
                    "欢迎使用 @" + TgApi.getDefaultApiConnection().getMe().username + "\n" +
                    "请您进行一些设置:\n" +
                    "1.在您的群组中给予 @" + TgApi.getDefaultApiConnection().getMe().username + " 管理员权限\n" +
                    "2.使用 /soamenable 启用一些功能\n" +
                    "3.Enjoy it!\n\n" +
                    "注: 默认开启的功能有 BlackList AutoKick AntiHalal AutoDeleteSpamMessage 这 4 个,您可以根据您的需要来禁用或启用。",
                    RawMessage.message_id
                    );
                return(new CallbackMessage());
            }
            if (Temp.DisableBanList)
            {
                return(new CallbackMessage());
            }
            DatabaseManager dbmgr = Temp.GetDatabaseManager();

            if (RawMessage.GetMessageChatInfo().id == -1001079439348)
            {
                BanUser banUser = dbmgr.GetUserBanStatus(JoinedUser.id);
                if (banUser.Ban == 0)
                {
                    string resultmsg = "这位用户被封禁了";
                    if (banUser.ChannelMessageID != 0)
                    {
                        resultmsg += ", [原因请点击这里查看](https://t.me/" + Temp.MainChannelName + "/" + banUser.ChannelMessageID + ")";
                    }
                    else
                    {
                        resultmsg += ",原因是:\n" + banUser.Reason;
                    }
                    TgApi.getDefaultApiConnection().sendMessage(
                        RawMessage.GetMessageChatInfo().id,
                        resultmsg,
                        RawMessage.message_id,
                        ParseMode: TgApi.PARSEMODE_MARKDOWN
                        );
                }
                else
                {
                    TgApi.getDefaultApiConnection().restrictChatMember(
                        RawMessage.GetMessageChatInfo().id,
                        JoinedUser.id,
                        GetTime.GetUnixTime() + 60
                        );
                    TgApi.getDefaultApiConnection().sendMessage(
                        RawMessage.GetMessageChatInfo().id,
                        "您未被封禁,请闲杂人等退群。如果您想加入这个群组,您可以去多点群发一些广告,然后您被 ban 了就能加入了。\n\n" +
                        "您将在 60 秒后自动退群。",
                        RawMessage.message_id,
                        ParseMode: TgApi.PARSEMODE_MARKDOWN
                        );
                    new Thread(delegate() {
                        Thread.Sleep(60000);
                        TgApi.getDefaultApiConnection().kickChatMember(
                            RawMessage.GetMessageChatInfo().id,
                            JoinedUser.id,
                            GetTime.GetUnixTime() + 60
                            );
                    }).Start();
                }
                return(new CallbackMessage());
            }
            GroupCfg groupCfg = dbmgr.GetGroupConfig(RawMessage.GetMessageChatInfo().id);

            if (groupCfg.BlackList == 0)
            {
                BanUser banUser   = dbmgr.GetUserBanStatus(JoinedUser.id);
                string  resultmsg = "警告: ";
                if (banUser.Ban == 0)
                {
                    string banReason;
                    if (banUser.ChannelMessageID != 0)
                    {
                        banReason = ", [原因请点击这里查看](https://t.me/" + Temp.MainChannelName + "/" + banUser.ChannelMessageID + ")";
                    }
                    else
                    {
                        banReason = "\n\n原因是:\n" + banUser.Reason;
                    }
                    if (banUser.Level == 0)
                    {
                        resultmsg += "这位用户可能存在风险,已被封禁" + banReason + "\n\n" +
                                     "对于被封禁的用户,您可以通过 [点击这里](https://t.me/" + TgApi.getDefaultApiConnection().getMe().username + "?start=soam_req_unban) 以请求解封。";
                        if (groupCfg.AutoKick == 0)
                        {
                            SetActionResult result = TgApi.getDefaultApiConnection().kickChatMember(
                                RawMessage.GetMessageChatInfo().id,
                                JoinedUser.id,
                                GetTime.GetUnixTime() + 86400
                                );
                            if (!result.ok)
                            {
                                resultmsg += "\n\n请注意: 您的群组当前打开了自动移除危险成员但机器人没有相应的管理员权限" +
                                             ",请您关闭此功能或者将机器人设置为管理员并给予相应的权限(Ban users)。";
                            }
                        }
                    }
                    else if (banUser.Level == 1)
                    {
                        resultmsg += "这位用户可能存在不良行为" + banReason + "\n\n" +
                                     "对于群组的管理员: 您可以观察这位用户在您的群组当中是否存在不良行为后再决定是否移除该成员\n" +
                                     "对于被封禁的用户,您可以通过 [点击这里](https://t.me/" + TgApi.getDefaultApiConnection().getMe().username + "?start=soam_req_unban) 以请求解封。";
                    }
                }
                else
                {
                    return(new CallbackMessage()
                    {
                    });
                }
                TgApi.getDefaultApiConnection().sendMessage(
                    RawMessage.GetMessageChatInfo().id,
                    resultmsg,
                    RawMessage.message_id,
                    ParseMode: TgApi.PARSEMODE_MARKDOWN
                    );
                return(new CallbackMessage()
                {
                    StopProcess = true
                });
            }
            return(new CallbackMessage());
        }
        public CallbackMessage OnSupergroupMemberJoinReceive(TgMessage RawMessage, string JsonMessage,
                                                             UserInfo JoinedUser)
        {
            DatabaseManager dbmgr    = Config.GetDatabaseManager();
            GroupCfg        groupCfg = dbmgr.GetGroupConfig(RawMessage.GetMessageChatInfo().id);

            if (groupCfg.AntiBot == 0 && JoinedUser.is_bot && !TgApi.getDefaultApiConnection()
                .checkIsAdmin(RawMessage.GetMessageChatInfo().id, RawMessage.from.id))
            {
                SetActionResult result = TgApi.getDefaultApiConnection()
                                         .kickChatMember(RawMessage.GetMessageChatInfo().id, JoinedUser.id, GetTime.GetUnixTime() + 300);
                if (result.ok)
                {
                    TgApi.getDefaultApiConnection().sendMessage(
                        RawMessage.GetMessageChatInfo().id,
                        "機器人 : " + JoinedUser.GetUserTextInfoMarkdown() + "\n由於開啟了 AntiBot ,已自動移除機器人。",
                        ParseMode: TgApi.PARSEMODE_MARKDOWN
                        );
                }
                else
                {
                    TgApi.getDefaultApiConnection().sendMessage(
                        RawMessage.GetMessageChatInfo().id,
                        "機器人 : " + JoinedUser.GetUserTextInfoMarkdown() + "\n由於開啟了 AntiBot ,但沒有 (Ban User) 權限,請設定正確的權限。",
                        ParseMode: TgApi.PARSEMODE_MARKDOWN
                        );
                }

                new Task(() =>
                {
                    long banUtilTime = GetTime.GetUnixTime() + 86400;
                    Config.GetDatabaseManager().BanUser(
                        0,
                        RawMessage.GetSendUser().id,
                        0,
                        banUtilTime,
                        "`自動封鎖 - 拉入機器人`" + JoinedUser.GetUserTextInfoMarkdown(),
                        RawMessage.GetMessageChatInfo().id,
                        0,
                        RawMessage.GetSendUser()
                        );
                }).Start();
            }

            if (JoinedUser.id == TgApi.getDefaultApiConnection().getMe().id)
            {
                if (Config.EnableOnlyJoinGroupInviteByAdmin)
                {
                    if (!RAPI.getIsBotAdmin(RawMessage.GetSendUser().id))
                    {
                        Thread.Sleep(500);
                        TgApi.getDefaultApiConnection().leaveChat(RawMessage.GetMessageChatInfo().id);
                        return(new CallbackMessage());
                    }
                }
                if (Config.BlockGroups.CheckInList(RawMessage.GetMessageChatInfo().id))
                {
                    new Thread(delegate()
                    {
                        TgApi.getDefaultApiConnection().sendMessage(RawMessage.GetMessageChatInfo().id, "此群組禁止使用本服務。");
                        Thread.Sleep(1000);
                        TgApi.getDefaultApiConnection().leaveChat(RawMessage.GetMessageChatInfo().id);
                    }).Start();
                    return(new CallbackMessage());
                }

                if (Config.EnableAutoLeaveNormalGroup)
                {
                    if (RawMessage.GetMessageChatInfo().type == "group")
                    {
                        TgApi.getDefaultApiConnection().sendMessage(RawMessage.GetMessageChatInfo().id,
                                                                    "一般群組無法使用本服務,如有疑問請至 @" + Config.CourtGroupName + "詢問");
                        Thread.Sleep(2000);
                        TgApi.getDefaultApiConnection().leaveChat(RawMessage.GetMessageChatInfo().id);
                        return(new CallbackMessage());
                    }
                }

                if (!new CheckHelper().CheckAdminInReportGroup(RawMessage.GetMessageChatInfo().id))
                {
                    new Thread(delegate()
                    {
                        TgApi.getDefaultApiConnection().sendMessage(RawMessage.GetMessageChatInfo().id,
                                                                    "群管理必須加入[項目群組](https://t.me/" + Config.AdminContactGroupName + ")才可使用本服務。", ParseMode: TgApi.PARSEMODE_MARKDOWN);
                        Thread.Sleep(2000);
                        TgApi.getDefaultApiConnection().leaveChat(RawMessage.GetMessageChatInfo().id);
                    }).Start();
                    return(new CallbackMessage());
                }

                TgApi.getDefaultApiConnection().sendMessage(
                    RawMessage.GetMessageChatInfo().id,
                    "歡迎使用 @" + TgApi.getDefaultApiConnection().getMe().username + "\n" +
                    "1.請在群組中给予 @" + TgApi.getDefaultApiConnection().getMe().username + " 管理員權限\n" +
                    "2.使用 /help 可查閱使用說明\n" +
                    "預設開啟的功能有 BlackList AutoKick AntiHalal SubscribeBanList,可以根據需要來調整。\n\n" +
                    "注意 : 加入機器人即同意讓渡部分 Ban Users 權限予本項目組,並授權本組依據 @" + Config.ReportGroupName + " 置頂規定,代表群管理對群組內成員逕行封鎖\n" +
                    "如不同意請立即移除此機器人,且禁止違背群主意願私自添加",
                    RawMessage.message_id
                    );
                return(new CallbackMessage());
            }

            if (Config.DisableBanList)
            {
                return(new CallbackMessage());
            }

            if (Config.CourtGroupName != null && RawMessage.GetMessageChatInfo().username == Config.CourtGroupName)
            {
                BanUser banUser = dbmgr.GetUserBanStatus(JoinedUser.id);
                if (banUser.Ban == 0)
                {
                    string resultmsg = "這位使用者被封鎖了\n請先閱讀置頂及公告區\n未依規定發表的任何訊息皆不回應\n\n" + banUser.GetBanMessageMarkdown();
                    TgApi.getDefaultApiConnection().sendMessage(
                        RawMessage.GetMessageChatInfo().id,
                        resultmsg,
                        RawMessage.message_id,
                        TgApi.PARSEMODE_MARKDOWN
                        );
                }
                else
                {
                    if (!Config.EnableAutoKickNotBanUserinCourtGroup)
                    {
                        return(new CallbackMessage());
                    }
                    if (Config.GetIsInWhiteList(JoinedUser.id))
                    {
                        return(new CallbackMessage());
                    }
                    TgApi.getDefaultApiConnection().sendMessage(
                        RawMessage.GetMessageChatInfo().id,
                        "您未被封鎖,請離開,本群僅提供被 CNBL 封鎖者申訴",
                        RawMessage.message_id,
                        TgApi.PARSEMODE_MARKDOWN
                        );

                    TgApi.getDefaultApiConnection().restrictChatMember(
                        RawMessage.GetMessageChatInfo().id,
                        JoinedUser.id,
                        0, false, false, false, false);
                    new Thread(delegate()
                    {
                        Thread.Sleep(30000);
                        try
                        {
                            TgApi.getDefaultApiConnection().kickChatMember(
                                RawMessage.GetMessageChatInfo().id,
                                JoinedUser.id,
                                GetTime.GetUnixTime() + 300
                                );
                            TgApi.getDefaultApiConnection().restrictChatMember(
                                RawMessage.GetMessageChatInfo().id,
                                JoinedUser.id,
                                0, true, false, false, false);
                        }
                        catch
                        {
                        }
                    }).Start();
                }

                return(new CallbackMessage());
            }

            if (groupCfg.BlackList == 0)
            {
                BanUser banUser   = dbmgr.GetUserBanStatus(JoinedUser.id);
                string  resultmsg = "";
                if (banUser.Ban == 0)
                {
                    string banReason;
                    if (banUser.ChannelMessageID != 0 && Config.MainChannelName != null)
                    {
                        banReason = "[原因請點選這裡查看](https://t.me/" + Config.MainChannelName + "/" +
                                    banUser.ChannelMessageID + ")\n";
                    }
                    else
                    {
                        banReason = "\n原因 : " + banUser.Reason + "\n";
                    }
                    if (banUser.Level == 0)
                    {
                        resultmsg += "警告 : 這個使用者「將會」對群組造成負面影響\n" +
                                     banReason +
                                     "\n若有誤判,可以到 [這個群組](https://t.me/" + Config.CourtGroupName + ") 尋求申訴";
                        if (groupCfg.AutoKick == 0)
                        {
                            try
                            {
                                SetActionResult result = TgApi.getDefaultApiConnection().kickChatMember(
                                    RawMessage.GetMessageChatInfo().id,
                                    JoinedUser.id,
                                    GetTime.GetUnixTime() + 300
                                    );
                                if (!result.ok)
                                {
                                    resultmsg += "\n注意 : 由於開啟了 AutoKick 但沒有 Ban Users 權限" +
                                                 ",請關閉此功能或給予權限(Ban users)。";
                                }
                            }
                            catch
                            {
                            }
                        }
                    }
                    else if (banUser.Level == 1)
                    {
                        resultmsg += "警告 : 這個使用者「可能」對群組造成負面影響" + banReason + "\n" +
                                     "請群組管理員多加留意\n" +
                                     "對於被警告的使用者,你可以通過 [這個群組](https://t.me/" + Config.CourtGroupName + ") 以請求解除。";
                    }
                }
                else
                {
                    if (Config.DisableBanList == false && groupCfg.AutoDeleteSpamMessage == 0)
                    {
                        int                max_point      = 0;
                        SpamMessage        max_point_spam = new SpamMessage();
                        List <SpamMessage> spamMsgList    = dbmgr.GetSpamMessageList();
                        foreach (SpamMessage smsg in spamMsgList)
                        {
                            int points = 0;
                            switch (smsg.Type)
                            {
                            case 8:
                                points = new SpamMessageChecker().GetNamePoints(smsg.Messages,
                                                                                RawMessage.from.full_name());
                                break;
                            }

                            if (points >= smsg.MinPoints)
                            {
                                if (points > max_point)
                                {
                                    max_point      = points;
                                    max_point_spam = smsg;
                                }
                            }
                        }

                        if (max_point > 0)
                        {
                            //Send alert and delete alert after 60 second
                            new Thread(delegate()
                            {
                                string msg = "";
                                if (Config.ReportGroupName == Config.CourtGroupName)
                                {
                                    msg = "偵測到 " + max_point_spam.FriendlyName +
                                          " ,已自動回報,如有誤封請聯繫 @" + Config.ReportGroupName + " 提出申訴。";
                                }
                                else
                                {
                                    msg = "偵測到 " + max_point_spam.FriendlyName +
                                          " ,已自動回報,如有誤報請加入 @" + Config.ReportGroupName + " 以報告誤報" +
                                          " ,如有疑慮請加入 @" + Config.CourtGroupName + " 提出申訴。";
                                }
                                SendMessageResult autodeletespammessagesendresult = TgApi.getDefaultApiConnection()
                                                                                    .sendMessage(
                                    RawMessage.GetMessageChatInfo().id,
                                    msg
                                    );

                                ProcessMessage(max_point_spam, RawMessage.message_id, RawMessage.GetMessageChatInfo().id,
                                               RawMessage.GetSendUser(), max_point);
                                Thread.Sleep(30000);
                                TgApi.getDefaultApiConnection().deleteMessage(
                                    autodeletespammessagesendresult.result.chat.id,
                                    autodeletespammessagesendresult.result.message_id
                                    );
                            }).Start();
                            return(new CallbackMessage {
                                StopProcess = true
                            });
                        }
                        else
                        {
                            return(new CallbackMessage());
                        }
                    }
                }

                new Thread(delegate()
                {
                    SendMessageResult autodeletespammessagesendresult = TgApi.getDefaultApiConnection().sendMessage(
                        RawMessage.GetMessageChatInfo().id,
                        resultmsg,
                        RawMessage.message_id,
                        TgApi.PARSEMODE_MARKDOWN
                        );
                    Thread.Sleep(60000);
                    TgApi.getDefaultApiConnection().deleteMessage(
                        autodeletespammessagesendresult.result.chat.id,
                        autodeletespammessagesendresult.result.message_id
                        );
                    TgApi.getDefaultApiConnection().deleteMessage(
                        RawMessage.GetMessageChatInfo().id,
                        RawMessage.message_id
                        );
                }).Start();

                return(new CallbackMessage {
                    StopProcess = true
                });
            }

            return(new CallbackMessage());
        }