From f221857b0608c9d0a700fda5abefce46e8341203 Mon Sep 17 00:00:00 2001 From: Olly Hearn Date: Wed, 14 Jun 2023 14:48:26 +0300 Subject: [PATCH] 0.1.8-beta --- bot/app/bot.py | 71 +++++++++++++++++++++++++++++-------------- bot/app/changelog.txt | 7 +++++ bot/app/keyboards.py | 8 +++++ bot/app/textbook.py | 10 +++--- 4 files changed, 68 insertions(+), 28 deletions(-) diff --git a/bot/app/bot.py b/bot/app/bot.py index 0f8a5fa..9cf563d 100644 --- a/bot/app/bot.py +++ b/bot/app/bot.py @@ -104,24 +104,14 @@ def kick_first(queue: Queue) -> bool: def proceed_queue_user(queue: Queue, user: User) -> Union[QueueUser, None]: first_queue_user = get_first_queue_user(queue) - if user.id == first_queue_user.user_id: - kick_first(queue) - next_queue_user = get_first_queue_user(queue) - return next_queue_user + if first_queue_user: + if user.id == first_queue_user.user_id: + kick_first(queue) + next_queue_user = get_first_queue_user(queue) + return next_queue_user return None -async def update_queue_users_message(msg: Message, queue: Queue): - users_str = "\n".join([f"{qu.position}. {qu.user.name}" for qu in queue.users]) - await bot.edit_message_text( - chat_id=msg.chat.id, - message_id=msg.id, - text=textbook.queue_users_list.format(name=queue.name, users_str=users_str), - reply_markup=keyboards.queue_users(queue.id), - parse_mode="html", - ) - - def normalize_queue(queue: Queue) -> Queue: # first_user = get_first_queue_user(queue) # if first_user.position != 0: @@ -131,6 +121,19 @@ def normalize_queue(queue: Queue) -> Queue: for i, qu in enumerate(sorted(queue.users, key=lambda qu: qu.position)): setattr(qu, "position", i) session.commit() + return queue + + +async def update_queue_users_message(msg: Message, queue: Queue): + queue = normalize_queue(queue) + users_str = "\n".join([f"{qu.position}. {qu.user.name}" for qu in queue.users]) + await bot.edit_message_text( + chat_id=msg.chat.id, + message_id=msg.id, + text=textbook.queue_users_list.format(name=queue.name, users_str=users_str), + reply_markup=keyboards.queue_users(queue.id), + parse_mode="html", + ) # Basic @@ -229,6 +232,15 @@ async def proceed_user_handler(call: types.CallbackQuery): reply_markup=keyboards.your_turn(queue.id), parse_mode="html", ) + else: + try: + await bot.send_message( + chat_id=queue.owner.id, + text=textbook.queue_finished.format(name=queue.name), + parse_mode="html", + ) + except: + pass await bot.edit_message_text( chat_id=call.message.chat.id, message_id=call.message.id, @@ -249,10 +261,11 @@ async def new_queue_handler(call: types.CallbackQuery): queue = Queue(owner_id=call.from_user.id) session.add(queue) session.commit() - await bot.answer_callback_query( - callback_query_id=call.id, + await bot.edit_message_text( + chat_id=call.message.chat.id, + message_id=call.message.id, text=textbook.new_queue_created.format(id=queue.id), - show_alert=True, + reply_markup=keyboards.to_menu_keyboard(), ) else: await bot.answer_callback_query( @@ -440,11 +453,23 @@ async def queue_settings_handler(call: types.CallbackQuery): async def start_queue_handler(call: types.CallbackQuery): if queue := await get_queue_from_state_data(call): if first_queue_user := get_first_queue_user(queue): - await bot.send_message( - chat_id=first_queue_user.user_id, - text=textbook.your_turn.format(name=queue.name), - reply_markup=keyboards.your_turn(queue.id), - parse_mode="html", + try: + await bot.send_message( + chat_id=first_queue_user.user_id, + text=textbook.your_turn.format(name=queue.name), + reply_markup=keyboards.your_turn(queue.id), + parse_mode="html", + ) + except: + await bot.send_message( + chat_id=queue.owner_id, + text=textbook.error_turn.format(name=first_queue_user.user.name), + parse_mode="html", + ) + await bot.answer_callback_query( + callback_query_id=call.id, + text=textbook.queue_started.format(name=queue.name), + show_alert=True, ) else: await bot.answer_callback_query( diff --git a/bot/app/changelog.txt b/bot/app/changelog.txt index c4bdf81..d2400aa 100644 --- a/bot/app/changelog.txt +++ b/bot/app/changelog.txt @@ -1,3 +1,10 @@ +v0.1.8-beta +- Исправлен баг, при котором после кика первого юзера очередь отображалась наоборот +- При создании очереди сразу генерится ссылка и создателю предлагается в нее вступить +- При невозможности отправить сообщение первому юзеру при старте очереди теперь создателю очереди придет уведомление +- По завершению очереди бот оповестит об этом создателя +- Попап при старте очереди + v0.1.7-beta - Поправлен баг с киком первого вместо обновления списка - Добавлены заглушки куда надо diff --git a/bot/app/keyboards.py b/bot/app/keyboards.py index 312ddc7..9c34019 100644 --- a/bot/app/keyboards.py +++ b/bot/app/keyboards.py @@ -109,3 +109,11 @@ def your_turn(queue_id: str) -> keyboard: [button(text="Я закончил ⏩", callback_data=f"p:{queue_id}")], ] ) + + +def to_menu_keyboard() -> keyboard: + return keyboard( + keyboard=[ + [button(text="⬅️ В меню", callback_data="to_menu")], + ] + ) diff --git a/bot/app/textbook.py b/bot/app/textbook.py index b59917a..81a2cc9 100644 --- a/bot/app/textbook.py +++ b/bot/app/textbook.py @@ -1,9 +1,7 @@ start = "Привет! Я помогу тебе вести очередность людей! Это бывает очень полезно для сдачи работ, к примеру, когда люди договариваются в разных чатах, а ближе к сдаче получается путаница. Ты можешь создавать очереди, отправлять ссылки на вступление, менять очередноcть, создавать очереди в групповых чатах и т.д.!" start_group = "Привет, я QUEUEBOT 2.0, помогаю создавать очереди в твоих групповых чатах!\n\nЧтобы пользоваться мной в этом чате, пользователь с правами админа должен настроить меня, комманда /settings, также не забудь выдать мне права администратора, чтобы я мог видеть список участников этой группы!" menu = "Привет, {name}! Ты в главном меню" -new_queue_created = ( - "Создана новая очередь: {id}\n\nЗаходи в меню очередей и отправляй приглашения!" -) +new_queue_created = "Создана новая очередь! Вступить в нее и пригласить своих друзей ты можешь по ссылке:\nhttps://t.me/queue_senko_bot?start={id}\nИзменить настройки очереди и начать ее ты можешь в меню своих очередей." queue_limit = "Ты достиг лимита очередей (4). Удали свои очереди, или воспользуйся другим аккаунтом!" my_queues_list = "У тебя {count} очередь/и/ей" queue_stats = "Название: {name}\nКоличество участников: {count}" @@ -36,10 +34,12 @@ leaved_queue = "Ты вышел из очереди {name}" your_turn = "Наступил твой черед в одчереди {name}. Иди делай свои дела, а когда закончишь - нажми кнопку снизу ⤵️" finished_turn = "Ты вышел из очереди {name}, удачи!" -error_turn = "Внимание! Не удалось отправить сообщение следующему пользователю очереди {name}! По своему усмотрению ты можешь зайти и кикнуть его вручную" +error_turn = "Внимание! Наступила очередь пользователя {name}, но ему не удается отправить сообщение! По своему усмотрению ты можешь зайти и кикнуть его вручную" +queue_started = "Очередь {name} начата!" +queue_finished = "Очередь {name} подошла к концу!" stats = "Количество пользователей: {users_count}\nКоличество очередей: {queues_count}" -about = "Бот для очередей.\n\nРазработчик - ollyhearn.\nЯ всегда открыт для вопросов и предложений: @OllyHearn\n\nv0.1.7-beta" +about = "Бот для очередей.\n\nРазработчик - ollyhearn.\nЯ всегда открыт для вопросов и предложений: @OllyHearn\n\nv0.1.8-beta" groups_plug = "Всем привет, я бот для очередей! В настоящее время идет активная разработка, так что я пока не могу полностью функционировать в группах, но вы всегда можете запустить меня в личном диалоге, создать очередь, и отправить ссылку на очередь сюда. Функционал будет доработан, а пока пользуйтесь мной в личке:\n\nhttps://t.me/queue_senko_bot" in_development_plug = "Функция в разработке ¯\_(ツ)_/¯"