internal bool banstatus(TgMessage RawMessage)
        {
            int banstatSpace = RawMessage.text.IndexOf(" ");

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

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

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

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

            TgApi.getDefaultApiConnection().sendMessage(RawMessage.GetMessageChatInfo().id, "您的輸入有錯誤,請輸入正確的 UserID",
                                                        RawMessage.message_id);
            return(true);
        }
Пример #2
0
        internal bool CUP(TgMessage RawMessage)
        {
            TgApi.getDefaultApiConnection()
            .sendMessage(RawMessage.chat.id, "處理中.........!", RawMessage.message_id);
            using (var db = new BlacklistDatabaseContext())
            {
                string          groups   = "";
                List <GroupCfg> groupCfg = null;
                try
                {
                    groupCfg = db.GroupConfig.ToList();
                }
                catch (InvalidOperationException)
                {
                    return(false);
                }

                if (groupCfg == null)
                {
                    return(false);
                }
                foreach (GroupCfg cfg in groupCfg)
                {
                    bool status = false;
                    SendMessageResult result = TgApi.getDefaultApiConnection().sendMessage(
                        cfg.GroupID,
                        "測試訊息(不用理會此訊息)");

                    if (result.ok)
                    {
                        TgApi.getDefaultApiConnection().deleteMessage(cfg.GroupID, result.result.message_id);
                        status = true;
                    }

                    if (status)
                    {
                        groups = groups + cfg.GroupID + " : Bot是聊天成員,略過\n";
                    }
                    else
                    {
                        groups = groups + cfg.GroupID + " : Bot不是聊天成員,";
                        if (Config.GetDatabaseManager().RemoveGroupCfg(cfg.GroupID))
                        {
                            groups = groups + "移除成功\n";
                        }
                        else
                        {
                            groups = groups + "移除失敗\n";
                        }
                    }
                }

                var charlist = new List <string>();

                for (var i = 0; i < groups.Length; i += 4000)
                {
                    charlist.Add(groups.Substring(i, Math.Min(4000, groups.Length - i)));
                }

                foreach (string msg in charlist)
                {
                    TgApi.getDefaultApiConnection().sendMessage(
                        RawMessage.GetMessageChatInfo().id,
                        msg,
                        RawMessage.message_id,
                        TgApi.PARSEMODE_HTML
                        );
                }
            }

            TgApi.getDefaultApiConnection().sendMessage(
                RawMessage.GetMessageChatInfo().id,
                "CleanUP 執行完畢",
                RawMessage.message_id,
                TgApi.PARSEMODE_HTML
                );
            return(true);
        }
Пример #3
0
        public void GetName(TgMessage RawMessage)
        {
            int                spacePath   = RawMessage.text.IndexOf(" ");
            string             spamstrings = "";
            List <SpamMessage> msgs        = Temp.GetDatabaseManager().GetSpamMessageList();

            if (spacePath == -1)
            {
                if (msgs.Count == 0)
                {
                    TgApi.getDefaultApiConnection().sendMessage(RawMessage.GetMessageChatInfo().id, "<code>null</code>",
                                                                RawMessage.message_id);
                    return;
                }

                foreach (SpamMessage msg in msgs)
                {
                    spamstrings += "FriendlyName: <code>" + msg.FriendlyName + "</code>, Enabled: " + msg.Enabled +
                                   "\n";
                }
                spamstrings += "\n您可以使用 /getspamstr [FriendlyName] 來取得詳細訊息。";

                TgApi.getDefaultApiConnection().sendMessage(
                    RawMessage.GetMessageChatInfo().id,
                    spamstrings,
                    RawMessage.message_id,
                    TgApi.PARSEMODE_HTML
                    );
            }
            else
            {
                string name = RawMessage.text.Substring(spacePath + 1);
                foreach (SpamMessage msg in msgs)
                {
                    if (name != msg.FriendlyName)
                    {
                        continue;
                    }
                    if (spamstrings != "")
                    {
                        spamstrings += "\n\n------\n\n";
                    }
                    spamstrings += "- " + msg.FriendlyName + ":" +
                                   "\n    Enabled: " + msg.Enabled +
                                   "\n    Type: " + msg.Type +
                                   "\n    AutoGlobalBlock: " + msg.AutoBlackList +
                                   "\n    AutoDelete: " + msg.AutoDelete +
                                   "\n    AutoKick: " + msg.AutoKick +
                                   "\n    AutoMute: " + msg.AutoMute +
                                   "\n    BanDays: " + msg.BanDays +
                                   "\n    BanHours: " + msg.BanHours +
                                   "\n    BanMinutes: " + msg.BanMinutes +
                                   "\n    MinPoints: " + msg.MinPoints +
                                   "\n    Messages: ";
                    foreach (SpamMessageObj i in msg.Messages)
                    {
                        spamstrings += "\n    - Message: " + TgApi.getDefaultApiConnection().jsonEncode(i.Message) +
                                       "\n      Point: " + i.Point;
                    }
                    spamstrings += "";
                }

                if (spamstrings == "")
                {
                    spamstrings = "沒有查到這筆紀錄,請檢查您的輸入。";
                }


                var spamlist = new List <string>();

                for (var i = 0; i < spamstrings.Length; i += 4000)
                {
                    spamlist.Add(spamstrings.Substring(i, Math.Min(4000, spamstrings.Length - i)));
                }

                foreach (string msg in spamlist)
                {
                    TgApi.getDefaultApiConnection().sendMessage(
                        RawMessage.GetMessageChatInfo().id,
                        "<code>" + msg + "</code>",
                        RawMessage.message_id,
                        TgApi.PARSEMODE_HTML
                        );
                }
            }
        }
