Telegram-бот: Пересылка сообщений из Закрытой группы

#javascript #python #telegram #telegram-bot

Вопрос:

Есть ли какой-либо способ с помощью Python / JS пересылать сообщения, которые я, как участник, получаю в частной группе, доступной только для чтения? Я пытаюсь настроить его с помощью python-telegram-бота, но, похоже, мне нужно добавить бота в группу, чтобы он взаимодействовал с содержимым, отправленным в группе. Но я не могу, так как я просто читающий / принимающий участник…

Может быть, есть способ без использования API Telegram, но с использованием какой-то автоматизации браузера JS для их пересылки? Это единственное, что приходит мне в голову… Заранее спасибо!

Ответ №1:

Отвечаю на свой собственный вопрос на случай, если кому-то это понадобится.

Как отметил @CallMeStag, нужна библиотека, поддерживающая «пользовательских ботов». Это библиотеки, непосредственно реализующие MTProto.

Для python, например, пирограмма подходит и очень проста в использовании.

Прежде всего, необходим ключ API и хэш API для идентификации скрипта Python на сервере Telegram для связи в MTProto.

https://my.telegram.org/auth?to=apps -> Войдите в систему, используя свои учетные данные, и создайте «Приложение». Определите их в API_ID и API_HASH ниже.

Теперь я использую этот код для копирования сообщений SOURCE_CHAT с TARGET_chat :

 #!/usr/bin/env python3
from pyrogram import Client
from pyrogram import filters

# ~~~~~~ CONFIG ~~~~~~~~ #
ACCOUNT = "@xy"
PHONE_NR = ' 49....'

# https://my.telegram.org/auth?to=apps
API_ID = 1111111 
API_HASH = "your_hash"

# CHAT ID
SOURCE_CHAT = -11111 
TARGET_CHAT = -22222
# ~~~~~~~~~~~~~~~~~~~~~~ #

app = Client(
    ACCOUNT,
    phone_number=PHONE_NR,
    api_id=API_ID,
    api_hash=API_HASH
)

# filters.chat(SOURCE_CHAT)
@app.on_message(filters.chat(SOURCE_CHAT))
def my_handler(client, message):
    message.copy(  # copy() so there's no "forwarded from" header
        chat_id=TARGET_CHAT,  # the channel you want to post to
        caption="Copied from XYZ"  # Caption
    )

app.run()
 

Чтобы узнать CHAT_ID Источник и цель, я временно отключил фильтр и распечатал сообщение.

 @app.on_message()
def my_handler(client, message):
    print(message)
 

Это позволяет вам: всякий раз, когда вы получаете сообщение в определенной группе, вы можете найти message.chat.id (внимание: отрицательные значения!). Настройте их для SOURCE_CHAT и TARGET_CHAT в полном сценарии выше.

ИЗМЕНИТЬ: Еще один вариант, чтобы получить все идентификаторы чата для всех диалогов, не требуя сначала, чтобы кто-то отправил сообщение в канале/группе/частном/чате:

 def getAllChatIDs():
    for x in app.get_dialogs():
        print (x.chat.type, x.chat.title, x.chat.id)
 

Просто позвоните один раз, и вы получите список диалогов 🙂

Ответ №2:

Это действительно невозможно с ботами Telegram — вам придется добавить их в группу. Однако вы можете автоматизировать свой личный кабинет, используя так называемых «пользовательских ботов». Вот статья о них.

Комментарии:

1. Спасибо, это мне очень помогает — я этого не знал. Но теперь у меня есть хорошая отправная точка / ключевое слово, с которого можно начать исследование. Большое спасибо!

2. Я нашел «Пирограмму», которая может напрямую «использовать» учетную запись пользователя через API MTProto! Это выглядит ооочень здорово! Еще один вопрос: Знаете ли вы, может ли владелец группы видеть, что я пересылаю сообщения? (независимо от того, выполняется ли это вручную или автоматически). Или эта информация не должна быть видна администратору группы?

3. AFAIK владелец группы не может этого видеть, нет

4. Вы случайно не знаете, изменил ли telegram свой API, возможно, разрешив владельцам каналов запрещать пользователям получать доступ к контенту? Потому что мой пользовательский бот, похоже, может получать доступ ко всем сообщениям из каждого чата/группы/канала, за исключением одного канала.

5. возможно, это связано с довольно новым защищенным контентом