public CallbackMessage OnSupergroupMemberJoinReceive(TgMessage RawMessage, string JsonMessage, UserInfo JoinedUser) { DatabaseManager dbmgr = Temp.GetDatabaseManager(); GroupCfg groupCfg = dbmgr.GetGroupConfig(RawMessage.GetMessageChatInfo().id); if (groupCfg.AntiBot == 0 && JoinedUser.is_bot && !TgApi.getDefaultApiConnection() .checkIsAdmin(RawMessage.GetMessageChatInfo().id, RawMessage.from.id)) { SetActionResult result = TgApi.getDefaultApiConnection() .kickChatMember(RawMessage.GetMessageChatInfo().id, JoinedUser.id, GetTime.GetUnixTime() + 300); if (result.ok) { TgApi.getDefaultApiConnection().sendMessage( RawMessage.GetMessageChatInfo().id, "機器人 : " + JoinedUser.GetUserTextInfo() + "\n由於開啟了 AntiBot ,已自動移除機器人。" ); } else { TgApi.getDefaultApiConnection().sendMessage( RawMessage.GetMessageChatInfo().id, "機器人 : " + JoinedUser.GetUserTextInfo() + "\n由於開啟了 AntiBot ,但沒有 (Ban User) 權限,請設定正確的權限。" ); } new Task(() => { long banUtilTime = GetTime.GetUnixTime() + 86400; Temp.GetDatabaseManager().BanUser( 0, RawMessage.GetSendUser().id, 0, banUtilTime, "自動封鎖 - 拉入機器人 " + JoinedUser.GetUserTextInfo(), RawMessage.GetMessageChatInfo().id, 0, RawMessage.GetSendUser() ); }).Start(); } if (JoinedUser.id == TgApi.getDefaultApiConnection().getMe().id) { if (RAPI.getIsBlockGroup(RawMessage.GetMessageChatInfo().id)) { new Thread(delegate() { TgApi.getDefaultApiConnection().sendMessage(RawMessage.GetMessageChatInfo().id, "此群組禁止使用本服務。"); Thread.Sleep(1000); TgApi.getDefaultApiConnection().leaveChat(RawMessage.GetMessageChatInfo().id); }).Start(); return(new CallbackMessage()); } if (RawMessage.GetMessageChatInfo().type == "group") { TgApi.getDefaultApiConnection().sendMessage(RawMessage.GetMessageChatInfo().id, "一般群組無法使用本服務,如有疑問請至 @ChineseBlackList "); Thread.Sleep(2000); TgApi.getDefaultApiConnection().leaveChat(RawMessage.GetMessageChatInfo().id); return(new CallbackMessage()); } if (!new CheckHelper().CheckAdminInReportGroup(RawMessage.GetMessageChatInfo().id)) { new Thread(delegate() { TgApi.getDefaultApiConnection().sendMessage(RawMessage.GetMessageChatInfo().id, "群管理必須加入[項目群組](https://t.me/" + Temp.ReportGroupName + ")才可使用本服務。", ParseMode: TgApi.PARSEMODE_MARKDOWN); Thread.Sleep(2000); TgApi.getDefaultApiConnection().leaveChat(RawMessage.GetMessageChatInfo().id); }).Start(); return(new CallbackMessage()); } TgApi.getDefaultApiConnection().sendMessage( RawMessage.GetMessageChatInfo().id, "歡迎使用 @" + TgApi.getDefaultApiConnection().getMe().username + "\n" + "1.請在群組中给予 @" + TgApi.getDefaultApiConnection().getMe().username + " 管理員權限\n" + "2.使用 /help 可查閱使用說明\n" + "預設開啟的功能有 BlackList AutoKick AntiHalal SubscribeBanList,可以根據需要來調整。\n\n" + "注意 : 加入機器人即同意讓渡部分 Ban Users 權限予本項目組,並授權本組依據 @ChineseBlackList 置頂規定,代表群管理對群組內成員逕行封鎖\n" + "如不同意請立即移除此機器人,且禁止違背群主意願私自添加", RawMessage.message_id ); return(new CallbackMessage()); } if (Temp.DisableBanList) { return(new CallbackMessage()); } if (Temp.CourtGroupName != null && RawMessage.GetMessageChatInfo().username == Temp.CourtGroupName) { BanUser banUser = dbmgr.GetUserBanStatus(JoinedUser.id); if (banUser.Ban == 0) { string resultmsg = "這位使用者被封鎖了\n請先閱讀置頂及公告區\n未依規定發表的任何訊息皆不回應\n\n" + banUser.GetBanMessage_ESCMD(); TgApi.getDefaultApiConnection().sendMessage( RawMessage.GetMessageChatInfo().id, resultmsg, RawMessage.message_id, TgApi.PARSEMODE_MARKDOWN ); } else { if (RAPI.getIsInWhitelist(JoinedUser.id)) { return(new CallbackMessage()); } TgApi.getDefaultApiConnection().sendMessage( RawMessage.GetMessageChatInfo().id, "您未被封鎖,請離開,本群僅提供被 CNBL 封鎖者申訴", RawMessage.message_id, TgApi.PARSEMODE_MARKDOWN ); TgApi.getDefaultApiConnection().restrictChatMember( RawMessage.GetMessageChatInfo().id, JoinedUser.id, 0, false, false, false, false); new Thread(delegate() { Thread.Sleep(30000); try { TgApi.getDefaultApiConnection().kickChatMember( RawMessage.GetMessageChatInfo().id, JoinedUser.id, GetTime.GetUnixTime() + 300 ); TgApi.getDefaultApiConnection().restrictChatMember( RawMessage.GetMessageChatInfo().id, JoinedUser.id, 0, true, false, false, false); } catch { } }).Start(); } return(new CallbackMessage()); } if (groupCfg.BlackList == 0) { BanUser banUser = dbmgr.GetUserBanStatus(JoinedUser.id); string resultmsg = ""; if (banUser.Ban == 0) { string banReason; if (banUser.ChannelMessageID != 0 && Temp.MainChannelName != null) { banReason = "[原因請點選這裡查看](https://t.me/" + Temp.MainChannelName + "/" + banUser.ChannelMessageID + ")\n"; } else { banReason = "\n原因 : " + RAPI.escapeMarkdown(banUser.Reason) + "\n"; } if (banUser.Level == 0) { resultmsg += "警告 : 這個使用者「將會」對群組造成負面影響\n" + banReason + "\n若有誤判,可以到 [這個群組](https://t.me/" + Temp.CourtGroupName + ") 尋求申訴"; if (groupCfg.AutoKick == 0) { try { SetActionResult result = TgApi.getDefaultApiConnection().kickChatMember( RawMessage.GetMessageChatInfo().id, JoinedUser.id, GetTime.GetUnixTime() + 300 ); if (!result.ok) { resultmsg += "\n注意 : 由於開啟了 AutoKick 但沒有 Ban Users 權限" + ",請關閉此功能或給予權限(Ban users)。"; } } catch { } } } else if (banUser.Level == 1) { resultmsg += "警告 : 這個使用者「可能」對群組造成負面影響" + banReason + "\n" + "請群組管理員多加留意\n" + "對於被警告的使用者,你可以通過 [這個群組](https://t.me/" + Temp.CourtGroupName + ") 以請求解除。"; } } else { return(new CallbackMessage()); } new Thread(delegate() { SendMessageResult autodeletespammessagesendresult = TgApi.getDefaultApiConnection().sendMessage( RawMessage.GetMessageChatInfo().id, resultmsg, RawMessage.message_id, TgApi.PARSEMODE_MARKDOWN ); Thread.Sleep(60000); TgApi.getDefaultApiConnection().deleteMessage( autodeletespammessagesendresult.result.chat.id, autodeletespammessagesendresult.result.message_id ); }).Start(); return(new CallbackMessage { StopProcess = true }); } return(new CallbackMessage()); }
public CallbackMessage ReceiveAllNormalMessage(TgMessage BaseMessage, string JsonMessage) { if (RAPI.getIsBlockGroup(BaseMessage.GetMessageChatInfo().id)) { new Thread(delegate() { TgApi.getDefaultApiConnection().sendMessage(BaseMessage.GetMessageChatInfo().id, "此群組禁止使用本服務。"); Thread.Sleep(2000); TgApi.getDefaultApiConnection().leaveChat(BaseMessage.GetMessageChatInfo().id); }).Start(); return(new CallbackMessage()); } if (BaseMessage.GetMessageChatInfo().type == "group") { TgApi.getDefaultApiConnection().sendMessage(BaseMessage.GetMessageChatInfo().id, "一般群組無法使用本服務,如有疑問請至 @ChineseBlackList "); Thread.Sleep(2000); TgApi.getDefaultApiConnection().leaveChat(BaseMessage.GetMessageChatInfo().id); return(new CallbackMessage()); } if (!new CheckHelper().CheckAdminInReportGroup(BaseMessage.GetMessageChatInfo().id)) { new Thread(delegate() { TgApi.getDefaultApiConnection().sendMessage(BaseMessage.GetMessageChatInfo().id, "群管理必須加入[項目群組](https://t.me/" + Temp.ReportGroupName + ")才可使用本服務。", ParseMode: TgApi.PARSEMODE_MARKDOWN); Thread.Sleep(2000); TgApi.getDefaultApiConnection().leaveChat(BaseMessage.GetMessageChatInfo().id); }).Start(); return(new CallbackMessage()); } string forward_from_id = null; if (BaseMessage.forward_from_chat != null) { forward_from_id = BaseMessage.forward_from_chat.id.ToString(); if (RAPI.getIsInWhitelist(BaseMessage.forward_from_chat.id)) { return(new CallbackMessage()); } } if (BaseMessage.chat.type != "group" && BaseMessage.chat.type != "supergroup") { return(new CallbackMessage()); } string chatText = null; if (BaseMessage.text != null) { chatText = BaseMessage.text.ToLower(); } else if (BaseMessage.caption != null) { chatText = BaseMessage.caption.ToLower(); } else { return(new CallbackMessage()); } // Call Admin START int atAdminPath = chatText.IndexOf("@admin"); if (atAdminPath == -1) { atAdminPath = chatText.IndexOf("!admin"); } if (atAdminPath == -1) { atAdminPath = chatText.IndexOf("/admin"); } if (atAdminPath != -1) { int textLen = chatText.Length; if (textLen == 6) { CallAdmin(BaseMessage); } else if (textLen >= 8) { if (atAdminPath == 0) { if (chatText[7] == ' ') { CallAdmin(BaseMessage); } } else if (atAdminPath == textLen - 6) { if (chatText[textLen - 7] == ' ') { CallAdmin(BaseMessage); } } else { if (chatText[atAdminPath - 1] == ' ' && chatText[atAdminPath + 7] == ' ') { CallAdmin(BaseMessage); } } } if (Temp.InternGroupID != 0) { TgApi.getDefaultApiConnection().forwardMessage( Temp.InternGroupID, BaseMessage.GetMessageChatInfo().id, BaseMessage.GetReplyMessage().message_id ); TgApi.getDefaultApiConnection().sendMessage( Temp.InternGroupID, BaseMessage.GetMessageChatInfo().GetChatTextInfo() + "\n\nReport By" + BaseMessage.GetSendUser().GetUserTextInfo() ); } } // Call Admin END if (Temp.ReportGroupID != 0 && BaseMessage.GetMessageChatInfo().id == Temp.ReportGroupID) { if (BaseMessage.forward_from != null) { BanUser banUser = Temp.GetDatabaseManager().GetUserBanStatus(BaseMessage.forward_from.id); if (banUser.Ban == 0) { string resultmsg = "使用者被封鎖了\n" + banUser.GetBanMessage_ESCMD(); TgApi.getDefaultApiConnection().sendMessage( BaseMessage.GetMessageChatInfo().id, resultmsg, BaseMessage.message_id, TgApi.PARSEMODE_MARKDOWN ); } else { int max_point = 0; SpamMessage max_point_spam = new SpamMessage(); List <SpamMessage> spamMsgList = Temp.GetDatabaseManager().GetSpamMessageList(); foreach (SpamMessage smsg in spamMsgList) { int points = 0; switch (smsg.Type) { case 0: points = +new SpamMessageChecker().GetEqualsPoints(smsg.Messages, chatText); break; case 1: points = +new SpamMessageChecker().GetRegexPoints(smsg.Messages, chatText); break; case 2: points = +new SpamMessageChecker().GetSpamPoints(smsg.Messages, chatText); break; case 3: points = +new SpamMessageChecker().GetIndexOfPoints(smsg.Messages, chatText); break; case 4: points = +new SpamMessageChecker().GetHalalPoints(chatText + BaseMessage.forward_from.full_name()); break; case 5: points = +new SpamMessageChecker().GetIndiaPoints(chatText + BaseMessage.forward_from.full_name()); break; case 6: points = new SpamMessageChecker().GetContainsPoints(smsg.Messages, chatText + " " + forward_from_id); break; case 7: points = new SpamMessageChecker().GetRussiaPoints(chatText + BaseMessage.forward_from.full_name()); break; case 8: points = new SpamMessageChecker().GetNamePoints(smsg.Messages, BaseMessage.forward_from.full_name()); break; } if (points >= smsg.MinPoints) { if (points > max_point) { max_point = points; max_point_spam = smsg; } } } if (max_point > 0) { new Thread(delegate() { TgApi.getDefaultApiConnection().sendMessage( BaseMessage.GetMessageChatInfo().id, "使用者未被封鎖,由於符合`" + max_point_spam.FriendlyName + "`規則,現已自動封鎖", BaseMessage.message_id, TgApi.PARSEMODE_MARKDOWN ); long banUtilTime = 0; if (max_point_spam.BanDays == 0 && max_point_spam.BanHours == 0 && max_point_spam.BanMinutes == 0) { banUtilTime = 0; } else { banUtilTime = GetTime.GetUnixTime() + max_point_spam.BanDays * 86400 + max_point_spam.BanHours * 3600 + max_point_spam.BanMinutes * 60; } new Task(() => { Temp.GetDatabaseManager().BanUser( 0, BaseMessage.forward_from.id, max_point_spam.BanLevel, banUtilTime, max_point_spam.FriendlyName + "\n分數 : " + max_point, BaseMessage.GetMessageChatInfo().id, BaseMessage.message_id, BaseMessage.forward_from ); }).Start(); }).Start(); } else { TgApi.getDefaultApiConnection().sendMessage( BaseMessage.GetMessageChatInfo().id, "使用者未被封鎖,如要舉報請附上截圖", BaseMessage.message_id, TgApi.PARSEMODE_MARKDOWN ); } } return(new CallbackMessage()); } } if (RAPI.getIsInWhitelist(BaseMessage.from.id)) { return(new CallbackMessage()); } if (TgApi.getDefaultApiConnection().checkIsAdmin(BaseMessage.chat.id, BaseMessage.from.id)) { return(new CallbackMessage()); } // ALTI HALAL Start GroupCfg cfg = Temp.GetDatabaseManager().GetGroupConfig(BaseMessage.chat.id); if (cfg.AntiHalal == 0) { int max_point = 0; SpamMessage max_point_spam = new SpamMessage(); List <SpamMessage> spamMsgList = Temp.GetDatabaseManager().GetSpamMessageList(); foreach (SpamMessage smsg in spamMsgList) { int points = 0; switch (smsg.Type) { case 4: points = +new SpamMessageChecker().GetHalalPoints(chatText + BaseMessage.from.full_name()); break; case 5: points = +new SpamMessageChecker().GetIndiaPoints(chatText + BaseMessage.from.full_name()); break; case 7: points = new SpamMessageChecker().GetRussiaPoints(chatText + BaseMessage.from.full_name()); break; } if (points >= smsg.MinPoints) { if (points > max_point) { max_point = points; max_point_spam = smsg; } } } if (max_point > 0) { //Send alert and delete alert after 60 second new Thread(delegate() { string msg = ""; if (Temp.ReportGroupName == Temp.CourtGroupName) { msg = "偵測到 " + max_point_spam.FriendlyName + " ,已自動回報,如有誤報請加入 @" + Temp.ReportGroupName + " 以報告誤報。"; } else { msg = "偵測到 " + max_point_spam.FriendlyName + " ,已自動回報,如有誤報請加入 @" + Temp.ReportGroupName + " 以報告誤報" + " ,如有疑慮請加入 @" + Temp.CourtGroupName + " 提出申訴。"; } SendMessageResult autodeletespammessagesendresult = TgApi.getDefaultApiConnection() .sendMessage( BaseMessage.GetMessageChatInfo().id, msg ); ProcessMessage(max_point_spam, BaseMessage.message_id, BaseMessage.GetMessageChatInfo().id, BaseMessage.GetSendUser(), max_point); Thread.Sleep(30000); TgApi.getDefaultApiConnection().deleteMessage( autodeletespammessagesendresult.result.chat.id, autodeletespammessagesendresult.result.message_id ); }).Start(); return(new CallbackMessage { StopProcess = true }); } //{ // List<SpamMessage> spamMsgList = Temp.GetDatabaseManager().GetSpamMessageList(); // int halalPoints = new SpamMessageChecker().GetHalalPoints(chatText); // int indiaPoints = new SpamMessageChecker().GetIndiaPoints(chatText); // int russiaPoints = new SpamMessageChecker().GetRussiaPoints(chatText); // if (halalPoints >= 8 || indiaPoints >= 16) // { // //If not in ban status , ban user. // if (Temp.GetDatabaseManager().GetUserBanStatus(BaseMessage.from.id).Ban != 0) // new Task(() => // { // Temp.GetDatabaseManager().BanUser( // 0, // BaseMessage.from.id, // 0, // 0, // "\n自動封鎖 : 無法理解的語言", // BaseMessage.GetMessageChatInfo().id, // BaseMessage.message_id, // BaseMessage.from // ); // }).Start(); //new Task(() => //{ // TgApi.getDefaultApiConnection().forwardMessage( // Temp.ReasonChannelID, // BaseMessage.GetMessageChatInfo().id, // BaseMessage.message_id); //}).Start(); //Kick user and delete spam message // new Task(() => // { // TgApi.getDefaultApiConnection().kickChatMember(BaseMessage.chat.id, BaseMessage.from.id, GetTime.GetUnixTime() + 300); // TgApi.getDefaultApiConnection().deleteMessage(BaseMessage.chat.id, BaseMessage.message_id); // }).Start(); // BanUser banstat = Temp.GetDatabaseManager().GetUserBanStatus(BaseMessage.GetSendUser().id); // if (banstat.Ban == 0) // TgApi.getDefaultApiConnection().kickChatMember( // BaseMessage.GetMessageChatInfo().id, // BaseMessage.GetSendUser().id, // GetTime.GetUnixTime() + 300 // ); //Send alert and delete alert after 60 second // new Thread(delegate() // { // SendMessageResult autodeletespammessagesendresult = TgApi.getDefaultApiConnection().sendMessage( // BaseMessage.GetMessageChatInfo().id, // "偵測到無法理解的語言,已自動回報,如有誤報請加入 @" + Temp.ReportGroupName + " 以報告誤報。" // ); // Thread.Sleep(60000); // TgApi.getDefaultApiConnection().deleteMessage( // autodeletespammessagesendresult.result.chat.id, // autodeletespammessagesendresult.result.message_id // ); // }).Start(); // return new CallbackMessage {StopProcess = true}; // } } // ALTI HALAL AND INDIA END // AUTO DELETE SPAM MESSAGE START if (Temp.DisableBanList == false && cfg.AutoDeleteSpamMessage == 0) { int max_point = 0; SpamMessage max_point_spam = new SpamMessage(); List <SpamMessage> spamMsgList = Temp.GetDatabaseManager().GetSpamMessageList(); foreach (SpamMessage smsg in spamMsgList) { int points = 0; switch (smsg.Type) { case 0: points = +new SpamMessageChecker().GetEqualsPoints(smsg.Messages, chatText); break; case 1: points = +new SpamMessageChecker().GetRegexPoints(smsg.Messages, chatText); break; case 2: points = +new SpamMessageChecker().GetSpamPoints(smsg.Messages, chatText); break; case 3: points = +new SpamMessageChecker().GetIndexOfPoints(smsg.Messages, chatText); break; case 6: points = new SpamMessageChecker().GetContainsPoints(smsg.Messages, chatText + " " + forward_from_id); break; case 8: points = new SpamMessageChecker().GetNamePoints(smsg.Messages, BaseMessage.from.full_name()); break; } if (points >= smsg.MinPoints) { if (points > max_point) { max_point = points; max_point_spam = smsg; } } } if (max_point > 0) { //Send alert and delete alert after 60 second new Thread(delegate() { string msg = ""; if (Temp.ReportGroupName == Temp.CourtGroupName) { msg = "偵測到 " + max_point_spam.FriendlyName + " ,已自動回報,如有誤報請加入 @" + Temp.ReportGroupName + " 以報告誤報。"; } else { msg = "偵測到 " + max_point_spam.FriendlyName + " ,已自動回報,如有誤報請加入 @" + Temp.ReportGroupName + " 以報告誤報。" + " ,如有疑慮請加入 @" + Temp.CourtGroupName + " 提出申訴。"; } SendMessageResult autodeletespammessagesendresult = TgApi.getDefaultApiConnection() .sendMessage( BaseMessage.GetMessageChatInfo().id, msg ); ProcessMessage(max_point_spam, BaseMessage.message_id, BaseMessage.GetMessageChatInfo().id, BaseMessage.GetSendUser(), max_point); Thread.Sleep(30000); TgApi.getDefaultApiConnection().deleteMessage( autodeletespammessagesendresult.result.chat.id, autodeletespammessagesendresult.result.message_id ); }).Start(); return(new CallbackMessage { StopProcess = true }); } } // AUTO DELETE SPAM MESSAGE END // Auto DELETE Command START if (cfg.AutoDeleteCommand == 0) { if (BaseMessage.entities != null) { ContentEntities tmpEntities = BaseMessage.entities[0]; Log.i(tmpEntities.type + "" + tmpEntities.offset); if (tmpEntities.type == "bot_command" && tmpEntities.offset == 0) { new Thread(delegate() { SendMessageResult autodeletecommandsendresult = TgApi.getDefaultApiConnection().sendMessage( BaseMessage.GetMessageChatInfo().id, "請您不要亂玩機器人的指令,有問題請聯絡群組管理員。" ); Thread.Sleep(60000); TgApi.getDefaultApiConnection().deleteMessage( autodeletecommandsendresult.result.chat.id, autodeletecommandsendresult.result.message_id ); }).Start(); TgApi.getDefaultApiConnection().deleteMessage(BaseMessage.chat.id, BaseMessage.message_id); } } } // Auto DELETE Command END // Admin ONLY START if (cfg.AdminOnly == 0) { throw new StopProcessException(); } // Admin ONLY END return(new CallbackMessage()); }
internal bool Ban(TgMessage RawMessage, string JsonMessage, string Command) { int banSpace = RawMessage.text.IndexOf(" "); if (banSpace == -1) { TgApi.getDefaultApiConnection().sendMessage( RawMessage.GetMessageChatInfo().id, Strings.BAN_HELP_MESSAGE, RawMessage.message_id ); return(true); } int BanUserId = 0; long ExpiresTime = 0; int Level = 0; string Reason = ""; UserInfo BanUserInfo = null; string value = RawMessage.text.Substring(banSpace + 1); int valLen = value.Length; bool notCommonBan = true; int commandBanLength = 0; int banDay = 0; if (valLen > 3) { if (valLen == 4) { if (value.Substring(0, 4) == "spam") { commandBanLength = 4; Reason = Strings.SPAM; banDay = Config.DefaultSpamBanDay; notCommonBan = false; } //if (value.Substring(0, 4) == "coin") //{ // commandBanLength = 4; // Reason = Strings.COIN; // banDay = Config.DefaultCoinBanDay; // notCommonBan = false; //} } if (valLen == 5) { if (value.Substring(0, 5) == "halal") { commandBanLength = 5; Reason = Strings.HALAL; banDay = Config.DefaultHalalBanDay; notCommonBan = false; } } //if(valLen == 6) // if (value.Substring(0, 6) == "innsfw") // { // commandBanLength = 6; // Reason = Strings.INNSFW; // banDay = Config.DefaultInNsfwBanDay; // notCommonBan = false; // } //if (valLen == 7) //{ // if (value.Substring(0, 7) == "spammer") // { // commandBanLength = 7; // Reason = Strings.SPAMMER; // banDay = Config.DefaultSpammerBanDay; // notCommonBan = false; // } // if (value.Substring(0, 7) == "outnsfw") // { // commandBanLength = 7; // Reason = Strings.OUTNSFW; // banDay = Config.DefaultOutNsfwBanDay; // notCommonBan = false; // } // if (value.Substring(0, 7) == "crawler") // { // commandBanLength = 7; // Reason = Strings.CRAWLER; // banDay = Config.DefaultCrawlerBanDay; // notCommonBan = false; // } //} if (banDay > 0) { ExpiresTime = GetTime.GetUnixTime() + (banDay * 86400); } } if (!notCommonBan) { if (valLen > (commandBanLength + 1)) { if (value[commandBanLength] != ' ') { TgApi.getDefaultApiConnection().sendMessage( RawMessage.GetMessageChatInfo().id, Strings.BAN_ERROR_MESSAGE + " err_a1", RawMessage.message_id ); return(true); } UserInfo tmpUinfo = new GetValues().GetByTgMessage( new Dictionary <string, string> { { "from", value.Substring(6) } }, RawMessage); if (tmpUinfo == null) { return(true); // 如果没拿到使用者信息则代表出现了异常 } BanUserId = tmpUinfo.id; if (tmpUinfo.language_code != null && tmpUinfo.language_code != "__CAN_NOT_GET_USERINFO__") { BanUserInfo = tmpUinfo; } } else { UserInfo tmpUinfo = new GetValues().GetByTgMessage(new Dictionary <string, string>(), RawMessage); if (tmpUinfo == null) { return(true); // 如果没拿到使用者信息则代表出现了异常 } BanUserId = tmpUinfo.id; if (tmpUinfo.language_code != null) { if (tmpUinfo.language_code != "__CAN_NOT_GET_USERINFO__") { BanUserInfo = tmpUinfo; } } else { BanUserInfo = tmpUinfo; } } } if (notCommonBan) { try { Dictionary <string, string> banValues = CommandDecoder.cutKeyIsValue(value); string tmpString = ""; // 获取使用者信息 UserInfo tmpUinfo = new GetValues().GetByTgMessage(banValues, RawMessage); if (tmpUinfo == null) { return(true); // 如果没拿到使用者信息则代表出现了异常 } BanUserId = tmpUinfo.id; if (tmpUinfo.language_code != null) { if (tmpUinfo.language_code != "__CAN_NOT_GET_USERINFO__") { BanUserInfo = tmpUinfo; } } else { BanUserInfo = tmpUinfo; } // 获取 ExpiresTime long tmpExpiresTime = new GetValues().GetBanUnixTime(banValues, RawMessage); if (tmpExpiresTime == -1) { return(true); // 如果过期时间是 -1 则代表出现了异常 } ExpiresTime = tmpExpiresTime; // 获取 Level tmpString = banValues.GetValueOrDefault("l", "__invalid__"); if (tmpString == "__invalid__") { tmpString = banValues.GetValueOrDefault("level", "0"); } if (!int.TryParse(tmpString, out Level)) { TgApi.getDefaultApiConnection().sendMessage( RawMessage.GetMessageChatInfo().id, Strings.BAN_ERROR_MESSAGE + " err8", RawMessage.message_id ); return(true); } // 获取 Reason Reason = new GetValues().GetReason(banValues, RawMessage); if (Reason == null) { return(true); // 如果 Reason 是 null 则代表出现了异常 } if (Reason.ToLower() == "halal") { Reason = Strings.HALAL; } if (Reason.ToLower() == "spam") { Reason = Strings.SPAM; } // if (Reason.ToLower() == "spammer") Reason = Strings.SPAMMER; // if (Reason.ToLower() == "innsfw") Reason = Strings.INNSFW; // if (Reason.ToLower() == "outnsfw") Reason = Strings.OUTNSFW; // if (Reason.ToLower() == "coin") Reason = Strings.COIN; // if (Reason.ToLower() == "crawler") Reason = Strings.CRAWLER; } catch (DecodeException) { TgApi.getDefaultApiConnection().sendMessage( RawMessage.GetMessageChatInfo().id, Strings.BAN_ERROR_MESSAGE + " err10", RawMessage.message_id ); return(true); } } if (Config.GetIsInWhiteList(BanUserId)) { TgApi.getDefaultApiConnection().sendMessage( RawMessage.GetMessageChatInfo().id, Strings.EXEC_FAIL + Strings.BAN_ERROR_USER_IN_WHITELIST, RawMessage.message_id ); return(false); } int AdminID = RawMessage.GetSendUser().id; if (RawMessage.GetMessageChatInfo().id == Config.InternGroupID) { AdminID = 1; } bool status; if (BanUserInfo == null) { status = Config.GetDatabaseManager().BanUser( AdminID, BanUserId, Level, ExpiresTime, RAPI.escapeMarkdown(Reason) ); } else if (RawMessage.GetReplyMessage().new_chat_member != null) { status = Config.GetDatabaseManager().BanUser( AdminID, BanUserId, Level, ExpiresTime, RAPI.escapeMarkdown(Reason), 0, 0, BanUserInfo ); } else { status = Config.GetDatabaseManager().BanUser( AdminID, BanUserId, Level, ExpiresTime, RAPI.escapeMarkdown(Reason), RawMessage.GetMessageChatInfo().id, RawMessage.GetReplyMessage().message_id, BanUserInfo ); } //if (status) //{ TgApi.getDefaultApiConnection().sendMessage( RawMessage.GetMessageChatInfo().id, Strings.EXEC_OK, RawMessage.message_id ); return(true); //} //else //{ // TgApi.getDefaultApiConnection().sendMessage( // RawMessage.GetMessageChatInfo().id, // "操作成功。\n\n請注意 : 轉發使用者訊息到頻道或是發送使用者訊息到頻道失敗,請您手動發送至 @" + Config.MainChannelName + " 。 err11", // RawMessage.message_id // ); // return true; //} //return false; }
internal bool Ban(TgMessage RawMessage, string JsonMessage, string Command) { int banSpace = RawMessage.text.IndexOf(" "); if (banSpace == -1) { TgApi.getDefaultApiConnection().sendMessage( RawMessage.GetMessageChatInfo().id, "/cnban [i|id=1] [l|level=0] [m|minutes=0] [h|hours=0] [d|days=15] [f|from=f|fwd|r|reply] [halal [f|fwd|r|reply]]" + " r|reason=\"asdfsadf asdfadsf\"\n\n" + "m: 分鐘, h: 小時, d: 天\n" + "from 選項僅在 id 未被定義時起作用\n" + "ID 選擇優先度: 手動輸入 ID > 回覆的被轉發訊息 > 回覆的訊息\n" + "選項優先度: 簡寫 > 全名\n" + "halal 選項只能單獨使用,不能與其他選項共同使用,並且需要回覆一則訊息,否則將觸發異常。\n\n" + "Example:\n" + "/cnban id=1 m=0 h=0 d=15 level=0 reason=\"aaa bbb\\n\\\"ccc\\\" ddd\"\n" + "/cnban halal\n" + "/cnban halal=reply", RawMessage.message_id ); return(true); } int BanUserId = 0; long ExpiresTime = 0; int Level = 0; string Reason = ""; UserInfo BanUserInfo = null; string value = RawMessage.text.Substring(banSpace + 1); int valLen = value.Length; bool NotHalal = true; if (valLen >= 5) { if (value.Substring(0, 5) == "halal") { NotHalal = false; Reason = "無法理解的語言"; if (valLen > 6) { if (value[5] != ' ') { TgApi.getDefaultApiConnection().sendMessage( RawMessage.GetMessageChatInfo().id, "您的輸入有錯誤,請檢查您的輸入,或使用 /cnban 查詢幫助。 err_a1", RawMessage.message_id ); return(true); } UserInfo tmpUinfo = new GetValues().GetByTgMessage( new Dictionary <string, string> { { "from", value.Substring(6) } }, RawMessage); if (tmpUinfo == null) { return(true); // 如果没拿到使用者信息则代表出现了异常 } BanUserId = tmpUinfo.id; if (tmpUinfo.language_code != null && tmpUinfo.language_code != "__CAN_NOT_GET_USERINFO__") { BanUserInfo = tmpUinfo; } } else { UserInfo tmpUinfo = new GetValues().GetByTgMessage(new Dictionary <string, string>(), RawMessage); if (tmpUinfo == null) { return(true); // 如果没拿到使用者信息则代表出现了异常 } BanUserId = tmpUinfo.id; if (tmpUinfo.language_code != null) { if (tmpUinfo.language_code != "__CAN_NOT_GET_USERINFO__") { BanUserInfo = tmpUinfo; } } else { BanUserInfo = tmpUinfo; } } } } if (NotHalal) { try { Dictionary <string, string> banValues = CommandDecoder.cutKeyIsValue(value); string tmpString = ""; // 获取使用者信息 UserInfo tmpUinfo = new GetValues().GetByTgMessage(banValues, RawMessage); if (tmpUinfo == null) { return(true); // 如果没拿到使用者信息则代表出现了异常 } BanUserId = tmpUinfo.id; if (tmpUinfo.language_code != null) { if (tmpUinfo.language_code != "__CAN_NOT_GET_USERINFO__") { BanUserInfo = tmpUinfo; } } else { BanUserInfo = tmpUinfo; } // 获取 ExpiresTime long tmpExpiresTime = new GetValues().GetBanUnixTime(banValues, RawMessage); if (tmpExpiresTime == -1) { return(true); // 如果过期时间是 -1 则代表出现了异常 } ExpiresTime = tmpExpiresTime; // 获取 Level tmpString = banValues.GetValueOrDefault("l", "__invalid__"); if (tmpString == "__invalid__") { tmpString = banValues.GetValueOrDefault("level", "0"); } if (!int.TryParse(tmpString, out Level)) { TgApi.getDefaultApiConnection().sendMessage( RawMessage.GetMessageChatInfo().id, "您的輸入有錯誤,請檢查您的輸入,或使用 /cnban 查詢幫助。 err8", RawMessage.message_id ); return(true); } // 获取 Reason Reason = new GetValues().GetReason(banValues, RawMessage); if (Reason == null) { return(true); // 如果 Reason 是 null 则代表出现了异常 } if (Reason.ToLower() == "halal") { Reason = "無法理解的語言"; } } catch (DecodeException) { TgApi.getDefaultApiConnection().sendMessage( RawMessage.GetMessageChatInfo().id, "您的輸入有錯誤,請檢查您的輸入,或使用 /cnban 查詢幫助 err10", RawMessage.message_id ); return(true); } } if (RAPI.getIsInWhitelist(BanUserId)) { TgApi.getDefaultApiConnection().sendMessage( RawMessage.GetMessageChatInfo().id, "操作失敗 : 使用者在白名單", RawMessage.message_id ); return(false); } bool status; if (RawMessage.GetMessageChatInfo().id == Temp.InternGroupID && RawMessage.GetReplyMessage().GetSendUser().id == TgApi.getDefaultApiConnection().getMe().id) { status = Temp.GetDatabaseManager().BanUser( 1, BanUserId, Level, ExpiresTime, Reason, RawMessage.GetMessageChatInfo().id, RawMessage.GetReplyMessage().message_id, BanUserInfo ); } else if (BanUserInfo == null) { status = Temp.GetDatabaseManager().BanUser( RawMessage.GetSendUser().id, BanUserId, Level, ExpiresTime, Reason ); } else if (RawMessage.GetReplyMessage().new_chat_member != null) { status = Temp.GetDatabaseManager().BanUser( RawMessage.GetSendUser().id, BanUserId, Level, ExpiresTime, Reason, 0, 0, BanUserInfo ); } else { status = Temp.GetDatabaseManager().BanUser( RawMessage.GetSendUser().id, BanUserId, Level, ExpiresTime, Reason, RawMessage.GetMessageChatInfo().id, RawMessage.GetReplyMessage().message_id, BanUserInfo ); } //if (status) //{ TgApi.getDefaultApiConnection().sendMessage( RawMessage.GetMessageChatInfo().id, "操作成功。", RawMessage.message_id ); return(true); //} //else //{ // TgApi.getDefaultApiConnection().sendMessage( // RawMessage.GetMessageChatInfo().id, // "操作成功。\n\n請注意 : 轉發使用者訊息到頻道或是發送使用者訊息到頻道失敗,請您手動發送至 @" + Temp.MainChannelName + " 。 err11", // RawMessage.message_id // ); // return true; //} //return false; }
internal bool Unban(TgMessage RawMessage) { int banSpace = RawMessage.text.IndexOf(" "); if (banSpace == -1) { TgApi.getDefaultApiConnection().sendMessage( RawMessage.GetMessageChatInfo().id, "/unban [i|id=1] [f|from=f|fwd|r|reply]" + " r|reason=\"asdfsadf asdfadsf\"\n\n" + "from 选项仅在 id 未被定义时起作用\n" + "ID 选择优先级: 手动输入的 ID > 回复的被转发消息 > 回复的消息\n" + "选项优先级: 简写 > 全名\n" + "Example:\n" + "/unban id=1 reason=\"aaa bbb\\n\\\"ccc\\\" ddd\"\n" + "/unban", 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); // 如果没拿到用户信息则代表出现了异常 } else { 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); } 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 (System.InvalidOperationException) { TgApi.getDefaultApiConnection().sendMessage( RawMessage.GetMessageChatInfo().id, "操作失败,这位用户目前可能没有被 Ban。", RawMessage.message_id ); return(true); } if (status) { TgApi.getDefaultApiConnection().sendMessage( RawMessage.GetMessageChatInfo().id, "操作成功。", RawMessage.message_id ); return(true); } else { TgApi.getDefaultApiConnection().sendMessage( RawMessage.GetMessageChatInfo().id, "操作成功。\n\n请注意:转发用户消息到频道或发送用户信息到频道失败,请您手动发送至 @" + Temp.MainChannelName + " 。 err11", RawMessage.message_id ); return(true); } //return false; }
internal bool AdminCommands(TgMessage RawMessage, string JsonMessage, string Command) { if (RAPI.getIsBotAdmin(RawMessage.GetSendUser().id) || RawMessage.GetMessageChatInfo().id == Config.InternGroupID) { if (!Config.DisableBanList) { switch (Command) { case "/history": if (Config.EnableBanHistory) { new GetHistory().getHistoryStatus(RawMessage); } throw new StopProcessException(); } } } if (RAPI.getIsBotOP(RawMessage.GetSendUser().id) || RAPI.getIsBotAdmin(RawMessage.GetSendUser().id) || RawMessage.GetMessageChatInfo().id == Config.InternGroupID) { switch (Command) { case "/groups": if (Config.EnableGetAllGroup) { new AllGroups().Groups_Status(RawMessage); } throw new StopProcessException(); } if (!Config.DisableBanList) { if (Command == "/" + Config.CustomPrefix + "ban") { if (Config.EnableCustomBan) { new BanUserCommand().Ban(RawMessage, JsonMessage, Command); } throw new StopProcessException(); } if (Command == "/" + Config.CustomPrefix + "unban") { if (Config.EnableCustomUnBan) { new UnbanUserCommand().Unban(RawMessage); } throw new StopProcessException(); } switch (Command) { case "/groupadmin": if (Config.EnableGetGroupAdmin) { new GetAdmins().GetGroupAdmins(RawMessage); } throw new StopProcessException(); case "/getspampoints": if (Config.EnableGetSpamStringPoints) { new SpamStringManager().GetSpamPoints(RawMessage); } throw new StopProcessException(); case "/ban": if (Config.EnableBan) { new BanUserCommand().Ban(RawMessage, JsonMessage, Command); } throw new StopProcessException(); case "/unban": if (Config.EnableUnBan) { new UnbanUserCommand().Unban(RawMessage); } throw new StopProcessException(); } } if (RAPI.getIsBotAdmin(RawMessage.GetSendUser().id)) { if (!Config.DisableBanList) { switch (Command) { case "/getallspamstr": if (Config.EnableGetAllSpamStringInfo) { new SpamStringManager().GetAllInfo(RawMessage); } return(true); case "/addspamstr": if (Config.EnableAddSpamString) { new SpamStringManager().Add(RawMessage); } throw new StopProcessException(); case "/delspamstr": if (Config.EnableDeleteSpamString) { new SpamStringManager().Remove(RawMessage); } throw new StopProcessException(); case "/suban": if (Config.EnableSuperBan) { new BanMultiUserCommand().BanMulti(RawMessage, JsonMessage, Command); } throw new StopProcessException(); case "/suunban": if (Config.EnableSuperUnBan) { new UnBanMultiUserCommand().UnbanMulti(RawMessage); } throw new StopProcessException(); case "/getspamstr": if (Config.EnableGetSpamString) { new SpamStringManager().GetName(RawMessage); } throw new StopProcessException(); case "/reloadspamstr": if (Config.EnableReloadSpamString) { new SpamStringManager().reloadSpamList(RawMessage); } throw new StopProcessException(); } } switch (Command) { case "/points": if (Config.EnableGetSpamStringKeywords) { new SpamStringManager().GetSpamKeywords(RawMessage); } throw new StopProcessException(); case "/cleanup": if (Config.EnableCleanUp) { new CleanUP().CleanUP_Status(RawMessage); } throw new StopProcessException(); case "/say": if (Config.EnableBroadcast) { new BroadCast().BroadCast_Status(RawMessage); } throw new StopProcessException(); case "/sdall": if (Config.EnableDisableAllGroupSoam) { new OP().SDAll(RawMessage); } throw new StopProcessException(); case "/seall": if (Config.EnableEnableAllGroupSoam) { new OP().SEAll(RawMessage); } throw new StopProcessException(); case "/addop": if (Config.EnableAddOP) { new OP().addOP(RawMessage); } throw new StopProcessException(); case "/delop": if (Config.EnableDeleteOP) { new OP().delOP(RawMessage); } throw new StopProcessException(); case "/addwl": if (Config.EnableWhitelistAdd) { new Whitelist().addWhitelist(RawMessage); } throw new StopProcessException(); case "/delwl": if (Config.EnableWhitelistDelete) { new Whitelist().deleteWhitelist(RawMessage); } throw new StopProcessException(); case "/lswl": if (Config.EnableWhitelisList) { new Whitelist().listWhitelist(RawMessage); } throw new StopProcessException(); case "/block": if (Config.EnableBlockListAdd) { new BlockGroup().addBlockGroup(RawMessage); } throw new StopProcessException(); case "/unblock": if (Config.EnableBlockListDelete) { new BlockGroup().deleteBlockGroup(RawMessage); } throw new StopProcessException(); case "/offspam": if (Config.EnableSpamOff) { new Spam().offSpam(RawMessage); } throw new StopProcessException(); case "/onspam": if (Config.EnableSpamOn) { new Spam().onSpam(RawMessage); } throw new StopProcessException(); case "/blocks": if (Config.EnableBlockListList) { new BlockGroup().listBlockGroup(RawMessage); } throw new StopProcessException(); } } } return(false); }
internal bool BanMulti(TgMessage RawMessage, string JsonMessage, string Command) { int banSpace = RawMessage.text.IndexOf(" "); if (banSpace == -1) { TgApi.getDefaultApiConnection().sendMessage( RawMessage.GetMessageChatInfo().id, "/suban [i|id=1,2,3] [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" + "/suban id=1,2,3 m=0 h=0 d=15 level=0 reason=\"aaa bbb\\n\\\"ccc\\\" ddd\"\n" + "/suban halal\n" + "/suban halal=reply", RawMessage.message_id ); return(true); } int BanUserId = 0; int[] UsersArray = { }; long ExpiresTime = 0; int Level = 0; string Reason = ""; string value = RawMessage.text.Substring(banSpace + 1); int valLen = value.Length; bool NotHalal = true; bool status = false; if (valLen >= 5) { if (value.Substring(0, 5) == "halal") { NotHalal = false; Reason = "無法理解的語言"; if (valLen > 6) { if (value[5] != ' ') { TgApi.getDefaultApiConnection().sendMessage( RawMessage.GetMessageChatInfo().id, "您的輸入有錯誤,請檢查您的輸入,或使用 /suban 查詢幫助。 err_a1", RawMessage.message_id ); return(true); } UsersArray = new GetValues().GetUserIDs(new Dictionary <string, string> { { "from", value.Substring(6) } }, RawMessage); } else { UsersArray = new GetValues().GetUserIDs(new Dictionary <string, string>(), RawMessage); } } } if (NotHalal) { try { Dictionary <string, string> banValues = CommandDecoder.cutKeyIsValue(value); string tmpString = ""; // 获取使用者 UsersArray = new GetValues().GetUserIDs(banValues, RawMessage); // 获取 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, "您的輸入有錯誤,請檢查您的輸入,或使用 /suban 查詢幫助。 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, "您的輸入有錯誤,請檢查您的輸入,或使用 /suban 查詢幫助 err10", RawMessage.message_id ); return(true); } } new Thread(delegate() { foreach (int userid in UsersArray) { BanUserId = userid; status = Temp.GetDatabaseManager().BanUser( RawMessage.GetSendUser().id, BanUserId, Level, ExpiresTime, Reason ); if (RAPI.getIsInWhitelist(BanUserId)) { TgApi.getDefaultApiConnection().sendMessage( RawMessage.GetSendUser().id, "操作失敗 : 使用者在白名單 UID" + 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; //} //return false; }).Start(); return(true); }
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; }
internal bool AdminCommands(TgMessage RawMessage, string JsonMessage, string Command) { if (RawMessage.GetReplyMessage() != null) { if (RawMessage.GetMessageChatInfo().id == Temp.InternGroupID && RawMessage.GetReplyMessage().GetSendUser().id == TgApi.getDefaultApiConnection().getMe().id) { switch (Command) { case "/devban": case "/ban": new BanUserCommand().Ban(RawMessage, JsonMessage, Command); throw new StopProcessException(); } } } if (RAPI.getIsBotOP(RawMessage.GetSendUser().id) || RAPI.getIsBotAdmin(RawMessage.GetSendUser().id)) { switch (Command) { case "/groups": new AllGroups().Groups_Status(RawMessage); throw new StopProcessException(); } if (!Temp.DisableBanList) { switch (Command) { case "/groupadmin": new GetAdmins().GetGroupAdmins(RawMessage); throw new StopProcessException(); case "/getspampoints": new SpamStringManager().GetSpamPoints(RawMessage); throw new StopProcessException(); case "/devban": case "/ban": new BanUserCommand().Ban(RawMessage, JsonMessage, Command); throw new StopProcessException(); case "/devunban": case "/unban": new UnbanUserCommand().Unban(RawMessage); throw new StopProcessException(); case "/addhk": new HKWhitelist().addHKWhitelist(RawMessage); throw new StopProcessException(); case "/delhk": new HKWhitelist().deleteHKWhitelist(RawMessage); throw new StopProcessException(); case "/lshk": new HKWhitelist().listHKWhitelist(RawMessage); throw new StopProcessException(); } } if (RAPI.getIsBotAdmin(RawMessage.GetSendUser().id)) { if (!Temp.DisableBanList) { switch (Command) { case "/getallspamstr": new SpamStringManager().GetAllInfo(RawMessage); return(true); case "/addspamstr": new SpamStringManager().Add(RawMessage); throw new StopProcessException(); case "/delspamstr": new SpamStringManager().Remove(RawMessage); throw new StopProcessException(); case "/suban": new BanMultiUserCommand().BanMulti(RawMessage, JsonMessage, Command); throw new StopProcessException(); case "/suunban": new UnBanMultiUserCommand().UnbanMulti(RawMessage); throw new StopProcessException(); case "/getspamstr": new SpamStringManager().GetName(RawMessage); throw new StopProcessException(); case "/reloadspamstr": new SpamStringManager().reloadSpamList(RawMessage); throw new StopProcessException(); } } switch (Command) { case "/points": new SpamStringManager().GetSpamKeywords(RawMessage); throw new StopProcessException(); case "/cleanup": new CleanUP().CleanUP_Status(RawMessage); throw new StopProcessException(); case "/say": new BroadCast().BroadCast_Status(RawMessage); throw new StopProcessException(); case "/sdall": new OP().SDAll(RawMessage); throw new StopProcessException(); case "/seall": new OP().SEAll(RawMessage); throw new StopProcessException(); case "/addop": new OP().addOP(RawMessage); throw new StopProcessException(); case "/delop": new OP().delOP(RawMessage); throw new StopProcessException(); case "/addwl": new Whitelist().addWhitelist(RawMessage); throw new StopProcessException(); case "/delwl": new Whitelist().deleteWhitelist(RawMessage); throw new StopProcessException(); case "/lswl": new Whitelist().listWhitelist(RawMessage); throw new StopProcessException(); case "/block": new BlockGroup().addBlockGroup(RawMessage); throw new StopProcessException(); case "/unblock": new BlockGroup().deleteBlockGroup(RawMessage); throw new StopProcessException(); case "/blocks": new BlockGroup().listBlockGroup(RawMessage); throw new StopProcessException(); } } } return(false); }
internal bool UnbanMulti(TgMessage RawMessage) { int banSpace = RawMessage.text.IndexOf(" "); if (banSpace == -1) { TgApi.getDefaultApiConnection().sendMessage( RawMessage.GetMessageChatInfo().id, Strings.SUPERUNBAN_HELP_MESSAGE, 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, Strings.SUPERUNBAN_ERROR_MESSAGE + " err10", RawMessage.message_id ); return(true); } new Thread(delegate() { foreach (int userid in UsersArray) { BanUserId = userid; try { status = Config.GetDatabaseManager().UnbanUser( RawMessage.GetSendUser().id, BanUserId, RAPI.escapeMarkdown(Reason) ); } catch (InvalidOperationException) { TgApi.getDefaultApiConnection().sendMessage( RawMessage.GetMessageChatInfo().id, Strings.UNBAN_ERROR_USER_NOT_BANNED + " UID : " + BanUserId, RawMessage.message_id ); } Thread.Sleep(3500); } //if (status) //{ TgApi.getDefaultApiConnection().sendMessage( RawMessage.GetMessageChatInfo().id, Strings.EXEC_OK, RawMessage.message_id ); //} //else //{ // TgApi.getDefaultApiConnection().sendMessage( // RawMessage.GetMessageChatInfo().id, // "操作成功。\n\n請注意 : 轉發使用者訊息到頻道或是發送使用者訊息到頻道失敗,請您手動發送至 @" + Config.MainChannelName + " 。 err11", // RawMessage.message_id // ); // return true; //} }).Start(); return(true); }
internal bool AdminCommands(TgMessage RawMessage, string JsonMessage, string Command) { if (!RAPI.getIsBotAdmin(RawMessage.GetSendUser().id)) { return(false); } switch (Command) { case "/ban": if (Temp.DisableBanList || Temp.DisableAdminTools) { TgApi.getDefaultApiConnection().sendMessage( RawMessage.chat.id, "非常抱歉,当前的编译已经禁用了封禁用户的功能,请您重新下载源码并编译以启用此功能。", RawMessage.message_id ); break; } new BanUserCommand().Ban(RawMessage, JsonMessage, Command); throw new StopProcessException(); case "/unban": if (Temp.DisableBanList) { TgApi.getDefaultApiConnection().sendMessage( RawMessage.chat.id, "非常抱歉,当前的编译已经禁用了封禁用户的功能,请您重新下载源码并编译以启用此功能。", RawMessage.message_id ); break; } new UnbanUserCommand().Unban(RawMessage); throw new StopProcessException(); case "/getspamstr": if (Temp.DisableBanList) { TgApi.getDefaultApiConnection().sendMessage( RawMessage.chat.id, "非常抱歉,当前的编译已经禁用了封禁用户的功能,请您重新下载源码并编译以启用此功能。", RawMessage.message_id ); break; } new SpamStringManager().GetName(RawMessage); return(true); case "/__getallspamstr": if (Temp.DisableBanList) { TgApi.getDefaultApiConnection().sendMessage( RawMessage.chat.id, "非常抱歉,当前的编译已经禁用了封禁用户的功能,请您重新下载源码并编译以启用此功能。", RawMessage.message_id ); break; } new SpamStringManager().GetAllInfo(RawMessage); return(true); case "/__kick": if (Temp.DisableBanList) { TgApi.getDefaultApiConnection().sendMessage( RawMessage.chat.id, "非常抱歉,当前的编译已经禁用了封禁用户的功能,请您重新下载源码并编译以启用此功能。", RawMessage.message_id ); break; } //new SpamStringManager().GetAllInfo(RawMessage); return(true); case "/addspamstr": if (Temp.DisableBanList) { TgApi.getDefaultApiConnection().sendMessage( RawMessage.chat.id, "非常抱歉,当前的编译已经禁用了封禁用户的功能,请您重新下载源码并编译以启用此功能。", RawMessage.message_id ); break; } new SpamStringManager().Add(RawMessage); throw new StopProcessException(); case "/delspamstr": if (Temp.DisableBanList) { TgApi.getDefaultApiConnection().sendMessage( RawMessage.chat.id, "非常抱歉,当前的编译已经禁用了封禁用户的功能,请您重新下载源码并编译以启用此功能。", RawMessage.message_id ); break; } new SpamStringManager().Remove(RawMessage); throw new StopProcessException(); case "/getspampoints": if (Temp.DisableBanList) { TgApi.getDefaultApiConnection().sendMessage( RawMessage.chat.id, "非常抱歉,当前的编译已经禁用了封禁用户的功能,请您重新下载源码并编译以启用此功能。", RawMessage.message_id ); break; } new SpamStringManager().GetSpamPoints(RawMessage); throw new StopProcessException(); case "/jsonencode": int spacePath = RawMessage.text.IndexOf(" "); if (spacePath == -1) { TgApi.getDefaultApiConnection().sendMessage( RawMessage.GetMessageChatInfo().id, "您的输入有误", RawMessage.message_id ); throw new StopProcessException(); } string jsonText = RawMessage.text.Substring(spacePath + 1); TgApi.getDefaultApiConnection().sendMessage( RawMessage.GetMessageChatInfo().id, "<code>" + TgApi.getDefaultApiConnection().jsonEncode(jsonText) + "</code>", RawMessage.message_id, ParseMode: TgApi.PARSEMODE_HTML ); throw new StopProcessException(); } return(false); }
internal bool BanMulti(TgMessage RawMessage, string JsonMessage, string Command) { int banSpace = RawMessage.text.IndexOf(" "); if (banSpace == -1) { TgApi.getDefaultApiConnection().sendMessage( RawMessage.GetMessageChatInfo().id, Strings.SUPERBAN_HELP_MESSAGE, RawMessage.message_id ); return(true); } int BanUserId = 0; int[] UsersArray = { }; long ExpiresTime = 0; int Level = 0; string Reason = ""; string value = RawMessage.text.Substring(banSpace + 1); int valLen = value.Length; bool NotHalal = true; bool status = false; if (valLen >= 5) { if (value.Substring(0, 5) == "halal") { NotHalal = false; Reason = Strings.HALAL; if (valLen > 6) { if (value[5] != ' ') { TgApi.getDefaultApiConnection().sendMessage( RawMessage.GetMessageChatInfo().id, Strings.SUPERBAN_ERROR_MESSAGE + " err_a1", RawMessage.message_id ); return(true); } UsersArray = new GetValues().GetUserIDs(new Dictionary <string, string> { { "from", value.Substring(6) } }, RawMessage); } else { UsersArray = new GetValues().GetUserIDs(new Dictionary <string, string>(), RawMessage); } } } if (NotHalal) { try { Dictionary <string, string> banValues = CommandDecoder.cutKeyIsValue(value); string tmpString = ""; // 获取使用者 UsersArray = new GetValues().GetUserIDs(banValues, RawMessage); // 获取 ExpiresTime long tmpExpiresTime = new GetValues().GetBanUnixTime(banValues, RawMessage); if (tmpExpiresTime == -1) { return(true); // 如果过期时间是 -1 则代表出现了异常 } ExpiresTime = tmpExpiresTime; // 获取 Level tmpString = banValues.GetValueOrDefault("l", "__invalid__"); if (tmpString == "__invalid__") { tmpString = banValues.GetValueOrDefault("level", "0"); } if (!int.TryParse(tmpString, out Level)) { TgApi.getDefaultApiConnection().sendMessage( RawMessage.GetMessageChatInfo().id, Strings.SUPERBAN_ERROR_MESSAGE + " err8", RawMessage.message_id ); return(true); } // 获取 Reason Reason = new GetValues().GetReason(banValues, RawMessage); if (Reason == null) { return(true); // 如果 Reason 是 null 则代表出现了异常 } if (Reason.ToLower() == "halal") { Reason = Strings.HALAL; } } catch (DecodeException) { TgApi.getDefaultApiConnection().sendMessage( RawMessage.GetMessageChatInfo().id, Strings.SUPERBAN_ERROR_MESSAGE + " err10", RawMessage.message_id ); return(true); } } new Thread(delegate() { foreach (int userid in UsersArray) { BanUserId = userid; status = Config.GetDatabaseManager().BanUser( RawMessage.GetSendUser().id, BanUserId, Level, ExpiresTime, RAPI.escapeMarkdown(Reason) ); if (Config.GetIsInWhiteList(BanUserId)) { TgApi.getDefaultApiConnection().sendMessage( RawMessage.GetSendUser().id, Strings.EXEC_FAIL + Strings.BAN_ERROR_USER_IN_WHITELIST + " UID " + BanUserId, RawMessage.message_id ); } Thread.Sleep(3500); } //if (status) //{ TgApi.getDefaultApiConnection().sendMessage( RawMessage.GetMessageChatInfo().id, Strings.EXEC_OK, RawMessage.message_id ); //} //else //{ // TgApi.getDefaultApiConnection().sendMessage( // RawMessage.GetMessageChatInfo().id, // "操作成功。\n\n請注意 : 轉發使用者訊息到頻道或是發送使用者訊息到頻道失敗,請您手動發送至 @" + Config.MainChannelName + " 。 err11", // RawMessage.message_id // ); // return true; //} //return false; }).Start(); return(true); }
public CallbackMessage ReceiveAllNormalMessage(TgMessage BaseMessage, string JsonMessage) { if (BaseMessage.chat.type != "group" && BaseMessage.chat.type != "supergroup") { return(new CallbackMessage()); } string chatText = null; if (BaseMessage.text != null) { chatText = BaseMessage.text.ToLower(); } else if (BaseMessage.caption != null) { chatText = BaseMessage.caption.ToLower(); } else { return(new CallbackMessage()); } // Call Admin START int atAdminPath = chatText.IndexOf("@admin"); if (atAdminPath != -1) { int textLen = chatText.Length; if (textLen == 6) { CallAdmin(BaseMessage); } else if (textLen >= 8) { if (atAdminPath == 0) { if (chatText[7] == ' ') { CallAdmin(BaseMessage); } } else if (atAdminPath == textLen - 6) { if (chatText[textLen - 7] == ' ') { CallAdmin(BaseMessage); } } else { if (chatText[atAdminPath - 1] == ' ' && chatText[atAdminPath + 7] == ' ') { CallAdmin(BaseMessage); } } } } // Call Admin END if (TgApi.getDefaultApiConnection().checkIsAdmin(BaseMessage.chat.id, BaseMessage.from.id)) { return(new CallbackMessage()); } // ALTI HALAL AND INDIA START GroupCfg cfg = Temp.GetDatabaseManager().GetGroupConfig(BaseMessage.chat.id); if (cfg.AntiHalal == 0) { List <SpamMessage> spamMsgList = Temp.GetDatabaseManager().GetSpamMessageList(); int halalPoints = new SpamMessageChecker().GetHalalPoints(chatText); int indiaPoints = new SpamMessageChecker().GetIndiaPoints(chatText); if (halalPoints >= 8 || indiaPoints >= 16) { SendMessageResult result = TgApi.getDefaultApiConnection().forwardMessage( Temp.AdminGroupID, BaseMessage.GetMessageChatInfo().id, BaseMessage.message_id ); if (Temp.GetDatabaseManager().GetUserBanStatus(BaseMessage.from.id).Ban != 0) { new Task(() => { Temp.GetDatabaseManager().BanUser( 0, BaseMessage.from.id, 1, 0, "System AUTO BAN: \n清真或印度消息", BaseMessage.GetMessageChatInfo().id, BaseMessage.message_id, BaseMessage.from ); }).Start(); } new Task(() => { TgApi.getDefaultApiConnection().kickChatMember(BaseMessage.chat.id, BaseMessage.from.id, 0); TgApi.getDefaultApiConnection().deleteMessage(BaseMessage.chat.id, BaseMessage.message_id); }).Start(); BanUser banstat = Temp.GetDatabaseManager().GetUserBanStatus(BaseMessage.GetSendUser().id); if (banstat.Ban == 0) { TgApi.getDefaultApiConnection().kickChatMember( BaseMessage.GetMessageChatInfo().id, BaseMessage.GetSendUser().id, GetTime.GetUnixTime() + 86400 ); } if (result.ok) { new Thread(delegate() { TgApi.getDefaultApiConnection().sendMessage( Temp.AdminGroupID, BaseMessage.GetSendUser().GetUserTextInfo() + "\n\n" + banstat.GetBanMessage() + "\n\n" + BaseMessage.GetMessageChatInfo().GetChatTextInfo() + "\n\n" + "匹配到的规则: 清真或印度消息\n" + "清真得分: " + halalPoints + "\n" + "印度得分: " + indiaPoints, result.result.message_id ); }).Start(); } new Thread(delegate() { SendMessageResult autodeletespammessagesendresult = TgApi.getDefaultApiConnection().sendMessage( BaseMessage.GetMessageChatInfo().id, "检查到清真或印度消息,已尝试上报用户行为,如有误报请加入 @" + Temp.MainChannelName + " 提供的群组以报告误报。" ); Thread.Sleep(60000); TgApi.getDefaultApiConnection().deleteMessage( autodeletespammessagesendresult.result.chat.id, autodeletespammessagesendresult.result.message_id ); }).Start(); return(new CallbackMessage() { StopProcess = true }); } } // ALTI HALAL AND INDIA END // AUTO DELETE SPAM MESSAGE START if (Temp.DisableBanList == false && cfg.AutoDeleteSpamMessage == 0) { List <SpamMessage> spamMsgList = Temp.GetDatabaseManager().GetSpamMessageList(); foreach (SpamMessage smsg in spamMsgList) { int points = 0; switch (smsg.Type) { case 0: points = new SpamMessageChecker().GetEqualsPoints(smsg.Messages, chatText); break; case 1: points = new SpamMessageChecker().GetRegexPoints(smsg.Messages, chatText); break; case 2: points = new SpamMessageChecker().GetSpamPoints(smsg.Messages, chatText); break; case 3: points = new SpamMessageChecker().GetIndexOfPoints(smsg.Messages, chatText); break; case 4: points = new SpamMessageChecker().GetHalalPoints(chatText); break; case 5: points = new SpamMessageChecker().GetIndiaPoints(chatText); break; } if (points >= smsg.MinPoints) { SendMessageResult result = TgApi.getDefaultApiConnection().forwardMessage( Temp.AdminGroupID, BaseMessage.GetMessageChatInfo().id, BaseMessage.message_id ); ProcessMessage(smsg, BaseMessage.message_id, BaseMessage.GetMessageChatInfo().id, BaseMessage.GetSendUser()); BanUser banstat = Temp.GetDatabaseManager().GetUserBanStatus(BaseMessage.GetSendUser().id); if (banstat.Ban == 0) { TgApi.getDefaultApiConnection().kickChatMember( BaseMessage.GetMessageChatInfo().id, BaseMessage.GetSendUser().id, GetTime.GetUnixTime() + 86400 ); } if (result.ok) { new Thread(delegate() { TgApi.getDefaultApiConnection().sendMessage( Temp.AdminGroupID, BaseMessage.GetSendUser().GetUserTextInfo() + "\n\n" + banstat.GetBanMessage() + "\n\n" + BaseMessage.GetMessageChatInfo().GetChatTextInfo() + "\n\n" + "匹配到的规则: " + smsg.FriendlyName + "\n" + "得分: " + points, result.result.message_id ); }).Start(); } new Thread(delegate() { SendMessageResult autodeletespammessagesendresult = TgApi.getDefaultApiConnection().sendMessage( BaseMessage.GetMessageChatInfo().id, "检查到 " + smsg.FriendlyName + " ,已尝试上报用户行为,如有误报请加入 @" + Temp.MainChannelName + " 提供的群组以报告误报。" ); Thread.Sleep(60000); TgApi.getDefaultApiConnection().deleteMessage( autodeletespammessagesendresult.result.chat.id, autodeletespammessagesendresult.result.message_id ); }).Start(); return(new CallbackMessage() { StopProcess = true }); } } } // AUTO DELETE SPAM MESSAGE END // Auto DELETE Command START if (cfg.AutoDeleteCommand == 0) { if (BaseMessage.entities != null) { ContentEntities tmpEntities = BaseMessage.entities[0]; Log.i(tmpEntities.type + "" + tmpEntities.offset); if (tmpEntities.type == "bot_command" && tmpEntities.offset == 0) { new Thread(delegate() { SendMessageResult autodeletecommandsendresult = TgApi.getDefaultApiConnection().sendMessage( BaseMessage.GetMessageChatInfo().id, "请您不要乱玩机器人命令,如有疑问请您联系群组的管理员。" ); Thread.Sleep(60000); TgApi.getDefaultApiConnection().deleteMessage( autodeletecommandsendresult.result.chat.id, autodeletecommandsendresult.result.message_id ); }).Start(); TgApi.getDefaultApiConnection().deleteMessage(BaseMessage.chat.id, BaseMessage.message_id); } } } // Auto DELETE Command END // Admin ONLY START if (cfg.AdminOnly == 0) { throw new StopProcessException(); } // Admin ONLY END return(new CallbackMessage()); }
internal bool Unban(TgMessage RawMessage) { int banSpace = RawMessage.text.IndexOf(" "); if (banSpace == -1) { TgApi.getDefaultApiConnection().sendMessage( RawMessage.GetMessageChatInfo().id, Strings.UNBAN_HELP_MESSAGE, 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, Strings.UNBAN_ERROR_MESSAGE + " err10", RawMessage.message_id ); return(true); } new UnBanCaller().UnBanCallerThread(BanUserId); bool status; try { if (BanUserInfo == null) { status = Config.GetDatabaseManager().UnbanUser( RawMessage.GetSendUser().id, BanUserId, RAPI.escapeMarkdown(Reason) ); } else { status = Config.GetDatabaseManager().UnbanUser( RawMessage.GetSendUser().id, BanUserId, RAPI.escapeMarkdown(Reason), BanUserInfo ); } } catch (InvalidOperationException) { TgApi.getDefaultApiConnection().sendMessage( RawMessage.GetMessageChatInfo().id, Strings.EXEC_FAIL + Strings.UNBAN_ERROR_USER_NOT_BANNED, RawMessage.message_id ); return(true); } if (status) { TgApi.getDefaultApiConnection().sendMessage( RawMessage.GetMessageChatInfo().id, Strings.EXEC_OK, RawMessage.message_id ); if (RawMessage.GetMessageChatInfo().id == Config.CourtGroupID) { TgApi.getDefaultApiConnection() .kickChatMember(RawMessage.GetMessageChatInfo().id, BanUserId, GetTime.GetUnixTime() + 1); } return(true); } TgApi.getDefaultApiConnection().sendMessage( RawMessage.GetMessageChatInfo().id, Strings.EXEC_FAIL + Strings.UNBAN_ERROR_USER_NOT_BANNED, RawMessage.message_id ); return(false); // TgApi.getDefaultApiConnection().sendMessage( // RawMessage.GetMessageChatInfo().id, // "操作成功。\n\n請注意 : 轉發使用者訊息到頻道或是發送使用者訊息到頻道失敗,請您手動發送至 @" + Config.MainChannelName + " 。 err11", // RawMessage.message_id // ); // return true; //return false; }
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); }
internal bool Ban(TgMessage RawMessage, string JsonMessage, string Command) { int banSpace = RawMessage.text.IndexOf(" "); if (banSpace == -1) { TgApi.getDefaultApiConnection().sendMessage( RawMessage.GetMessageChatInfo().id, "/ban [i|id=1] [l|level=0] [m|minutes=0] [h|hours=0] [d|days=15] [f|from=f|fwd|r|reply] [halal [f|fwd|r|reply]]" + " r|reason=\"asdfsadf asdfadsf\"\n\n" + "m: 分钟, h: 小时, d: 天\n" + "from 选项仅在 id 未被定义时起作用\n" + "ID 选择优先级: 手动输入的 ID > 回复的被转发消息 > 回复的消息\n" + "选项优先级: 简写 > 全名\n" + "halal 选项只能单独使用,不能与其他选项共同使用,并且需要回复一条消息,否则将会触发异常。\n\n" + "Example:\n" + "/ban id=1 m=0 h=0 d=15 level=0 reason=\"aaa bbb\\n\\\"ccc\\\" ddd\"\n" + "/ban halal\n" + "/ban halal=reply", RawMessage.message_id ); return(true); } int BanUserId = 0; long ExpiresTime = 0; int Level = 0; string Reason = ""; UserInfo BanUserInfo = null; string value = RawMessage.text.Substring(banSpace + 1); int valLen = value.Length; bool NotHalal = true; if (valLen >= 5) { if (value.Substring(0, 5) == "halal") { NotHalal = false; Reason = "Halal (中国人无法识别的语言)"; if (valLen > 6) { if (value[5] != ' ') { TgApi.getDefaultApiConnection().sendMessage( RawMessage.GetMessageChatInfo().id, "您的输入有误,请检查您的输入,或使用 /ban 查看帮助。 err_a1", RawMessage.message_id ); return(true); } UserInfo tmpUinfo = new GetValues().GetByTgMessage(new Dictionary <string, string> { { "from", value.Substring(6) } }, RawMessage); if (tmpUinfo == null) { return(true); // 如果没拿到用户信息则代表出现了异常 } else { BanUserId = tmpUinfo.id; if (tmpUinfo.language_code != null && tmpUinfo.language_code != "__CAN_NOT_GET_USERINFO__") { BanUserInfo = tmpUinfo; } } } else { UserInfo tmpUinfo = new GetValues().GetByTgMessage(new Dictionary <string, string> { }, RawMessage); if (tmpUinfo == null) { return(true); // 如果没拿到用户信息则代表出现了异常 } else { BanUserId = tmpUinfo.id; if (tmpUinfo.language_code != null) { if (tmpUinfo.language_code != "__CAN_NOT_GET_USERINFO__") { BanUserInfo = tmpUinfo; } } else { BanUserInfo = tmpUinfo; } } } } } if (NotHalal) { try { Dictionary <string, string> banValues = CommandDecoder.cutKeyIsValue(value); string tmpString = ""; // 获取用户信息 UserInfo tmpUinfo = new GetValues().GetByTgMessage(banValues, RawMessage); if (tmpUinfo == null) { return(true); // 如果没拿到用户信息则代表出现了异常 } else { BanUserId = tmpUinfo.id; if (tmpUinfo.language_code != null) { if (tmpUinfo.language_code != "__CAN_NOT_GET_USERINFO__") { BanUserInfo = tmpUinfo; } } else { BanUserInfo = tmpUinfo; } } // 获取 ExpiresTime long tmpExpiresTime = new GetValues().GetBanUnixTime(banValues, RawMessage); if (tmpExpiresTime == -1) { return(true); // 如果过期时间是 -1 则代表出现了异常 } else { ExpiresTime = tmpExpiresTime; } // 获取 Level tmpString = banValues.GetValueOrDefault("l", "__invalid__"); if (tmpString == "__invalid__") { tmpString = banValues.GetValueOrDefault("level", "0"); } if (!int.TryParse(tmpString, out Level)) { TgApi.getDefaultApiConnection().sendMessage( RawMessage.GetMessageChatInfo().id, "您的输入有误,请检查您的输入,或使用 /ban 查看帮助。 err8", RawMessage.message_id ); return(true); } // 获取 Reason Reason = new GetValues().GetReason(banValues, RawMessage); if (Reason == null) { return(true); // 如果 Reason 是 null 则代表出现了异常 } if (Reason.ToLower() == "halal") { Reason = "Halal (中国人无法识别的语言)"; } } catch (DecodeException) { TgApi.getDefaultApiConnection().sendMessage( RawMessage.GetMessageChatInfo().id, "您的输入有误,请检查您的输入,请使用 /ban 来查看帮助 err10", RawMessage.message_id ); return(true); } } bool status; if (BanUserInfo == null) { status = Temp.GetDatabaseManager().BanUser( RawMessage.GetSendUser().id, BanUserId, Level, ExpiresTime, Reason ); } else { status = Temp.GetDatabaseManager().BanUser( RawMessage.GetSendUser().id, BanUserId, Level, ExpiresTime, Reason, RawMessage.GetMessageChatInfo().id, RawMessage.GetReplyMessage().message_id, BanUserInfo ); } if (status) { TgApi.getDefaultApiConnection().sendMessage( RawMessage.GetMessageChatInfo().id, "操作成功。", RawMessage.message_id ); return(true); } else { TgApi.getDefaultApiConnection().sendMessage( RawMessage.GetMessageChatInfo().id, "操作成功。\n\n请注意:转发用户消息到频道或发送用户信息到频道失败,请您手动发送至 @" + Temp.MainChannelName + " 。 err11", RawMessage.message_id ); return(true); } //return false; }
internal bool UnbanMulti(TgMessage RawMessage) { int banSpace = RawMessage.text.IndexOf(" "); if (banSpace == -1) { TgApi.getDefaultApiConnection().sendMessage( RawMessage.GetMessageChatInfo().id, "/suunban [i|id=1,2,3] [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, "您的輸入有錯誤,請檢查您的輸入,或使用 /suunban 取得幫助 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 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()); }