Пример #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,
                    "/twban [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" +
                    "/twban id=1 m=0 h=0 d=15 level=0 reason=\"aaa bbb\\n\\\"ccc\\\" ddd\"\n" +
                    "/twban halal\n" +
                    "/twban 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,
                                "您的輸入有錯誤,請檢查您的輸入,或使用 /twban 查詢幫助。 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,
                            "您的輸入有錯誤,請檢查您的輸入,或使用 /twban 查詢幫助。 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,
                        "您的輸入有錯誤,請檢查您的輸入,或使用 /twban 查詢幫助 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;
        }
Пример #5
0
        public void GetSpamPoints(TgMessage RawMessage)
        {
            int spacePath = RawMessage.text.IndexOf(" ");

            if (spacePath == -1)
            {
                TgApi.getDefaultApiConnection().sendMessage(
                    RawMessage.GetMessageChatInfo().id,
                    "/getspampoints 被檢測訊息",
                    //"/getspampoints text=\"被檢測訊息,如果包含英文與數字以外的文字需要加引號\"" +
                    //" rule=\"規則的暱稱,如果包含英文與數字以外的文字需要加引號\"",
                    RawMessage.message_id
                    );
                return;
            }

            //Dictionary<string, string> banValues =
            //    CommandDecoder.cutKeyIsValue(RawMessage.text.Substring(spacePath + 1));
            string text = RawMessage.text.Replace("/getspampoints ", "");

            //string text = banValues.GetValueOrDefault("text", null);
            //string rule = banValues.GetValueOrDefault("rule", null);
            if (text == null)
            {
                TgApi.getDefaultApiConnection().sendMessage(
                    RawMessage.GetMessageChatInfo().id,
                    "你的輸入有錯誤",
                    RawMessage.message_id
                    );
                return;
            }

            //if (rule == null)
            //{
            List <SpamMessage> spamMsgList = Temp.GetDatabaseManager().GetSpamMessageList();
            string             msg         = "";
            bool found = false;

            foreach (SpamMessage smsg in spamMsgList)
            {
                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;

                case 6:
                    points = new SpamMessageChecker().GetContainsPoints(smsg.Messages, text);
                    break;

                case 7:
                    points = new SpamMessageChecker().GetRussiaPoints(text);
                    break;

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

                if (points > 0)
                {
                    found = true;
                    msg   = msg + smsg.FriendlyName + " : " + points + "\n";
                }
            }

            if (found)
            {
                TgApi.getDefaultApiConnection().sendMessage(
                    RawMessage.GetMessageChatInfo().id,
                    msg,
                    RawMessage.message_id
                    );
            }
            else
            {
                TgApi.getDefaultApiConnection().sendMessage(
                    RawMessage.GetMessageChatInfo().id,
                    "未得分",
                    RawMessage.message_id
                    );
            }
            //}
            //else
            //{
            //    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;
            //        case 6:
            //            points = new SpamMessageChecker().GetContainsPoints(smsg.Messages, text);
            //            break;
            //        case 7:
            //            points = new SpamMessageChecker().GetRussiaPoints(text);
            //            break;
            //    }
            //
            //    TgApi.getDefaultApiConnection().sendMessage(
            //        RawMessage.GetMessageChatInfo().id,
            //        "得分: " + points,
            //        RawMessage.message_id
            //    );
            //}
        }
