feat: вывести список команд после загрузки бота

- Добавить bot_ready = threading.Event() для синхронизации
- Переместить bot_ready.set() после цикла загрузки команд
- Добавить bot_ready.wait() в console_input()
- Меню появляется только после 'Бот вошёл' и 'Загружен: ...'
This commit is contained in:
deadzilla 2026-05-25 21:57:59 +05:00
parent 6fe8334311
commit 4db31e8b56

33
bot.py
View File

@ -18,6 +18,7 @@ intents.message_content = True
bot = commands.Bot(command_prefix="!", intents=intents)
stop_event = threading.Event()
bot_ready = threading.Event()
@bot.event
@ -28,6 +29,7 @@ async def on_ready():
await bot.add_cog(cog)
for cog in bot.cogs:
print(f" Загружен: {cog}")
bot_ready.set()
@bot.event
@ -44,22 +46,29 @@ async def msg(ctx, *, text: str):
def console_input():
bot_ready.wait()
print("Доступные команды:")
available = {k: v for k, v in ALL_CONSOLE_COMMANDS.items() if k != "stop"}
for idx, (name, func) in enumerate(available.items(), 1):
print(f" {idx}. {name}")
print(" 0. stop")
while not stop_event.is_set():
try:
cmd = input().strip().lower()
if cmd.startswith("!"):
cmd_name = cmd[1:]
if cmd_name == "stop":
print("\nОстановка бота...")
if "stop" in ALL_CONSOLE_COMMANDS:
ALL_CONSOLE_COMMANDS["stop"](stop_event, bot)
break
elif cmd_name in ALL_CONSOLE_COMMANDS:
choice = input("\nВыберите команду (номер): ").strip()
if choice == "0":
print("\nОстановка бота...")
stop_event.set()
break
try:
idx = int(choice)
if 0 < idx <= len(available):
cmd_name = list(available.keys())[idx - 1]
ALL_CONSOLE_COMMANDS[cmd_name](stop_event, bot)
else:
print(f"Неизвестная команда: {cmd}")
elif cmd:
print(f"Неизвестная команда: {cmd}")
print(f"Неизвестная команда: {choice}")
except (ValueError, IndexError):
print(f"Неизвестная команда: {choice}")
except (EOFError, KeyboardInterrupt):
stop_event.set()
try: