Skip to content

Commit 2d0b5d3

Browse files
committed
feat(cmds): Команды часто используемых пунктов меню
+ Стилизация вида команд
1 parent 0b2905a commit 2d0b5d3

File tree

28 files changed

+451
-719
lines changed

28 files changed

+451
-719
lines changed

bot.py

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
from aiogram.fsm.storage.redis import DefaultKeyBuilder, RedisStorage
1010
from aiogram.types import (
1111
BotCommand,
12+
BotCommandScopeAllChatAdministrators,
1213
BotCommandScopeAllPrivateChats,
1314
ErrorEvent,
1415
)
@@ -307,17 +308,26 @@ async def main() -> None:
307308
# Определение команд для приватных чатов
308309
await bot.set_my_commands(
309310
commands=[
310-
BotCommand(command="start", description="Главное меню"),
311-
BotCommand(command="whois", description="Поиск сотрудников"),
311+
BotCommand(command="start", description="🏠 Главное меню"),
312+
BotCommand(command="shop", description="💎 Магазин предметов"),
313+
BotCommand(command="schedule", description="👔 Мой график"),
314+
BotCommand(command="exchanges", description="🎭 Биржа подмен"),
315+
BotCommand(command="kpi", description="🌟 Показатели"),
316+
BotCommand(command="salary", description="💰 Зарплата"),
317+
BotCommand(command="whois", description="🕵🏻 Поиск сотрудников"),
312318
],
313319
scope=BotCommandScopeAllPrivateChats(),
314320
)
315-
# await bot.set_my_commands(
316-
# commands=[
317-
# BotCommand(command="settings", description="Настройки группы"),
318-
# ],
319-
# scope=BotCommandScopeAllChatAdministrators(),
320-
# )
321+
322+
await bot.set_my_commands(
323+
commands=[
324+
BotCommand(command="pin", description="📌 Закрепить сообщение"),
325+
BotCommand(command="mute", description="🤐 Заглушить пользователя"),
326+
BotCommand(command="ban", description="🚫 Заблокировать пользователя"),
327+
BotCommand(command="settings", description="⚙️ Настройки группы"),
328+
],
329+
scope=BotCommandScopeAllChatAdministrators(),
330+
)
321331

322332
dp = Dispatcher(storage=storage)
323333

tgbot/dialogs/events/common/game/activations.py

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
from stp_database.repo.STP import MainRequestsRepo
1111
from stp_database.repo.STP.purchase import PurchaseDetailedParams
1212

13-
from tgbot.dialogs.states.common.game import Game
13+
from tgbot.dialogs.states.common.game import GameSG
1414
from tgbot.misc.helpers import format_fullname
1515

