diff --git a/bot/app/bot.py b/bot/app/bot.py
index 16e7789..0f8a5fa 100644
--- a/bot/app/bot.py
+++ b/bot/app/bot.py
@@ -21,7 +21,12 @@ from typing import Union
# Local imports
from config import token
-from constants import MAX_QUEUES_OWN, MAX_QUEUES_PARTS_IN, MAX_NAME_LENGTH, MAX_QUEUE_NAME_LENGTH
+from constants import (
+ MAX_QUEUES_OWN,
+ MAX_QUEUES_PARTS_IN,
+ MAX_NAME_LENGTH,
+ MAX_QUEUE_NAME_LENGTH,
+)
import textbook
import keyboards
@@ -65,6 +70,7 @@ async def get_queue_from_state_data(call: types.CallbackQuery) -> Queue:
return None
return queue
+
async def get_parting_queue_from_state_data(call: types.CallbackQuery) -> Queue:
async with bot.retrieve_data(
user_id=call.from_user.id, chat_id=call.message.chat.id
@@ -80,7 +86,9 @@ async def get_parting_queue_from_state_data(call: types.CallbackQuery) -> Queue:
def get_first_queue_user(queue: Queue) -> Union[QueueUser, None]:
- arr = sorted(queue.users, key=lambda qu: qu.position) # TODO: Maybe there is a better solution..?
+ arr = sorted(
+ queue.users, key=lambda qu: qu.position
+ ) # TODO: Maybe there is a better solution..?
return arr[0] if len(arr) else None
@@ -113,6 +121,7 @@ async def update_queue_users_message(msg: Message, queue: Queue):
parse_mode="html",
)
+
def normalize_queue(queue: Queue) -> Queue:
# first_user = get_first_queue_user(queue)
# if first_user.position != 0:
@@ -123,6 +132,7 @@ def normalize_queue(queue: Queue) -> Queue:
setattr(qu, "position", i)
session.commit()
+
# Basic
@@ -329,13 +339,18 @@ async def queue_parts_handler(call: types.CallbackQuery, queue_id: str = None):
@bot.callback_query_handler(func=lambda c: c.data == "leave_queue")
async def leave_queue_handler(call: types.CallbackQuery):
if queue := await get_parting_queue_from_state_data(call):
- queueuser = session.query(QueueUser).filter_by(queue_id=queue.id, user_id=call.from_user.id).first()
+ queueuser = (
+ session.query(QueueUser)
+ .filter_by(queue_id=queue.id, user_id=call.from_user.id)
+ .first()
+ )
session.delete(queueuser)
session.commit()
normalize_queue(queue)
await bot.answer_callback_query(
callback_query_id=call.id,
- text=textbook.leaved_queue.format(name=queue.name))
+ text=textbook.leaved_queue.format(name=queue.name),
+ )
await parts_queues_handler(call)
return None
await bot.answer_callback_query(callback_query_id=call.id)
@@ -444,7 +459,7 @@ async def start_queue_handler(call: types.CallbackQuery):
@bot.callback_query_handler(func=lambda c: c.data == "kick_first")
-async def get_queue_users_handler(call: types.CallbackQuery):
+async def kick_first_handler(call: types.CallbackQuery):
if queue := await get_queue_from_state_data(call):
if queue.owner_id == call.from_user.id:
if kick_first(queue):
@@ -478,7 +493,23 @@ async def swap_users_handler(call: types.CallbackQuery):
@bot.callback_query_handler(func=lambda c: c.data == "refresh_users")
async def refresh_users_handler(call: types.CallbackQuery):
- await get_queue_users_handler(call)
+ if queue := await get_queue_from_state_data(call):
+ try:
+ users_str = "\n".join(
+ [f"{qu.position}. {qu.user.name}" for qu in queue.users]
+ )
+ await bot.edit_message_text(
+ chat_id=call.message.chat.id,
+ message_id=call.message.id,
+ text=textbook.queue_users_list.format(
+ name=queue.name, users_str=users_str
+ ),
+ reply_markup=keyboards.queue_users(queue.id),
+ parse_mode="html",
+ )
+ except:
+ await asyncio.sleep(2)
+ await bot.answer_callback_query(callback_query_id=call.id)
# Queue settings
@@ -529,6 +560,15 @@ async def update_queue_name(msg: Message):
)
+@bot.callback_query_handler(func=lambda c: c.data == "edit_queue_description")
+async def edit_queue_description_handler(call: types.CallbackQuery):
+ await bot.answer_callback_query(
+ callback_query_id=call.id,
+ text=textbook.in_development_plug,
+ show_alert=True,
+ )
+
+
@bot.callback_query_handler(func=lambda c: c.data == "delete_queue_approve")
async def delete_queue_approve_handler(call: types.CallbackQuery):
await bot.edit_message_text(
@@ -597,11 +637,32 @@ async def update_queue_name(msg: Message):
@bot.message_handler(commands=["mystate"])
-async def mystate(msg):
+async def mystate(msg: Message):
state = await bot.get_state(user_id=msg.from_user.id)
await bot.send_message(chat_id=msg.from_user.id, text=state)
+@bot.message_handler(commands=["chatid"])
+async def chatid(msg: Message):
+ await bot.send_message(chat_id=msg.chat.id, text=msg.chat.id)
+
+
+@bot.message_handler(commands=["stats"])
+async def stats(msg: Message):
+ users_count = session.query(User).count()
+ queues_count = session.query(Queue).count()
+ await bot.send_message(
+ chat_id=msg.chat.id,
+ text=textbook.stats.format(users_count=users_count, queues_count=queues_count),
+ )
+
+
+@bot.message_handler(commands=["changelog"])
+async def changelog(msg: Message):
+ with open("changelog.txt", "r") as file:
+ await bot.send_message(chat_id=msg.chat.id, text=file.read(), parse_mode="html")
+
+
# Launch
diff --git a/bot/app/changelog.txt b/bot/app/changelog.txt
new file mode 100644
index 0000000..c4bdf81
--- /dev/null
+++ b/bot/app/changelog.txt
@@ -0,0 +1,7 @@
+v0.1.7-beta
+- Поправлен баг с киком первого вместо обновления списка
+- Добавлены заглушки куда надо
+- /stats - статистика по боту
+
+v0.1.6-beta
+- MVP бета-версия
diff --git a/bot/app/textbook.py b/bot/app/textbook.py
index a861356..3b05e02 100644
--- a/bot/app/textbook.py
+++ b/bot/app/textbook.py
@@ -26,7 +26,9 @@ joined_queue = "Ты присоединился к очереди {name}\
error_joining_queue = "Ты не можешь присоединиться к очереди {name}, так как ты уже в ней состоишь или достигнут лимит очередей (8)!"
max_participants_reached = "Очередь переполнена, подожди, пока кто-нибудь выйдет!"
first_kicked = "Первый пользователь кикнут"
-kick_first_error = "Действие не выполнено, возможно вы уже вышли из очереди, или очередь пуста?"
+kick_first_error = (
+ "Действие не выполнено, возможно вы уже вышли из очереди, или очередь пуста?"
+)
parts_queues_menu = "Ты принимаешь участие в {count} очереди/ей"
part_queue = "Очередь {name}\n\nУчастники:\n{users_str}"
@@ -36,6 +38,8 @@ your_turn = "Наступил твой черед в одчереди {name}<
finished_turn = "Ты вышел из очереди {name}, удачи!"
error_turn = "Внимание! Не удалось отправить сообщение следующему пользователю очереди {name}! По своему усмотрению ты можешь зайти и кикнуть его вручную"
+stats = "Количество пользователей: {users_count}\nКоличество очередей: {queues_count}"
+
about = "Бот для очередей.\n\nРазработчик - ollyhearn.\nЯ всегда открыт для вопросов и предложений: @OllyHearn\n\nv0.1.6-beta"
groups_plug = "Всем привет, я бот для очередей! В настоящее время идет активная разработка, так что я пока не могу полностью функционировать в группах, но вы всегда можете запустить меня в личном диалоге, создать очередь, и отправить ссылку на очередь сюда. Функционал будет доработан, а пока пользуйтесь мной в личке:\n\nhttps://t.me/queue_senko_bot"
in_development_plug = "Функция в разработке ¯\_(ツ)_/¯"