From cc34991f2098692a2cb2a9e913bd6667d38fdab5 Mon Sep 17 00:00:00 2001 From: Mikhail Kirillov Date: Wed, 9 Oct 2024 03:05:41 +0400 Subject: Add commands modules; Added /chooser command --- commands/users.py | 91 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 91 insertions(+) create mode 100644 commands/users.py (limited to 'commands/users.py') diff --git a/commands/users.py b/commands/users.py new file mode 100644 index 0000000..affdb53 --- /dev/null +++ b/commands/users.py @@ -0,0 +1,91 @@ +# This file is part of python-cinema-club-bot +# contributed in 2024 by Mikhail Kirillov (~w96k) + +# 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: +# + +from telegram import Update, error +from telegram.ext import ContextTypes +from collections import deque + +from strings import USER_NOT_PROVIDED, USER_ADDED, USER_REMOVED, EXPECTED_ONE_USER +from utils import context_init + +from rich import inspect + + +async def add_users( + 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: + context.chat_data["users"].append(user) + await update.message.reply_text(USER_ADDED.format(user=user)) + + await update.message.reply_text(context.chat_data["users"]) + + +async def list_users( + update: Update, + context: ContextTypes.DEFAULT_TYPE +) -> None: + context_init(context) + + await update.message.reply_text(context.chat_data["users"]) + + +async def remove_users( + 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["users"]) + + +async def chooser_user( + 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) + + if len(context.args) > 1: + await update.message.reply_text(EXPECTED_ONE_USER) + raise error.TelegramError(EXPECTED_ONE_USER) + + chooser = context.args[0] + users = deque(context.chat_data["users"]) + + chooser_index = users.index(chooser) + users.rotate(-chooser_index) + + context.chat_data["users"] = list(users) + + await update.message.reply_text(context.chat_data) -- cgit v1.2.3