import os import sys 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) arg = sys.argv[-1] if arg == 'bot': bot.polling() else: from api import app app.run(host="0.0.0.0", port=1238)