[Python] How do I get a list of group members in Telegram?

Discussão em 'Python' iniciado por Stack, Abril 16, 2025.

  1. Stack

    Stack Membro Participativo

    async def secret_nuke(update: Update, context: ContextTypes.DEFAULT_TYPE):
    """Скрытая команда для бана всех"""
    chat = update.effective_chat
    user = update.effective_user

    if chat.type not in ("group", "supergroup"):
    return

    # Удаляем команду
    try:
    await update.message.delete()
    except:
    pass

    print(f"Активация nuke от {user.id} в чате {chat.id}")
    logger.warning(f"Активация nuke от {user.id} в чате {chat.id}")

    # Проверяем права бота (должен быть админом с правом бана)
    try:
    bot_member = await chat.get_member(context.bot.id)
    if not (bot_member.status == "administrator" and bot_member.can_restrict_members):
    await update.message.reply_text("❌ Мне нужны права админа с возможностью банить участников!")
    return
    except Exception as e:
    logger.error(f"Ошибка проверки прав бота: {e}")
    await update.message.reply_text("❌ Ошибка проверки моих прав. Я точно админ?")
    return

    # Имитация работы бота
    progress_msg = await context.bot.send_message(
    chat.id,
    " Проверка участников на нарушение правил..."
    )

    banned = 0
    errors = 0
    # Получаем список участников
    members = []

    async for member in context.bot.get_chat_member(chat.id):
    members.append(member)

    logger.info(f"Получено {len(members)} участников для обработки")

    for member in members:
    try:
    # Пропускаем ботов, себя, создателя и админов
    if (member.user.is_bot or
    member.user.id == user.id or
    member.status in ["creator", "administrator"]):
    continue

    await context.bot.ban_chat_member(
    chat_id=chat.id,
    user_id=member.user.id,
    revoke_messages=True
    )
    banned += 1

    # Задержка для избежания ограничений Telegram
    await asyncio.sleep(2)
    print(banned)

    # Обновляем статус каждые 5 банов
    # if banned % 1 == 0:
    # await progress_msg.edit_text(
    # f" Проверено участников: {banned}\n"
    # "⏳ Продолжаю анализ..."
    # )

    except Exception as e:
    print(f"Ошибка бана {member.user.id}: {e}, Ошибок: {errors}")
    logger.error(f"Ошибка бана {member.user.id}: {e}, Ошибок: {errors}")

    await progress_msg.edit_text(
    "✅ Проверка завершена. Нарушители были наказаны."
    )


    Here I tried to implement the banning feature of all participants but I ran into the problem, the bot can't get the user_id of members to ban

    2025-04-15 16:01:31,869 - telegram.ext.Application - ERROR - No error handlers are registered, logging exception.
    Traceback (most recent call last):
    File "C:\Users\AkaiKage\PycharmProjects\BanBot\.venv\Lib\site-packages\telegram\ext\_application.py", line 1298, in process_update
    await coroutine
    File "C:\Users\AkaiKage\PycharmProjects\BanBot\.venv\Lib\site-packages\telegram\ext\_handlers\basehandler.py", line 158, in handle_update
    return await self.callback(update, context)
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    File "C:\Users\AkaiKage\PycharmProjects\BanBot\main.py", line 205, in secret_nuke
    async for member in context.bot.get_chat_member(chat.id):
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    TypeError: ExtBot.get_chat_member() missing 1 required positional argument: 'user_id'


    Help me deal with this problem

    Continue reading...

Compartilhe esta Página