Загрузка...

[TELETHON] Не могу реализовать уже 5тый день, помогите кто шарит

Тема в разделе Python создана пользователем TelegramTrust 16 апр 2025. 150 просмотров

Загрузка...
  1. TelegramTrust
    TelegramTrust Автор темы 16 апр 2025 5 12 июн 2021
    ТЗ:
    Смотри, в скрипте у нас есть аккаунт, который подписан как admin.session + admin.json, подключение в актуально и все работает, не могу реализовать определенную идею, не шарю какие импорты и как реализовать технически, сейчас опишу о чем я.

    Мне нужно, чтобы когда этот аккаунт подключается через ****** (через Telegram клиент), он с задержкой в 2 секунды сразу же изменял настройки чата. А именно — открывал участникам возможность писать и отправлять медиа-файлы.

    Чтобы было понятнее, о чём речь — вот как эти настройки выглядят в TDATA:
    • Group Info → Manage group или Permissions → What can members of this group do? → Send messages — ON
    • Group Info → Manage group или Permissions → What can members of this group do? → Send media → Photos — ON
    • Group Info → Manage group или Permissions → What can members of this group do? → Send media → Video files — ON
    • Group Info → Manage group или Permissions → What can members of this group do? → Send media → Video messages — ON

    Все остальные параметры — игнорируем. Как они стояли, так и оставляем.
    Если вдруг эти настройки уже включены, ничего менять не надо — просто лог об успешной проверке и всё.
    Мы используем Telethon 1.37.0 — пожалуйста, глянь актуальную документацию и подходы, чтобы решение было корректным и логичным.
    Аккаунт admin (из accounts/admin.session + admin.json) должен применять настройки в чате, ссылка на который указана в chat.txt. В файле просто указана приватная-ссылка на чат TG.

    Очень надеюсь на твою помощь!!

    Как пытался реализовать я:

    Python
    from telethon.tl.functions.channels import JoinChannelRequest, EditBannedRequest
    from telethon.tl.functions.messages import ImportChatInviteRequest
    from telethon.tl.types import ChatBannedRights

    client = TelegramClient(
    session=os.path.join(ACCOUNTS_PATH, session_name),
    api_id=json_data['app_id'],
    api_hash=json_data['app_hash'],
    device_model=json_data['device'],
    system_version=json_data['sdk'],
    app_version=json_data['app_version'],
    lang_code=json_data['lang_pack'],
    system_lang_code=json_data['system_lang_pack'],
    proxy=(ProxyType.HTTP, proxy_host, int(proxy_port), True, proxy_user, proxy_pass)
    )

    **** подключение к аккаунту если что все верное и рабочее, просто чтобы не удлинять код не дублировал все****

    me = await client.get_me()
    clients[acc_number] = client
    active_accounts.append(me.id)

    ***** проблемы начинаются с этого момента, непосредственно реализация идеи чтобы админ открывал права чата****

    if session_name == "admin":
    logger.info(f"[{session_name}] [Поток {acc_number}] - Администраторский аккаунт, настройка разрешений чата")
    await asyncio.sleep(2) # Задержка 2 секунды перед изменением настроек

    try:
    # Проверка подписки на чат
    if not await check_subscription(client, url_chat):
    logger.error(f"[{session_name}] [Поток {acc_number}] - Не удалось присоединиться к чату: {url_chat}")
    return

    # Получение сущности чата
    chat_entity = await client.get_entity(url_chat)
    chat_id = chat_entity.id
    logger.debug(f"[{session_name}] [Поток {acc_number}] - Чат получен: ID={chat_id}")

    # Проверка прав администратора
    from telethon import types
    admins = await client.get_participants(chat_entity, filter=types.ChannelParticipantsAdmins)
    is_admin = any(admin.id == me.id for admin in admins)
    if not is_admin:
    logger.error(f"[{session_name}] [Поток {acc_number}] - Аккаунт не является администратором чата")
    return

    # Получение текущих прав по умолчанию
    current_rights = chat_entity.default_banned_rights if hasattr(chat_entity, 'default_banned_rights') else None

    # Определение новых прав (разрешить отправку сообщений и медиа)
    new_rights = ChatBannedRights(
    until_date=None,
    send_messages=False, # Разрешить отправку сообщений
    send_media=False, # Разрешить отправку медиа (включает фото, видео, видеосообщения)
    # Сохраняем остальные права без изменений
    view_messages=current_rights.view_messages if current_rights else False,
    send_stickers=current_rights.send_stickers if current_rights else True,
    send_gifs=current_rights.send_gifs if current_rights else True,
    send_games=current_rights.send_games if current_rights else True,
    send_inline=current_rights.send_inline if current_rights else True,
    embed_links=current_rights.embed_links if current_rights else True,
    send_polls=current_rights.send_polls if current_rights else True,
    change_info=current_rights.change_info if current_rights else True,
    invite_users=current_rights.invite_users if current_rights else True,
    pin_messages=current_rights.pin_messages if current_rights else True
    )

    # Проверка, нужно ли обновлять права
    update_needed = (
    current_rights and (
    current_rights.send_messages != new_rights.send_messages or
    current_rights.send_media != new_rights.send_media
    )
    )

    if update_needed:
    # Применение новых прав
    from telethon.tl.functions.channels import EditChatDefaultBannedRightsRequest
    await client(EditChatDefaultBannedRightsRequest(
    peer=chat_entity,
    banned_rights=new_rights
    ))
    logger.info(f"[{session_name}] [Поток {acc_number}] - Настройки чата успешно обновлены")
    else:
    logger.info(f"[{session_name}] [Поток {acc_number}] - Настройки чата уже соответствуют требованиям")
    except Exception as e:
    logger.error(f"[{session_name}] [Поток {acc_number}] - Ошибка при обновлении настроек чата: {str(e)}")
    return
     
  2. n1s_01
     
Top