Как получить список пользователей чата aiogram?
Условно, есть чат, и в нем пользователи + бот. Как получить список всех USER-ID пользователей через aiogram?
Условно, есть чат, и в нем пользователи + бот. Как получить список всех USER-ID пользователей через aiogram?
Чисто через 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, а выделить под функцию - отдельный файл, со своими импортами.
Если кто-то до сих пор просматривает эту запись также как и я, то, так как через 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
Для получения списка всех 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 пользователей в этом чате.