From 14a6d69bf8824bfc7f2f890fabe6e8dd1a16446c Mon Sep 17 00:00:00 2001 From: Rykov7 Date: Sun, 18 Dec 2022 07:45:47 +0300 Subject: [PATCH] add Stan, bdmtss, quote, layout mapping, upd README.md --- README.md | 20 ++++++++++++++++++- app/admin.py | 3 ++- app/bot.py | 53 ++++++++++++++++++++++++++++++++++++++++----------- app/config.py | 6 ++++++ app/stan.py | 10 ++++++++++ 5 files changed, 79 insertions(+), 13 deletions(-) create mode 100644 app/stan.py diff --git a/README.md b/README.md index 314cb9f..0862f9b 100644 --- a/README.md +++ b/README.md @@ -26,4 +26,22 @@ Bot is easily understandable reading in-code comments of the handler functions, ### How do I read logs of running Lutz bot daemon? Continuous log reading on Linux: -```# journalctl --unit=lutz.service -f --no-pager``` \ No newline at end of file +```# journalctl --unit=lutz.service -f --no-pager``` + + +### Hot to interact with Lutz bot? +Bot can recieve commands and behave depending on chat situation. + +Standard command pack for bot father includes: +* nobot - Telebot shouldn't be your first Python project +* noparse - Web-scraper shouldn't be your first Python project +* nogui - GUI app shouldn't be your first Python project +* nometa - Don't ask meta questions +* neprivet - Don't hello +* quote - Random quote +* add - Add quote +* g - Google it [Request text can be any text from replied message or arguments if there's text after `\g example`] +* rules - Chat rules +* faq - FAQ +* books - Pythonista's Library ( +* lutz - Send Lutz book \ No newline at end of file diff --git a/app/admin.py b/app/admin.py index d99947c..63f7d41 100644 --- a/app/admin.py +++ b/app/admin.py @@ -2,7 +2,7 @@ from importlib import reload from . import config from . import me -from . import reminder +from . import stan from . import report from . import bot as bot_mod @@ -12,3 +12,4 @@ def reload_modules(): reload(config) reload(me) reload(bot_mod) + reload(stan) diff --git a/app/bot.py b/app/bot.py index 8c0a017..cc6f424 100644 --- a/app/bot.py +++ b/app/bot.py @@ -5,10 +5,12 @@ from telebot import types import logging from urllib import parse +from . import stan from . import reminder from . import admin from . import report -from .config import bot, URL_RX, ALLOWED_WORDS, ADMIN_ID, TOKEN, PYTHONCHATRU, WHITEUN, WHITEIDS +from .config import bot, URL_RX, ALLOWED_WORDS, ADMIN_ID, TOKEN, PYTHONCHATRU, WHITEUN, WHITEIDS, RUS_ENG_TABLE, \ + ENG_RUS_TABLE, RUS from .me import get_me # https://core.telegram.org/bots/api Telegram Bot API @@ -141,10 +143,21 @@ def send_lutz_command(message): bot.send_document( message.chat.id, document='BQACAgQAAxkBAAPBYsWJG9Ml0fPrnbU9UyzTQiQSuHkAAjkDAAIstCxSkuRbXAlcqeQpBA', - caption="""Learning Python, 5th Edition - ├ by Mark Lutz - └ Released June 2013""", - parse_mode='HTML') + caption="вот, не позорься") + + +@bot.message_handler(commands=['bdmtss']) +def send_bdmtss_audio(message): + bot.send_audio(message.chat.id, 'CQACAgIAAxkBAAIJT2Oej0ir56sDp5v2lbUsT75rxmKVAAKAJwACOo7xSEuuBINnWxEKLAQ') + + +@bot.message_handler(commands=['tr']) +def translate_layout(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)) + else: + bot.send_message(message.chat.id, message.reply_to_message.text.translate(ENG_RUS_TABLE)) @bot.message_handler(commands=['lib', 'library', 'book', 'books']) @@ -210,6 +223,20 @@ def send_stats(message): parse_mode='HTML', disable_web_page_preview=True) +@bot.message_handler(commands=['add']) +def add_stan_quote(message): + if message.reply_to_message and message.reply_to_message.text: + with open('Stan.txt', 'a', encoding='utf8') as stan_quotes: + stan_quotes.write('\n' + message.reply_to_message.text) + bot.send_message(message.chat.id, f'Добавил: {message.reply_to_message.text}', + parse_mode='HTML', disable_web_page_preview=True) + + +@bot.message_handler(commands=['quote']) +def stan_speak(message): + bot.send_message(message.chat.id, stan.speak(0)) + + @bot.message_handler(commands=['reset_stats']) def send_stats(message): report.reset_report_stats() @@ -243,11 +270,6 @@ def admin_panel(message: types.Message): logging.warning(f'[UNBAN (M)] {unban_id}') -def check_chat(message: types.Message): - if message.chat.id == PYTHONCHATRU: - return True - - @bot.message_handler(commands=['tsya']) def send_tsya_link(message: types.Message): """ тся/ться """ @@ -344,7 +366,12 @@ def check_unwanted_list(type_message: types.Message) -> bool: @bot.message_handler(func=check_unwanted_list) def unwanted_mentions(message: types.Message): """ Reply to unwanted mentions. """ - bot.reply_to(message, f'У нас таких не любят! 🥴', parse_mode='HTML') + bot.reply_to(message, f'у нас тут таких не любят') + + +def check_chat(message: types.Message): + if message.chat.id == PYTHONCHATRU: + return True @bot.message_handler(func=check_chat, content_types=['text', 'sticker', 'photo', 'animation', 'video', @@ -358,6 +385,10 @@ def unwanted_mentions(message: types.Message): else: s['Messages'][message.from_user.id]['Count'] += 1 + quote = stan.speak(20) + if quote: + bot.send_message(message.chat.id, quote) + @app.route(f"/bot{TOKEN}/", methods=['POST']) def webhook(): diff --git a/app/config.py b/app/config.py index a0dcb30..bd7ed10 100644 --- a/app/config.py +++ b/app/config.py @@ -17,3 +17,9 @@ ALLOWED_WORDS = ['paste', 'github', 'google', 'nometa', 'python', 'django', 'fla WHITEUN = set(os.environ.get('whitelist', '<<?""" +RUS_ENG_TABLE = str.maketrans(RUS, ENG) +ENG_RUS_TABLE = str.maketrans(ENG, RUS) diff --git a/app/stan.py b/app/stan.py new file mode 100644 index 0000000..85e59bb --- /dev/null +++ b/app/stan.py @@ -0,0 +1,10 @@ +""" Stan quote generator. """ +import random + +stan = [i.rstrip() for i in open('Stan.txt', 'r', encoding='utf8')] + + +def speak(chance): + chance = random.randint(0, chance) + if chance == 0: + return random.choice(stan)