Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions src/app/bot.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
from src.handlers import (
legacy_route,
common,
info,
create_room,
room_admin,
wishes,
Expand All @@ -32,6 +33,7 @@ async def run_bot(token: str) -> None:
dp.include_routers(
legacy_route.router,
common.router,
info.router,
wishes.router,
room_admin.router,
create_room.router,
Expand Down
73 changes: 37 additions & 36 deletions src/db/db.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,36 +12,7 @@
ROOM_DEFAULT_EXCHANGE_TYPE = "централизованый"


async def start_db():
cur.execute(
"CREATE TABLE IF NOT EXISTS rooms("
"room_iden TEXT PRIMARY KEY,"
"status BOOLEAN DEFAULT FALSE,"
"admin INTEGER,"
"gift_price_range TEXT DEFAULT 'не установлен',"
"event_time TEXT DEFAULT 'не установлено',"
"exchange_type TEXT DEFAULT 'централизованый'"
")"
)
cur.execute(
"CREATE TABLE IF NOT EXISTS users(tg_id INTEGER PRIMARY KEY,first_name TEXT,last_name TEXT,username TEXT)"
)
cur.execute(
"""
CREATE TABLE IF NOT EXISTS user_rooms(
tg_id INTEGER,
room_iden TEXT,
is_member BOOLEAN DEFAULT FALSE,
is_admin BOOLEAN DEFAULT FALSE,
PRIMARY KEY (tg_id, room_iden)
)
"""
)
await migrate_rooms_table()
db.commit()


async def create_room(room_name, user_id):
def is_valid_name(name) -> bool:
disvalid = [
"_saint",
"_mem",
Expand Down Expand Up @@ -76,11 +47,41 @@ async def create_room(room_name, user_id):
"{",
"}",
]
if (
all([a not in room_name for a in disvalid])
and room_name[0] not in "0123456789"
and len(room_name) <= 30
):
return True if (
all([a not in name for a in disvalid]) and name[0] not in "0123456789" and len(name) <= 30) else False


async def start_db():
cur.execute(
"CREATE TABLE IF NOT EXISTS rooms("
"room_iden TEXT PRIMARY KEY,"
"status BOOLEAN DEFAULT FALSE,"
"admin INTEGER,"
"gift_price_range TEXT DEFAULT 'не установлен',"
"event_time TEXT DEFAULT 'не установлено',"
"exchange_type TEXT DEFAULT 'централизованый'"
")"
)
cur.execute(
"CREATE TABLE IF NOT EXISTS users(tg_id INTEGER PRIMARY KEY,first_name TEXT,last_name TEXT,username TEXT)"
)
cur.execute(
"""
CREATE TABLE IF NOT EXISTS user_rooms(
tg_id INTEGER,
room_iden TEXT,
is_member BOOLEAN DEFAULT FALSE,
is_admin BOOLEAN DEFAULT FALSE,
PRIMARY KEY (tg_id, room_iden)
)
"""
)
await migrate_rooms_table()
db.commit()


async def create_room(room_name, user_id):
if is_valid_name(room_name):
while True:
room_id = f"{random.randint(1, 9999):04}"
room_iden = f"{room_name}{room_id}"
Expand Down Expand Up @@ -141,7 +142,7 @@ async def connect2room(raw_data, user_id):
_room = cur.execute(
"SELECT * FROM rooms WHERE room_iden = ?", (room_iden,)
).fetchone()
if not _room:
if not _room or not is_valid_name(room_name):
return "room_error"
if _room[1] == True:
return "joined late"
Expand Down
13 changes: 13 additions & 0 deletions src/handlers/info.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
from aiogram import Router
from aiogram.filters import Command
from aiogram.types import Message

from src.texts import messages


router = Router(name=__name__)


@router.message(Command("info"))
async def say_about_santa(msg: Message):
await msg.answer(messages.about_santa())
14 changes: 13 additions & 1 deletion src/texts/messages.py
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ def event_started_before_join(room_name: str) -> str:


def gift_target(user_info: str) -> str:
return f"Вы дарите {user_info}"
return f"Вы дарите <tg-spoiler>{user_info}</tg-spoiler>"


def left_room() -> str:
Expand Down Expand Up @@ -170,3 +170,15 @@ def room_not_exists_retry() -> str:

def id_info(user_id: int, chat_id: int) -> str:
return f"ID: user_id - {user_id}\n chat_id - {chat_id}"

def about_santa():
return (
"🎅 Тайный Санта — игра, в которой каждый участник случайно становится дарителем для кого-то другого. "
"Бот помогает провести обмен анонимно и без лишней организации."
"\n\nКак проходит игра:\n"
"1. Админ создаёт комнату и делится кодом или приглашением.\n"
"2. Участники присоединяются, заполняют пожелания и смотрят настройки: бюджет, дата, тип обмена.\n"
"3. Когда все готовы, админ нажимает «Старт» — бот случайно распределяет пары.\n"
"4. Каждый получает сообщение, кому дарить, а его имя остаётся секретом для остальных."
"\n\nПодготовьте подарок в указанном бюджете и времени, и оставайтесь Тайным Сантой 🎁"
)