def ping(bot: Bot, update: Update): message = update.effective_message parsing = extract_text(message).split(' ') if (len(parsing) < 2): message.reply_text("Give me an address to ping!") return elif (len(parsing) > 2): message.reply_text("Too many arguments!") return dns = (parsing)[1] out = "" under = False if os.name == 'nt': try: output = subprocess.check_output("ping -n 1 " + dns + " | findstr time*", shell=True).decode() except: message.reply_text("There was a problem parsing the IP/Hostname") return outS = output.splitlines() out = outS[0] else: try: out = subprocess.check_output("ping -c 1 " + dns + " | grep time=", shell=True).decode() except: message.reply_text("There was a problem parsing the IP/Hostname") return splitOut = out.split(' ') stringtocut = "" for line in splitOut: if (line.startswith('time=') or line.startswith('time<')): stringtocut = line break newstra = stringtocut.split('=') if len(newstra) == 1: under = True newstra = stringtocut.split('<') newstr = "" if os.name == 'nt': newstr = newstra[1].split('ms') else: newstr = newstra[1].split( ' ') #redundant split, but to try and not break windows ping ping_time = float(newstr[0]) if os.name == 'nt' and under: update.effective_message.reply_text(" Ping speed of " + dns + " is <{}ms".format(ping_time)) else: update.effective_message.reply_text(" Ping speed of " + dns + ": {}ms".format(ping_time))
def reply_filter(bot: Bot, update: Update) -> str: chat: Optional[Chat] = update.effective_chat message: Optional[Message] = update.effective_message chat_warn_filters = sql.get_chat_warn_triggers(chat.id) to_match = extract_text(message) if not to_match: return "" for keyword in chat_warn_filters: pattern = r"( |^|[^\w])" + re.escape(keyword) + r"( |$|[^\w])" if re.search(pattern, to_match, flags=re.IGNORECASE): user: Optional[User] = update.effective_user warn_filter = sql.get_warn_filter(chat.id, keyword) return warn(user, chat, warn_filter.reply, message) return ""
def del_blacklist(bot: Bot, update: Update): chat = update.effective_chat message = update.effective_message to_match = extract_text(message) if not to_match: return chat_filters = sql.get_chat_blacklist(chat.id) for trigger in chat_filters: pattern = r"( |^|[^\w])" + re.escape(trigger) + r"( |$|[^\w])" if re.search(pattern, to_match, flags=re.IGNORECASE): try: message.delete() except BadRequest as excp: if excp.message == "Message to delete not found": pass else: LOGGER.exception("Error while deleting blacklist message.") break
def reply_filter(bot: Bot, update: Update): chat = update.effective_chat # type: Optional[Chat] message = update.effective_message # type: Optional[Message] to_match = extract_text(message) if not to_match: return if message.reply_to_message: message = message.reply_to_message chat_filters = sql.get_chat_triggers(chat.id) for keyword in chat_filters: pattern = r"( |^|[^\w])" + re.escape(keyword) + r"( |$|[^\w])" if re.search(pattern, to_match, flags=re.IGNORECASE): filt = sql.get_filter(chat.id, keyword) buttons = sql.get_buttons(chat.id, filt.keyword) if len(buttons) > 0: keyb = build_keyboard(buttons) keyboard = InlineKeyboardMarkup(keyb) if filt.is_sticker: message.reply_sticker(filt.reply) elif filt.is_document: message.reply_document(filt.reply) elif filt.is_image: message.reply_photo(filt.reply, reply_markup=keyboard) elif filt.is_audio: message.reply_audio(filt.reply) elif filt.is_voice: message.reply_voice(filt.reply) elif filt.is_video: message.reply_video(filt.reply) elif filt.has_markdown: keyb = build_keyboard(buttons) keyboard = InlineKeyboardMarkup(keyb) should_preview_disabled = True if "telegra.ph" in filt.reply or "youtu.be" in filt.reply: should_preview_disabled = False try: message.reply_text( filt.reply, parse_mode=ParseMode.MARKDOWN, disable_web_page_preview=should_preview_disabled, reply_markup=keyboard) except BadRequest as excp: if excp.message == "Unsupported url protocol": message.reply_text( "You seem to be trying to use an unsupported url protocol. Telegram " "doesn't support buttons for some protocols, such as tg://. Please try " "again, or ask in @Sur_vivor for help.") elif excp.message == "Reply message not found": bot.send_message(chat.id, filt.reply, parse_mode=ParseMode.MARKDOWN, disable_web_page_preview=True, reply_markup=keyboard) else: message.reply_text( "This note could not be sent, as it is incorrectly formatted. Ask in " "@Sur_vivor if you can't figure out why!") LOGGER.warning("Message %s could not be parsed", str(filt.reply)) LOGGER.exception( "Could not parse filter %s in chat %s", str(filt.keyword), str(chat.id)) else: # LEGACY - all new filters will have has_markdown set to True. message.reply_text(filt.reply) break