private void ProcessMessage(SpamMessage smsg, int MsgID, long ChatID, UserInfo SendUserInfo)
        {
            long banUtilTime;

            if (smsg.BanDays == 0 && smsg.BanHours == 0 && smsg.BanMinutes == 0)
            {
                banUtilTime = 0;
            }
            else
            {
                banUtilTime = GetTime.GetUnixTime() + (smsg.BanDays * 86400) + (smsg.BanHours * 3600) + (smsg.BanMinutes * 60);
            }
            if (smsg.AutoBlackList)
            {
                if (Temp.GetDatabaseManager().GetUserBanStatus(SendUserInfo.id).Ban == 0)
                {
                    return;
                }
                new Task(() =>
                {
                    Temp.GetDatabaseManager().BanUser(
                        0,
                        SendUserInfo.id,
                        smsg.BanLevel,
                        banUtilTime,
                        "System AUTO BAN: \n" + smsg.FriendlyName,
                        ChatID,
                        MsgID,
                        SendUserInfo
                        );
                }).Start();
            }
            if (smsg.AutoDelete)
            {
                new Task(() =>
                {
                    TgApi.getDefaultApiConnection().deleteMessage(ChatID, MsgID);
                }).Start();
            }
            if (smsg.AutoKick)
            {
                new Task(() =>
                {
                    TgApi.getDefaultApiConnection().kickChatMember(ChatID, SendUserInfo.id, banUtilTime);
                }).Start();
            }
            if (smsg.AutoMute)
            {
                TgApi.getDefaultApiConnection().restrictChatMember(
                    ChatID,
                    SendUserInfo.id,
                    banUtilTime,
                    SendMessage: true,
                    SendMedia: false
                    );
            }
        }
Beispiel #2
0
                    public SpamType AddMessage(SocketUserMessage message, int maxMessages, int secondsCapture, int maxRepetitions, int cacheSize, out List <SpamMessage> messages)
                    {
                        var msg = new SpamMessage();

                        msg.MessageId = message.Id;
                        msg.Message   = message.Content;

                        Messages.Add(msg);

                        var returnType = SpamType.None;

                        //Consider time based spam checks as well as count based spam checks
                        if (Messages.Count(x => x.TimeStamp > DateTime.UtcNow - TimeSpan.FromSeconds(secondsCapture)) >= maxMessages)
                        {
                            msg.Responded = true;
                            messages      = Messages;
                            returnType    = SpamType.TooFast;
                        }
                        else if (Messages.GroupBy(x => x.Message).Max(x => x.Count()) >= maxRepetitions)
                        {
                            msg.Responded = true;
                            var mostCommon = Messages.GroupBy(x => x.Message).OrderByDescending(x => x.Count()).FirstOrDefault()?.Key;

                            if (mostCommon != null)
                            {
                                if (mostCommon.Equals(message.Content, StringComparison.InvariantCultureIgnoreCase))
                                {
                                    messages = Messages;
                                }
                                else
                                {
                                    messages = Messages.Where(x => x.Message.Equals(mostCommon)).ToList();
                                }
                            }
                            else
                            {
                                messages = Messages;
                            }

                            returnType = SpamType.RepetitiveMessage;
                        }
                        else
                        {
                            messages = null;
                        }

                        //This is done after `messages` is assigned to the reference when setting msg.Responded sets the item in the current list.
                        Messages = Messages.OrderByDescending(x => x.TimeStamp).Take(cacheSize).ToList();
                        return(returnType);
                    }
Beispiel #3
0
        private void ProcessMessage(SpamMessage smsg, int MsgID, long ChatID, UserInfo SendUserInfo, int point)
        {
            long banUtilTime;

            if (smsg.BanDays == 0 && smsg.BanHours == 0 && smsg.BanMinutes == 0)
            {
                banUtilTime = 0;
            }
            else
            {
                banUtilTime = GetTime.GetUnixTime() + smsg.BanDays * 86400 + smsg.BanHours * 3600 +
                              smsg.BanMinutes * 60;
            }

            if (smsg.AutoKick)
            {
                new Thread(delegate()
                {
                    //TgApi.getDefaultApiConnection().restrictChatMember(
                    //    ChatID,
                    //    SendUserInfo.id,
                    //    GetTime.GetUnixTime() + 60,
                    //    false);
                    Thread.Sleep(5500);
                    TgApi.getDefaultApiConnection()
                    .kickChatMember(ChatID, SendUserInfo.id, GetTime.GetUnixTime() + 1800);
                }).Start();
            }
            if (smsg.AutoBlackList)
            {
                new Thread(delegate()
                {
                    if (Temp.GetDatabaseManager().GetUserBanStatus(SendUserInfo.id).Ban == 0)
                    {
                        return;
                    }
                    new Task(() =>
                    {
                        Temp.GetDatabaseManager().BanUser(
                            0,
                            SendUserInfo.id,
                            smsg.BanLevel,
                            banUtilTime,
                            smsg.FriendlyName + "\n分數 : " + point,
                            ChatID,
                            MsgID,
                            SendUserInfo
                            );
                    }).Start();
                }).Start();
            }
            else
            {
                if (smsg.AutoMute)
                {
                    TgApi.getDefaultApiConnection().restrictChatMember(
                        ChatID,
                        SendUserInfo.id,
                        banUtilTime,
                        true,
                        false
                        );
                }
            }

            if (smsg.AutoDelete)
            {
                new Thread(delegate()
                {
                    Thread.Sleep(10000);
                    TgApi.getDefaultApiConnection().deleteMessage(ChatID, MsgID);
                }).Start();
            }
        }
Beispiel #4
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());
        }
Beispiel #5
0
        public void GetSpamPoints(TgMessage RawMessage)
        {
            int spacePath = RawMessage.text.IndexOf(" ");

            if (spacePath == -1)
            {
                TgApi.getDefaultApiConnection().sendMessage(
                    RawMessage.GetMessageChatInfo().id,
                    "/getspampoints text=\"被检测消息,如果包含英文和数字以外的字符需要加引号\"" +
                    " rule=\"规则的友好名称,如果包含英文和数字以外的字符需要加引号\"",
                    RawMessage.message_id
                    );
                return;
            }
            Dictionary <string, string> banValues = CommandDecoder.cutKeyIsValue(RawMessage.text.Substring(spacePath + 1));
            string text = banValues.GetValueOrDefault("text", null);
            string rule = banValues.GetValueOrDefault("rule", null);

            if (text == null || rule == null)
            {
                TgApi.getDefaultApiConnection().sendMessage(
                    RawMessage.GetMessageChatInfo().id,
                    "您的输入有误",
                    RawMessage.message_id
                    );
                return;
            }
            SpamMessage smsg = Temp.GetDatabaseManager().GetSpamRule(rule);

            if (smsg == null)
            {
                TgApi.getDefaultApiConnection().sendMessage(
                    RawMessage.GetMessageChatInfo().id,
                    "没有找到您指定的规则,请重新指定。您亦可使用 /getspamstr 获取所有规则。",
                    RawMessage.message_id
                    );
                return;
            }
            int points = 0;

            switch (smsg.Type)
            {
            case 0:
                points = new SpamMessageChecker().GetEqualsPoints(smsg.Messages, text);
                break;

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

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

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

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

            case 5:
                points = new SpamMessageChecker().GetIndiaPoints(text);
                break;
            }
            TgApi.getDefaultApiConnection().sendMessage(
                RawMessage.GetMessageChatInfo().id,
                "得分: " + points,
                RawMessage.message_id
                );
        }
        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());
        }