Пример #1
0
        private bool SharedCommands(TgMessage RawMessage, string JsonMessage, string Command)
        {
            switch (Command)
            {
            case "/getid":
                string info = "Send from:\n" + RawMessage.GetSendUser().GetUserTextInfo();
                if (RawMessage.GetForwardedFromUser() != null)
                {
                    info += "\n\nForwarded from (User):\n" + RawMessage.GetForwardedFromUser().GetUserTextInfo();
                }
                if (RawMessage.GetForwardedFromChat() != null)
                {
                    info += "\n\nForwarded from (Channel):\n" + RawMessage.GetForwardedFromChat().GetChatTextInfo();
                }
                if (RawMessage.GetReplyMessage() != null)
                {
                    info += "\n\nReply to: \n" + RawMessage.GetReplyMessage().GetSendUser().GetUserTextInfo();
                }
                TgApi.getDefaultApiConnection().sendMessage(RawMessage.GetMessageChatInfo().id, info, RawMessage.message_id);
                return(true);

            case "/help":
                TgApi.getDefaultApiConnection().sendMessage(
                    RawMessage.GetMessageChatInfo().id,
                    RAPI.getHelpContent(RawMessage),
                    RawMessage.message_id
                    );
                return(true);

            default:
                break;
            }
            return(false);
        }
Пример #2
0
 internal UserInfo GetUserInfo(TgMessage RawMessage, string from)
 {
     if (RawMessage.reply_to_message == null)
     {
         return(null);
     }
     if (from == "r" || from == "reply")
     {
         return(RawMessage.GetReplyMessage().GetSendUser());
     }
     if (from == "f" || from == "fwd")
     {
         return(RawMessage.GetReplyMessage().GetForwardedFromUser());
     }
     return(null);
 }
Пример #3
0
 internal bool DeleteMessageCommand(TgMessage RawMessage)
 {
     if (TgApi.getDefaultApiConnection().checkIsAdmin(RawMessage.chat.id, RawMessage.from.id) ||
         RAPI.getIsBotOP(RawMessage.GetSendUser().id) || RAPI.getIsBotAdmin(RawMessage.GetSendUser().id))
     {
         TgApi.getDefaultApiConnection().deleteMessage(RawMessage.GetReplyMessage().chat.id, RawMessage.GetReplyMessage().message_id);
         return(true);
     }
     return(true);
 }
