2323group_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
43123async 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