added search handle via start

This commit is contained in:
синечка ♡ 2026-08-31 23:45:03 +03:00
parent bea6643942
commit d8538de649
4 changed files with 51 additions and 7 deletions

View file

@ -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,
),

View file

@ -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

View file

@ -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"<i>Сейчас идет</i> {lesson_type}, закончится через {max(minutes, 1)} мин."
teachers = [html.escape(teacher) for teacher in self.teacher_ids]
def generate_url(kind, target):
return f'<a href="{config.TELEGRAM_URL}?start=_s{kind[:1]}{convert.encode(html.escape(target))}">{html.escape(target)}</a>'
teachers = [
generate_url("teacher", teacher)
for teacher in self.teacher_ids
]
rooms = [
f'<a href="https://rasp.pgups.ru/schedule/room?room={quote(room)}">ауд. {html.escape(room)}</a>'
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

14
utils/convert.py Normal file
View file

@ -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)
])