Пример #4
0
        internal bool Ban(TgMessage RawMessage, string JsonMessage, string Command)
        {
            int banSpace = RawMessage.text.IndexOf(" ");

            if (banSpace == -1)
            {
                TgApi.getDefaultApiConnection().sendMessage(
                    RawMessage.GetMessageChatInfo().id,
                    Strings.BAN_HELP_MESSAGE,
                    RawMessage.message_id
                    );
                return(true);
            }

            int      BanUserId        = 0;
            long     ExpiresTime      = 0;
            int      Level            = 0;
            string   Reason           = "";
            UserInfo BanUserInfo      = null;
            string   value            = RawMessage.text.Substring(banSpace + 1);
            int      valLen           = value.Length;
            bool     notCommonBan     = true;
            int      commandBanLength = 0;
            int      banDay           = 0;

            if (valLen > 3)
            {
                if (valLen == 4)
                {
                    if (value.Substring(0, 4) == "spam")
                    {
                        commandBanLength = 4;
                        Reason           = Strings.SPAM;
                        banDay           = Config.DefaultSpamBanDay;
                        notCommonBan     = false;
                    }

                    //if (value.Substring(0, 4) == "coin")
                    //{
                    //    commandBanLength = 4;
                    //    Reason = Strings.COIN;
                    //    banDay = Config.DefaultCoinBanDay;
                    //    notCommonBan = false;
                    //}
                }

                if (valLen == 5)
                {
                    if (value.Substring(0, 5) == "halal")
                    {
                        commandBanLength = 5;
                        Reason           = Strings.HALAL;
                        banDay           = Config.DefaultHalalBanDay;
                        notCommonBan     = false;
                    }
                }

                //if(valLen == 6)
                //    if (value.Substring(0, 6) == "innsfw")
                //    {
                //        commandBanLength = 6;
                //        Reason = Strings.INNSFW;
                //        banDay = Config.DefaultInNsfwBanDay;
                //        notCommonBan = false;
                //    }

                //if (valLen == 7)
                //{
                //    if (value.Substring(0, 7) == "spammer")
                //    {
                //        commandBanLength = 7;
                //        Reason = Strings.SPAMMER;
                //        banDay = Config.DefaultSpammerBanDay;
                //        notCommonBan = false;
                //    }

                //    if (value.Substring(0, 7) == "outnsfw")
                //    {
                //        commandBanLength = 7;
                //        Reason = Strings.OUTNSFW;
                //        banDay = Config.DefaultOutNsfwBanDay;
                //        notCommonBan = false;
                //    }

                //    if (value.Substring(0, 7) == "crawler")
                //    {
                //        commandBanLength = 7;
                //        Reason = Strings.CRAWLER;
                //        banDay = Config.DefaultCrawlerBanDay;
                //        notCommonBan = false;
                //    }
                //}

                if (banDay > 0)
                {
                    ExpiresTime = GetTime.GetUnixTime() + (banDay * 86400);
                }
            }

            if (!notCommonBan)
            {
                if (valLen > (commandBanLength + 1))
                {
                    if (value[commandBanLength] != ' ')
                    {
                        TgApi.getDefaultApiConnection().sendMessage(
                            RawMessage.GetMessageChatInfo().id,
                            Strings.BAN_ERROR_MESSAGE + " err_a1",
                            RawMessage.message_id
                            );
                        return(true);
                    }

                    UserInfo tmpUinfo =
                        new GetValues().GetByTgMessage(
                            new Dictionary <string, string> {
                        { "from", value.Substring(6) }
                    }, RawMessage);
                    if (tmpUinfo == null)
                    {
                        return(true);                  // 如果没拿到使用者信息则代表出现了异常
                    }
                    BanUserId = tmpUinfo.id;
                    if (tmpUinfo.language_code != null && tmpUinfo.language_code != "__CAN_NOT_GET_USERINFO__")
                    {
                        BanUserInfo = tmpUinfo;
                    }
                }
                else
                {
                    UserInfo tmpUinfo =
                        new GetValues().GetByTgMessage(new Dictionary <string, string>(), RawMessage);
                    if (tmpUinfo == null)
                    {
                        return(true);                  // 如果没拿到使用者信息则代表出现了异常
                    }
                    BanUserId = tmpUinfo.id;
                    if (tmpUinfo.language_code != null)
                    {
                        if (tmpUinfo.language_code != "__CAN_NOT_GET_USERINFO__")
                        {
                            BanUserInfo = tmpUinfo;
                        }
                    }
                    else
                    {
                        BanUserInfo = tmpUinfo;
                    }
                }
            }



            if (notCommonBan)
            {
                try
                {
                    Dictionary <string, string> banValues = CommandDecoder.cutKeyIsValue(value);
                    string tmpString = "";

                    // 获取使用者信息
                    UserInfo tmpUinfo = new GetValues().GetByTgMessage(banValues, RawMessage);
                    if (tmpUinfo == null)
                    {
                        return(true);                  // 如果没拿到使用者信息则代表出现了异常
                    }
                    BanUserId = tmpUinfo.id;
                    if (tmpUinfo.language_code != null)
                    {
                        if (tmpUinfo.language_code != "__CAN_NOT_GET_USERINFO__")
                        {
                            BanUserInfo = tmpUinfo;
                        }
                    }
                    else
                    {
                        BanUserInfo = tmpUinfo;
                    }

                    // 获取 ExpiresTime
                    long tmpExpiresTime = new GetValues().GetBanUnixTime(banValues, RawMessage);
                    if (tmpExpiresTime == -1)
                    {
                        return(true);                      // 如果过期时间是 -1 则代表出现了异常
                    }
                    ExpiresTime = tmpExpiresTime;

                    // 获取 Level
                    tmpString = banValues.GetValueOrDefault("l", "__invalid__");
                    if (tmpString == "__invalid__")
                    {
                        tmpString = banValues.GetValueOrDefault("level", "0");
                    }
                    if (!int.TryParse(tmpString, out Level))
                    {
                        TgApi.getDefaultApiConnection().sendMessage(
                            RawMessage.GetMessageChatInfo().id,
                            Strings.BAN_ERROR_MESSAGE + " err8",
                            RawMessage.message_id
                            );
                        return(true);
                    }

                    // 获取 Reason
                    Reason = new GetValues().GetReason(banValues, RawMessage);
                    if (Reason == null)
                    {
                        return(true);                // 如果 Reason 是 null 则代表出现了异常
                    }
                    if (Reason.ToLower() == "halal")
                    {
                        Reason = Strings.HALAL;
                    }
                    if (Reason.ToLower() == "spam")
                    {
                        Reason = Strings.SPAM;
                    }
                    // if (Reason.ToLower() == "spammer") Reason = Strings.SPAMMER;
                    // if (Reason.ToLower() == "innsfw") Reason = Strings.INNSFW;
                    // if (Reason.ToLower() == "outnsfw") Reason = Strings.OUTNSFW;
                    // if (Reason.ToLower() == "coin") Reason = Strings.COIN;
                    // if (Reason.ToLower() == "crawler") Reason = Strings.CRAWLER;
                }
                catch (DecodeException)
                {
                    TgApi.getDefaultApiConnection().sendMessage(
                        RawMessage.GetMessageChatInfo().id,
                        Strings.BAN_ERROR_MESSAGE + " err10",
                        RawMessage.message_id
                        );
                    return(true);
                }
            }

            if (Config.GetIsInWhiteList(BanUserId))
            {
                TgApi.getDefaultApiConnection().sendMessage(
                    RawMessage.GetMessageChatInfo().id,
                    Strings.EXEC_FAIL + Strings.BAN_ERROR_USER_IN_WHITELIST,
                    RawMessage.message_id
                    );
                return(false);
            }

            int AdminID = RawMessage.GetSendUser().id;

            if (RawMessage.GetMessageChatInfo().id == Config.InternGroupID)
            {
                AdminID = 1;
            }

            bool status;

            if (BanUserInfo == null)
            {
                status = Config.GetDatabaseManager().BanUser(
                    AdminID,
                    BanUserId,
                    Level,
                    ExpiresTime,
                    RAPI.escapeMarkdown(Reason)
                    );
            }
            else if (RawMessage.GetReplyMessage().new_chat_member != null)
            {
                status = Config.GetDatabaseManager().BanUser(
                    AdminID,
                    BanUserId,
                    Level,
                    ExpiresTime,
                    RAPI.escapeMarkdown(Reason),
                    0,
                    0,
                    BanUserInfo
                    );
            }
            else
            {
                status = Config.GetDatabaseManager().BanUser(
                    AdminID,
                    BanUserId,
                    Level,
                    ExpiresTime,
                    RAPI.escapeMarkdown(Reason),
                    RawMessage.GetMessageChatInfo().id,
                    RawMessage.GetReplyMessage().message_id,
                    BanUserInfo
                    );
            }
            //if (status)
            //{
            TgApi.getDefaultApiConnection().sendMessage(
                RawMessage.GetMessageChatInfo().id,
                Strings.EXEC_OK,
                RawMessage.message_id
                );
            return(true);
            //}
            //else
            //{
            //    TgApi.getDefaultApiConnection().sendMessage(
            //        RawMessage.GetMessageChatInfo().id,
            //        "操作成功。\n\n請注意 : 轉發使用者訊息到頻道或是發送使用者訊息到頻道失敗,請您手動發送至 @" + Config.MainChannelName + " 。 err11",
            //        RawMessage.message_id
            //        );
            //    return true;
            //}
            //return false;
        }