Пример #6
0
        public void GetSpamKeywords(TgMessage RawMessage)
        {
            int spacePath = RawMessage.text.IndexOf(" ");

            if (spacePath == -1)
            {
                TgApi.getDefaultApiConnection().sendMessage(
                    RawMessage.GetMessageChatInfo().id,
                    "/points 被檢測訊息",
                    RawMessage.message_id
                    );
                return;
            }

            string             text        = RawMessage.text.Replace("/points ", "");
            List <SpamMessage> spamMsgList = Temp.GetDatabaseManager().GetSpamMessageList();
            string             msg         = "";
            bool found = false;

            foreach (SpamMessage smsg in spamMsgList)
            {
                string keywords = "";
                switch (smsg.Type)
                {
                case 0:
                    keywords = new SpamMessageKeyword().GetEqualsKeyword(smsg.Messages, text);
                    break;

                case 1:
                    keywords = new SpamMessageKeyword().GetRegexKeyword(smsg.Messages, text);
                    break;

                case 2:
                    keywords = new SpamMessageKeyword().GetSpamKeyword(smsg.Messages, text);
                    break;

                case 3:
                    keywords = new SpamMessageKeyword().GetIndexOfKeyword(smsg.Messages, text);
                    break;

                case 4:
                    keywords = new SpamMessageKeyword().GetHalalKeyword(text);
                    break;

                case 5:
                    keywords = new SpamMessageKeyword().GetIndiaKeyword(text);
                    break;

                case 6:
                    keywords = new SpamMessageKeyword().GetContainsKeyword(smsg.Messages, text);
                    break;

                case 7:
                    keywords = new SpamMessageKeyword().GetRussiaKeyword(text);
                    break;

                case 8:
                    keywords = new SpamMessageKeyword().GetNameKeyword(smsg.Messages, text);
                    break;
                }

                if (keywords != "")
                {
                    found = true;
                    msg   = msg + smsg.FriendlyName + " : \n" + keywords + "\n";
                }
            }

            if (found)
            {
                TgApi.getDefaultApiConnection().sendMessage(
                    RawMessage.GetMessageChatInfo().id,
                    msg,
                    RawMessage.message_id
                    );
            }
            else
            {
                TgApi.getDefaultApiConnection().sendMessage(
                    RawMessage.GetMessageChatInfo().id,
                    "未得分",
                    RawMessage.message_id
                    );
            }
        }
        internal long GetBanUnixTime(Dictionary <string, string> banValues, TgMessage RawMessage)
        {
            string tmpString   = "";
            int    Minutes     = 0;
            int    Hours       = 0;
            int    Days        = 0;
            long   ExpiresTime = 0;

            tmpString = banValues.GetValueOrDefault("m", "__invalid__");
            if (tmpString == "__invalid__")
            {
                tmpString = banValues.GetValueOrDefault("minutes", "0");
            }
            if (!int.TryParse(tmpString, out Minutes))
            {
                TgApi.getDefaultApiConnection().sendMessage(
                    RawMessage.GetMessageChatInfo().id,
                    "您的輸入有錯誤,請檢查您的輸入,或使用 /twban 查詢幫助。 err4"
                    );
                return(-1);
            }

            tmpString = banValues.GetValueOrDefault("h", "__invalid__");
            if (tmpString == "__invalid__")
            {
                tmpString = banValues.GetValueOrDefault("hours", "0");
            }
            if (!int.TryParse(tmpString, out Hours))
            {
                TgApi.getDefaultApiConnection().sendMessage(
                    RawMessage.GetMessageChatInfo().id,
                    "您的輸入有錯誤,請檢查您的輸入,或使用 /twban 查詢幫助。 err5"
                    );
                return(-1);
            }

            tmpString = banValues.GetValueOrDefault("d", "__invalid__");
            if (tmpString == "__invalid__")
            {
                if (Minutes != 0 || Hours != 0)
                {
                    tmpString = banValues.GetValueOrDefault("days", "0");
                }
                else
                {
                    tmpString = banValues.GetValueOrDefault("days", "7");
                }
            }
            if (!int.TryParse(tmpString, out Days))
            {
                TgApi.getDefaultApiConnection().sendMessage(
                    RawMessage.GetMessageChatInfo().id,
                    "您的輸入有錯誤,請檢查您的輸入,或使用 /twban 查詢幫助。 err6"
                    );
                return(-1);
            }

            long totalTime = Minutes * 60 + Hours * 360 + Days * 86400;

            if (totalTime == 0)
            {
                ExpiresTime = 0;
            }
            else
            {
                if (totalTime > 316224000)
                {
                    TgApi.getDefaultApiConnection().sendMessage(
                        RawMessage.GetMessageChatInfo().id,
                        "最大時間不可超過 3660 天,請重新輸入。你可以將 m, h, d 3個項目改成 0 以代表永久,您可以使用 /ban 取得帮助。 err7"
                        );
                    return(-1);
                }

                ExpiresTime = GetTime.GetUnixTime() + totalTime;
            }

            return(ExpiresTime);
        }
        internal bool UnbanMulti(TgMessage RawMessage)
        {
            int banSpace = RawMessage.text.IndexOf(" ");

            if (banSpace == -1)
            {
                TgApi.getDefaultApiConnection().sendMessage(
                    RawMessage.GetMessageChatInfo().id,
                    "/suunban [i|id=1] [f|from=f|fwd|r|reply]" +
                    " r|reason=\"asdfsadf asdfadsf\"\n\n" +
                    "from 選項僅在 id 未被定義時起作用\n" +
                    "ID 選擇優先度: 手動輸入 ID > 回覆的被轉發訊息 > 回覆的訊息\n" +
                    "選項優先度: 簡寫 > 全名\n" +
                    "Example:\n" +
                    "/suunban id=1 reason=\"aaa bbb\\n\\\"ccc\\\" ddd\"\n" +
                    "/suunban",
                    RawMessage.message_id
                    );
                return(true);
            }

            int[]  UsersArray = { };
            bool   status     = false;
            int    BanUserId  = 0;
            string Reason;

            try
            {
                Dictionary <string, string> banValues =
                    CommandDecoder.cutKeyIsValue(RawMessage.text.Substring(banSpace + 1));

                // 获取使用者信息
                UsersArray = new GetValues().GetUserIDs(banValues, RawMessage);

                Reason = new GetValues().GetReason(banValues, RawMessage);
                if (Reason == null)
                {
                    return(true);                // 如果 Reason 是 null 則代表出现了异常
                }
            }
            catch (DecodeException)
            {
                TgApi.getDefaultApiConnection().sendMessage(
                    RawMessage.GetMessageChatInfo().id,
                    "您的輸入有錯誤,請檢查您的輸入,或使用 /ban 取得幫助 err10",
                    RawMessage.message_id
                    );
                return(true);
            }


            new Thread(delegate()
            {
                foreach (int userid in UsersArray)
                {
                    BanUserId = userid;
                    try
                    {
                        status = Temp.GetDatabaseManager().UnbanUser(
                            RawMessage.GetSendUser().id,
                            BanUserId,
                            Reason
                            );
                    }
                    catch (InvalidOperationException)
                    {
                        TgApi.getDefaultApiConnection().sendMessage(
                            RawMessage.GetMessageChatInfo().id,
                            "操作失敗,這位使用者(" + BanUserId + ")目前可能没有被封鎖。",
                            RawMessage.message_id
                            );
                    }

                    Thread.Sleep(3500);
                }

                //if (status)
                //{
                TgApi.getDefaultApiConnection().sendMessage(
                    RawMessage.GetMessageChatInfo().id,
                    "操作成功。",
                    RawMessage.message_id
                    );
                //}
                //else
                //{
                //    TgApi.getDefaultApiConnection().sendMessage(
                //        RawMessage.GetMessageChatInfo().id,
                //        "操作成功。\n\n請注意 : 轉發使用者訊息到頻道或是發送使用者訊息到頻道失敗,請您手動發送至  @" + Temp.MainChannelName + " 。 err11",
                //        RawMessage.message_id
                //        );
                //    return true;
                //}
            }).Start();
            return(true);
        }
        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 UserInfo GetByTgMessage(Dictionary <string, string> banValues, TgMessage RawMessage)
        {
            UserInfo BanUserInfo = null;
            string   tmpString   = "";

            tmpString = banValues.GetValueOrDefault("i", "__invalid__");
            if (tmpString == "__invalid__")
            {
                tmpString = banValues.GetValueOrDefault("id", "__invalid__");
                if (tmpString == "__invalid__")
                {
                    UserInfo tmpUserInfo;
                    tmpString = banValues.GetValueOrDefault("f", "__invalid__");
                    if (tmpString == "__invalid__")
                    {
                        tmpString = banValues.GetValueOrDefault("from", "__invalid__");
                        if (tmpString == "__invalid__")
                        {
                            tmpUserInfo = GetUserInfo(RawMessage, "fwd");
                            if (tmpUserInfo == null)
                            {
                                tmpUserInfo = GetUserInfo(RawMessage, "reply");
                                if (tmpUserInfo == null)
                                {
                                    TgApi.getDefaultApiConnection().sendMessage(
                                        RawMessage.GetMessageChatInfo().id,
                                        "没有找到任何使用者 ID,請檢查您的輸入,或使用 /twban 查看帮助。 err1"
                                        );
                                    return(null);
                                }
                            }

                            BanUserInfo = tmpUserInfo;
                        }
                        else
                        {
                            tmpUserInfo = GetUserInfo(RawMessage, tmpString);
                            if (tmpUserInfo == null)
                            {
                                TgApi.getDefaultApiConnection().sendMessage(
                                    RawMessage.GetMessageChatInfo().id,
                                    "未檢查到您指定的回覆訊息的 ID,請檢查您的輸入,或使用 /twban 查看帮助。 err2"
                                    );
                                return(null);
                            }

                            BanUserInfo = tmpUserInfo;
                        }
                    }
                    else
                    {
                        tmpUserInfo = GetUserInfo(RawMessage, tmpString);
                        if (tmpUserInfo == null)
                        {
                            TgApi.getDefaultApiConnection().sendMessage(
                                RawMessage.GetMessageChatInfo().id,
                                "未檢查到您指定的回覆訊息的 ID,請檢查您的輸入,或使用 /twban 查看帮助。 err2"
                                );
                            return(null);
                        }

                        BanUserInfo = tmpUserInfo;
                    }
                }
            }

            if (BanUserInfo == null)
            {
                int BanUserId;
                if (!int.TryParse(tmpString, out BanUserId))
                {
                    TgApi.getDefaultApiConnection().sendMessage(
                        RawMessage.GetMessageChatInfo().id,
                        "您的輸入有錯誤,請檢查您的輸入,或使用 /twban 查詢幫助。 err3"
                        );
                    return(null);
                }

                return(new UserInfo {
                    id = BanUserId, language_code = "__CAN_NOT_GET_USERINFO__"
                });
            }

            return(BanUserInfo);
        }
        internal bool Unban(TgMessage RawMessage)
        {
            int banSpace = RawMessage.text.IndexOf(" ");

            if (banSpace == -1)
            {
                TgApi.getDefaultApiConnection().sendMessage(
                    RawMessage.GetMessageChatInfo().id,
                    "/cnunban [i|id=1] [f|from=f|fwd|r|reply]" +
                    " r|reason=\"asdfsadf asdfadsf\"\n\n" +
                    "from 選項僅在 id 未被定義時起作用\n" +
                    "ID 選擇優先度: 手動輸入 ID > 回覆的被轉發訊息 > 回覆的訊息\n" +
                    "選項優先度: 簡寫 > 全名\n" +
                    "Example:\n" +
                    "/cnunban id=1 reason=\"aaa bbb\\n\\\"ccc\\\" ddd\"\n" +
                    "/cnunban",
                    RawMessage.message_id
                    );
                return(true);
            }

            int      BanUserId = 0;
            string   Reason;
            UserInfo BanUserInfo = null;

            try
            {
                Dictionary <string, string> banValues =
                    CommandDecoder.cutKeyIsValue(RawMessage.text.Substring(banSpace + 1));

                // 获取使用者信息
                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;
                }

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

            new UnBanCaller().UnBanCallerThread(BanUserId);
            bool status;

            try
            {
                if (BanUserInfo == null)
                {
                    status = Temp.GetDatabaseManager().UnbanUser(
                        RawMessage.GetSendUser().id,
                        BanUserId,
                        Reason
                        );
                }
                else
                {
                    status = Temp.GetDatabaseManager().UnbanUser(
                        RawMessage.GetSendUser().id,
                        BanUserId,
                        Reason,
                        BanUserInfo
                        );
                }
            }
            catch (InvalidOperationException)
            {
                TgApi.getDefaultApiConnection().sendMessage(
                    RawMessage.GetMessageChatInfo().id,
                    "操作失敗,這位使用者目前可能没有被封鎖。",
                    RawMessage.message_id
                    );
                return(true);
            }

            if (status)
            {
                TgApi.getDefaultApiConnection().sendMessage(
                    RawMessage.GetMessageChatInfo().id,
                    "操作成功。",
                    RawMessage.message_id
                    );
                if (RawMessage.GetMessageChatInfo().id == Temp.CourtGroupID)
                {
                    TgApi.getDefaultApiConnection()
                    .kickChatMember(RawMessage.GetMessageChatInfo().id, BanUserId, GetTime.GetUnixTime() + 1);
                }
                return(true);
            }

            TgApi.getDefaultApiConnection().sendMessage(
                RawMessage.GetMessageChatInfo().id,
                "操作失敗,或許使用者未被封鎖。",
                RawMessage.message_id
                );
            return(false);
            //    TgApi.getDefaultApiConnection().sendMessage(
            //        RawMessage.GetMessageChatInfo().id,
            //        "操作成功。\n\n請注意 : 轉發使用者訊息到頻道或是發送使用者訊息到頻道失敗,請您手動發送至  @" + Temp.MainChannelName + " 。 err11",
            //        RawMessage.message_id
            //        );
            //    return true;
            //return false;
        }
