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 шт):

Автор решения: Justiks

Ваша ошибка находится в 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

→ Ссылка