Как получить список пользователей чата aiogram?

Рейтинг: 1Ответов: 3Опубликовано: 12.06.2023

Условно, есть чат, и в нем пользователи + бот. Как получить список всех USER-ID пользователей через aiogram?

Ответы

▲ 2

Чисто через aiogram не выйдет. Придется частично задействовать pyrogram.

Естественно, в начале нужно ввести и запустить в консоли: pip install pyrogram

Потом…

Создаете отдельный файл. И в нем пишете вот это:

from pyrogram import Client
api_id = *******
api_hash = "********"
bot_token = "*******"
async def get_chat_members(chat_id):
    app = Client("Имя | Бот", api_id=api_id, api_hash=api_hash, bot_token=bot_token, in_memory=True)
    chat_members = []
    await app.start()
    async for member in app.get_chat_members(chat_id):
        chat_members = chat_members + [member.user.id]
    await app.stop()
    return chat_members

ПС. Способы получить api_hash и api_id можно найти на сайте pyrogram, в разделе про авторизацию. Или в любых иных источниках, есть даже видео на ютюбе про получение api_hash и api_id.

И потом в основном коде, где все на aiogram написано, прямо в хендлере, или еще где, импортируете конкретно эту функцию из файла.

from {ваш файл} import get_chat_members 
chat_members = await get_chat_members(message.chat.id)

И запускаете её, внеся в нее айди чата, в примере - из сообщения полученного хендлером. И функция вернет как раз то, что вам надо. В представленном варианте возвращаются айди.

Но можно и имена, и статусы в чате. Или прямо в цикле заполнять таблицу SQLite: айдишниками, именами, статусом(админ/создатель/пользователь) и прочим разным. Главное, лучше не смешивать в одном файле aiogram и pyrogram, а выделить под функцию - отдельный файл, со своими импортами.

▲ 0

Если кто-то до сих пор просматривает эту запись также как и я, то, так как через aiogram желаемого не добиться, советую использовать telethon вместо pyrogram.

В некоторых чатах (в особенности созданных недавно), когда я использовал pyrogram, мой бот падал и выкидывал исключение. Почему-то ему не удавалось на основе некоторых id найти чат. После перехода на telethon у меня со всеми чатами все работало. Вот мой код:

from telethon import TelegramClient
from app.data_bot import api_id, api_hash, bot_token

client = TelegramClient('session_name', api_id, api_hash)

async def get_chat_members(chat_id):
    await client.start(bot_token=bot_token)
    chat_members = []
    async for member in client.iter_participants(chat_id):
        chat_members.append(member.username)
    await client.disconnect()
    return chat_members
▲ -1

Для получения списка всех USER-ID пользователей через aiogram можно использовать метод get_chat_members бота. Этот метод возвращает список объектов ChatMember, которые содержат информацию о каждом участнике чата, в том числе его USER-ID. Для получения только USER-ID можно использовать генератор списков следующим образом:

from aiogram import Bot, types

bot = Bot(token="<YOUR_TOKEN>")

async def get_user_ids(chat_id):
    chat_members = await bot.get_chat_members(chat_id)
    user_ids = [member.user.id for member in chat_members]
    return user_ids

chat_id - идентификатор чата, для которого нужно получить список пользователей. В функции get_user_ids будет возвращен список всех USER-ID пользователей в этом чате.