Пример #12
0
        internal long GetBanUnixTime(Dictionary <string, string> banValues, TgMessage RawMessage)
        {
            string tmpString   = "";
            int    Minutes     = 0;
            int    Hours       = 0;
            int    Days        = 0;
            long   ExpiresTime = 0;

            tmpString = banValues.GetValueOrDefault("m", "__invalid__");
            if (tmpString == "__invalid__")
            {
                tmpString = banValues.GetValueOrDefault("minutes", "0");
            }
            if (!int.TryParse(tmpString, out Minutes))
            {
                TgApi.getDefaultApiConnection().sendMessage(
                    RawMessage.GetMessageChatInfo().id,
                    "您的输入有误,请检查您的输入,或使用 /ban 查看帮助。 err4"
                    );
                return(-1);
            }
            tmpString = banValues.GetValueOrDefault("h", "__invalid__");
            if (tmpString == "__invalid__")
            {
                tmpString = banValues.GetValueOrDefault("hours", "0");
            }
            if (!int.TryParse(tmpString, out Hours))
            {
                TgApi.getDefaultApiConnection().sendMessage(
                    RawMessage.GetMessageChatInfo().id,
                    "您的输入有误,请检查您的输入,或使用 /ban 查看帮助。 err5"
                    );
                return(-1);
            }
            tmpString = banValues.GetValueOrDefault("d", "__invalid__");
            if (tmpString == "__invalid__")
            {
                if (Minutes != 0 || Hours != 0)
                {
                    tmpString = banValues.GetValueOrDefault("days", "0");
                }
                else
                {
                    tmpString = banValues.GetValueOrDefault("days", "15");
                }
            }
            if (!int.TryParse(tmpString, out Days))
            {
                TgApi.getDefaultApiConnection().sendMessage(
                    RawMessage.GetMessageChatInfo().id,
                    "您的输入有误,请检查您的输入,或使用 /ban 查看帮助。 err6"
                    );
                return(-1);
            }
            long totalTime = (Minutes * 60) + (Hours * 360) + (Days * 86400);

            if (totalTime == 0)
            {
                ExpiresTime = 0;
            }
            else
            {
                if (totalTime > 31622400)
                {
                    TgApi.getDefaultApiConnection().sendMessage(
                        RawMessage.GetMessageChatInfo().id,
                        "最大时间不得超过 366 天,请重新输入。您可以将 m, h, d 三个项目的值改为 0 以代表永久,您亦可使用 /ban 查看帮助。 err7"
                        );
                    return(-1);
                }
                ExpiresTime = GetTime.GetUnixTime() + totalTime;
            }
            return(ExpiresTime);
        }
        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());
        }
