diff --git a/app/bot.py b/app/bot.py index b86ef3a..2aa12c5 100644 --- a/app/bot.py +++ b/app/bot.py @@ -12,28 +12,28 @@ from .config import * @bot.edited_message_handler(func=in_spam_list, chat_types=["supergroup", "group"]) @bot.message_handler(func=in_spam_list, chat_types=["supergroup", "group"]) -def moderate_messages(message: types.Message): +async def moderate_messages(message: types.Message): """Ban user and delete their message.""" - bot.delete_message(message.chat.id, message.id) - bot.ban_chat_member(message.chat.id, message.from_user.id) + await bot.delete_message(message.chat.id, message.id) + await bot.ban_chat_member(message.chat.id, message.from_user.id) with shelve.open(f"{DATA}{message.chat.id}") as s: s["Banned"] += 1 @bot.message_handler(func=in_caption_spam_list, content_types=["video"], chat_types=["supergroup", "group"]) -def catch_videos(message: types.Message): +async def catch_videos(message: types.Message): """Catch offensive videos""" - bot.delete_message(message.chat.id, message.id) - bot.ban_chat_member(message.chat.id, message.from_user.id) + await bot.delete_message(message.chat.id, message.id) + await bot.ban_chat_member(message.chat.id, message.from_user.id) with shelve.open(f"{DATA}{message.chat.id}") as s: s["Banned"] += 1 @bot.edited_message_handler(func=in_delete_list, chat_types=["supergroup", "group"]) @bot.message_handler(func=in_delete_list, chat_types=["supergroup", "group"]) -def delete_message(message: types.Message): +async def delete_message(message: types.Message): """Delete unwanted message.""" - bot.delete_message(message.chat.id, message.id) + await bot.delete_message(message.chat.id, message.id) with shelve.open(f"{DATA}{message.chat.id}") as s: s["Deleted"] += 1 @@ -42,30 +42,30 @@ def delete_message(message: types.Message): @bot.message_handler(commands=["start", "links", "ссылки"]) -def start(message: types.Message): +async def start(message: types.Message): """What to begin with.""" logging.info(LOG_COMM % (message.chat.title, message.from_user.id, message.from_user.first_name, message.text)) markup = types.InlineKeyboardMarkup([[RULES], [FAQ], [LIB]], 1) - send_or_reply(message, "Начни с прочтения", reply_markup=markup) + await send_or_reply(message, "Начни с прочтения", reply_markup=markup) @bot.message_handler(commands=["rules", "rule", "r", "правила", "правило", "п"]) -def send_rules(message: types.Message): +async def send_rules(message: types.Message): markup = types.InlineKeyboardMarkup([[RULES]], 1) args = message.text.split() logging.info(LOG_COMM % (message.chat.title, message.from_user.id, message.from_user.first_name, message.text)) if len(args) > 1 and args[-1].isdigit() and 0 < int(args[-1]): - send_or_reply( + await send_or_reply( message, f"Правило {args[-1]}\n{rules.fetch_rule(args[-1])}", reply_markup=markup, ) else: - send_or_reply(message, "...", reply_markup=markup) + await send_or_reply(message, "...", reply_markup=markup) @bot.message_handler(commands=["faq", "чзв"]) -def send_faq(message: types.Message): +async def send_faq(message: types.Message): logging.info( LOG_COMM % ( @@ -76,12 +76,12 @@ def send_faq(message: types.Message): ) ) markup = types.InlineKeyboardMarkup([[FAQ]], 1) - send_or_reply(message, "...", reply_markup=markup) - bot.delete_message(message.chat.id, message.id) + await send_or_reply(message, "...", reply_markup=markup) + await bot.delete_message(message.chat.id, message.id) @bot.message_handler(commands=["lib", "library", "books", "книги", "библиотека"]) -def send_lib(message: types.Message): +async def send_lib(message: types.Message): logging.info( LOG_COMM % ( @@ -92,12 +92,12 @@ def send_lib(message: types.Message): ) ) markup = types.InlineKeyboardMarkup([[LIB]], 1) - send_or_reply(message, "...", reply_markup=markup) - bot.delete_message(message.chat.id, message.id) + await send_or_reply(message, "...", reply_markup=markup) + await bot.delete_message(message.chat.id, message.id) @bot.message_handler(commands=["lutz", "лутц"]) -def send_lutz(message: types.Message): +async def send_lutz(message: types.Message): logging.info( LOG_COMM % ( @@ -107,16 +107,16 @@ def send_lutz(message: types.Message): message.text, ) ) - bot.send_document( + await bot.send_document( message.chat.id, document="BQACAgQAAxkBAAPBYsWJG9Ml0fPrnbU9UyzTQiQSuHkAAjkDAAIstCxSkuRbXAlcqeQpBA", caption="вот, не позорься", ) - bot.delete_message(message.chat.id, message.id) + await bot.delete_message(message.chat.id, message.id) @bot.message_handler(commands=["bdmtss", "бдмтсс"]) -def send_bdmtss_audio(message: types.Message): +async def send_bdmtss_audio(message: types.Message): logging.info( LOG_COMM % ( @@ -126,15 +126,15 @@ def send_bdmtss_audio(message: types.Message): message.text, ) ) - bot.send_voice( + await bot.send_voice( message.chat.id, "AwACAgIAAxkBAAIJrWOg2WUvLwrf7ahyJxQHB8_nqllwAAL5JQAC2_IJSbhfQIO5YnVmLAQ", ) - bot.delete_message(message.chat.id, message.id) + await bot.delete_message(message.chat.id, message.id) @bot.message_handler(commands=["tr", "тр"]) -def translate_layout(message: types.Message): +async def translate_layout(message: types.Message): logging.info( LOG_COMM % ( @@ -146,17 +146,13 @@ def translate_layout(message: types.Message): ) if message.reply_to_message and message.reply_to_message.text: if message.reply_to_message.text[0] in RUS: - bot.send_message( - message.chat.id, message.reply_to_message.text.translate(RUS_ENG_TABLE) - ) + await bot.send_message(message.chat.id, message.reply_to_message.text.translate(RUS_ENG_TABLE)) else: - bot.send_message( - message.chat.id, message.reply_to_message.text.translate(ENG_RUS_TABLE) - ) + await bot.send_message(message.chat.id, message.reply_to_message.text.translate(ENG_RUS_TABLE)) @bot.message_handler(commands=["quote", "цитата"]) -def stan_speak(message: types.Message): +async def stan_speak(message: types.Message): logging.info( LOG_COMM % ( @@ -166,12 +162,12 @@ def stan_speak(message: types.Message): message.text, ) ) - bot.send_message(message.chat.id, stan.speak(0, message.chat.id)) - bot.delete_message(message.chat.id, message.id) + await bot.send_message(message.chat.id, stan.speak(0, message.chat.id)) + await bot.delete_message(message.chat.id, message.id) @bot.message_handler(commands=["tsya", "тся", "ться"]) -def send_tsya(message: types.Message): +async def send_tsya(message: types.Message): logging.info( LOG_COMM % ( @@ -186,12 +182,12 @@ def send_tsya(message: types.Message): types.InlineKeyboardButton("🧑🏼‍🎓 Читать правило", url="https://tsya.ru/"), row_width=1, ) - send_or_reply(message, "-тся и -ться в глаголах", reply_markup=markup) - bot.delete_message(message.chat.id, message.id) + await send_or_reply(message, "-тся и -ться в глаголах", reply_markup=markup) + await bot.delete_message(message.chat.id, message.id) @bot.message_handler(commands=["nometa", "номета"]) -def send_nometa(message: types.Message): +async def send_nometa(message: types.Message): logging.info( LOG_COMM % ( @@ -206,7 +202,7 @@ def send_nometa(message: types.Message): types.InlineKeyboardButton("❓ nometa.xyz", url="https://nometa.xyz/ru.html"), row_width=1, ) - send_or_reply( + await send_or_reply( message, """Не задавай мета-вопросов вроде: «Можно задать вопрос?» @@ -216,11 +212,11 @@ def send_nometa(message: types.Message): Просто спроси сразу! И чем лучше объяснишь проблему, тем вероятнее получишь помощь.""", reply_markup=markup, ) - bot.delete_message(message.chat.id, message.id) + await bot.delete_message(message.chat.id, message.id) @bot.message_handler(commands=["neprivet", "непривет"]) -def send_neprivet(message: types.Message): +async def send_neprivet(message: types.Message): logging.info( LOG_COMM % ( @@ -235,44 +231,44 @@ def send_neprivet(message: types.Message): types.InlineKeyboardButton("👋 Непривет", url="https://neprivet.com/"), row_width=1, ) - send_or_reply( + await send_or_reply( message, "Пожалуйста, не пишите просто «Привет» в чате.", reply_markup=markup ) - bot.delete_message(message.chat.id, message.id) + await bot.delete_message(message.chat.id, message.id) @bot.message_handler(commands=["nojob", "ноджоб"]) -def send_nojob(message): +async def send_nojob(message): answer = """Мы здесь не для того, чтобы за тебя решать задачи. Здесь помогают по конкретным вопросам в ТВОЁМ коде, поэтому тебе нужно показать код, который ты написал сам и \ объяснить где и почему застрял... всё просто. 🤷🏼️""" - send_or_reply(message, answer) - bot.delete_message(message.chat.id, message.id) + await send_or_reply(message, answer) + await bot.delete_message(message.chat.id, message.id) @bot.message_handler(commands=["nobot", "нобот"]) -def nobot(message: types.Message): +async def nobot(message: types.Message): answer = """Внимание: Телеграм бот не должен быть твоим первым проектом на Python. Пожалуйста, изучи основы Python, \ работу с модулями, основы веб-технологий, асинхронное программирование и \ отладку до начала работы с Телеграм ботами. Существует много ресурсов для этого в интернете.""" - send_or_reply(message, answer) - bot.delete_message(message.chat.id, message.id) + await send_or_reply(message, answer) + await bot.delete_message(message.chat.id, message.id) @bot.message_handler(commands=["nogui", "ногуи"]) -def nogui(message: types.Message): +async def nogui(message: types.Message): answer = """Внимание: GUI приложение не должно быть твоим первым проектом на Python. Пожалуйста, изучи основы Python, \ работу с модулями, циклы событий и отладку до начала работы с какими-либо \ GUI-фреймворками. Существует много ресурсов для этого в интернете.""" - send_or_reply(message, answer) - bot.delete_message(message.chat.id, message.id) + await send_or_reply(message, answer) + await bot.delete_message(message.chat.id, message.id) @bot.message_handler(commands=["g", "г"]) -def google_it(message: types.Message): +async def google_it(message: types.Message): """Google it!""" logging.info( LOG_COMM @@ -288,17 +284,17 @@ def google_it(message: types.Message): markup = types.InlineKeyboardMarkup() markup.add(types.InlineKeyboardButton("🔍 Google Поиск", url=get_query), row_width=1) - send_or_reply(message, f"Ищем «{query}»...", reply_markup=markup) + await send_or_reply(message, f"Ищем «{query}»...", reply_markup=markup) """ [ ADMIN PANEL ] """ @bot.message_handler(func=is_admin, commands=["ddel"]) -def delete_user(message: types.Message): +async def delete_user(message: types.Message): if message.reply_to_message: - bot.delete_message(message.chat.id, message.id) - bot.delete_message(message.chat.id, message.reply_to_message.id) + await bot.delete_message(message.chat.id, message.id) + await bot.delete_message(message.chat.id, message.reply_to_message.id) logging.info( "!DEL!M " + LOG_COMM @@ -312,11 +308,11 @@ def delete_user(message: types.Message): @bot.message_handler(func=is_admin, commands=["bban"]) -def ban_user(message: types.Message): +async def ban_user(message: types.Message): if message.reply_to_message: - bot.delete_message(message.chat.id, message.id) - bot.delete_message(message.chat.id, message.reply_to_message.id) - bot.ban_chat_member(message.chat.id, message.reply_to_message.from_user.id) + await bot.delete_message(message.chat.id, message.id) + await bot.delete_message(message.chat.id, message.reply_to_message.id) + await bot.ban_chat_member(message.chat.id, message.reply_to_message.from_user.id) logging.info( f"!BAN!M " + LOG_COMM @@ -330,10 +326,10 @@ def ban_user(message: types.Message): @bot.message_handler(func=is_admin, commands=["unban_id"]) -def unban_user(message: types.Message): +async def unban_user(message: types.Message): if message.text.split()[-1].isdigit(): user_id = int(message.text.split()[-1]) - bot.unban_chat_member(PYTHONCHATRU, user_id) + await bot.unban_chat_member(PYTHONCHATRU, user_id) logging.info(f"!UNBAN (M)! {user_id}") @@ -341,7 +337,7 @@ def unban_user(message: types.Message): @bot.inline_handler(lambda query: True) -def default_query(inline_query): +async def default_query(inline_query): """Inline the Zen of Python.""" zen = [] for id_p, phrase in enumerate(ZEN): @@ -356,7 +352,7 @@ def default_query(inline_query): ) ) - bot.answer_inline_query(inline_query.id, zen, cache_time=1200) + await bot.answer_inline_query(inline_query.id, zen, cache_time=1200) """ [ COUNTER ] """ @@ -384,10 +380,10 @@ def handle_msg(message: types.Message): @app.post(f"/bot{TOKEN}/") -def webhook(update: dict): +async def webhook(update: dict): """Parse POST requests from Telegram.""" if update: update = telebot.types.Update.de_json(update) - bot.process_new_updates([update]) + await bot.process_new_updates([update]) else: return diff --git a/app/commands/service.py b/app/commands/service.py index ec50cef..64ac188 100644 --- a/app/commands/service.py +++ b/app/commands/service.py @@ -44,36 +44,30 @@ def remind_manually(message): @bot.message_handler(func=is_admin, commands=["jobs"]) -def list_jobs(message): +async def list_jobs(message): """List all the jobs in schedule.""" - bot.send_message(ADMIN_ID, reminder.print_get_jobs()) + await bot.send_message(ADMIN_ID, reminder.print_get_jobs()) @bot.message_handler(func=is_admin, commands=["stats"]) -def send_stats(message: types.Message): +async def send_stats(message: types.Message): if len(message.text.split()) == 1: rep = report.create_report_text(message.chat.id) if rep: - bot.send_message(message.chat.id, rep) + await bot.send_message(message.chat.id, rep) else: - bot.send_message( - message.chat.id, report.create_report_text(message.text.split()[-1]) - ) + await bot.send_message(message.chat.id, report.create_report_text(message.text.split()[-1])) -@bot.message_handler( - func=is_admin, commands=["reset_stats"], chat_types=["supergroup", "group"] -) -def send_stats(message: types.Message): +@bot.message_handler(func=is_admin, commands=["reset_stats"], chat_types=["supergroup", "group"]) +async def send_stats(message: types.Message): logging.warning("reset_stats") report.reset_report_stats(message.chat.id) - bot.send_message(message.chat.id, report.reset_report_stats(message.chat.id)) + await bot.send_message(message.chat.id, report.reset_report_stats(message.chat.id)) -@bot.message_handler( - func=is_white, commands=["enable_stan"], chat_types=["supergroup", "group"] -) -def enable_stan(message: types.Message): +@bot.message_handler(func=is_white, commands=["enable_stan"], chat_types=["supergroup", "group"]) +async def enable_stan(message: types.Message): """Add group to database.""" logging.info( @@ -90,32 +84,28 @@ def enable_stan(message: types.Message): ) ) session.commit() - bot.send_message( + await bot.send_message( message.chat.id, f"""Группа "{message.chat.title} добавлена в БД. /get_group_info - узнать текущие настройки""", ) else: - bot.send_message(message.chat.id, "Отказ. Группа уже включена") + await bot.send_message(message.chat.id, "Отказ. Группа уже включена") -@bot.message_handler( - func=is_admin, commands=["disable_stan"], chat_types=["supergroup", "group"] -) -def disable_stan(message: types.Message): - logging.info( - f"[{message.chat.title}] [{message.from_user.id}] {message.from_user.username}: {message.text}" - ) +@bot.message_handler(func=is_admin, commands=["disable_stan"], chat_types=["supergroup", "group"]) +async def disable_stan(message: types.Message): + logging.info(f"[{message.chat.title}] [{message.from_user.id}] {message.from_user.username}: {message.text}") if session.query(Chat.id).filter(Chat.chat_id == message.chat.id).first(): chat = session.query(Chat).filter_by(chat_id=message.chat.id).first() session.delete(chat) session.commit() - bot.send_message( + await bot.send_message( message.chat.id, f"Группа {message.chat.title} и все связанные с ней цитаты удалёны!", ) else: - bot.send_message(message.chat.id, "Отказ. Этой группы нет в БД.") + await bot.send_message(message.chat.id, "Отказ. Этой группы нет в БД.") @bot.message_handler( @@ -123,7 +113,7 @@ def disable_stan(message: types.Message): commands=["set_antispam_report_reminder", "set_rules"], chat_types=["supergroup", "group"], ) -def set_antispam_report_reminder(message: types.Message): +async def set_antispam_report_reminder(message: types.Message): args = message.text.split() if len(args) == 4: try: @@ -137,36 +127,31 @@ def set_antispam_report_reminder(message: types.Message): {"antispam": antispam, "report": rep, "reminder": rem} ) session.commit() - - bot.send_message( - message.chat.id, f"""Настройки обновлены. Проверить: /get_group_info""" - ) + await bot.send_message(message.chat.id, f"""Настройки обновлены. Проверить: /get_group_info""") @bot.message_handler( func=is_white, commands=["get_quotes"], chat_types=["supergroup", "group"] ) -def get_quotes(message: types.Message): +async def get_quotes(message: types.Message): logging.info(f"[{message.chat.id}] {message.from_user.first_name} {message.text}.") quotes = session.query(Quote.text).filter(Quote.chat_id == message.chat.id).all() if quotes: text = f"Количество цитат: {len(session.query(Quote).filter(Quote.chat_id == message.chat.id).all())}\n\ Последние добавленные\n\n" text += "\n".join(f"· {quote[0]}" for quote in quotes[-10:]) - bot.send_message(message.chat.id, f"{text}") + await bot.send_message(message.chat.id, f"{text}") else: - bot.send_message( + await bot.send_message( message.chat.id, f"Цитаты отсутствуют. Подробнее: /get_group_info" ) -@bot.message_handler( - func=is_white, commands=["get_group_info"], chat_types=["supergroup", "group"] -) -def get_group_info(message: types.Message): +@bot.message_handler(func=is_white, commands=["get_group_info"], chat_types=["supergroup", "group"]) +async def get_group_info(message: types.Message): group = session.query(Chat).filter(Chat.chat_id == message.chat.id).first() if group: - bot.send_message( + await bot.send_message( message.chat.id, f"""Группа: {group.title} ID группы: {group.chat_id} @@ -180,11 +165,11 @@ ID группы: {group.chat_id} Праздники: {group.reminder}""", ) else: - bot.send_message(message.chat.id, f"Группа не включена. Включить: /enable_stan") + await bot.send_message(message.chat.id, f"Группа не включена. Включить: /enable_stan") @bot.message_handler(func=is_white, commands=["set_logging_level"], chat_types=["supergroup", "group"]) -def set_logging_level(message: types.Message): +async def set_logging_level(message: types.Message): args = message.text.split() if args[-1] == '10': logger.setLevel(10) # DEBUG @@ -192,24 +177,3 @@ def set_logging_level(message: types.Message): else: logger.setLevel(20) # INFO logging.info("[LEVEL] Установлен уровень INFO") - - -# @bot.message_handler(func=is_admin, commands=["promote"], chat_types=["supergroup", "group"]) -# def promote_user(message: types.Message): -# if message.reply_to_message: -# user = message.reply_to_message.from_user -# -# user_db = session.query(User).filter_by(tg_id=user.id) -# if not user_db: -# permission = 1 -# session.add(tg_id=user.id, -# first_name=user.first_name, -# last_name=user.last_name, -# username=user.username, -# permissions=permission) -# else: -# permission = user_db.permission * 2 -# user_db.update(permissions=permission) -# session.commit() -# -# logger.info(f'[{user.first_name} {user.last_name}] повышен до {permission}.') \ No newline at end of file diff --git a/app/config.py b/app/config.py index d510e34..6675624 100644 --- a/app/config.py +++ b/app/config.py @@ -4,7 +4,8 @@ import logging import telebot.types from fastapi import FastAPI -from telebot import TeleBot, logger, types +from telebot.async_telebot import AsyncTeleBot +from telebot import logger, types from dotenv import load_dotenv logging.basicConfig( @@ -20,7 +21,7 @@ TOKEN = os.environ.get("LUTZPYBOT") if not TOKEN: raise LookupError("LUTZPYBOT (token) has not been found in .env") -bot = TeleBot( +bot = AsyncTeleBot( TOKEN, "HTML", disable_web_page_preview=True, @@ -108,25 +109,25 @@ ZEN = [ "Namespaces are one honking great idea — let's do more of those!", ] -for white_id in WHITEIDS: - bot.set_my_commands( - commands=[ - telebot.types.BotCommand("nobot", "/нобот Телебот не должен быть первым проектом"), - telebot.types.BotCommand("nogui", "/ногуи GUI приложение не должно быть первым проектом"), - telebot.types.BotCommand("nojob", "/ноджоб, Мы здесь не для того чтобы за тебя решать задачи"), - telebot.types.BotCommand("nometa", "/номета Не задавайте мета-вопросов"), - telebot.types.BotCommand("neprivet", "/непривет"), - telebot.types.BotCommand("quote", "/цитата Случайная цитата"), - telebot.types.BotCommand("lutz", "/лутц Прислать книгу Learning Python"), - telebot.types.BotCommand("bdmtss", "/бдмтсс Римшот"), - telebot.types.BotCommand("g", "/г Загуглить (аргументы или цитируемое)"), - telebot.types.BotCommand("rules", "/правила чата (работает с аргументом-номером пункта)"), - telebot.types.BotCommand("faq", "/чзв Частые вопросы"), - telebot.types.BotCommand("books", "/библиотека питониста"), - telebot.types.BotCommand("links", "/ссылки на правила, чзв и библиотеку"), - telebot.types.BotCommand("tsya", "/тся и /ться"), - telebot.types.BotCommand("add", "добавить цитату [Whitelist]"), - telebot.types.BotCommand("remove", "удалить цитату [Whitelist]"), - ], - scope=telebot.types.BotCommandScopeChatMember(PYTHONCHATRU, white_id) - ) +# for white_id in WHITEIDS: +# bot.set_my_commands( +# commands=[ +# telebot.types.BotCommand("nobot", "/нобот Телебот не должен быть первым проектом"), +# telebot.types.BotCommand("nogui", "/ногуи GUI приложение не должно быть первым проектом"), +# telebot.types.BotCommand("nojob", "/ноджоб, Мы здесь не для того чтобы за тебя решать задачи"), +# telebot.types.BotCommand("nometa", "/номета Не задавайте мета-вопросов"), +# telebot.types.BotCommand("neprivet", "/непривет"), +# telebot.types.BotCommand("quote", "/цитата Случайная цитата"), +# telebot.types.BotCommand("lutz", "/лутц Прислать книгу Learning Python"), +# telebot.types.BotCommand("bdmtss", "/бдмтсс Римшот"), +# telebot.types.BotCommand("g", "/г Загуглить (аргументы или цитируемое)"), +# telebot.types.BotCommand("rules", "/правила чата (работает с аргументом-номером пункта)"), +# telebot.types.BotCommand("faq", "/чзв Частые вопросы"), +# telebot.types.BotCommand("books", "/библиотека питониста"), +# telebot.types.BotCommand("links", "/ссылки на правила, чзв и библиотеку"), +# telebot.types.BotCommand("tsya", "/тся и /ться"), +# telebot.types.BotCommand("add", "добавить цитату [Whitelist]"), +# telebot.types.BotCommand("remove", "удалить цитату [Whitelist]"), +# ], +# scope=telebot.types.BotCommandScopeChatMember(PYTHONCHATRU, white_id) +# ) diff --git a/app/filters.py b/app/filters.py index f2612e1..432d0e1 100644 --- a/app/filters.py +++ b/app/filters.py @@ -68,8 +68,8 @@ def is_white(message: types.Message) -> bool: return message.from_user.id in WHITEIDS -def send_or_reply(m: types.Message, answer, **kwargs): +async def send_or_reply(m: types.Message, answer, **kwargs): if m.reply_to_message: - bot.reply_to(m.reply_to_message, answer, **kwargs) + await bot.reply_to(m.reply_to_message, answer, **kwargs) else: - bot.send_message(m.chat.id, answer, **kwargs) + await bot.send_message(m.chat.id, answer, **kwargs) diff --git a/app/models.py b/app/models.py index 3e29f3a..51c6c96 100644 --- a/app/models.py +++ b/app/models.py @@ -47,61 +47,3 @@ class Chat(Base): def __repr__(self): return f'Chat({self.chat_id=}, {self.title=})' - - -# class User(Base): -# __tablename__ = "users" -# id = Column(Integer, primary_key=True) -# tg_id = Column(Integer, unique=True) -# first_name = Column(String) -# last_name = Column(String) -# username = Column(String) -# permissions = Column(Integer) -# -# def __repr__(self): -# return f'User({self.first_name} {self.last_name} {self.username})' -# -# class Role(Base): -# __tablename__ = 'roles' -# id = Column(Integer, primary_key=True) -# name = Column(String(64), unique=True) -# default = Column(Boolean, default=False, index=True) -# permissions = Column(Integer) -# users = relationship('User', backref='role', lazy='dynamic') -# -# def add_permission(self, perm): -# if not self.has_permission(perm): -# self.permissions += perm -# -# def remove_permission(self, perm): -# if self.has_permission(perm): -# self.permissions -= perm -# -# def reset_permissions(self): -# self.permissions = 0 -# -# def has_permission(self, perm): -# return self.permissions & perm == perm -# -# -# @staticmethod -# def insert_roles(): -# roles = { -# "User": [Permission.USE_COMMANDS], -# "Moderator": [Permission.USE_COMMANDS, Permission.SEND_LINKS, -# Permission.MODIFY_QUOTES, Permission.MODERATE], -# "Administrator": [Permission.USE_COMMANDS, Permission.SEND_LINKS, -# Permission.MODIFY_QUOTES, Permission.MODERATE, -# Permission.ADMIN], -# } -# default_role = 'User' -# for r in roles: -# role = Role.query.filter_by(name=r).first() -# if role is None: -# role = Role(name=r) -# role.reset_permissions() -# for perm in roles[r]: -# role.add_permission(perm) -# role.default = (role.name == default_role) -# session.add(role) -# session.commit() \ No newline at end of file diff --git a/app/reminder.py b/app/reminder.py index 8fa47d8..61c7ea1 100644 --- a/app/reminder.py +++ b/app/reminder.py @@ -16,7 +16,7 @@ def scheduler(): @repeat(every().day.at("07:00"), PYTHONCHATRU, None) -def remind(chat_to_repeat, today): +async def remind(chat_to_repeat, today): """Remind holiday.""" if not today: today = dt.today() @@ -33,14 +33,14 @@ def remind(chat_to_repeat, today): if date.year != 1000: age = today.year - date.year notification += f"\n\n🥳 {age}-ая годовщина" - bot.send_message(chat_to_repeat, notification) + await bot.send_message(chat_to_repeat, notification) @repeat(every().day.at("06:00"), PYTHONCHATRU) -def stat_report(chat_to_repeat): +async def stat_report(chat_to_repeat): rep = report.create_report_text(PYTHONCHATRU) if rep: - bot.send_message(chat_to_repeat, rep) + await bot.send_message(chat_to_repeat, rep) report.reset_report_stats(PYTHONCHATRU) diff --git a/app/stan.py b/app/stan.py index 0bfc1e6..8a1f3d1 100644 --- a/app/stan.py +++ b/app/stan.py @@ -15,15 +15,15 @@ def speak(chance_of, group_id): return random.choice([i[0] for i in session.query(Quote.text).filter(Quote.chat_id == group_id).all()]) -def send_quote(after_sec, message, quote): +async def send_quote(after_sec, message, quote): """Pretend Reading, pretend Typing, send.""" if message.text: sleep( len(message.text) * 0.13 / 4 ) # Reading time is quarter of the same text writing time - bot.send_chat_action(message.chat.id, action="typing") + await bot.send_chat_action(message.chat.id, action="typing") sleep(after_sec) # Typing time - bot.send_message(message.chat.id, html.escape(quote)) + await bot.send_message(message.chat.id, html.escape(quote)) def act(message: types.Message): @@ -33,29 +33,29 @@ def act(message: types.Message): @bot.message_handler(func=is_white, commands=["add"]) -def add_stan_quote(message: types.Message): +async def add_stan_quote(message: types.Message): if message.reply_to_message and message.reply_to_message.text: quote = html.escape(message.reply_to_message.text) if quote not in [i[0] for i in session.query(Quote.text).filter( Quote.chat_id == message.chat.id).all()]: session.add(Quote(chat_id=message.chat.id, text=quote.replace("\n", " "))) session.commit() - bot.send_message( + await bot.send_message( message.chat.id, "✅ Добавил\n └ " + quote.replace("\n", " ") + "", ) - bot.delete_message(message.chat.id, message.id) + await bot.delete_message(message.chat.id, message.id) else: - bot.send_message( + await bot.send_message( message.chat.id, f"⛔️ Не добавил, есть токое\n └ {quote}", ) @bot.message_handler(func=is_white, commands=["remove"]) -def remove_stan_quote(message: types.Message): +async def remove_stan_quote(message: types.Message): if message.reply_to_message and message.reply_to_message.text: quote = html.escape(message.reply_to_message.text) @@ -65,19 +65,19 @@ def remove_stan_quote(message: types.Message): session.delete(already_exist) session.commit() - bot.send_message( + await bot.send_message( message.chat.id, f"✅ Удалил\n └ {quote}", ) - bot.delete_message(message.chat.id, message.id) + await bot.delete_message(message.chat.id, message.id) else: - bot.send_message( + await bot.send_message( message.chat.id, f"⛔️ Нет такого\n └ {quote}", ) @bot.message_handler(func=is_nongrata) -def tease_nongrata(message: types.Message): +async def tease_nongrata(message: types.Message): """Reply to non grata mentions.""" - bot.reply_to(message, f"у нас тут таких не любят") + await bot.reply_to(message, f"у нас тут таких не любят")