summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMikhail Kirillov <w96k@runbox.com>2024-10-09 01:22:02 +0400
committerMikhail Kirillov <w96k@runbox.com>2024-10-09 01:45:08 +0400
commit0d6745606d3110ac312af9d773e6c0304ce614f1 (patch)
tree6050df4d7f0cc1d34b9201f0c73a1c87428e055f
parent71efb80b46a3edae4ca2afcfd475d33443586a9a (diff)
Add /remove and /list commands (unfinished)
-rw-r--r--dbbin0 -> 121 bytes
-rw-r--r--main.py (renamed from app.py)82
-rw-r--r--persistence.py3
-rw-r--r--strings.py3
-rw-r--r--utils.py23
5 files changed, 90 insertions, 21 deletions
diff --git a/db b/db
new file mode 100644
index 0000000..97c1e47
--- /dev/null
+++ b/db
Binary files differ
diff --git a/app.py b/main.py
index eeaf27e..5ea81d3 100644
--- a/app.py
+++ b/main.py
@@ -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')
diff --git a/strings.py b/strings.py
index 61dc5d6..c9cfb20 100644
--- a/strings.py
+++ b/strings.py
@@ -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