From d8538de6495fba0432b41a7513543de4aad7389f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D1=81=D0=B8=D0=BD=D0=B5=D1=87=D0=BA=D0=B0=20=E2=99=A1?= <63897347+ktnk-dev@users.noreply.github.com> Date: Mon, 31 Aug 2026 23:45:03 +0300 Subject: [PATCH] added search handle via start --- bot/main/register_user.py | 23 +++++++++++++++++++---- config.example.py | 3 +++ models/schedule.py | 18 +++++++++++++++--- utils/convert.py | 14 ++++++++++++++ 4 files changed, 51 insertions(+), 7 deletions(-) create mode 100644 utils/convert.py diff --git a/bot/main/register_user.py b/bot/main/register_user.py index 1edd246..d41c779 100644 --- a/bot/main/register_user.py +++ b/bot/main/register_user.py @@ -3,18 +3,33 @@ import json from telebot.types import Message, ReplyKeyboardRemove from telebot.util import quick_markup +import config from models import logger from models.bot import Markup_v1 as Markup, bot, send from models.schedule import ScheduleAPIError, find_main_groups, group_exists, group_target from models.user import getAllUsers, validate +from utils import convert @bot.message_handler(commands=["start"]) def start(message: Message): user = validate(message) - if user.group and "migrate" in (message.text or ""): + message.text = str(message.text) + + if "_s" in message.text: + query = message.text.split(' ')[-1] + search_target_kind = ({ + 't': 'teacher', + 'r': 'room', + 'g': 'group' + }).get(query[2:3]) + search_query = convert.decode(query[3:]) + return send(message, f'search: {search_target_kind} - {search_query}') + + + if user.group and "migrate" in message.text: user.setState("default") - logger.log("Bot", f"{message.from_user.id} migrated") + logger.log("Bot", f"{user.id} migrated") return send(message, "Добро пожаловать снова 💞", reply_markup=Markup.default(user)) was_registered = bool(user.group) @@ -33,7 +48,7 @@ def start(message: Message): "usage": user.usage, "flags": user.flags, }, - open(f"./users/{message.from_user.id}.json", "w", encoding="utf-8"), + open(f"./users/{user.id}.json", "w", encoding="utf-8"), ensure_ascii=False, indent=4, ) @@ -61,7 +76,7 @@ def notFoundHandler(message: Message): reply_markup=quick_markup( { "Написать разработчику 💞": {"url": "https://t.me/m/Gg00FvJmZDM6"}, - "Перезапустить бота 🤖": {"url": "https://t.me/zatups_bot?start=r"}, + "Перезапустить бота 🤖": {"url": config.TELEGRAM_URL + "?start=r"}, }, row_width=1, ), diff --git a/config.example.py b/config.example.py index 041b9d7..d6c8f97 100644 --- a/config.example.py +++ b/config.example.py @@ -1,6 +1,9 @@ # Telegram bot token TOKEN: str = '...' +# Full url to bot +TELEGRAM_URL: str = 'https://t.me/your_cool_bot' + # Telegram proxy url (None for no proxy) TELEGRAM_PROXY: str | None = None diff --git a/models/schedule.py b/models/schedule.py index 9bfad7e..3e8946b 100644 --- a/models/schedule.py +++ b/models/schedule.py @@ -14,6 +14,7 @@ from urllib.request import Request, urlopen from zoneinfo import ZoneInfo import config +from utils import convert TargetKind = Literal["group", "room", "teacher"] @@ -217,17 +218,28 @@ class Lesson: minutes = int((lesson_end - now).total_seconds() // 60) date_text = f"Сейчас идет {lesson_type}, закончится через {max(minutes, 1)} мин." - teachers = [html.escape(teacher) for teacher in self.teacher_ids] + def generate_url(kind, target): + return f'{html.escape(target)}' + + teachers = [ + generate_url("teacher", teacher) + for teacher in self.teacher_ids + ] rooms = [ - f'ауд. {html.escape(room)}' + generate_url("room", room) for room in self.room_ids ] - groups = [html.escape(group) for group in self.group_names] + groups = [ + generate_url("group", group) + for group in self.group_names + ] if self.target_kind == "teacher": details = rooms + groups elif self.target_kind == "room": details = groups + teachers + elif self.target_kind == "group": + details = teachers + rooms else: details = teachers + rooms + groups diff --git a/utils/convert.py b/utils/convert.py new file mode 100644 index 0000000..8583178 --- /dev/null +++ b/utils/convert.py @@ -0,0 +1,14 @@ +TABLE = 'ёйцукенгшщзхъфывапролджэячсмитьбюЁЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮ1234567890-_. ' +NUMBER = lambda n: str(n) if n > 9 else '0'+str(n) + +def encode(text: str) -> str: + return ''.join([ + NUMBER(TABLE.index(char)) if char in TABLE else char + for char in text + ]) + +def decode(text: str) -> str: + return ''.join([ + TABLE[int(text[index:index+2])] if text[index:index+2].isdigit() else text[index:index+2] + for index in range(0, len(text), 2) + ])