Пример #14
0
        internal bool HelpStatus(TgMessage RawMessage)
        {
            string finalHelpMsg;
            string groupHelp = "/leave - 離開群組\n" +
                               "/soamenable - 啟用功能\n" +
                               "/soamdisable - 關閉功能\n" +
                               "/soamstatus - 取得目前群組開啟功能";
            string privateHelp = "";
            string sharedHelp  = "/banstat - 查詢處分狀態\n" +
                                 "/user - 取得 User ID\n" +
                                 "/lsop - Operator 名冊";

            switch (RawMessage.chat.type)
            {
            case "group":
            case "supergroup":
                finalHelpMsg = groupHelp + "\n" + sharedHelp;
                break;

            case "private":
                finalHelpMsg = privateHelp + "\n" + sharedHelp;
                break;

            default:
                finalHelpMsg = sharedHelp;
                break;
            }

            if (RAPI.getIsBotOP(RawMessage.from.id) || RAPI.getIsBotAdmin(RawMessage.from.id))
            {
                finalHelpMsg = finalHelpMsg + "\n\nOperator指令:\n" +
                               "/groupadmin - 取得群組管理員名單\n" +
                               "/twban - 封鎖\n" +
                               "/ban - 封鎖\n" +
                               "/twunban - 解除封鎖\n" +
                               "/unban - 解除封鎖\n" +
                               "/addhk - 新增使用者至HK白名單\n" +
                               "/delhk - 從HK白名單中刪除使用者\n" +
                               "/lshk - 取得HK白名單列表\n" +
                               "/groups - 取得所有群組\n" +
                               "/getspampoints - 測試關鍵字";
            }
            if (RAPI.getIsBotAdmin(RawMessage.from.id))
            {
                finalHelpMsg = finalHelpMsg + "\n\nAdmin指令:\n" +
                               "/suban - 批次封鎖\n" +
                               "/suunban - 批次解除封鎖\n" +
                               "/addspamstr - 新增 1 個自動規則\n" +
                               "/delspamstr - 刪除 1 個自動規則\n" +
                               "/getspamstr - 查看自動規則列表\n" +
                               "/getallspamstr - 查看所有自動規則列表\n" +
                               "/reloadspamstr - 重新載入自動規則列表\n" +
                               "/points - 取得匹配到的關鍵字\n" +
                               "/say - 廣播\n" +
                               "/addwl - 新增使用者至白名單\n" +
                               "/delwl - 從白名單中刪除使用者\n" +
                               "/lswl - 取得白名單列表\n" +
                               "/block - 新增群組至禁止使用名單\n" +
                               "/unblock - 從禁止使用名單中刪除群組\n" +
                               "/blocks - 取得禁止使用名單\n" +
                               "/addop - 新增 Operator\n" +
                               "/delop - 解除 Operator\n" +
                               "/seall - 開啟所有群組功能\n" +
                               "/sdall - 關閉所有群組功能\n" +
                               "/cleanup - 清理機器人不在群組內的群組資料\n";
            }
            finalHelpMsg = finalHelpMsg + "\n如要贊助本項目請洽[生產公司](http://t.me/DonateDoramiBot)";
            TgApi.getDefaultApiConnection()
            .sendMessage(RawMessage.GetMessageChatInfo().id, finalHelpMsg, RawMessage.message_id, ParseMode: TgApi.PARSEMODE_MARKDOWN);
            return(true);
        }
