Skip to content

Commit fa406d2

Browse files
committed
feat(casino): Информация о командах для казино
1 parent b4ab0a9 commit fa406d2

File tree

1 file changed

+99
-3
lines changed

1 file changed

+99
-3
lines changed

tgbot/handlers/groups/user/casino.py

Lines changed: 99 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,21 +23,101 @@
2323
group_casino_router.message.filter(F.chat.type.in_(("group", "supergroup")))
2424

2525

26-
def parse_casino_command(message_text: str) -> int:
26+
async def send_game_help(message: Message, game_type: str) -> None:
27+
"""Отправить справку по игре.
28+
29+
Args:
30+
message: Сообщение от пользователя
31+
game_type: Тип игры (slots, dice, darts, bowling)
32+
"""
33+
help_messages = {
34+
"slots": {
35+
"title": "🎰 <b>Игра в слоты</b>",
36+
"usage": "/slots [сумма]",
37+
"examples": [
38+
"• /slots 50 - поставить 50 баллов",
39+
"• /slots 100 - поставить 100 баллов",
40+
],
41+
"rewards": [
42+
"· Джекпот (777) → 5x",
43+
"· Три в ряд → 3.5x",
44+
"· Две семерки → 2.5x",
45+
],
46+
},
47+
"dice": {
48+
"title": "🎲 <b>Игра в кости</b>",
49+
"usage": "/dice [сумма]",
50+
"examples": [
51+
"• /dice 50 - поставить 50 баллов",
52+
"• /dice 100 - поставить 100 баллов",
53+
],
54+
"rewards": [
55+
"· Выпало 6 → 2x",
56+
"· Выпало 5 → 1.5x",
57+
"· Выпало 4 → 0.75x (утешительный приз)",
58+
],
59+
},
60+
"darts": {
61+
"title": "🎯 <b>Игра в дартс</b>",
62+
"usage": "/darts [сумма]",
63+
"examples": [
64+
"• /darts 50 - поставить 50 баллов",
65+
"• /darts 100 - поставить 100 баллов",
66+
],
67+
"rewards": [
68+
"· Яблочко (6) → 2x",
69+
"· Близко к центру (5) → 1.5x",
70+
"· В мишень (4) → 0.75x (утешительный приз)",
71+
],
72+
},
73+
"bowling": {
74+
"title": "🎳 <b>Игра в боулинг</b>",
75+
"usage": "/bowling [сумма]",
76+
"examples": [
77+
"• /bowling 50 - поставить 50 баллов",
78+
"• /bowling 100 - поставить 100 баллов",
79+
],
80+
"rewards": [
81+
"· Страйк (6) → 2x",
82+
"· 5 кеглей → 1.5x",
83+
"· 4 кегли → 0.75x (утешительный приз)",
84+
],
85+
},
86+
}
87+
88+
game_info = help_messages[game_type]
89+
90+
help_text = f"{game_info['title']}\n\n"
91+
help_text += f"Использование: {game_info['usage']}\n\n"
92+
help_text += "<b>Примеры:</b>\n"
93+
help_text += "\n".join(game_info["examples"])
94+
help_text += "\n\n💎 <b>Таблица наград:</b>\n"
95+
help_text += "\n".join(game_info["rewards"])
96+
help_text += "\n\nМинимальная ставка: 10 баллов"
97+
98+
await message.reply(help_text)
99+
100+
101+
def parse_casino_command(message_text: str) -> int | None:
27102
"""Извлечь ставку из команды казино.
28103
29104
Args:
30105
message_text: Текст команды (например, "/slots 50" или "/dice")
31106
32107
Returns:
33-
Размер ставки (минимум 10)
108+
Размер ставки (минимум 10) или None если аргумент не указан
34109
"""
35110
# Паттерн для извлечения числа из команды
36111
match = re.search(r"/(?:slots|dice|darts|bowling)\s+(\d+)", message_text)
37112
if match:
38113
bet_amount = int(match.group(1))
39114
return max(10, bet_amount) # Минимальная ставка 10
40-
return 10 # Ставка по умолчанию
115+
116+
# Проверяем, есть ли команда без аргумента
117+
if re.search(r"/(?:slots|dice|darts|bowling)$", message_text.strip()):
118+
return None # Команда без аргумента
119+
120+
return 10 # Ставка по умолчанию для других случаев
41121

42122

43123
async def process_casino_game(
@@ -163,6 +243,10 @@ async def slots_cmd(message: Message, user: Employee, stp_repo: MainRequestsRepo
163243
stp_repo: Репозиторий операций с базой STP
164244
"""
165245
bet_amount = parse_casino_command(message.text)
246+
if bet_amount is None:
247+
await send_game_help(message, "slots")
248+
return
249+
166250
await process_casino_game(
167251
message, user, stp_repo, "slots", DiceEmoji.SLOT_MACHINE, bet_amount
168252
)
@@ -178,6 +262,10 @@ async def dice_cmd(message: Message, user: Employee, stp_repo: MainRequestsRepo)
178262
stp_repo: Репозиторий операций с базой STP
179263
"""
180264
bet_amount = parse_casino_command(message.text)
265+
if bet_amount is None:
266+
await send_game_help(message, "dice")
267+
return
268+
181269
await process_casino_game(
182270
message, user, stp_repo, "dice", DiceEmoji.DICE, bet_amount
183271
)
@@ -193,6 +281,10 @@ async def darts_cmd(message: Message, user: Employee, stp_repo: MainRequestsRepo
193281
stp_repo: Репозиторий операций с базой STP
194282
"""
195283
bet_amount = parse_casino_command(message.text)
284+
if bet_amount is None:
285+
await send_game_help(message, "darts")
286+
return
287+
196288
await process_casino_game(
197289
message, user, stp_repo, "darts", DiceEmoji.DART, bet_amount
198290
)
@@ -208,6 +300,10 @@ async def bowling_cmd(message: Message, user: Employee, stp_repo: MainRequestsRe
208300
stp_repo: Репозиторий операций с базой STP
209301
"""
210302
bet_amount = parse_casino_command(message.text)
303+
if bet_amount is None:
304+
await send_game_help(message, "bowling")
305+
return
306+
211307
await process_casino_game(
212308
message, user, stp_repo, "bowling", DiceEmoji.BOWLING, bet_amount
213309
)

0 commit comments

Comments
 (0)