summaryrefslogtreecommitdiff
path: root/commands/users.py
diff options
context:
space:
mode:
Diffstat (limited to 'commands/users.py')
-rw-r--r--commands/users.py91
1 files changed, 91 insertions, 0 deletions
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) <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 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)