Пример #15
0
        public void Add(TgMessage RawMessage)
        {
            string HelpContent =
                "解析 JSON 时出现错误,請参考下面的例子 : \n```\n" +
                "{\n    " +
                "\"FriendlyName\": \"規則名稱\",\n    " +
                "\"Enabled\": true,\n    " +
                "\"Type\": 0,\n    " +
                "\"AutoBlackList\": false,\n    " +
                "\"AutoDelete\": true,\n    " +
                "\"AutoKick\": false,\n    " +
                "\"AutoMute\": false,\n    " +
                "\"BanLevel\": 1,\n    " +
                "\"BanDays\": 1,\n    " +
                "\"BanHours\": 0,\n    " +
                "\"BanMinutes\": 0,\n    " +
                "\"MinPoints\": 1,\n    " +
                "\"Messages\": " +
                "[\n        " +
                "{\n            " +
                "\"Message\": \"__THIS_IS_A_TEST_SPAM_MESSAGE__\",\n            " +
                "\"Point\": 1\n        " +
                "}\n    " +
                "]\n}" +
                "\n```\n" +
                "关于 Type 的说明 : \n完全匹配 = 0" +
                "\n正則表达式 = 1" +
                "\n使用迷之算法匹配 = 2" +
                "\nstring.IndexOf(\"target\")!=-1 = 3" +
                "\n清真 = 4" +
                "\n印度 = 5" +
                "\n包含 = 6" +
                "\n俄文 = 7" +
                "\n名稱 = 8";

            RawMessage.text = RawMessage.text.Replace("\"M\"", "\"Message\"");
            RawMessage.text = RawMessage.text.Replace("\"P\"", "\"Point\"");
            int spacePath = RawMessage.text.IndexOf(" ");

            if (spacePath == -1)
            {
                TgApi.getDefaultApiConnection().sendMessage(
                    RawMessage.GetMessageChatInfo().id,
                    HelpContent,
                    RawMessage.message_id,
                    TgApi.PARSEMODE_MARKDOWN
                    );
                return;
            }

            string      jsonText = RawMessage.text.Substring(spacePath + 1);
            SpamMessage smsg;

            try
            {
                smsg = (SpamMessage) new DataContractJsonSerializer(
                    typeof(SpamMessage)
                    ).ReadObject(
                    new MemoryStream(
                        Encoding.UTF8.GetBytes(jsonText)
                        )
                    );
            }
            catch (Exception)
            {
                TgApi.getDefaultApiConnection().sendMessage(
                    RawMessage.GetMessageChatInfo().id,
                    HelpContent,
                    RawMessage.message_id,
                    TgApi.PARSEMODE_MARKDOWN
                    );
                return;
            }

            Temp.GetDatabaseManager().AddSpamMessage(smsg);
            TgApi.getDefaultApiConnection().sendMessage(
                RawMessage.GetMessageChatInfo().id,
                "ok",
                RawMessage.message_id,
                TgApi.PARSEMODE_MARKDOWN
                );
        }
        public CallbackMessage OnSupergroupCommandReceive(TgMessage RawMessage, string JsonMessage, string Command)
        {
            try
            {
                GroupCfg cfg = Temp.GetDatabaseManager().GetGroupConfig(RawMessage.chat.id);
                if (cfg.AdminOnly == 0)
                {
                    if (TgApi.getDefaultApiConnection().checkIsAdmin(RawMessage.chat.id, RawMessage.from.id) ||
                        RAPI.getIsBotAdmin(RawMessage.from.id) || RAPI.getIsBotOP(RawMessage.from.id))
                    {
                    }
                    else
                    {
                        if (cfg.AutoDeleteCommand == 0)
                        {
                            new Thread(delegate()
                            {
                                SendMessageResult autodeletecommandsendresult = TgApi.getDefaultApiConnection()
                                                                                .sendMessage(
                                    RawMessage.GetMessageChatInfo().id,
                                    "請您不要亂玩機器人的指令,有問題請聯絡群組管理員。"
                                    );
                                Thread.Sleep(60000);
                                TgApi.getDefaultApiConnection().deleteMessage(
                                    autodeletecommandsendresult.result.chat.id,
                                    autodeletecommandsendresult.result.message_id
                                    );
                            }).Start();
                            TgApi.getDefaultApiConnection().deleteMessage(RawMessage.chat.id, RawMessage.message_id);
                        }

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

                if (SharedCommand(RawMessage, JsonMessage, Command))
                {
                    return(new CallbackMessage());
                }
                switch (Command)
                {
                case "/leave":
                    new LeaveCommand().Leave(RawMessage);
                    break;

                case "/soamenable":
                    new SoamManager().SoamEnable(RawMessage);
                    break;

                case "/soamdisable":
                    new SoamManager().SoamDisable(RawMessage);
                    break;

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

                case "/soamstat":
                case "/soamstatus":
                    new SoamManager().SoamStatus(RawMessage);
                    break;
                    //case "/cnkick":
                    //    if (Temp.DisableBanList)
                    //    {
                    //        TgApi.getDefaultApiConnection().sendMessage(
                    //            RawMessage.chat.id,
                    //            "非常抱歉,目前版本已禁用封鎖用戶的功能,請聯絡管理員開啟此功能。",
                    //            RawMessage.message_id
                    //            );
                    //        break;
                    //    }
                    //    if (RawMessage.reply_to_message == null)
                    //    {
                    //        TgApi.getDefaultApiConnection().sendMessage(RawMessage.chat.id, "請回覆一則訊息", RawMessage.message_id);
                    //        return new CallbackMessage();
                    //    }
                    //    BanUser ban = Temp.GetDatabaseManager().GetUserBanStatus(RawMessage.reply_to_message.from.id);
                    //    if (ban.Ban == 0)
                    //    {
                    //        if (ban.Level == 0)
                    //        {
                    //            SetActionResult bkick_result = TgApi.getDefaultApiConnection().kickChatMember(
                    //                RawMessage.chat.id,
                    //                RawMessage.reply_to_message.from.id,
                    //                GetTime.GetUnixTime() + 86400
                    //                );
                    //            if (bkick_result.ok)
                    //            {
                    //                TgApi.getDefaultApiConnection().sendMessage(RawMessage.chat.id, "已移除", RawMessage.message_id);
                    //                return new CallbackMessage();
                    //            }
                    //            else
                    //            {
                    //                TgApi.getDefaultApiConnection().sendMessage(
                    //                    RawMessage.chat.id,
                    //                    "無法移除,可能是機器人沒有適當的管理員權限。",
                    //                    RawMessage.message_id
                    //                    );
                    //                return new CallbackMessage();
                    //            }
                    //        }
                    //        else
                    //        {
                    //            TgApi.getDefaultApiConnection().sendMessage(
                    //                RawMessage.chat.id,
                    //                "無法移除,因為此使用者不在黑名單,請您聯絡群組的管理員處理。" +
                    //                "如果你認為這位使用者將會影響大量群組,您可連絡 @" + Temp.MainChannelName + " 提供的群組。",
                    //                RawMessage.message_id
                    //                );
                    //            return new CallbackMessage();
                    //        }
                    //    }
                    //    else
                    //    {
                    //        TgApi.getDefaultApiConnection().sendMessage(
                    //            RawMessage.chat.id,
                    //            "無法移除,因為此使用者不在黑名單,請您聯絡群組的管理員處理。" +
                    //            "如果你認為這位使用者將會影響大量群組,您可連絡 @" + Temp.MainChannelName + " 提供的群組。",
                    //            RawMessage.message_id
                    //            );
                    //        return new CallbackMessage();
                    //    }
                }

                return(new CallbackMessage());
            }
            catch (StopProcessException)
            {
                return(new CallbackMessage {
                    StopProcess = true
                });
            }
            catch (Exception e)
            {
                RAPI.GetExceptionListener().OnException(e, JsonMessage);
                throw e;
            }
        }
Пример #17
0
        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 "/cnban":
                    case "/ban":
                        new BanUserCommand().Ban(RawMessage, JsonMessage, Command);
                        throw new StopProcessException();

                    case "/cnunban":
                    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);
        }