""" Send User's info. """ from urllib import parse from urllib.error import URLError from urllib.request import urlopen from telebot import types from .constants import SPAM, BAN_WORDS, NON_GRATA, ADMIN_ID, ONLY_RUS_LETTERS, RUS_LETTERS_AND_PUNCTUATION def is_url_reachable(url: str) -> bool: try: return urlopen(url).status == 200 except URLError: return False def is_spam(message_text: str) -> bool: """ Проверяет текст на спам - сначала проверка смешанного алфавита, потом на константный набор спам-слов """ if is_mixed(message_text): return True return any(text.casefold() in message_text.casefold() for text in SPAM) def is_mixed(text: str) -> bool: """ Разбивает текст на слова и проверяет на смешанный алфавит, спамеры используют его. Слово допускается только полностью на русском или русский + знаки пунктуации """ for word in text.split(): word = word.strip().lower() if any(e in ONLY_RUS_LETTERS for e in word) and not all(e in RUS_LETTERS_AND_PUNCTUATION for e in word): return True return False def is_in_not_allowed(word_list: list, msg: str) -> bool: for word in word_list: if word in msg.casefold(): return False return True def is_ban_words_in_caption(caption: str) -> bool: return any(ban_word in caption for ban_word in BAN_WORDS) def is_nongrata(type_message: types.Message) -> bool: for phrase in NON_GRATA: if phrase in type_message.text.casefold(): return True return False def is_admin(message: types.Message) -> bool: return message.from_user.id == ADMIN_ID def my_ip(): ip_service = "https://icanhazip.com" ip = urlopen(ip_service) return ip.read().decode("utf-8") def me(message: types.Message): msg = f"Telegram ID: {message.from_user.id}\n\ ├ Is bot: {message.from_user.is_bot}\n\ ├ First name: {message.from_user.first_name}\n" if message.from_user.last_name: msg += f" ├ Last name: {message.from_user.last_name}\n" if message.from_user.username: msg += f" ├ Username: {message.from_user.username}\n" msg += f" ├ Language code: {message.from_user.language_code}\n" if message.from_user.is_premium is True: msg += f" ├ Is Premium: ⭐️\n" else: msg += f" ├ Is Premium: No\n" msg += f" ├ Chat ID: {message.chat.id}" return msg def short_user_data(from_user: types.User) -> dict: info = {'first_name': from_user.first_name, 'last_name': from_user.last_name, 'username': from_user.username, 'full_name': from_user.full_name, 'id': from_user.id, 'code': from_user.language_code, 'is_bot': from_user.is_bot, 'is_premium': from_user.is_premium} return info def represent_as_get(message: types.Message): return parse.quote_plus(detect_args(message)) def detect_args(message: types.Message): if message.reply_to_message and message.reply_to_message.text: if len(message.text.split()) == 1: return message.reply_to_message.text else: return " ".join(message.text.split()[1:]) else: if len(message.text.split()) > 1: return " ".join(message.text.split()[1:])