import os from random import randrange, choice import telebot from cachetools import TTLCache from requests import get from telebot.types import Message from mongo import mongo from storage import set_values, get_chat_info DEFAULT_ANSWERS = { "a": "Хуй на!", "da": "Pizda!", "а": "Хуй на!", "200": "Отсоси на месте!", "300": "Отсоси у тракториста!", "dа": "Pizda!", "gde": "V pizde!", "net": "Pidora otvet!", "дa": "Пизда!", "чe": "Хуй через плечо!", "чo": "Хуй через плечо!", "gdе": "V pizde!", "heт": "Пидора ответ!", "nеt": "Pidora otvet!", "да": "Пизда!", "че": "Хуй через плечо!", "чо": "Хуй через плечо!", "чё": "Хуй через плечо!", "hет": "Пидора ответ!", "гдe": "В пизде!", "нeт": "Пидора ответ!", "ага": "В жопе нога!", "где": "В пизде!", "как": "Жопой об косяк!", "кто": "Конь в пальто!", "нет": "Пидора ответ!", "ога": "В жопе нога!", "опа": "Срослась пизда и жопа!", "угу": "Иди в пизду!", "слыш": "За углом поссышь!", "ладно": "Прохладно!", "слышь": "За углом поссышь!", "двести": "Отсоси на месте!", "триста": "Отсоси у тракториста!", "здрасте": "Пизду покрасьте!", "здрасьте": "Пизду покрасьте!" } DEFAULT_REPLIES = [ "Пошел нахуй!", "Я твою маму ебал!", "Ты пидор!", ] bot = telebot.TeleBot(os.getenv("TELEGRAM_TOKEN")) security_token = os.getenv("PLATFORM_SECURITY_TOKEN") stage = os.getenv("STAGE") all_letters = "йцукенгшщзхъёфывапролджэячсмитьбюЙЦУКЕНГШЩЗХЪЁФЫВАПРОЛДЖЭЯЧСМИТЬБЮQWERTYUIOPASDFGHJKLZXCVBNMqwertyuiopasdfghjklzxcvbnm1234567890 " CACHE_CONFIG = TTLCache(1, 60) SELF_NAME = None def get_self_name(): global SELF_NAME if SELF_NAME: return SELF_NAME answers_response = get( 'https://platform.sprinthub.ru/configs/get', headers={'X-Security-Token': security_token}, params={ 'project': "Pizda Bot", 'stage': stage, 'name': "constants" } ) if answers_response.status_code != 200: print("ERROR") return 'answer_da_bot' SELF_NAME = answers_response.json()['self_name'] return SELF_NAME def get_answers(): answers = CACHE_CONFIG.get('answers') if answers is None: answers_response = get( 'https://platform.sprinthub.ru/configs/get', headers={'X-Security-Token': security_token}, params={ 'project': "Pizda Bot", 'stage': stage, 'name': "answers" } ) if answers_response.status_code != 200: print("ERROR") return DEFAULT_ANSWERS answers = answers_response.json() CACHE_CONFIG['answers'] = answers return answers def get_replies(): answers = CACHE_CONFIG.get('replies') if answers is None: answers_response = get( 'https://platform.sprinthub.ru/configs/get', headers={'X-Security-Token': security_token}, params={ 'project': "Pizda Bot", 'stage': stage, 'name': "replies" } ) if answers_response.status_code != 200: print("ERROR") return DEFAULT_REPLIES answers = answers_response.json() CACHE_CONFIG['answers'] = answers return answers @bot.message_handler(commands=['setprobability']) def set_probability(message: Message): bot.send_message(message.chat.id, "Отправь одно число - вероятность парирования") set_values(message.chat.id, state="set_probability") @bot.message_handler(commands=['rating']) def show_rating(message: Message): rating = list(mongo.counter_collection.find({"chat_id": message.chat.id}).sort("count", -1)) if not rating: bot.send_message(message.chat.id, "В этом чате я пока никому не парировал") return text = "Вот кому я парировал:\n" rating_arr = list(enumerate(rating)) total = 0 for _, value in rating_arr: total += value['count'] for index, value in rating_arr: text += f"{index + 1}. @{value['username']} - {value['count']} ({int(value['count'] / total * 100)}%)\n" bot.send_message(message.chat.id, text) @bot.message_handler() def do_action(message: Message): if message.reply_to_message: if message.reply_to_message.from_user.username == get_self_name(): bot.reply_to(message, choice(get_replies())) return info = get_chat_info(message.chat.id) if info['state'] == "set_probability": try: value = int(message.text) if value < 0 or value > 100: bot.reply_to(message, "Число не попадает в диапозон от 0 до 100!") else: set_values(message.chat.id, probability=value, state="default") bot.reply_to(message, "Ок! Установил") except ValueError: bot.reply_to(message, "Это не число!") return convert_text = ''.join([letter for letter in message.text if letter in all_letters]).lower().split() if len(convert_text) > 0: convert_text = convert_text[-1] else: return ans = get_answers().get(convert_text) if ans is not None and randrange(1, 101) <= info["probability"]: bot.reply_to(message, ans) mongo.inc(message.from_user.username, message.chat.id) bot.polling()