1616
logger = logging.getLogger(__name__)
@@ -30,7 +30,7 @@ async def on_activation_click(
3030
dialog_manager.dialog_data["purchase_id"] = item_id
3131

3232
# Переходим к детальному просмотру
33-
await dialog_manager.switch_to(Game.activation_details)
33+
await dialog_manager.switch_to(GameSG.activation_details)
3434

3535

3636
async def on_activation_approve_comment_input(
@@ -102,7 +102,7 @@ async def on_activation_approve_comment_input(
102102
)
103103

104104
# Возвращаемся к списку активаций
105-
await dialog_manager.switch_to(Game.activations)
105+
await dialog_manager.switch_to(GameSG.activations)
106106

107107
except Exception as e:
108108
logger.error(
@@ -165,7 +165,7 @@ async def on_skip_approve_comment(
165165
)
166166

167167
# Возвращаемся к списку активаций
168-
await dialog_manager.switch_to(Game.activations)
168+
await dialog_manager.switch_to(GameSG.activations)
169169

170170
except Exception as e:
171171
logger.error(
@@ -228,7 +228,7 @@ async def on_activation_reject_comment_input(
228228
)
229229

230230
# Возвращаемся к списку активаций
231-
await dialog_manager.switch_to(Game.activations)
231+
await dialog_manager.switch_to(GameSG.activations)
232232

233233
except Exception as e:
234234
logger.error(f"[Активация предметов] Ошибка при отмене активации предмета: {e}")
@@ -277,7 +277,7 @@ async def on_skip_reject_comment(
277277
)
278278

279279
# Возвращаемся к списку активаций
280-
await dialog_manager.switch_to(Game.activations)
280+
await dialog_manager.switch_to(GameSG.activations)
281281

282282
except Exception as e:
283283
logger.error(f"[Активация предметов] Ошибка при отмене активации предмета: {e}")
@@ -298,4 +298,4 @@ async def on_activation_history_click(
298298
dialog_manager.dialog_data["history_purchase_id"] = item_id
299299

300300
# Переходим к детальному просмотру истории
301-
await dialog_manager.switch_to(Game.activations_history_details)
301+
await dialog_manager.switch_to(GameSG.activations_history_details)

tgbot/dialogs/events/common/game/casino.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
from stp_database.models.STP import Employee
1111
from stp_database.repo.STP import MainRequestsRepo
1212

13-
from tgbot.dialogs.states.common.game import Game
13+
from tgbot.dialogs.states.common.game import GameSG
1414

1515

1616
async def check_casino_access(
@@ -188,7 +188,7 @@ async def play_casino_game(
188188

189189
# Переходим к окну результата с новым сообщением
190190
dialog_manager.show_mode = ShowMode.SEND
191-
await dialog_manager.switch_to(Game.casino_result)
191+
await dialog_manager.switch_to(GameSG.casino_result)
192192

193193

194194
def format_result(game_type: str, value: int, multiplier: float, net_win: int) -> Dict:

tgbot/dialogs/events/common/game/game.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
from aiogram_dialog import DialogManager
55
from aiogram_dialog.widgets.kbd import Button
66

7-
from tgbot.dialogs.states.common.game import Game
7+
from tgbot.dialogs.states.common.game import GameSG
88

99

1010
async def start_game_dialog(
@@ -21,5 +21,5 @@ async def start_game_dialog(
2121
dialog_manager: Менеджер диалога
2222
"""
2323
await dialog_manager.start(
24-
Game.menu,
24+
GameSG.menu,
2525
)

tgbot/dialogs/events/common/game/history.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
from aiogram_dialog.widgets.kbd import Select
66
from stp_database.repo.STP import MainRequestsRepo
77

8-
from tgbot.dialogs.states.common.game import Game
8+
from tgbot.dialogs.states.common.game import GameSG
99
from tgbot.misc.helpers import strftime_date
1010

1111

@@ -50,4 +50,4 @@ async def on_transaction_click(
5050
}
5151

5252
# Переходим к окну детального просмотра транзакции
53-
await dialog_manager.switch_to(Game.history_details)
53+
await dialog_manager.switch_to(GameSG.history_details)

tgbot/dialogs/events/common/game/inventory.py

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
from stp_database.models.STP import Employee, Product, Purchase
1818
from stp_database.repo.STP import MainRequestsRepo
1919

20-
from tgbot.dialogs.states.common.game import Game
20+
from tgbot.dialogs.states.common.game import GameSG
2121
from tgbot.misc.helpers import format_fullname, strftime_date, tz_perm
2222
from tgbot.services.broadcaster import broadcast
2323
from tgbot.services.files_processing.parsers.schedule import DutyScheduleParser
@@ -245,7 +245,7 @@ async def on_inventory_product_click(
245245
}
246246

247247
# Переходим к окну детального просмотра предмета инвентаря
248-
await dialog_manager.switch_to(Game.inventory_details)
248+
await dialog_manager.switch_to(GameSG.inventory_details)
249249

250250

251251
async def use_product(
@@ -261,7 +261,7 @@ async def use_product(
261261
dialog_manager: Менеджер диалога
262262
"""
263263
# Проверяем, откуда вызвана функция - из окна магазина или из инвентаря
264-
if dialog_manager.current_context().state == Game.products_success:
264+
if dialog_manager.current_context().state == GameSG.products_success:
265265
# Используем данные только что купленного предмета
266266
product_info = dialog_manager.dialog_data["selected_product"]
267267
product_name = product_info["name"]
@@ -288,7 +288,7 @@ async def use_product(
288288
return
289289

290290
# Если все проверки пройдены, переходим к окну комментария
291-
if dialog_manager.current_context().state == Game.products_success:
291+
if dialog_manager.current_context().state == GameSG.products_success:
292292
# Для магазина создаем унифицированную структуру данных для комментария
293293
new_purchase = dialog_manager.dialog_data["new_purchase"]
294294
user_product_id = new_purchase["id"]
@@ -315,7 +315,7 @@ async def use_product(
315315
dialog_manager.dialog_data["came_from_products"] = True
316316

317317
# Для всех случаев переходим к окну ввода комментария
318-
await dialog_manager.switch_to(Game.inventory_activation_comment)
318+
await dialog_manager.switch_to(GameSG.inventory_activation_comment)
319319

320320
except Exception as e:
321321
logger.error(
@@ -379,9 +379,9 @@ async def on_inventory_activation_comment_input(
379379

380380
# Возвращаемся туда, откуда пришли
381381
if dialog_manager.dialog_data.get("came_from_products"):
382-
await dialog_manager.switch_to(Game.products)
382+
await dialog_manager.switch_to(GameSG.products)
383383
else:
384-
await dialog_manager.switch_to(Game.inventory)
384+
await dialog_manager.switch_to(GameSG.inventory)
385385

386386
except Exception as e:
387387
logger.error(f"[Активация предметов] Ошибка при сохранении комментария: {e}")
@@ -436,9 +436,9 @@ async def on_skip_activation_comment(
436436

437437
# Возвращаемся туда, откуда пришли
438438
if dialog_manager.dialog_data.get("came_from_products"):
439-
await dialog_manager.switch_to(Game.products)
439+
await dialog_manager.switch_to(GameSG.products)
440440
else:
441-
await dialog_manager.switch_to(Game.inventory)
441+
await dialog_manager.switch_to(GameSG.inventory)
442442
else:
443443
await event.answer("❌ Невозможно использовать предмет", show_alert=True)
444444

@@ -480,7 +480,7 @@ async def on_inventory_sell_product(
480480
f"✅ Продано: {product_info['product_name']}.\nВозвращено: {product_info['product_cost']} баллов"
481481
)
482482
# Возвращаемся к инвентарю
483-
await dialog_manager.switch_to(Game.inventory)
483+
await dialog_manager.switch_to(GameSG.inventory)
484484
else:
485485
await event.answer("❌ Ошибка при продаже предмета", show_alert=True)
486486

@@ -534,7 +534,7 @@ async def on_inventory_cancel_activation(
534534
f"✅ Активация предмета '{product_info['product_name']}' отменена!"
535535
)
536536
# Возвращаемся к инвентарю
537-
await dialog_manager.switch_to(Game.inventory)
537+
await dialog_manager.switch_to(GameSG.inventory)
538538
else:
539539
await event.answer("❌ Ошибка при отмене активации", show_alert=True)
540540

tgbot/dialogs/events/common/game/shop.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
from aiogram_dialog.widgets.kbd import Button, Select
88
from stp_database.repo.STP import MainRequestsRepo
99

10-
from tgbot.dialogs.states.common.game import Game
10+
from tgbot.dialogs.states.common.game import GameSG
1111

1212
logger = logging.getLogger(__name__)
1313

@@ -62,7 +62,7 @@ async def on_product_click(
6262
dialog_manager.dialog_data["user_balance"] = user_balance
6363

6464
# Переходим к окну подтверждения
65-
await dialog_manager.switch_to(Game.products_confirm)
65+
await dialog_manager.switch_to(GameSG.products_confirm)
6666

6767

6868
async def on_confirm_purchase(
@@ -108,7 +108,7 @@ async def on_confirm_purchase(
108108
dialog_manager.dialog_data["new_balance"] = user_balance - product_info["cost"]
109109

110110
# Переходим к окну успешной покупки
111-
await dialog_manager.switch_to(Game.products_success)
111+
await dialog_manager.switch_to(GameSG.products_success)
112112

113113
except Exception as e:
114114
logger.error(
@@ -148,7 +148,7 @@ async def on_sell_product(
148148
f"✅ Продано: {product_info['name']}.\nВозвращено: {product_info['cost']} баллов"
149149
)
150150
# Возвращаемся в магазин
151-
await dialog_manager.switch_to(Game.products)
151+
await dialog_manager.switch_to(GameSG.products)
152152
else:
153153
await event.answer("❌ Ошибка при продаже предмета", show_alert=True)
154154

tgbot/dialogs/events/common/kpi.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
from aiogram_dialog import DialogManager
55
from aiogram_dialog.widgets.kbd import Button
66

7-
from tgbot.dialogs.states.common.kpi import KPI
7+
from tgbot.dialogs.states.common.kpi import KpiSG
88

99

1010
async def start_kpi_dialog(
@@ -21,5 +21,5 @@ async def start_kpi_dialog(
2121
dialog_manager: Менеджер диалога
2222
"""
2323
await dialog_manager.start(
24-
KPI.menu,
24+
KpiSG.menu,
2525
)

tgbot/dialogs/events/common/search.py

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
from aiogram_dialog.widgets.kbd import Button, ManagedCheckbox, ManagedRadio, Select
99
from stp_database.repo.STP import MainRequestsRepo
1010

11-
from tgbot.dialogs.states.common.search import Search
11+
from tgbot.dialogs.states.common.search import SearchSG
1212
from tgbot.misc.dicts import roles
1313

1414
logger = logging.getLogger(__name__)
@@ -28,7 +28,7 @@ async def start_search_dialog(
2828
dialog_manager: Менеджер диалога
2929
"""
3030
await dialog_manager.start(
31-
Search.menu,
31+
SearchSG.menu,
3232
)
3333

3434

@@ -48,16 +48,16 @@ async def on_back_to_menu(
4848
# Если есть сохраненное состояние, возвращаемся к нему
4949
if previous_state:
5050
if "specialists" in previous_state:
51-
await dialog_manager.switch_to(Search.specialists)
51+
await dialog_manager.switch_to(SearchSG.specialists)
5252
elif "heads" in previous_state:
53-
await dialog_manager.switch_to(Search.heads)
53+
await dialog_manager.switch_to(SearchSG.heads)
5454
elif "query_results" in previous_state:
55-
await dialog_manager.switch_to(Search.query_results)
55+
await dialog_manager.switch_to(SearchSG.query_results)
5656
else:
57-
await dialog_manager.switch_to(Search.menu)
57+
await dialog_manager.switch_to(SearchSG.menu)
5858
else:
5959
# Если предыдущее состояние не сохранено, возвращаемся в главное меню
60-
await dialog_manager.switch_to(Search.menu)
60+
await dialog_manager.switch_to(SearchSG.menu)
6161

6262

6363
async def on_user_select(
@@ -97,7 +97,7 @@ async def on_user_select(
9797
if exchanges_checkbox:
9898
await exchanges_checkbox.set_checked(not searched_user.is_exchange_banned)
9999

100-
await dialog_manager.switch_to(Search.details_window)
100+
await dialog_manager.switch_to(SearchSG.details_window)
101101

102102

103103
async def on_search_query(
@@ -128,7 +128,7 @@ async def on_search_query(
128128
# Сохраняем поисковый запрос для отображения в окне "ничего не найдено"
129129
dialog_manager.dialog_data["search_query"] = search_query
130130
# Переходим к окну "ничего не найдено"
131-
await dialog_manager.switch_to(Search.query_no_results)
131+
await dialog_manager.switch_to(SearchSG.query_no_results)
132132
return
133133

134134
# Сортировка результатов (сначала точные совпадения)
@@ -150,7 +150,7 @@ async def on_search_query(
150150
dialog_manager.dialog_data["total_found"] = len(sorted_users)
151151

152152
# Переходим к результатам поиска
153-
await dialog_manager.switch_to(Search.query_results)
153+
await dialog_manager.switch_to(SearchSG.query_results)
154154

155155
except Exception as e:
156156
logger.error(f"[Поиск] Ошибка при попытке поиска: {e}")
@@ -280,7 +280,7 @@ async def on_role_change(
280280
)
281281

282282
# Остаемся на том же окне, чтобы показать обновленный список
283-
await dialog_manager.switch_to(Search.details_access_level_window)
283+
await dialog_manager.switch_to(SearchSG.details_access_level_window)
284284

285285
except Exception as e:
286286
logger.error(f"[Смена роли] Ошибка при изменении роли: {e}")
@@ -303,4 +303,4 @@ async def on_schedule_mode_select(
303303
item_id: Идентификатор выбранного режима
304304
"""
305305
dialog_manager.dialog_data["my_schedule_mode"] = item_id
306-
await dialog_manager.switch_to(Search.details_schedule_window)
306+
await dialog_manager.switch_to(SearchSG.details_schedule_window)

tgbot/dialogs/menus/common/game/achievements.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
from tgbot.dialogs.filters.common.game_filters import (
2020
achievements_filter_getter,
2121
)
22-
from tgbot.dialogs.states.common.game import Game
22+
from tgbot.dialogs.states.common.game import GameSG
2323
from tgbot.dialogs.widgets.buttons import HOME_BTN
2424

2525
achievements_window = Window(
@@ -83,7 +83,7 @@
8383
item_id_getter=operator.itemgetter(0),
8484
items="period_radio_data",
8585
),
86-
Row(SwitchTo(Const("↩️ Назад"), id="menu", state=Game.menu), HOME_BTN),
86+
Row(SwitchTo(Const("↩️ Назад"), id="menu", state=GameSG.menu), HOME_BTN),
8787
getter=achievements_filter_getter,
88-
state=Game.achievements,
88+
state=GameSG.achievements,
8989
)

0 commit comments

Comments
 (0)