Sergomen
@Sergomen
Просто делай добро и оно вернётся

Почему возникает TypeError: 'async_generator' object is not iterable?

Я пишу бота на aiogram и мне нужно получить всех участников чата. Поскольку aiogram не может получить список участников, мне нужно получить список участников через pyrogram и потом его передать в бота.

бот.ру

from aiogram import Bot, Dispatcher, executor, types
import юзербот

бот = Bot(token=config.TOKEN)
диспетчер = Dispatcher(бот)
# код...
@диспетчер.message_handler(commands=['додати'], commands_prefix='+')
async def додати(message: types.Message):
    текст = message.text
    що = текст.split(" ")[1]
    ід_чату = message.chat.id
    print(текст, що)
    if що == "юзера":
        якого = текст.split(" ")[2]      
        if якого == "цього":
            #код..
        elif якого == "всіх":
            print(await юзербот.учасники_чату(ід_чату))
#код..
if __name__ == '__main__':
    executor.start_polling(диспетчер, skip_updates=True)


юзербот.ру

from pyrogram import Client, filters
from pyrogram.errors import FloodWait

app = Client("my_account")

async def учасники_чату(ід):
    await app.start()
    учасники = []
    
    for учасник in app.iter_chat_members(ід):
        учасники.append(учасник.user.id)

    await app.stop()
    return учасники


полный текст ошибки

future: <Task finished name='Task-9' coro=<Dispatcher._process_polling_updates() done, defined at C:\Program Files\Python38\lib\site-packages\aiogram\dispatcher\dispatcher.py:409> exception=TypeError("'async_generator' object is not iterable")>
Traceback (most recent call last):
  File "C:\Program Files\Python38\lib\site-packages\aiogram\dispatcher\dispatcher.py", line 417, in _process_polling_updates
    for responses in itertools.chain.from_iterable(await self.process_updates(updates, fast)):
  File "C:\Program Files\Python38\lib\site-packages\aiogram\dispatcher\dispatcher.py", line 238, in process_updates
    return await asyncio.gather(*tasks)
  File "C:\Program Files\Python38\lib\site-packages\aiogram\dispatcher\handler.py", line 116, in notify
    response = await handler_obj.handler(*args, **partial_data)
  File "C:\Program Files\Python38\lib\site-packages\aiogram\dispatcher\dispatcher.py", line 259, in process_update
    return await self.message_handlers.notify(update.message)
  File "C:\Program Files\Python38\lib\site-packages\aiogram\dispatcher\handler.py", line 116, in notify
    response = await handler_obj.handler(*args, **partial_data)
  File "бот.py", line 122, in додати
    print(await юзербот.учасники_чату(-1001363517171))
  File "C:\_myprog\_\python\_tg\_smails\_2\хз\юзербот.py", line 14, in учасники_чату
    for учасник in app.iter_chat_members(ід):
TypeError: 'async_generator' object is not iterable

Что я делаю не так?

p.s. если запустить юзербот.ру напрямую (python юзербот.ру) и
без async и await

from pyrogram import Client, filters
from pyrogram.errors import FloodWait

app = Client("my_account")

def учасники_чату(ід):
    app.start()
    учасники = []
    
    for учасник in app.iter_chat_members(ід):
        учасники.append(учасник.user.id)
    app.stop()
    return учасники
print(учасники_чату(-1234..))


то он работает без проблем. а если из бота то получаю только ошибки.
p.p.s. возможно есть другой способ это сделать, но я хз.
  • Вопрос задан
  • 1395 просмотров
Решения вопроса 1
Vindicar
@Vindicar
RTFM!
Ошибка вроде вполне понятная.
Метод app.iter_chat_members(), который ты вызываешь, асинхронный, а ты итерируешь его выдачу синхронным циклом for. Используй
async for item in app.iter_chat_members(id):
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы