diff options
-rw-r--r-- | db | bin | 0 -> 121 bytes | |||
-rw-r--r-- | main.py (renamed from app.py) | 82 | ||||
-rw-r--r-- | persistence.py | 3 | ||||
-rw-r--r-- | strings.py | 3 | ||||
-rw-r--r-- | utils.py | 23 |
5 files changed, 90 insertions, 21 deletions
Binary files differ @@ -13,10 +13,15 @@ from telegram import Update, error from telegram.ext import ApplicationBuilder, CommandHandler, ContextTypes, \ MessageHandler, filters from dotenv import load_dotenv -from rich import inspect import os import logging -from .strings import INVALID_COMMAND +from rich import inspect + +from strings import INVALID_COMMAND, USER_NOT_PROVIDED, USER_ADDED, \ + USER_REMOVED +from utils import context_init +from persistence import Persistence + load_dotenv() @@ -45,36 +50,71 @@ You should have received a copy of the CC0 Public Domain Dedication along with t ''') -async def add_choose_cycle( +async def add( update: Update, context: ContextTypes.DEFAULT_TYPE ) -> None: - command = update.message.text + context_init(context) + + if context.args == []: + await update.message.reply_text(USER_NOT_PROVIDED) + raise error.TelegramError(USER_NOT_PROVIDED) - user = command.replace("/add", "") + for user in context.args: + context.chat_data["users"].append(user) + await update.message.reply_text(USER_ADDED.format(user=user)) - inspect(user) + await update.message.reply_text(context.chat_data) - try: - if user == "": - raise error.TelegramError("User is not provided. Use /add @username") - except error.TelegramError as err: - await update.message.reply_text(err.message) - return - await update.message.reply_text(update.message.text) +async def list( + update: Update, + context: ContextTypes.DEFAULT_TYPE +) -> None: + context_init(context) + + await update.message.reply_text(context.chat_data) + + +async def remove( + update: Update, + context: ContextTypes.DEFAULT_TYPE +) -> None: + context_init(context) + + if context.args == []: + await update.message.reply_text(USER_NOT_PROVIDED) + raise error.TelegramError(USER_NOT_PROVIDED) + + for user in context.args: + if user == "*": + context.chat_data["users"] = [] + break + + context.chat_data["users"].remove(user) + await update.message.reply_text(USER_REMOVED.format(user=user)) + + await update.message.reply_text(context.chat_data) async def unknown(update: Update, context: ContextTypes.DEFAULT_TYPE): - await context.bot.send_message(chat_id=update.effective_chat.id, text=INVALID_COMMAND) + await context.bot.send_message( + chat_id=update.effective_chat.id, + text=INVALID_COMMAND + ) + + +if __name__ == "__main__": + app = ApplicationBuilder().token( + os.environ.get("TELEGRAM_TOKEN") + ).persistence(Persistence).build() -app = ApplicationBuilder().token( - os.environ.get('TELEGRAM_TOKEN') -).build() + app.add_handler(CommandHandler("about", about)) + app.add_handler(CommandHandler("add", add)) + app.add_handler(CommandHandler("list", list)) + app.add_handler(CommandHandler("remove", remove)) -app.add_handler(CommandHandler("about", about)) -app.add_handler(CommandHandler("add", add_choose_cycle)) -app.add_handler(MessageHandler(filters.COMMAND, unknown)) + app.add_handler(MessageHandler(filters.COMMAND, unknown)) -app.run_polling() + app.run_polling() diff --git a/persistence.py b/persistence.py new file mode 100644 index 0000000..71758e1 --- /dev/null +++ b/persistence.py @@ -0,0 +1,3 @@ +from telegram.ext import PicklePersistence + +Persistence = PicklePersistence(filepath='db') @@ -10,3 +10,6 @@ # <http://creativecommons.org/publicdomain/zero/1.0/> INVALID_COMMAND = "Invalid command. Available commands: /add" +USER_NOT_PROVIDED = "User(s) is not provided" +USER_ADDED = "User {user} has been added" +USER_REMOVED = "User {user} has been removed" diff --git a/utils.py b/utils.py new file mode 100644 index 0000000..4b28c03 --- /dev/null +++ b/utils.py @@ -0,0 +1,23 @@ +# This file is part of python-cinema-club-bot +# contributed in 2024 by Mikhail Kirillov (~w96k) <w96k@runbox.com> + +# To the extent possible under law, the author(s) have dedicated all copyright +# and related and neighboring rights to this software to the public domain +# worldwide. This software is distributed without any warranty. + +# You should have received a copy of the CC0 Public Domain Dedication along +# with this software. If not, see: +# <http://creativecommons.org/publicdomain/zero/1.0/> + +from telegram.ext import ContextTypes + + +def context_init(context: ContextTypes.DEFAULT_TYPE): + ''' + Initialize chat context with starting values + ''' + + if "users" not in context.chat_data: + context.chat_data["users"]: list[str] = [] + + return context |