March 13, 2019

Граббер привнотов с чатов и каналов телеграм.

Сегодня мы будем писать граббер привнотов с разных чатов или каналов в телеграме. Для начала пройдемся по зависимостям.

pyPrivnote==0.0.1a1
PySocks==1.6.8
requests==2.7.0
Telethon==1.4.1

Это все зависимости которые нам будут нужны, PySocks нужен в том случае, если вы не можете напрямую подключится к телеграм.

Итак, начнём с импортов всего необходимого.

import re
import socks
import requests
import pyPrivnote as pn
from telethon import TelegramClient, events, sync
from telethon.tl.types import PeerUser, PeerChat, PeerChannel

После того как импортировали всё что нам было нужно можем начинать с создания клиента телеграм.

Переходим на https://my.telegram.org/auth , авторизируемся под тем аккаунтом с которого хотим следить за чатами, далее создаём своё приложение, думаю для вас это будет несложно сделать.

Отсюда нам нужны api_id и app api_hash. Никому их не сообщайте.

Далее по документации Telethon нам надо создать свой клиент.

api_id = 11111111111
api_hash = 'xxxxxxxxx:xxxxxxxx'
phone = "+88005553535"
chat = "DUROV"
proxy_ip = "192.168.15.1"
port = 9999


client = TelegramClient('coma', api_id, api_hash, proxy=(socks.SOCKS5, str(proxy_ip), port))
client.start()
client.sign_in(phone)

Давайте разберемся что да как. С полями Api_id и Api_hash я думаю вы уже разобрались, туда надо вставить свои данные которые вы получили при регистрации приложения. В Phone мы вставляем номер аккаунта через который будем слушать чаты. В поле Chat нам необходимо указать куда будет отправляться текст с Привнота. Можно вставлять юзернейм без @ и ссылку на какой либо чат такого типа:

chat = "https://t.me/joinchat/xxxxxxxxxxxxxxxxxx"
chat = "DUROV"

Далее, если у вас нет коннекта к телеграму без прокси то вписываем прокси айпи и порт.

Затем создаём клиент:

client = TelegramClient('coma', api_id, api_hash, proxy=(socks.SOCKS5, str(proxy_ip), port))
client.start()
client.sign_in(phone)

Где надпись 'coma' вы можете вставлять любое имя, это будет названием файла сессии. Далее у нас идёт подключение по socks5 proxy.

Как должен выглядеть код без прокси:

api_id = 11111111111
api_hash = 'xxxxxxxxx:xxxxxxxx'
phone = "+88005553535"
chat = "DUROV"


client = TelegramClient('coma', api_id, api_hash)
client.start()
client.sign_in(phone)

Далее мы создаём ивент для того что-бы слушать все чаты в телеграме.

@client.on(events.NewMessage)
async def my_event_handler(event):

Затем нам надо сделать условие поиска ссылки привнота.

if re.findall(r'(https://privnote.com/)', event.raw_text, re.I):

То есть, если в event.raw_text будет ссылка вида https://privnote.com/

event это событие. Raw_text это текст сообщения в этом событии. И, если он найдет ссылку в сообщение то передаст дело дальше. А дальше у нас будет регулярка для того что-бы вытащить саму ссыль на привнот:

awesome_re = re.search("(?P<url>https?://[^\s]+)", event.raw_text).group("url")

То есть он будет искать ссылку в сообщение где было https://privnote.com/

Затем нам надо прочесть сам привнот.

note_text = pn.read_note(str(awesome_re))

Ну и почти последнее, нам надо отправить текст сообщения из привнота в чат или человеку.

await client.send_message(chat, str(note_text))

Ну и завершаем мы это всё:

client.run_until_disconnected()

Далее будет полный листинг программы.

import re
import socks
import requests
import pyPrivnote as pn
from telethon import TelegramClient, events, sync
from telethon.tl.types import PeerUser, PeerChat, PeerChannel


api_id = 11111111111
api_hash = 'xxxxxxxxx:xxxxxxxx'
phone = "+88005553535"
chat = "DUROV"
proxy_ip = "192.168.15.1"
port = 9999


client = TelegramClient('coma', api_id, api_hash, proxy=(socks.SOCKS5, str(proxy_ip), port))
client.start()
client.sign_in(phone)


@client.on(events.NewMessage)
async def my_event_handler(event):
    if re.findall(r'(https://privnote.com/)', event.raw_text, re.I):
        awesome_re = re.search("(?P<url>https?://[^\s]+)", event.raw_text).group("url")
        note_text = pn.read_note(str(awesome_re))
        await client.send_message(chat, str(note_text))


client.run_until_disconnected()

После запуска нас попросит пройти авторизацию, вписываем свой номер через плюс, затем код который пришел в телеграм. Вот и всё, скрипт работает, можем тестировать.

Я не лучший кодер, я только начинаю писать что то интересное, не надо брать с меня пример. Вы, всегда можете сделать лучше, или не повторять моих ошибок.