Пример #5
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());
        }
        internal bool Ban(TgMessage RawMessage, string JsonMessage, string Command)
        {
            int banSpace = RawMessage.text.IndexOf(" ");

            if (banSpace == -1)
            {
                TgApi.getDefaultApiConnection().sendMessage(
                    RawMessage.GetMessageChatInfo().id,
                    "/cnban [i|id=1] [l|level=0] [m|minutes=0] [h|hours=0] [d|days=15] [f|from=f|fwd|r|reply] [halal [f|fwd|r|reply]]" +
                    " r|reason=\"asdfsadf asdfadsf\"\n\n" +
                    "m: 分鐘, h: 小時, d: 天\n" +
                    "from 選項僅在 id 未被定義時起作用\n" +
                    "ID 選擇優先度: 手動輸入 ID > 回覆的被轉發訊息 > 回覆的訊息\n" +
                    "選項優先度: 簡寫 > 全名\n" +
                    "halal 選項只能單獨使用,不能與其他選項共同使用,並且需要回覆一則訊息,否則將觸發異常。\n\n" +
                    "Example:\n" +
                    "/cnban id=1 m=0 h=0 d=15 level=0 reason=\"aaa bbb\\n\\\"ccc\\\" ddd\"\n" +
                    "/cnban halal\n" +
                    "/cnban halal=reply",
                    RawMessage.message_id
                    );
                return(true);
            }

            int      BanUserId   = 0;
            long     ExpiresTime = 0;
            int      Level       = 0;
            string   Reason      = "";
            UserInfo BanUserInfo = null;
            string   value       = RawMessage.text.Substring(banSpace + 1);
            int      valLen      = value.Length;
            bool     NotHalal    = true;

            if (valLen >= 5)
            {
                if (value.Substring(0, 5) == "halal")
                {
                    NotHalal = false;
                    Reason   = "無法理解的語言";
                    if (valLen > 6)
                    {
                        if (value[5] != ' ')
                        {
                            TgApi.getDefaultApiConnection().sendMessage(
                                RawMessage.GetMessageChatInfo().id,
                                "您的輸入有錯誤,請檢查您的輸入,或使用 /cnban 查詢幫助。 err_a1",
                                RawMessage.message_id
                                );
                            return(true);
                        }

                        UserInfo tmpUinfo =
                            new GetValues().GetByTgMessage(
                                new Dictionary <string, string> {
                            { "from", value.Substring(6) }
                        }, RawMessage);
                        if (tmpUinfo == null)
                        {
                            return(true);                  // 如果没拿到使用者信息则代表出现了异常
                        }
                        BanUserId = tmpUinfo.id;
                        if (tmpUinfo.language_code != null && tmpUinfo.language_code != "__CAN_NOT_GET_USERINFO__")
                        {
                            BanUserInfo = tmpUinfo;
                        }
                    }
                    else
                    {
                        UserInfo tmpUinfo =
                            new GetValues().GetByTgMessage(new Dictionary <string, string>(), RawMessage);
                        if (tmpUinfo == null)
                        {
                            return(true);                  // 如果没拿到使用者信息则代表出现了异常
                        }
                        BanUserId = tmpUinfo.id;
                        if (tmpUinfo.language_code != null)
                        {
                            if (tmpUinfo.language_code != "__CAN_NOT_GET_USERINFO__")
                            {
                                BanUserInfo = tmpUinfo;
                            }
                        }
                        else
                        {
                            BanUserInfo = tmpUinfo;
                        }
                    }
                }
            }

            if (NotHalal)
            {
                try
                {
                    Dictionary <string, string> banValues = CommandDecoder.cutKeyIsValue(value);
                    string tmpString = "";

                    // 获取使用者信息
                    UserInfo tmpUinfo = new GetValues().GetByTgMessage(banValues, RawMessage);
                    if (tmpUinfo == null)
                    {
                        return(true);                  // 如果没拿到使用者信息则代表出现了异常
                    }
                    BanUserId = tmpUinfo.id;
                    if (tmpUinfo.language_code != null)
                    {
                        if (tmpUinfo.language_code != "__CAN_NOT_GET_USERINFO__")
                        {
                            BanUserInfo = tmpUinfo;
                        }
                    }
                    else
                    {
                        BanUserInfo = tmpUinfo;
                    }

                    // 获取 ExpiresTime
                    long tmpExpiresTime = new GetValues().GetBanUnixTime(banValues, RawMessage);
                    if (tmpExpiresTime == -1)
                    {
                        return(true);                      // 如果过期时间是 -1 则代表出现了异常
                    }
                    ExpiresTime = tmpExpiresTime;

                    // 获取 Level
                    tmpString = banValues.GetValueOrDefault("l", "__invalid__");
                    if (tmpString == "__invalid__")
                    {
                        tmpString = banValues.GetValueOrDefault("level", "0");
                    }
                    if (!int.TryParse(tmpString, out Level))
                    {
                        TgApi.getDefaultApiConnection().sendMessage(
                            RawMessage.GetMessageChatInfo().id,
                            "您的輸入有錯誤,請檢查您的輸入,或使用 /cnban 查詢幫助。 err8",
                            RawMessage.message_id
                            );
                        return(true);
                    }

                    // 获取 Reason
                    Reason = new GetValues().GetReason(banValues, RawMessage);
                    if (Reason == null)
                    {
                        return(true);                // 如果 Reason 是 null 则代表出现了异常
                    }
                    if (Reason.ToLower() == "halal")
                    {
                        Reason = "無法理解的語言";
                    }
                }
                catch (DecodeException)
                {
                    TgApi.getDefaultApiConnection().sendMessage(
                        RawMessage.GetMessageChatInfo().id,
                        "您的輸入有錯誤,請檢查您的輸入,或使用 /cnban 查詢幫助 err10",
                        RawMessage.message_id
                        );
                    return(true);
                }
            }

            if (RAPI.getIsInWhitelist(BanUserId))
            {
                TgApi.getDefaultApiConnection().sendMessage(
                    RawMessage.GetMessageChatInfo().id,
                    "操作失敗 : 使用者在白名單",
                    RawMessage.message_id
                    );
                return(false);
            }

            bool status;

            if (RawMessage.GetMessageChatInfo().id == Temp.InternGroupID && RawMessage.GetReplyMessage().GetSendUser().id == TgApi.getDefaultApiConnection().getMe().id)
            {
                status = Temp.GetDatabaseManager().BanUser(
                    1,
                    BanUserId,
                    Level,
                    ExpiresTime,
                    Reason,
                    RawMessage.GetMessageChatInfo().id,
                    RawMessage.GetReplyMessage().message_id,
                    BanUserInfo
                    );
            }
            else if (BanUserInfo == null)
            {
                status = Temp.GetDatabaseManager().BanUser(
                    RawMessage.GetSendUser().id,
                    BanUserId,
                    Level,
                    ExpiresTime,
                    Reason
                    );
            }
            else if (RawMessage.GetReplyMessage().new_chat_member != null)
            {
                status = Temp.GetDatabaseManager().BanUser(
                    RawMessage.GetSendUser().id,
                    BanUserId,
                    Level,
                    ExpiresTime,
                    Reason,
                    0,
                    0,
                    BanUserInfo
                    );
            }
            else
            {
                status = Temp.GetDatabaseManager().BanUser(
                    RawMessage.GetSendUser().id,
                    BanUserId,
                    Level,
                    ExpiresTime,
                    Reason,
                    RawMessage.GetMessageChatInfo().id,
                    RawMessage.GetReplyMessage().message_id,
                    BanUserInfo
                    );
            }
            //if (status)
            //{
            TgApi.getDefaultApiConnection().sendMessage(
                RawMessage.GetMessageChatInfo().id,
                "操作成功。",
                RawMessage.message_id
                );
            return(true);
            //}
            //else
            //{
            //    TgApi.getDefaultApiConnection().sendMessage(
            //        RawMessage.GetMessageChatInfo().id,
            //        "操作成功。\n\n請注意 : 轉發使用者訊息到頻道或是發送使用者訊息到頻道失敗,請您手動發送至 @" + Temp.MainChannelName + " 。 err11",
            //        RawMessage.message_id
            //        );
            //    return true;
            //}
            //return false;
        }
        internal bool Ban(TgMessage RawMessage, string JsonMessage, string Command)
        {
            int banSpace = RawMessage.text.IndexOf(" ");

            if (banSpace == -1)
            {
                TgApi.getDefaultApiConnection().sendMessage(
                    RawMessage.GetMessageChatInfo().id,
                    "/ban [i|id=1] [l|level=0] [m|minutes=0] [h|hours=0] [d|days=15] [f|from=f|fwd|r|reply] [halal [f|fwd|r|reply]]" +
                    " r|reason=\"asdfsadf asdfadsf\"\n\n" +
                    "m: 分钟, h: 小时, d: 天\n" +
                    "from 选项仅在 id 未被定义时起作用\n" +
                    "ID 选择优先级: 手动输入的 ID > 回复的被转发消息 > 回复的消息\n" +
                    "选项优先级: 简写 > 全名\n" +
                    "halal 选项只能单独使用,不能与其他选项共同使用,并且需要回复一条消息,否则将会触发异常。\n\n" +
                    "Example:\n" +
                    "/ban id=1 m=0 h=0 d=15 level=0 reason=\"aaa bbb\\n\\\"ccc\\\" ddd\"\n" +
                    "/ban halal\n" +
                    "/ban halal=reply",
                    RawMessage.message_id
                    );
                return(true);
            }
            int      BanUserId   = 0;
            long     ExpiresTime = 0;
            int      Level       = 0;
            string   Reason      = "";
            UserInfo BanUserInfo = null;
            string   value       = RawMessage.text.Substring(banSpace + 1);
            int      valLen      = value.Length;
            bool     NotHalal    = true;

            if (valLen >= 5)
            {
                if (value.Substring(0, 5) == "halal")
                {
                    NotHalal = false;
                    Reason   = "Halal (中国人无法识别的语言)";
                    if (valLen > 6)
                    {
                        if (value[5] != ' ')
                        {
                            TgApi.getDefaultApiConnection().sendMessage(
                                RawMessage.GetMessageChatInfo().id,
                                "您的输入有误,请检查您的输入,或使用 /ban 查看帮助。 err_a1",
                                RawMessage.message_id
                                );
                            return(true);
                        }
                        UserInfo tmpUinfo = new GetValues().GetByTgMessage(new Dictionary <string, string> {
                            { "from", value.Substring(6) }
                        }, RawMessage);
                        if (tmpUinfo == null)
                        {
                            return(true);                  // 如果没拿到用户信息则代表出现了异常
                        }
                        else
                        {
                            BanUserId = tmpUinfo.id;
                            if (tmpUinfo.language_code != null && tmpUinfo.language_code != "__CAN_NOT_GET_USERINFO__")
                            {
                                BanUserInfo = tmpUinfo;
                            }
                        }
                    }
                    else
                    {
                        UserInfo tmpUinfo = new GetValues().GetByTgMessage(new Dictionary <string, string> {
                        }, RawMessage);
                        if (tmpUinfo == null)
                        {
                            return(true);                  // 如果没拿到用户信息则代表出现了异常
                        }
                        else
                        {
                            BanUserId = tmpUinfo.id;
                            if (tmpUinfo.language_code != null)
                            {
                                if (tmpUinfo.language_code != "__CAN_NOT_GET_USERINFO__")
                                {
                                    BanUserInfo = tmpUinfo;
                                }
                            }
                            else
                            {
                                BanUserInfo = tmpUinfo;
                            }
                        }
                    }
                }
            }
            if (NotHalal)
            {
                try
                {
                    Dictionary <string, string> banValues = CommandDecoder.cutKeyIsValue(value);
                    string tmpString = "";

                    // 获取用户信息
                    UserInfo tmpUinfo = new GetValues().GetByTgMessage(banValues, RawMessage);
                    if (tmpUinfo == null)
                    {
                        return(true);                  // 如果没拿到用户信息则代表出现了异常
                    }
                    else
                    {
                        BanUserId = tmpUinfo.id;
                        if (tmpUinfo.language_code != null)
                        {
                            if (tmpUinfo.language_code != "__CAN_NOT_GET_USERINFO__")
                            {
                                BanUserInfo = tmpUinfo;
                            }
                        }
                        else
                        {
                            BanUserInfo = tmpUinfo;
                        }
                    }

                    // 获取 ExpiresTime
                    long tmpExpiresTime = new GetValues().GetBanUnixTime(banValues, RawMessage);
                    if (tmpExpiresTime == -1)
                    {
                        return(true);                      // 如果过期时间是 -1 则代表出现了异常
                    }
                    else
                    {
                        ExpiresTime = tmpExpiresTime;
                    }

                    // 获取 Level
                    tmpString = banValues.GetValueOrDefault("l", "__invalid__");
                    if (tmpString == "__invalid__")
                    {
                        tmpString = banValues.GetValueOrDefault("level", "0");
                    }
                    if (!int.TryParse(tmpString, out Level))
                    {
                        TgApi.getDefaultApiConnection().sendMessage(
                            RawMessage.GetMessageChatInfo().id,
                            "您的输入有误,请检查您的输入,或使用 /ban 查看帮助。 err8",
                            RawMessage.message_id
                            );
                        return(true);
                    }

                    // 获取 Reason
                    Reason = new GetValues().GetReason(banValues, RawMessage);
                    if (Reason == null)
                    {
                        return(true);                // 如果 Reason 是 null 则代表出现了异常
                    }
                    if (Reason.ToLower() == "halal")
                    {
                        Reason = "Halal (中国人无法识别的语言)";
                    }
                }
                catch (DecodeException)
                {
                    TgApi.getDefaultApiConnection().sendMessage(
                        RawMessage.GetMessageChatInfo().id,
                        "您的输入有误,请检查您的输入,请使用 /ban 来查看帮助 err10",
                        RawMessage.message_id
                        );
                    return(true);
                }
            }
            bool status;

            if (BanUserInfo == null)
            {
                status = Temp.GetDatabaseManager().BanUser(
                    RawMessage.GetSendUser().id,
                    BanUserId,
                    Level,
                    ExpiresTime,
                    Reason
                    );
            }
            else
            {
                status = Temp.GetDatabaseManager().BanUser(
                    RawMessage.GetSendUser().id,
                    BanUserId,
                    Level,
                    ExpiresTime,
                    Reason,
                    RawMessage.GetMessageChatInfo().id,
                    RawMessage.GetReplyMessage().message_id,
                    BanUserInfo
                    );
            }
            if (status)
            {
                TgApi.getDefaultApiConnection().sendMessage(
                    RawMessage.GetMessageChatInfo().id,
                    "操作成功。",
                    RawMessage.message_id
                    );
                return(true);
            }
            else
            {
                TgApi.getDefaultApiConnection().sendMessage(
                    RawMessage.GetMessageChatInfo().id,
                    "操作成功。\n\n请注意:转发用户消息到频道或发送用户信息到频道失败,请您手动发送至 @" + Temp.MainChannelName + " 。 err11",
                    RawMessage.message_id
                    );
                return(true);
            }
            //return false;
        }
        internal bool AdminCommands(TgMessage RawMessage, string JsonMessage, string Command)
        {
            if (RawMessage.GetReplyMessage() != null)
            {
                if (RawMessage.GetMessageChatInfo().id == Temp.InternGroupID && RawMessage.GetReplyMessage().GetSendUser().id == TgApi.getDefaultApiConnection().getMe().id)
                {
                    switch (Command)
                    {
                    case "/devban":
                    case "/ban":
                        new BanUserCommand().Ban(RawMessage, JsonMessage, Command);
                        throw new StopProcessException();
                    }
                }
            }
            if (RAPI.getIsBotOP(RawMessage.GetSendUser().id) || RAPI.getIsBotAdmin(RawMessage.GetSendUser().id))
            {
                switch (Command)
                {
                case "/groups":
                    new AllGroups().Groups_Status(RawMessage);
                    throw new StopProcessException();
                }
                if (!Temp.DisableBanList)
                {
                    switch (Command)
                    {
                    case "/groupadmin":
                        new GetAdmins().GetGroupAdmins(RawMessage);
                        throw new StopProcessException();

                    case "/getspampoints":
                        new SpamStringManager().GetSpamPoints(RawMessage);
                        throw new StopProcessException();

                    case "/devban":
                    case "/ban":
                        new BanUserCommand().Ban(RawMessage, JsonMessage, Command);
                        throw new StopProcessException();

                    case "/devunban":
                    case "/unban":
                        new UnbanUserCommand().Unban(RawMessage);
                        throw new StopProcessException();

                    case "/addhk":
                        new HKWhitelist().addHKWhitelist(RawMessage);
                        throw new StopProcessException();

                    case "/delhk":
                        new HKWhitelist().deleteHKWhitelist(RawMessage);
                        throw new StopProcessException();

                    case "/lshk":
                        new HKWhitelist().listHKWhitelist(RawMessage);
                        throw new StopProcessException();
                    }
                }
                if (RAPI.getIsBotAdmin(RawMessage.GetSendUser().id))
                {
                    if (!Temp.DisableBanList)
                    {
                        switch (Command)
                        {
                        case "/getallspamstr":
                            new SpamStringManager().GetAllInfo(RawMessage);
                            return(true);

                        case "/addspamstr":
                            new SpamStringManager().Add(RawMessage);
                            throw new StopProcessException();

                        case "/delspamstr":
                            new SpamStringManager().Remove(RawMessage);
                            throw new StopProcessException();

                        case "/suban":
                            new BanMultiUserCommand().BanMulti(RawMessage, JsonMessage, Command);
                            throw new StopProcessException();

                        case "/suunban":
                            new UnBanMultiUserCommand().UnbanMulti(RawMessage);
                            throw new StopProcessException();

                        case "/getspamstr":
                            new SpamStringManager().GetName(RawMessage);
                            throw new StopProcessException();

                        case "/reloadspamstr":
                            new SpamStringManager().reloadSpamList(RawMessage);
                            throw new StopProcessException();
                        }
                    }
                    switch (Command)
                    {
                    case "/points":
                        new SpamStringManager().GetSpamKeywords(RawMessage);
                        throw new StopProcessException();

                    case "/cleanup":
                        new CleanUP().CleanUP_Status(RawMessage);
                        throw new StopProcessException();

                    case "/say":
                        new BroadCast().BroadCast_Status(RawMessage);
                        throw new StopProcessException();

                    case "/sdall":
                        new OP().SDAll(RawMessage);
                        throw new StopProcessException();

                    case "/seall":
                        new OP().SEAll(RawMessage);
                        throw new StopProcessException();

                    case "/addop":
                        new OP().addOP(RawMessage);
                        throw new StopProcessException();

                    case "/delop":
                        new OP().delOP(RawMessage);
                        throw new StopProcessException();

                    case "/addwl":
                        new Whitelist().addWhitelist(RawMessage);
                        throw new StopProcessException();

                    case "/delwl":
                        new Whitelist().deleteWhitelist(RawMessage);
                        throw new StopProcessException();

                    case "/lswl":
                        new Whitelist().listWhitelist(RawMessage);
                        throw new StopProcessException();

                    case "/block":
                        new BlockGroup().addBlockGroup(RawMessage);
                        throw new StopProcessException();

                    case "/unblock":
                        new BlockGroup().deleteBlockGroup(RawMessage);
                        throw new StopProcessException();

                    case "/blocks":
                        new BlockGroup().listBlockGroup(RawMessage);
                        throw new StopProcessException();
                    }
                }
            }

            return(false);
        }