我正在 aiogram python 上开发一个机器人。 但是命令 /sender 不起作用。
控制台:
2023-09-19 19:42:22,749 - [INFO] - aiogram.dispatcher - (dispatcher.py).start_polling(524) - Start polling
2023-09-19 19:42:22,796 - [INFO] - aiogram.dispatcher - (dispatcher.py)._polling(340) - Run polling for bot @edu_light_u_bot id=1111111111 - 'edu_light_bot'
2023-09-19 19:42:25,729 - [INFO] - aiogram.event - (dispatcher.py).feed_update(171) - Update id=511111722 is not handled. Duration 14 ms by bot id=1111111111
2023-09-19 19:45:28,590 - [INFO] - aiogram.event - (dispatcher.py).feed_update(171) - Update id=511111723 is not handled. Duration 16 ms by bot id=1111111111
main.py
import asyncpg
import asyncio
import logging
import contextlib
from aiogram import Bot, Dispatcher, F
from aiogram.filters import Command
from aiogram.fsm.storage.redis import RedisStorage
from core.middlewares.dbmiddleware import DbSession
from core.settings import settings
from core.utils.commands import set_commands
from core.handlers import sender
from core.utils.sender_list import SenderList
from core.utils.sender_state import Steps
async def start_bot(bot: Bot):
await set_commands(bot)
await bot.send_message(settings.bots.admin_id, text='Бот запущен!')
async def stop_bot(bot: Bot):
await bot.send_message(settings.bots.admin_id, text='Бот остановлен!')
async def create_pool():
return await asyncpg.create_pool(user=settings.db.db_user, password=settings.db.dp_password,
database=settings.db.db_database, host=settings.db.db_host,
port=5432, command_timeout=60)
async def start():
logging.basicConfig(level=logging.DEBUG,
format="%(asctime)s - [%(levelname)s] - %(name)s - "
"(%(filename)s).%(funcName)s(%(lineno)d) - %(message)s"
)
bot = Bot(token=settings.bots.bot_token, parse_mode='HTML')
pool_connect = await create_pool()
storage = RedisStorage.from_url('redis://127.0.0.1:6379/0')
dp = Dispatcher(storage=storage)
dp.update.middleware.register(DbSession(pool_connect))
dp.startup.register(start_bot)
dp.shutdown.register(stop_bot)
dp.message.register(sender.get_sender, Command(commands='sender', magic=F.args),
F.chat.id == settings.bots.admin_id)
dp.message.register(sender.get_message, Steps.get_message, F.chat.id == settings.bots.admin_id)
dp.callback_query.register(sender.sender_decide, F.data.in_(['confirm_sender', 'cancel_sender']))
dp.callback_query.register(sender.q_button, Steps.q_button)
dp.message.register(sender.get_text_button, Steps.get_text_button, F.chat.id == settings.bots.admin_id)
dp.message.register(sender.get_url_button, Steps.get_url_button, F.chat.id == settings.bots.admin_id, F.text)
sender_list = SenderList(bot, pool_connect)
try:
await dp.start_polling(bot, allowed_updates=dp.resolve_used_update_types(), senderlist=sender_list)
except Exception as ex:
logging.error(f"[!!! Exception] - {ex}", exc_info=True)
finally:
await bot.session.close()
if name == "main":
with contextlib.suppress(KeyboardInterrupt, SystemExit):
asyncio.run(start())
日志很清楚,但这不应该是
is not handled
,这应该是handled
。
你必须写 dp.message.register(handle_start_command, Command(commands='sender')) 在 异步 def start():