Проблемы с командами в aiogram 3 | Команды через разные файлы
Буду краток. Возникла проблема, когда я создаю свой простой проект и появляется надобность в нескольких файлах в проекте. Например 1 файл отвечает на /start а 2 файл за /help Так вот создал такую систему и ничего не работает.
main.py
from dotenv import load_dotenv
import os
load_dotenv()
import asyncio
from aiogram import Bot, Dispatcher
from handlers.start import router
from handlers.base_commands import router as bs_router
BOT_TOKEN = os.getenv('TELEGRAM_TOKEN')
# Инициализация бота
#* Initial Bot
bot = Bot(
token=BOT_TOKEN,
)
dp = Dispatcher()
# Запуск бота
async def main():
dp.include_routers(router,bs_router)
await dp.start_polling(bot)
if __name__ == "__main__":
try:
asyncio.run(main())
except KeyboardInterrupt:
print("\nБот остановлен")
handlers/start.py
from aiogram import F, Router
from aiogram.filters import CommandStart, Command
from aiogram.types import Message, CallbackQuery
router = Router()
@router.message(Command("start"))
async def start_handler(message: Message):
await message.answer(
"Добро пожаловать\n\n"
"Доступные команды:\n"
"/help - Помощь\n\n"
)
handlers/base_commands.py
from aiogram import Router
from aiogram.filters import Command
from aiogram.types import Message
router = Router()
@router.message(Command("help"))
async def help_handler(message: Message):
await message.answer(
"Помощь по боту\n\n"
"Основные команды:\n"
"/start - Начало работы\n"
"/help - Эта справка\n"
)
Суть в том, что команды из start.py работают замечательно, но команды из base_commands.py отказываются работать, даже логги молчат.
Ответы (1 шт):
Автор решения: Someone Sly
→ Ссылка
Ошибка в том, что вы импортируете два роутера с одинаковым именем, и второй импорт перезаписывает первый.
Переименуйте роутеры и дайте каждому уникальное имя:
В handlers/start.py - start_router
В handlers/base_commands.py -к примеру base_commands_router.
И в main.py:
from handlers.start import start_router
from handlers.base_commands import base_commands_router
В теле функции:
dp.include_routers(start_router, base_commands_router)