added search handle via start
This commit is contained in:
parent
bea6643942
commit
d8538de649
4 changed files with 51 additions and 7 deletions
|
|
@ -3,18 +3,33 @@ import json
|
||||||
from telebot.types import Message, ReplyKeyboardRemove
|
from telebot.types import Message, ReplyKeyboardRemove
|
||||||
from telebot.util import quick_markup
|
from telebot.util import quick_markup
|
||||||
|
|
||||||
|
import config
|
||||||
from models import logger
|
from models import logger
|
||||||
from models.bot import Markup_v1 as Markup, bot, send
|
from models.bot import Markup_v1 as Markup, bot, send
|
||||||
from models.schedule import ScheduleAPIError, find_main_groups, group_exists, group_target
|
from models.schedule import ScheduleAPIError, find_main_groups, group_exists, group_target
|
||||||
from models.user import getAllUsers, validate
|
from models.user import getAllUsers, validate
|
||||||
|
from utils import convert
|
||||||
|
|
||||||
|
|
||||||
@bot.message_handler(commands=["start"])
|
@bot.message_handler(commands=["start"])
|
||||||
def start(message: Message):
|
def start(message: Message):
|
||||||
user = validate(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")
|
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))
|
return send(message, "Добро пожаловать снова 💞", reply_markup=Markup.default(user))
|
||||||
|
|
||||||
was_registered = bool(user.group)
|
was_registered = bool(user.group)
|
||||||
|
|
@ -33,7 +48,7 @@ def start(message: Message):
|
||||||
"usage": user.usage,
|
"usage": user.usage,
|
||||||
"flags": user.flags,
|
"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,
|
ensure_ascii=False,
|
||||||
indent=4,
|
indent=4,
|
||||||
)
|
)
|
||||||
|
|
@ -61,7 +76,7 @@ def notFoundHandler(message: Message):
|
||||||
reply_markup=quick_markup(
|
reply_markup=quick_markup(
|
||||||
{
|
{
|
||||||
"Написать разработчику 💞": {"url": "https://t.me/m/Gg00FvJmZDM6"},
|
"Написать разработчику 💞": {"url": "https://t.me/m/Gg00FvJmZDM6"},
|
||||||
"Перезапустить бота 🤖": {"url": "https://t.me/zatups_bot?start=r"},
|
"Перезапустить бота 🤖": {"url": config.TELEGRAM_URL + "?start=r"},
|
||||||
},
|
},
|
||||||
row_width=1,
|
row_width=1,
|
||||||
),
|
),
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,9 @@
|
||||||
# Telegram bot token
|
# Telegram bot token
|
||||||
TOKEN: str = '...'
|
TOKEN: str = '...'
|
||||||
|
|
||||||
|
# Full url to bot
|
||||||
|
TELEGRAM_URL: str = 'https://t.me/your_cool_bot'
|
||||||
|
|
||||||
# Telegram proxy url (None for no proxy)
|
# Telegram proxy url (None for no proxy)
|
||||||
TELEGRAM_PROXY: str | None = None
|
TELEGRAM_PROXY: str | None = None
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -14,6 +14,7 @@ from urllib.request import Request, urlopen
|
||||||
from zoneinfo import ZoneInfo
|
from zoneinfo import ZoneInfo
|
||||||
|
|
||||||
import config
|
import config
|
||||||
|
from utils import convert
|
||||||
|
|
||||||
|
|
||||||
TargetKind = Literal["group", "room", "teacher"]
|
TargetKind = Literal["group", "room", "teacher"]
|
||||||
|
|
@ -217,17 +218,28 @@ class Lesson:
|
||||||
minutes = int((lesson_end - now).total_seconds() // 60)
|
minutes = int((lesson_end - now).total_seconds() // 60)
|
||||||
date_text = f"<i>Сейчас идет</i> {lesson_type}, закончится через {max(minutes, 1)} мин."
|
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 = [
|
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
|
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":
|
if self.target_kind == "teacher":
|
||||||
details = rooms + groups
|
details = rooms + groups
|
||||||
elif self.target_kind == "room":
|
elif self.target_kind == "room":
|
||||||
details = groups + teachers
|
details = groups + teachers
|
||||||
|
elif self.target_kind == "group":
|
||||||
|
details = teachers + rooms
|
||||||
else:
|
else:
|
||||||
details = teachers + rooms + groups
|
details = teachers + rooms + groups
|
||||||
|
|
||||||
|
|
|
||||||
14
utils/convert.py
Normal file
14
utils/convert.py
Normal 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)
|
||||||
|
])
|
||||||
Loading…
Add table
Reference in a new issue