Cause exception while process update id=*** by bot id=***
Пытаюсь активировать права админа (в группе пишу команду для получения id чата, потом в личных сообщениях пишу "admin_go", чтобы обновить список админов, а затем "admin_start", чтобы начать работать с админом, произведя проверку в роутере), но выскакивает ошибка, в которой даже не указан мой файл, в котором она произошла.
Ошибка:
TypeError: object bool can't be used in 'await' expression
Cause exception while process update id=тут id, про который я ничего не знаю (не мой) by bot id=тут id моего бота
TypeError: object bool can't be used in 'await' expression
Traceback (most recent call last):
File "C:\Users\Home\Desktop\new_t_bot_3\venv\Lib\site-packages\aiogram\dispatcher\dispatcher.py", line 309, in _process_update
response = await self.feed_update(bot, update, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\Home\Desktop\new_t_bot_3\venv\Lib\site-packages\aiogram\dispatcher\dispatcher.py", line 158, in feed_update
response = await self.update.wrap_outer_middleware(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\Home\Desktop\new_t_bot_3\venv\Lib\site-packages\aiogram\dispatcher\middlewares\error.py", line 25, in __call__
return await handler(event, data)
^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\Home\Desktop\new_t_bot_3\venv\Lib\site-packages\aiogram\dispatcher\middlewares\user_context.py", line 49, in __call__
return await handler(event, data)
^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\Home\Desktop\new_t_bot_3\venv\Lib\site-packages\aiogram\fsm\middleware.py", line 42, in __call__
return await handler(event, data)
^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\Home\Desktop\new_t_bot_3\venv\Lib\site-packages\aiogram\dispatcher\event\telegram.py", line 121, in trigger
return await wrapped_inner(event, kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\Home\Desktop\new_t_bot_3\venv\Lib\site-packages\aiogram\dispatcher\event\handler.py", line 43, in call
return await wrapped()
^^^^^^^^^^^^^^^
File "C:\Users\Home\Desktop\new_t_bot_3\venv\Lib\site-packages\aiogram\dispatcher\dispatcher.py", line 276, in _listen_update
return await self.propagate_event(update_type=update_type, event=event, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\Home\Desktop\new_t_bot_3\venv\Lib\site-packages\aiogram\dispatcher\router.py", line 142, in propagate_event
return await observer.wrap_outer_middleware(_wrapped, event=event, data=kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\Home\Desktop\new_t_bot_3\venv\Lib\site-packages\aiogram\dispatcher\router.py", line 137, in _wrapped
return await self._propagate_event(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\Home\Desktop\new_t_bot_3\venv\Lib\site-packages\aiogram\dispatcher\router.py", line 170, in _propagate_event
response = await router.propagate_event(update_type=update_type, event=event, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\Home\Desktop\new_t_bot_3\venv\Lib\site-packages\aiogram\dispatcher\router.py", line 142, in propagate_event
return await observer.wrap_outer_middleware(_wrapped, event=event, data=kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\Home\Desktop\new_t_bot_3\venv\Lib\site-packages\aiogram\dispatcher\router.py", line 137, in _wrapped
return await self._propagate_event(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\Home\Desktop\new_t_bot_3\venv\Lib\site-packages\aiogram\dispatcher\router.py", line 157, in _propagate_event
result, data = await observer.check_root_filters(event, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\Home\Desktop\new_t_bot_3\venv\Lib\site-packages\aiogram\dispatcher\event\handler.py", line 94, in check
check = await event_filter.call(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\Home\Desktop\new_t_bot_3\venv\Lib\site-packages\aiogram\dispatcher\event\handler.py", line 43, in call
return await wrapped()
^^^^^^^^^^^^^^^
TypeError: object bool can't be used in 'await' expression
Основной файл:
import asyncio, os
from aiogram import Bot, Dispatcher, types
from aiogram.enums import ParseMode
from aiogram.client.bot import DefaultBotProperties
from dotenv import find_dotenv, load_dotenv
load_dotenv(find_dotenv())
from handlers.user_private import user_private_router
from handlers.user_group import user_group_router
from handlers.admin_private import admin_private_router
bot = Bot(token=os.getenv('TOKEN'), default=DefaultBotProperties(parse_mode=ParseMode.HTML))
bot.admins_list = []
bot.chat_identification = 0
dp = Dispatcher()
dp.include_router(user_private_router)
dp.include_router(user_group_router)
dp.include_router(admin_private_router)
async def on_startup():
print('bot start successful')
async def main():
dp.startup.register(on_startup)
await bot.delete_webhook(drop_pending_updates=True)
await dp.start_polling(bot, allowed_updates=dp.resolve_used_update_types())
asyncio.run(main())
Работа с юзером:
from aiogram import types, Router, Bot, F
from aiogram.filters import CommandStart, Command
from filters.chat_filter import ChatTypeFilter
user_private_router = Router()
user_private_router.message.filter(ChatTypeFilter(['private']))
@user_private_router.message(Command('admin_go'))
async def user_command_get_administrators(message: types.Message, bot: Bot):
id = bot.chat_identification
administrators = await bot.get_chat_administrators(chat_id=id)
administrators = [member.user.id for member in administrators if member.status == 'administrator' or member.status == 'creator']
bot.admins_list = administrators
print(bot.admins_list)
if message.from_user.id in administrators:
print(message.from_user.id)
Работа в группе:
import asyncio
from aiogram import types, Router, Bot
from aiogram.filters importCommand
from filters.chat_filter import ChatTypeFilter
user_group_router = Router()
user_group_router.message.filter(ChatTypeFilter(['group', 'supergroup']))
@user_group_router.message(Command('get_id'))
async def group_command_get_administrators(message: types.Message, bot: Bot):
if bot.chat_identification == 0:
identi = message.chat.id
bot.chat_identification = identi
await message.delete()
print(bot.chat_identification)
Работа с админом:
from aiogram import Router, types
from aiogram.filters import Command
from filters.chat_filter import ChatTypeFilter, Is_Administrator
admin_private_router = Router()
admin_private_router.message.filter(ChatTypeFilter(['private']), Is_Administrator())
@admin_private_router.message(Command('admin_start'))
async def admin_command_start(message: types.Message):
await message.answer('Здравствуйте')
Файл с фильтрами:
from aiogram import Bot, types
from aiogram.filters import Filter
class ChatTypeFilter(Filter):
def __init__(self, chat_types: list[str]) -> None:
self.chat_types = chat_types
async def __call__(self, message: types.Message) -> bool:
return message.chat.type in self.chat_types
class Is_Administrator(Filter):
def __init__(self) -> None:
pass
def __call__(self, message: types.Message, bot: Bot) -> bool:
return message.from_user.id in bot.admins_list
Буду благодарен за помощь!
Ответы (1 шт):
Ваша ошибка находится в Is_Administrator
, в методе __call__
. Исходя из документации, метод call - корутина, то есть, объявление этого метода сопровождается использованием конструкции async def
Измените строку
def __call__(self, message: types.Message, bot: Bot) -> bool:
На
async def __call__(self, message: types.Message, bot: Bot) -> bool:
В классе Is_Administrator