public void SoamDisable(TgMessage message) { if (!TgApi.getDefaultApiConnection().checkIsAdmin(message.chat.id, message.from.id)) { TgApi.getDefaultApiConnection() .sendMessage(message.chat.id, "你不是這個群組的管理員,無法執行此操作。", message.message_id); return; } string enabled = ""; int AdminOnly = 3; int Blacklist = 3; int AutoKick = 3; int AntiBot = 3; int AntiHalal = 3; int AutoDeleteSpamMessage = 3; int AutoDeleteCommand = 3; int SubscribeBanList = 3; string text = message.text.ToLower(); if (text.IndexOf(" adminonly") != -1) { AdminOnly = 1; enabled += " AdminOnly"; } if (text.IndexOf(" blacklist") != -1) { Blacklist = 1; enabled += " Blacklist"; } if (text.IndexOf(" autokick") != -1) { AutoKick = 1; enabled += " AutoKick"; } if (text.IndexOf(" antibot") != -1) { AntiBot = 1; enabled += " AntiBot"; } if (text.IndexOf(" antihalal") != -1) { AntiHalal = 1; enabled += " AntiHalal"; } if (text.IndexOf(" autodeletespammessage") != -1) { AutoDeleteSpamMessage = 1; enabled += " AutoDeleteSpamMessage"; } if (text.IndexOf(" autodeletecommand") != -1) { AutoDeleteCommand = 1; enabled += " AutoDeleteCommand"; } if (text.IndexOf(" subscribebanlist") != -1) { SubscribeBanList = 1; enabled += " SubscribeBanList"; } Temp.GetDatabaseManager().SetGroupConfig( message.chat.id, AdminOnly, Blacklist, AutoKick, AntiBot, AntiHalal, AutoDeleteSpamMessage, AutoDeleteCommand, SubscribeBanList ); if (enabled == "") { if (Temp.MainChannelName == null) { enabled = "指令錯誤,請檢查\n\n請您使用 /soamdisable [要關閉的功能] 來關閉您需要的功能。\n" + "例如: \"/soamdisable BlackList\" (不包含引號) 則可以關閉黑名單列表警告。\n" + "您也可以使用多個選項,例如: \"/soamdisable BlackList AutoKick\" (不包含引號) " + "則可以關閉黑名單列表警告,並關閉在警告後將成員移出群組的功能。" + "您可以使用 /soamstatus 取得目前群組開啟或關閉的功能。"; } else { enabled = "指令錯誤,請檢查\n\n請您使用 /soamdisable [要關閉的功能] 來關閉您需要的功能。\n" + "例如: \"/soamdisable BlackList\" (不包含引號) 則可以關閉由 @" + Temp.MainChannelName + " 提供的黑名單列表警告。\n" + "您也可以使用多個選項,例如: \"/soamdisable BlackList AutoKick\" (不包含引號) " + "則可以關閉由 @" + Temp.MainChannelName + " 提供的黑名單列表警告,並關閉在警告後將成員移出群組的功能。" + "您可以使用 /soamstatus 取得目前群組開啟或關閉的功能。"; } TgApi.getDefaultApiConnection().sendMessage(message.chat.id, "失敗, " + enabled, message.message_id); } else { TgApi.getDefaultApiConnection() .sendMessage(message.chat.id, "成功,關閉的功能有: " + enabled, message.message_id); } }
public void GetName(TgMessage RawMessage) { int spacePath = RawMessage.text.IndexOf(" "); string spamstrings = ""; List <SpamMessage> msgs = Config.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 ); } } }
internal bool GetGroupAdmins(TgMessage RawMessage) { string[] values = RawMessage.text.Split(' '); if (values.Count() == 1) { TgApi.getDefaultApiConnection() .sendMessage(RawMessage.chat.id, "輸入錯誤\n/groupadmin GID", RawMessage.message_id); return(true); } long gid; if (!Int64.TryParse(values[1], out gid)) { TgApi.getDefaultApiConnection() .sendMessage(RawMessage.chat.id, "輸入錯誤\n/groupadmin GID", RawMessage.message_id); return(true); } GroupUserInfo[] admins = TgApi.getDefaultApiConnection().getChatAdministrators(gid); string msg = RAPI.escapeMarkdown(TgApi.getDefaultApiConnection().getChatInfo(gid).result.title) + "\nGID : `" + gid.ToString() + "`\n\n"; string creatorMessage = ""; string adminMessage = "\n\nAdmin"; foreach (var admin in admins) { if (admin.status == "creator") { if (admin.user.username != null) { creatorMessage = string.Format("Creator\n`{0}` [{1}](https://t.me/{2})", admin.user.id.ToString(), admin.user.full_name(), admin.user.username); } else { creatorMessage = string.Format("Creator\n`{0}` {1}", admin.user.id.ToString(), RAPI.escapeMarkdown(admin.user.full_name())); } } else if (admin.user.username != null) { adminMessage = string.Format("{0}\n`{1}` [{2}](https://t.me/{3})", adminMessage, admin.user.id.ToString(), admin.user.full_name(), admin.user.username); } else { adminMessage = string.Format("{0}\n`{1}` {2}", adminMessage, admin.user.id.ToString(), RAPI.escapeMarkdown(admin.user.full_name())); } } msg = msg + creatorMessage + adminMessage; TgApi.getDefaultApiConnection() .sendMessage(RawMessage.chat.id, msg, ParseMode: TgApi.PARSEMODE_MARKDOWN); return(true); }
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; } }
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 = Config.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 = Config.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 // ); //} }
private void WriteSpamMessageToDatabase(List <SpamMessage> msg) { string jsonDB = TgApi.getDefaultApiConnection().jsonEncode(msg); File.WriteAllText(ConfigManager.GetConfigPath() + "spamstrings.json", jsonDB); }
public void GetByID(TgMessage RawMessage) { int spacePath = RawMessage.text.IndexOf(" "); if (spacePath == -1) { TgApi.getDefaultApiConnection().sendMessage( RawMessage.GetMessageChatInfo().id, "你的輸入有錯誤,請在最後面加上規則的 ID,您可以用 /getallspamstr 取得。", RawMessage.message_id, TgApi.PARSEMODE_MARKDOWN ); return; } string name = RawMessage.text.Substring(spacePath + 1); string spamstrings = ""; List <SpamMessage> msgs = Temp.GetDatabaseManager().GetSpamMessageList(); foreach (SpamMessage msg in msgs) { if (name != msg.FriendlyName) { continue; } 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 += "\n\n"; } if (spamstrings == "") { TgApi.getDefaultApiConnection() .sendMessage(RawMessage.GetMessageChatInfo().id, "null", RawMessage.message_id); return; } 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 ); } }
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); }
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 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 (Temp.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); }
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()); }
public bool BanUser( int AdminID, int UserID, int Level, long Expires, string Reason, long ChatID = 0, int MessageID = 0, UserInfo userinfo = null ) { if (RAPI.getIsInWhitelist(UserID)) { return(false); } bool finalResult = true; string banmsg = ""; SendMessageResult result = null; int ReasonID = 0; int ChannelReasonID = 0; if (Temp.ReasonChannelID != 0 && ChatID != 0 && MessageID != 0) { ReasonID = TgApi.getDefaultApiConnection().forwardMessage(Temp.ReasonChannelID, ChatID, MessageID) .result.message_id; } if (Temp.MainChannelID != 0) { if (userinfo == null) { UserInfoRequest userinforeq = TgApi.getDefaultApiConnection().getChat(UserID); if (userinforeq.ok) { userinfo = userinforeq.result; banmsg = userinfo.GetUserTextInfo(); } else { finalResult = false; banmsg = "User ID : " + UserID; } } else { banmsg = userinfo.GetUserTextInfo(); } string textlevel; if (Level == 0) { textlevel = "封鎖"; } else if (Level == 1) { textlevel = "警告"; } else { textlevel = Level + " (未知)"; } banmsg += "\n處分 : " + textlevel; string ExpTime = GetTime.GetExpiresTime(Expires); if (ExpTime != "永久封鎖") { banmsg += "\n時效至 : " + GetTime.GetExpiresTime(Expires); } else { banmsg += "\n時效 : 永久"; } banmsg += "\n原因 : " + Reason; if (AdminID == 0) { banmsg += "\nOID : Bot\n"; } else if (AdminID == 1 || ChatID == Temp.InternGroupID) { banmsg += "\nOID : Auditors\n"; } else { banmsg += "\nOID : " + AdminID + "\n"; } if (Temp.ReasonChannelID != 0 && ReasonID != 0 && Temp.ReasonChannelName != null) { banmsg += "\n參考 : \nhttps://t.me/" + Temp.ReasonChannelName + "/" + ReasonID; } else if (Temp.ReasonChannelID != 0 && ChatID != 0 && MessageID != 0) { finalResult = false; } banmsg += "\n"; try { if (ChatID != Temp.InternGroupID) { banmsg += "\n" + TgApi.getDefaultApiConnection().getChatInfo(ChatID).result.GetChatTextInfo(); } } catch { } ChannelReasonID = TgApi.getDefaultApiConnection().sendMessage(Temp.MainChannelID, banmsg).result .message_id; } ChangeDbBan(AdminID, UserID, Level, Expires, Reason, ChannelReasonID, ReasonID); CNBlacklistApi.PostToAPI(UserID, true, Level, Expires, Reason); return(finalResult); }
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 "/twban": case "/ban": new BanUserCommand().Ban(RawMessage, JsonMessage, Command); throw new StopProcessException(); case "/twunban": 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); }
public CallbackMessage OnSupergroupMemberJoinReceive(TgMessage RawMessage, string JsonMessage, UserInfo JoinedUser) { if (Temp.DisableBanList) { return(new CallbackMessage()); } if (JoinedUser.id == TgApi.getDefaultApiConnection().getMe().id) { TgApi.getDefaultApiConnection().sendMessage( RawMessage.GetMessageChatInfo().id, "欢迎使用 @CNBlackListRBot\n" + "请您进行一些设置:\n" + "1.在您的群组中给予 @" + TgApi.getDefaultApiConnection().getMe().username + " 管理员权限\n" + "2.使用 /soamenable 启用一些功能\n" + "3.如果之前加入了 @DogeRobot ,建议您将其移除\n" + "4.Enjoy it!\n\n" + "注: 默认开启的功能有 BlackList AutoKick AutoDeleteSpamMessage 这三个,您可以根据您的需要来禁用或启用。", RawMessage.message_id ); return(new CallbackMessage()); } DatabaseManager dbmgr = Temp.GetDatabaseManager(); if (RawMessage.GetMessageChatInfo().id == -1001079439348) { BanUser banUser = dbmgr.GetUserBanStatus(JoinedUser.id); if (banUser.Ban == 0) { string resultmsg = "这位用户被封禁了"; if (banUser.ChannelMessageID != 0) { resultmsg += ", [原因请点击这里查看](https://t.me/" + Temp.MainChannelName + "/" + banUser.ChannelMessageID + ")"; } else { resultmsg += ",原因是:\n" + banUser.Reason; } TgApi.getDefaultApiConnection().sendMessage( RawMessage.GetMessageChatInfo().id, resultmsg, RawMessage.message_id, ParseMode: TgApi.PARSEMODE_MARKDOWN ); } else { TgApi.getDefaultApiConnection().restrictChatMember( RawMessage.GetMessageChatInfo().id, JoinedUser.id, GetTime.GetUnixTime() + 60 ); TgApi.getDefaultApiConnection().sendMessage( RawMessage.GetMessageChatInfo().id, "您未被封禁,请闲杂人等退群。如果您想加入这个群组,您可以去多点群发一些广告,然后您被 ban 了就能加入了。\n\n" + "您将在 60 秒后自动退群。", RawMessage.message_id, ParseMode: TgApi.PARSEMODE_MARKDOWN ); new Thread(delegate() { Thread.Sleep(60000); TgApi.getDefaultApiConnection().kickChatMember( RawMessage.GetMessageChatInfo().id, JoinedUser.id, GetTime.GetUnixTime() + 60 ); }).Start(); } return(new CallbackMessage()); } GroupCfg groupCfg = dbmgr.GetGroupConfig(RawMessage.GetMessageChatInfo().id); if (groupCfg.BlackList == 0) { BanUser banUser = dbmgr.GetUserBanStatus(JoinedUser.id); string resultmsg = "警告: "; if (banUser.Ban == 0) { string banReason; if (banUser.ChannelMessageID != 0) { banReason = ", [原因请点击这里查看](https://t.me/" + Temp.MainChannelName + "/" + banUser.ChannelMessageID + ")"; } else { banReason = "\n\n原因是:\n" + banUser.Reason; } if (banUser.Level == 0) { resultmsg += "这位用户可能存在风险,已被封禁" + banReason + "\n\n" + "对于被封禁的用户,您可以通过 [点击这里](https://t.me/CNBlackListBot?start=soam_req_unban) 以请求解封。"; if (groupCfg.AutoKick == 0) { SetActionResult result = TgApi.getDefaultApiConnection().kickChatMember( RawMessage.GetMessageChatInfo().id, JoinedUser.id, GetTime.GetUnixTime() + 86400 ); if (!result.ok) { resultmsg += "\n\n请注意: 您的群组当前打开了自动移除危险成员但机器人没有相应的管理员权限" + ",请您关闭此功能或者将机器人设置为管理员并给予相应的权限(Ban users)。"; } } } else if (banUser.Level == 1) { resultmsg += "这位用户可能存在不良行为" + banReason + "\n\n" + "对于群组的管理员: 您可以观察这位用户在您的群组当中是否存在不良行为后再决定是否移除该成员\n" + "对于被封禁的用户,您可以通过 [点击这里](https://t.me/CNBlackListBot?start=soam_req_unban) 以请求解封。"; } } else { return(new CallbackMessage() { }); } TgApi.getDefaultApiConnection().sendMessage( RawMessage.GetMessageChatInfo().id, resultmsg, RawMessage.message_id, ParseMode: TgApi.PARSEMODE_MARKDOWN ); return(new CallbackMessage() { StopProcess = true }); } return(new CallbackMessage()); }
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 void CallGroups(BanUser user) { if (Temp.DisableAdminTools) { return; } if (user.Level == 1) { return; } using (var db = new BlacklistDatabaseContext()) { List <GroupCfg> groupCfg = null; try { groupCfg = db.GroupConfig .Where(cfg => cfg.SubscribeBanList == 0) .ToList(); } catch (InvalidOperationException) { return; } if (groupCfg == null) { return; } var random = new Random(); groupCfg = groupCfg.OrderBy(x => random.Next()).ToList(); foreach (GroupCfg cfg in groupCfg) { var userInChatInfo = TgApi.getDefaultApiConnection().getChatMember(cfg.GroupID, user.UserID); if (userInChatInfo.ok) { if (userInChatInfo.result.status == "member") { new Thread(delegate() { Console.WriteLine("[SubscribeBanList] Ban " + user.UserID + " in " + cfg.GroupID); //TgApi.getDefaultApiConnection().restrictChatMember( // cfg.GroupID, // user.UserID, // GetTime.GetUnixTime() + 10, // false); SendMessageResult result = TgApi.getDefaultApiConnection().sendMessage( cfg.GroupID, "使用者 : " + user.UserID + "\n" + user.GetBanMessage() + "\n\n由於開啟了 SubscribeBanList ,已嘗試自動移除。" ); Thread.Sleep(5000); TgApi.getDefaultApiConnection() .kickChatMember(cfg.GroupID, user.UserID, GetTime.GetUnixTime() + 1800); }).Start(); } } Thread.Sleep(500); } } }
public bool BanUser( int AdminID, int UserID, int Level, long Expires, string Reason, long ChatID = 0, int MessageID = 0, UserInfo userinfo = null ) { bool finalResult = true; string banmsg = ""; SendMessageResult result = null; int ReasonID = 0; if (Temp.ReasonChannelID != 0 && ChatID != 0 && MessageID != 0) { result = TgApi.getDefaultApiConnection().forwardMessage(Temp.ReasonChannelID, ChatID, MessageID); if (result.ok) { ReasonID = result.result.message_id; result = null; } } int ChannelReasonID = 0; if (Temp.MainChannelID != 0) { if (userinfo == null) { UserInfoRequest userinforeq = TgApi.getDefaultApiConnection().getChat(UserID); if (userinforeq.ok) { userinfo = userinforeq.result; banmsg = userinfo.GetUserTextInfo(); } else { finalResult = false; banmsg = "User ID: " + UserID; } } else { banmsg = userinfo.GetUserTextInfo(); } string textlevel; if (Level == 0) { textlevel = "0 (严重)"; } else if (Level == 1) { textlevel = "1 (警告)"; } else { textlevel = Level + " (未知)"; } banmsg += "\n\n已被封禁,封禁等级为: " + textlevel + ",该记录将于 " + GetTime.GetExpiresTime(Expires) + " 之后失效"; banmsg += "\n\n原因是:\n" + Reason; if (Temp.ReasonChannelID != 0 && ReasonID != 0) { banmsg += "\n\n参见:\nhttps://t.me/" + Temp.ReasonChannelName + "/" + ReasonID; } else if (Temp.ReasonChannelID != 0 && ChatID != 0 && MessageID != 0) { finalResult = false; } ChannelReasonID = TgApi.getDefaultApiConnection().sendMessage(Temp.MainChannelID, banmsg).result.message_id; ChangeDbBan(AdminID, UserID, Level, Expires, Reason, ChannelReasonID, ReasonID); } CNBlacklistApi.PostToAPI(UserID, true, Level, Expires, Reason); return(finalResult); }
public CallbackMessage ReceiveAllNormalMessage(TgMessage BaseMessage, string JsonMessage) { if (Config.BlockGroups.CheckInList(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 (Config.EnableAutoLeaveNormalGroup) { if (BaseMessage.GetMessageChatInfo().type == "group") { TgApi.getDefaultApiConnection().sendMessage(BaseMessage.GetMessageChatInfo().id, "一般群組無法使用本服務,如有疑問請至 @" + Config.CourtGroupName); 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/" + Config.AdminContactGroupName + ")才可使用本服務。", 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 (Config.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 Spam 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] == ' ' || chatText[8] == ' ') { CallAdmin(BaseMessage); } } else if (atAdminPath == textLen - 6 || atAdminPath == textLen - 7) { if (chatText[textLen - 7] == ' ') { CallAdmin(BaseMessage); } } else { if (chatText[atAdminPath - 1] == ' ' && chatText[atAdminPath + 7] == ' ') { CallAdmin(BaseMessage); } } } } int slashSpamPath = chatText.IndexOf("/spam"); if (slashSpamPath == -1) { slashSpamPath = chatText.IndexOf("/report"); } if (slashSpamPath == -1) { slashSpamPath = chatText.IndexOf("!report"); } if (atAdminPath != -1 || slashSpamPath != -1) { if (!Config.SpamBlackList.CheckInList(BaseMessage.GetSendUser().id)) { if (Config.InternGroupID != 0 && Config.EnableSoamReport && BaseMessage.GetReplyMessage() != null) { int noticeID = TgApi.getDefaultApiConnection().sendMessage( BaseMessage.GetMessageChatInfo().id, "已回報" ).result.message_id; TgApi.getDefaultApiConnection().forwardMessage( Config.InternGroupID, BaseMessage.GetMessageChatInfo().id, BaseMessage.GetReplyMessage().message_id ); TgApi.getDefaultApiConnection().sendMessage( Config.InternGroupID, BaseMessage.GetMessageChatInfo().GetChatTextInfoMarkdown() + "\n\n" + BaseMessage.GetReplyMessage().GetSendUser().GetUserTextInfoMarkdown() + "\n\nReport By : " + BaseMessage.GetSendUser().GetUserTextInfoMarkdown(), ParseMode: TgApi.PARSEMODE_MARKDOWN ); new Thread(delegate() { Thread.Sleep(10000); TgApi.getDefaultApiConnection().deleteMessage( BaseMessage.GetMessageChatInfo().id, BaseMessage.GetReplyMessage().message_id ); TgApi.getDefaultApiConnection().deleteMessage( BaseMessage.GetMessageChatInfo().id, BaseMessage.message_id ); TgApi.getDefaultApiConnection().deleteMessage( BaseMessage.GetMessageChatInfo().id, noticeID ); }).Start(); } } } // Call Admin Spam END if ((Config.ReportGroupID != 0 && BaseMessage.GetMessageChatInfo().id == Config.ReportGroupID) || (Config.InternGroupID != 0 && BaseMessage.GetMessageChatInfo().id == Config.InternGroupID)) { if (BaseMessage.forward_from != null) { BanUser banUser = Config.GetDatabaseManager().GetUserBanStatus(BaseMessage.forward_from.id); if (banUser.Ban == 0) { string resultmsg = "使用者被封鎖了\n" + banUser.GetBanMessageMarkdown(); 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 = Config.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(() => { Config.GetDatabaseManager().BanUser( 0, BaseMessage.forward_from.id, max_point_spam.BanLevel, banUtilTime, "`" + RAPI.escapeMarkdown(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 (Config.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 = Config.GetDatabaseManager().GetGroupConfig(BaseMessage.chat.id); if (cfg.AntiHalal == 0) { int max_point = 0; SpamMessage max_point_spam = new SpamMessage(); List <SpamMessage> spamMsgList = Config.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 (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( 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 = Config.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 (Config.GetDatabaseManager().GetUserBanStatus(BaseMessage.from.id).Ban != 0) // new Task(() => // { // Config.GetDatabaseManager().BanUser( // 0, // BaseMessage.from.id, // 0, // 0, // "\n自動封鎖 : 無法理解的語言", // BaseMessage.GetMessageChatInfo().id, // BaseMessage.message_id, // BaseMessage.from // ); // }).Start(); //new Task(() => //{ // TgApi.getDefaultApiConnection().forwardMessage( // Config.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 = Config.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, // "偵測到無法理解的語言,已自動回報,如有誤報請加入 @" + Config.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 (Config.DisableBanList == false && cfg.AutoDeleteSpamMessage == 0) { int max_point = 0; SpamMessage max_point_spam = new SpamMessage(); List <SpamMessage> spamMsgList = Config.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 (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( 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 listWhitelist(TgMessage RawMessage) { TgApi.getDefaultApiConnection().sendMessage(RawMessage.chat.id, Config.WhiteList.GetListMessage_MD(), RawMessage.message_id, ParseMode: TgApi.PARSEMODE_MARKDOWN); return(true); }
private void ProcessMessage(SpamMessage smsg, int MsgID, long ChatID, UserInfo SendUserInfo, int point) { long banUtilTime; if (smsg.BanDays == 0 && smsg.BanHours == 0 && smsg.BanMinutes == 0) { banUtilTime = 0; } else { banUtilTime = GetTime.GetUnixTime() + smsg.BanDays * 86400 + smsg.BanHours * 3600 + smsg.BanMinutes * 60; } if (smsg.AutoKick) { new Thread(delegate() { //TgApi.getDefaultApiConnection().restrictChatMember( // ChatID, // SendUserInfo.id, // GetTime.GetUnixTime() + 60, // false); Thread.Sleep(5500); TgApi.getDefaultApiConnection() .kickChatMember(ChatID, SendUserInfo.id, GetTime.GetUnixTime() + 28800); }).Start(); } if (smsg.AutoBlackList) { new Thread(delegate() { if (Config.GetDatabaseManager().GetUserBanStatus(SendUserInfo.id).Ban == 0) { return; } new Task(() => { Config.GetDatabaseManager().BanUser( 0, SendUserInfo.id, smsg.BanLevel, banUtilTime, "`" + RAPI.escapeMarkdown(smsg.FriendlyName) + "`\n分數 : `" + point + "`", ChatID, MsgID, SendUserInfo ); }).Start(); }).Start(); } else { if (smsg.AutoMute) { TgApi.getDefaultApiConnection().restrictChatMember( ChatID, SendUserInfo.id, banUtilTime, true, false ); } } if (smsg.AutoDelete) { new Thread(delegate() { Thread.Sleep(10000); TgApi.getDefaultApiConnection().deleteMessage(ChatID, MsgID); }).Start(); } }
public void SoamEnable(TgMessage message) { if (!TgApi.getDefaultApiConnection().checkIsAdmin(message.chat.id, message.from.id)) { TgApi.getDefaultApiConnection() .sendMessage(message.chat.id, "您不是這個群組的管理員,無法執行此操作。", message.message_id); return; } string enabled = ""; string otherMsg = ""; int AdminOnly = 3; int Blacklist = 3; int AutoKick = 3; int AntiBot = 3; int AntiHalal = 3; int AutoDeleteSpamMessage = 3; int AutoDeleteCommand = 3; int SubscribeBanList = 3; string text = message.text.ToLower(); if (text.IndexOf(" adminonly") != -1) { AdminOnly = 0; enabled += " AdminOnly"; } if (text.IndexOf(" blacklist") != -1) { Blacklist = 0; if (Config.DisableBanList) { otherMsg += "\nBlackList 開啟失敗,目前版本未啟用此功能。。"; } else { enabled += " Blacklist"; } } if (text.IndexOf(" autokick") != -1) { AutoKick = 0; if (Config.DisableBanList) { otherMsg += "\nAutoKick 開啟失敗,目前版本未啟用此功能。。"; } else { enabled += " AutoKick"; } } if (text.IndexOf(" antibot") != -1) { AntiBot = 0; enabled += " AntiBot"; } if (text.IndexOf(" antihalal") != -1) { AntiHalal = 0; enabled += " AntiHalal"; } if (text.IndexOf(" autodeletespammessage") != -1) { AutoDeleteSpamMessage = 0; if (Config.DisableBanList) { otherMsg += "\nAutoDeleteSpamMessage 開啟失敗,目前版本未啟用此功能。。"; } else { enabled += " AutoDeleteSpamMessage"; } } if (text.IndexOf(" autodeletecommand") != -1) { AutoDeleteCommand = 0; enabled += " AutoDeleteCommand"; } if (text.IndexOf(" subscribebanlist") != -1) { SubscribeBanList = 0; if (Config.DisableBanList) { otherMsg += "\nSubscribeBanList 開啟失敗,目前版本未啟用此功能。。"; } else { enabled += " SubscribeBanList"; } enabled += " SubscribeBanList"; } Config.GetDatabaseManager().SetGroupConfig( message.chat.id, AdminOnly, Blacklist, AutoKick, AntiBot, AntiHalal, AutoDeleteSpamMessage, AutoDeleteCommand, SubscribeBanList ); if (enabled == "") { if (Config.MainChannelName == null) { enabled = "指令錯誤,請檢查\n\n請您使用 /soamenable [所需的功能] 來啟用您需要的功能。\n" + "例如: \"/soamenable BlackList\" (不包含引號) 則可以使用黑名單列表警告。\n" + "您也可以使用多個選項,例如: \"/soamenable BlackList AutoKick\" (不包含引號) " + "則可以使用黑名單列表警告,在警告後還會將成員移出群組。\n\n" + "您可以使用 /soamstatus 取得目前群組開啟或關閉的功能。"; } else { enabled = "指令錯誤,請檢查\n\n請您使用 /soamenable [所需的功能] 來啟用您需要的功能。\n" + "例如: \"/soamenable BlackList\" (不包含引號) 則可以使用由 @" + Config.MainChannelName + " 提供的黑名單列表警告。\n" + "您也可以使用多個選項,例如: \"/soamenable BlackList AutoKick\" (不包含引號) " + "則可以使用由 @" + Config.MainChannelName + " 提供的黑名單列表警告,在警告後還會將成員移出群組。\n\n" + "您可以使用 /soamstatus 取得目前群組開啟或關閉的功能。"; } TgApi.getDefaultApiConnection() .sendMessage(message.chat.id, "失敗, " + enabled + otherMsg, message.message_id); } else { TgApi.getDefaultApiConnection().sendMessage(message.chat.id, "成功,開啟的功能有: " + enabled + otherMsg, message.message_id); } }
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); }
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; } Config.GetDatabaseManager().AddSpamMessage(smsg); TgApi.getDefaultApiConnection().sendMessage( RawMessage.GetMessageChatInfo().id, "ok", RawMessage.message_id, TgApi.PARSEMODE_MARKDOWN ); }
public bool CheckAdminInReportGroup(long ChatID) { if (Config.AdminContactGroupID != 0) { foreach (long i in Config.adminInReport) { if (i == ChatID) { return(true); } } foreach (long i in Config.adminChecking) { if (i == ChatID) { return(true); } } Config.adminChecking.Add(ChatID); bool status = false; GroupUserInfo[] admins = TgApi.getDefaultApiConnection().getChatAdministrators(ChatID, true); System.Console.WriteLine("[checkHelper] Getting Chat Administrator List ChatID : " + ChatID); foreach (var admin in admins) { if (admin.user.id != TgApi.getDefaultApiConnection().getMe().id) { var result = TgApi.getDefaultApiConnection().getChatMember(Config.AdminContactGroupID, admin.user.id); if (result.ok) { if (result.result.status != "left") { status = true; break; } } } } if (!status) { foreach (var admin in admins) { if (admin.user.id != TgApi.getDefaultApiConnection().getMe().id) { SendMessageResult result = TgApi.getDefaultApiConnection().sendMessage( Config.AdminContactGroupID, "[加群測試(不用理會此訊息)](tg://user?id=" + admin.user.id.ToString() + ")", ParseMode: TgApi.PARSEMODE_MARKDOWN); if (result.ok) { TgApi.getDefaultApiConnection().deleteMessage(Config.AdminContactGroupID, result.result.message_id); status = true; break; } } } } if (status) { System.Console.WriteLine("[checkHelper] Admin in contact group GID : " + ChatID.ToString()); Config.adminInReport.Add(ChatID); } else { System.Console.WriteLine("[checkHelper] Admin not in contact group GID : " + ChatID.ToString()); } Config.adminChecking.Remove(ChatID); return(status); } else { return(true); } }
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 = Config.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 ); } }
public void GetSpamPoints(TgMessage RawMessage) { int spacePath = RawMessage.text.IndexOf(" "); if (spacePath == -1) { TgApi.getDefaultApiConnection().sendMessage( RawMessage.GetMessageChatInfo().id, "/getspampoints text=\"被检测消息,如果包含英文和数字以外的字符需要加引号\"" + " rule=\"规则的友好名称,如果包含英文和数字以外的字符需要加引号\"", RawMessage.message_id ); return; } Dictionary <string, string> banValues = CommandDecoder.cutKeyIsValue(RawMessage.text.Substring(spacePath + 1)); string text = banValues.GetValueOrDefault("text", null); string rule = banValues.GetValueOrDefault("rule", null); if (text == null || rule == null) { TgApi.getDefaultApiConnection().sendMessage( RawMessage.GetMessageChatInfo().id, "您的输入有误", RawMessage.message_id ); return; } SpamMessage smsg = Temp.GetDatabaseManager().GetSpamRule(rule); if (smsg == null) { TgApi.getDefaultApiConnection().sendMessage( RawMessage.GetMessageChatInfo().id, "没有找到您指定的规则,请重新指定。您亦可使用 /getspamstr 获取所有规则。", RawMessage.message_id ); return; } int points = 0; switch (smsg.Type) { case 0: points = new SpamMessageChecker().GetEqualsPoints(smsg.Messages, text); break; case 1: points = new SpamMessageChecker().GetRegexPoints(smsg.Messages, text); break; case 2: points = new SpamMessageChecker().GetSpamPoints(smsg.Messages, text); break; case 3: points = new SpamMessageChecker().GetIndexOfPoints(smsg.Messages, text); break; case 4: points = new SpamMessageChecker().GetHalalPoints(text); break; case 5: points = new SpamMessageChecker().GetIndiaPoints(text); break; } TgApi.getDefaultApiConnection().sendMessage( RawMessage.GetMessageChatInfo().id, "得分: " + points, RawMessage.message_id ); }
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,2,3 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 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] 来查询详细信息。"; } 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 += "<code>- " + 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 += "</code>"; } if (spamstrings == "") { spamstrings = "没有查询到这条记录,请检查您的输入。"; } } TgApi.getDefaultApiConnection().sendMessage( RawMessage.GetMessageChatInfo().id, spamstrings, RawMessage.message_id, ParseMode: TgApi.PARSEMODE_HTML ); }
internal static void PostToAPI(int uid, bool ban, int level, long expires, string reason = null) { try { string configPath; if (ApiURL == null) { configPath = Environment.GetEnvironmentVariable("CNBLACKLIST_CONFIGPATH"); if (configPath == "" || configPath == null) { configPath = "./plugincfg/soamchecker/api.json"; } string configContent = File.ReadAllText(configPath); PrivateApiConfig data = (PrivateApiConfig) new DataContractJsonSerializer( typeof(PrivateApiConfig) ).ReadObject( new MemoryStream( Encoding.UTF8.GetBytes(configContent) ) ); ApiURL = data.ApiURL; ApiKey = data.ApiKey; } } catch (Exception) { return; } string realBan; if (ban) { realBan = "true"; } else { realBan = "false"; } if (reason != null) { reason = "&reason=" + reason; } else { reason = ""; } try { string resultMsg = TgApi.getDefaultApiConnection().postWeb( ApiURL, "method=set_value&apikey=" + ApiKey + "&uid=" + uid + "&ban=" + realBan + "&level=" + level + "&expires=" + expires + reason ).Content; if (resultMsg.IndexOf("\"ok\": false") != -1) { throw new Exception("API result = false:\n\n" + resultMsg); } } catch (Exception e) { RAPI.GetExceptionListener().OnException(e); } }
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", "90"); } } 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 > 316224000) { TgApi.getDefaultApiConnection().sendMessage( RawMessage.GetMessageChatInfo().id, "最大時間不可超過 3660 天,請重新輸入。你可以將 m, h, d 3個項目改成 0 以代表永久,您可以使用 /ban 取得帮助。 err7" ); return(-1); } ExpiresTime = GetTime.GetUnixTime() + totalTime; } return(ExpiresTime); }