a
This commit is contained in:
123
bot/app/bot.py
123
bot/app/bot.py
@ -33,6 +33,8 @@ bot = AsyncTeleBot(token, state_storage=StatePickleStorage())
|
||||
|
||||
class States(StatesGroup):
|
||||
default = State()
|
||||
changing_name = State()
|
||||
changing_queue_name = State()
|
||||
|
||||
|
||||
def get_queue_stats_text(queue: Queue) -> str:
|
||||
@ -45,24 +47,33 @@ async def start(msg: Message):
|
||||
if msg.chat.type == "private":
|
||||
user = session.query(User).filter_by(id=msg.from_user.id).first()
|
||||
if not user:
|
||||
new_user = User(
|
||||
user = User(
|
||||
id=msg.from_user.id,
|
||||
name=msg.from_user.first_name,
|
||||
username=msg.from_user.username,
|
||||
)
|
||||
session.add(new_user)
|
||||
session.add(user)
|
||||
session.commit()
|
||||
await bot.send_message(chat_id=msg.chat.id, text=textbook.start)
|
||||
await asyncio.sleep(2)
|
||||
await bot.set_state(user_id=msg.from_user.id, state=States.default)
|
||||
await bot.send_message(
|
||||
chat_id=msg.chat.id, text=textbook.menu, reply_markup=keyboards.menu()
|
||||
)
|
||||
if len(msg.text.split()) > 1:
|
||||
pass
|
||||
else:
|
||||
await bot.send_message(
|
||||
chat_id=msg.chat.id, text=textbook.menu.format(name=user.name), reply_markup=keyboards.menu()
|
||||
)
|
||||
|
||||
|
||||
@bot.callback_query_handler(func=lambda c: c.data == "to_menu")
|
||||
async def to_menu_handler(call: types.CallbackQuery):
|
||||
user = session.query(User).filter_by(id=call.from_user.id).first()
|
||||
await bot.set_state(user_id=call.from_user.id, state=States.default)
|
||||
await bot.send_message(
|
||||
chat_id=call.message.chat.id, text=textbook.menu, reply_markup=keyboards.menu()
|
||||
await bot.edit_message_text(
|
||||
chat_id=call.message.chat.id,
|
||||
message_id=call.message.id,
|
||||
text=textbook.menu.format(name=user.name),
|
||||
reply_markup=keyboards.menu(),
|
||||
)
|
||||
|
||||
@bot.callback_query_handler(func=lambda c: c.data == "new_queue")
|
||||
@ -71,7 +82,7 @@ async def new_queue_handler(call: types.CallbackQuery):
|
||||
if user:
|
||||
if len(user.owns_queues) < 4:
|
||||
queue = Queue(owner_id=call.from_user.id)
|
||||
sessio.add(queue)
|
||||
session.add(queue)
|
||||
session.commit()
|
||||
await bot.answer_callback_query(
|
||||
callback_query_id=call.id,
|
||||
@ -99,8 +110,8 @@ async def my_queues_handler(call: types.CallbackQuery):
|
||||
|
||||
|
||||
@bot.callback_query_handler(func=lambda c: c.data[:2] == "q:")
|
||||
async def edit_queue_handler(call: types.CallbackQuery):
|
||||
queue_id = call.data[:2]
|
||||
async def queue_handler(call: types.CallbackQuery, queue_id: str = None):
|
||||
queue_id = call.data[2:] if not queue_id else queue_id
|
||||
queue = session.query(Queue).filter_by(id=queue_id).first()
|
||||
if not queue:
|
||||
await bot.answer_callback_query(
|
||||
@ -110,7 +121,7 @@ async def edit_queue_handler(call: types.CallbackQuery):
|
||||
async with bot.retrieve_data(
|
||||
user_id=call.from_user.id, chat_id=call.message.chat.id
|
||||
) as state_data:
|
||||
state_data["queue"] = call.data[2:]
|
||||
state_data["queue_id"] = queue_id
|
||||
await bot.edit_message_text(
|
||||
chat_id=call.message.chat.id,
|
||||
message_id=call.message.id,
|
||||
@ -120,16 +131,85 @@ async def edit_queue_handler(call: types.CallbackQuery):
|
||||
await bot.answer_callback_query(callback_query_id=call.id)
|
||||
|
||||
|
||||
@bot.message_handler(commands=["new_queue"])
|
||||
async def nq(msg: Message):
|
||||
user = session.query(User).filter_by(id=msg.from_user.id).first()
|
||||
queue = Queue(owner_id=user.id)
|
||||
session.add(queue)
|
||||
session.commit()
|
||||
await bot.send_message(
|
||||
chat_id=msg.chat.id, text=f"Создана новая очередь: {queue.id}"
|
||||
@bot.callback_query_handler(func=lambda c: c.data == "edit_queue_name")
|
||||
async def edit_queue_name_handler(call: types.CallbackQuery):
|
||||
async with bot.retrieve_data(
|
||||
user_id=call.from_user.id, chat_id=call.message.chat.id
|
||||
) as state_data:
|
||||
queue_id = state_data.get("queue_id", None)
|
||||
if not queue_id:
|
||||
await bot.answer_callback_query(
|
||||
callback_query_id=call.id, text=textbook.queue_operational_error
|
||||
)
|
||||
return None
|
||||
queue = session.query(Queue).filter_by(id=queue_id).first()
|
||||
if queue.owner.id != call.from_user.id:
|
||||
await bot.answer_callback_query(
|
||||
callback_query_id=call.id, text=textbook.queue_operational_error
|
||||
)
|
||||
return None
|
||||
await bot.set_state(user_id=call.from_user.id, state=States.changing_queue_name)
|
||||
await bot.edit_message_text(
|
||||
chat_id=call.message.chat.id,
|
||||
message_id=call.message.id,
|
||||
text=textbook.edit_name,
|
||||
reply_markup=keyboards.edit_name(),
|
||||
)
|
||||
|
||||
@bot.callback_query_handler(func=lambda c: c.data == "cancel", state=States.changing_queue_name)
|
||||
async def edit_queue_name_cancel_handler(call: types.CallbackQuery):
|
||||
async with bot.retrieve_data(
|
||||
user_id=call.from_user.id, chat_id=call.message.chat.id
|
||||
) as state_data:
|
||||
queue_id = state_data.get("queue_id", None)
|
||||
await queue_handler(call, queue_id)
|
||||
|
||||
|
||||
@bot.callback_query_handler(func=lambda c: c.data == "settings")
|
||||
async def settings(call: types.CallbackQuery):
|
||||
await bot.set_state(user_id=call.from_user.id, state=States.default)
|
||||
await bot.edit_message_text(
|
||||
chat_id=call.message.chat.id,
|
||||
message_id=call.message.id,
|
||||
text=textbook.settings,
|
||||
reply_markup=keyboards.settings(),
|
||||
)
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@bot.callback_query_handler(func=lambda c: c.data == "edit_name")
|
||||
async def edit_name_handler(call: types.CallbackQuery):
|
||||
await bot.set_state(user_id=call.from_user.id, state=States.changing_name)
|
||||
await bot.edit_message_text(
|
||||
chat_id=call.message.chat.id,
|
||||
message_id=call.message.id,
|
||||
text=textbook.edit_name,
|
||||
reply_markup=keyboards.edit_name(),
|
||||
)
|
||||
|
||||
|
||||
@bot.callback_query_handler(func=lambda c: c.data == "cancel", state=States.changing_name)
|
||||
async def edit_name_cancel_handler(call: types.CallbackQuery):
|
||||
await settings(call)
|
||||
|
||||
|
||||
@bot.message_handler(content_types=["text"], state=States.changing_name)
|
||||
async def update_name(msg: Message):
|
||||
if len(msg.text) > 40 or "\n" in msg.text:
|
||||
await bot.send_message(
|
||||
chat_id=msg.chat.id, text=textbook.edit_name_error
|
||||
)
|
||||
return None
|
||||
user = session.query(User).filter_by(id=msg.from_user.id).first()
|
||||
setattr(user, "name", msg.text)
|
||||
session.commit()
|
||||
await bot.send_message(
|
||||
chat_id=msg.chat.id, text=textbook.edit_name_success
|
||||
)
|
||||
await asyncio.sleep(1)
|
||||
await start(msg)
|
||||
|
||||
@bot.message_handler(commands=["take_part"])
|
||||
async def tp(msg: Message):
|
||||
@ -160,6 +240,11 @@ async def q(msg: Message):
|
||||
else:
|
||||
await bot.send_message(chat_id=msg.chat.id, text="Очередь не найдена!")
|
||||
|
||||
@bot.message_handler(commands=["mystate"])
|
||||
async def mystate(msg):
|
||||
state = await bot.get_state(user_id=msg.from_user.id)
|
||||
await bot.send_message(chat_id=msg.from_user.id, text=state)
|
||||
|
||||
|
||||
async def main():
|
||||
a = asyncio.create_task(bot.polling(non_stop=True))
|
||||
|
||||
@ -10,6 +10,7 @@ def menu() -> keyboard:
|
||||
keyboard=[
|
||||
[button(text="➕ Новая очередь", callback_data="new_queue")],
|
||||
[button(text="📋 Мои очереди", callback_data="my_queues")],
|
||||
[button(text="🔧 Настройки", callback_data="settings")],
|
||||
[button(text="ℹ️ О боте", callback_data="about")],
|
||||
]
|
||||
)
|
||||
@ -30,3 +31,18 @@ def queue_menu() -> keyboard:
|
||||
[button(text="⬅️ В меню", callback_data="to_menu")],
|
||||
]
|
||||
)
|
||||
|
||||
def settings() -> keyboard:
|
||||
return keyboard(
|
||||
keyboard=[
|
||||
[button(text="✏️ Поменять свое имя", callback_data="edit_name")],
|
||||
[button(text="⬅️ В меню", callback_data="to_menu")],
|
||||
]
|
||||
)
|
||||
|
||||
def edit_name() -> keyboard:
|
||||
return keyboard(
|
||||
keyboard=[
|
||||
[button(text="❌ Отмена", callback_data="settings")],
|
||||
]
|
||||
)
|
||||
|
||||
@ -1,9 +1,15 @@
|
||||
start = "Привет! Я помогу тебе вести очередность людей! Это бывает очень полезно для сдачи работ, к примеру, когда люди договариваются в разных чатах, а ближе к сдаче получается путаница. Ты можешь создавать очереди, отправлять ссылки на вступление, менять очередноcть, создавать очереди в групповых чатах и т.д.!"
|
||||
start_group = "Привет, я QUEUEBOT 2.0, помогаю создавать очереди в твоих групповых чатах!\n\nЧтобы пользоваться мной в этом чате, пользователь с правами админа должен настроить меня, комманда /settings, также не забудь выдать мне права администратора, чтобы я мог видеть список участников этой группы!"
|
||||
menu = "Главное меню"
|
||||
menu = "Привет, {name}! Ты в главном меню"
|
||||
new_queue_created = (
|
||||
'Создана новая очередь: {id}. Редактировать ее можно в меню "➕ Новая очередь"'
|
||||
)
|
||||
queue_limit = "Ты достиг лимита очередей (4). Удали свои очереди, или воспользуйся другим аккаунтом!"
|
||||
my_queues_list = "У тебя {count} очереди/ей"
|
||||
my_queues_list = "У тебя {count} очередь/и/ей"
|
||||
error = "Произошла непредвиденная ошибка!"
|
||||
queue_operational_error = "Произошла ошибка! Либо вы не являетесь владельцем очереди, либо данные устарели и вам следует заново выбрать очередь в меню!"
|
||||
edit_queue_name = "Введи новое имя очереди, имя должно быть не длинее 40 символов и не должно содержать переносов строки"
|
||||
settings = "🛠 Меню настроек"
|
||||
edit_name = "Ты можешь поменять свое имя, которое будет отображаться в очередях. По умолчанию используется твое имя в Телеграме. Имя должно быть не длинее 40 символов и не иметь переносов строки. Пришли мне новое имя, или нажми кнопку \"❌ Отмена\""
|
||||
edit_name_success = "Имя изменено!"
|
||||
edit_name_error = "Новое имя не подходит под условия. Напиши подходящее, или нажми кнопку \"❌ Отмена\""
|
||||
|
||||
Reference in New Issue
Block a user