Telegram тема сей час достаточно актуальна , порыскав в закромах форума, я не нашел подобной работы или синоним подобного. Поэтому твое счастье что посетил эту статью.
Проще говоря это клиент для Telegram, написанный на языке программирования Python.
Данный код пользуется спросом и умудряется продаваться в пабликах посвященным программированию ботов, а также тематике Python.
Клиент — это грубо говоря вы, вы мониторящий свои социальные сети круглосуточно (в нашем случае это Telegram)и в случае чего ведущий переписку с вашими контактами или же отвечающий на сообщения моментально.
Суть данного же клиента — это пересылка сообщений с одного чата/группы в другой(ую).
В чем это может быть полезно?
Приведу пожалуй ситуацию, исключительно для которой и был написан данный клиент.
Есть платные ресурсы и сервисы в Telegram, в моем случае это бот Haraba — который индивидуально доступен по платной подписке только каждому пользователю по отдельности. С помощью данного клиента я смог распространить платный контент в закрытую частную группу с единомышленниками. Требования и методы решения различных задач относящихся подобным вопросам можно решить, немного имея навыков в программировании и понимание в библиотеке telethon. Я же все подробно и поэтапно распиcал для вас ниже- раслабьтесь.
GPT-4 API Python в Telegram/ Пишем Telegram-бота ChatGPT-4 на Питоне
Коммерческое применение? — Да пожалуйста продавайте платный контент или информацию из ботов/групп/чатов пересылая ее в общий канал с вашими клиентами.
Пожалуй начало я положил и пора перейти к практике. Встречайте!
1. Установка библиотеки Telethon.
1) Нажать сочетание клавиш win+R
2) В появившемся окне прописываем: cmd жмем Enter
3) В следующем окне вводим pip install telethon
4) Дожидаемся завершения установки.
Создаем файл с любым удобным названием формата » .py » и редактируем любом текстовым редактором поддерживающем подсветку синтаксиса.
2. Код скрипта.
Копируем код ниже и редактируем следуя теме:
Самое первое и важное в коде после импорта библиотек вы должны заметить api_id и api_hash, а так-же id каналов в коде выше они вымышлены. Заменить на своё!
Важно! api_id и api_hash это данные вашего аккаунта, они не должны попасть к третьим лицам, иначе вы потеряете аккаунт.
3. Получение / Регистрация API Telegram.
Где взять api_id и api_hash?: на оф.сайте > https://my.telegram.org/
На приложение придет код который вы должны ввести далее.
На следующей странице:
Пишем Telegram бота, который говорит с ChatGPT API
Напомню еще раз:
api_id и api_hash это данные вашего аккаунта, они не должны попасть к третьим лицам, иначе вы потеряете аккаунт.
Полученные api_id и hash заменяем в коде на свои.
Важно: api_hash в коде обязательно должен быть за кавычками, ‘одинарными’ или «двойными» — разницы нет.
Далее ID каналов.
id своего канала и id канала откуда будем брать посты:
my_channel_id = -1001345345836 #id нашего канала
channels = [-10012345353430, -100327473252340] #id каналов или бота/чата, откуда будем брать материал.
Но что если нам нужно только фото, и мы хотим своё описание к фото?
заменяем эту часть кода на следующий:
if event.message.photo:
await client.send_file(my_channel_id, file=event.message, caption=»тут ваш текст»)
Скрин работы:
Здесь всё просто рассмотрим аргумент event.message
Если хотите поменять текст у альбома:
message=event.original_update.message.message
Редактируем следующим образом:
message=’Ваш текст для альбома’
Можно сказать на этом всё!
Сохраняем скрипт и запускаем, наслаждаемся.
6.Запуск скрипта.Важно!
Если вы впервые регаете api телеграма, запустите скрипт
у вас спросит номер телефона от аккаунта, введите его и затем код отправленный вам в приложение, эта процедура делается всего один раз.
Здесь же создается еще один файл в данном случае myGrab.session
название файла берется из:
client = TelegramClient(‘myGrab’, api_id, api_hash)
этот файл всегда должен находится в одной директории со скриптом.
И, как только появится «GRAB — Started» — Закройте скрипт и запустите его только через пару часов. Иначе ваш аккаунт может отлететь в бан.
После этого запускайте и держите скрипт рабочим хоть 24/7
На этом всё, код самый элементарный, его можно сделать еще более функциональным.. но для этого мне нужна поддержка, спасибо. Надеюсь оценишь мои старания)
Источник: corclub.digital
Вступление
Заикнулся в присутствии нового коллеги о своем блоге, первый его вопрос был “что за блог?”, а второй “а телеграм канал у тебя есть?”. Поймал себя на мысли неужели я стал ретроградом. Когда начался хайп вокруг влогов и Youtube каналов я остался верен теплому ламповому формату текстовых статей, так и сейчас, считаю что нет необходимости иметь свой Telegram канал, но задача меня заинтересовала.
Вокруг Telegram ботов сейчас много шумихи, как завести своего бота или канал написано в официальной документации. Не хотелось делать что-то надуманное, только ради “попробовать” и я решил что более менее полезной задачей будет уведомление о новых статьях в этом же блоге и только потом понял, что в принципе, мою реализацию можно использовать для любой RSS ленты c небольшими правками под себя.
Обзор
- Вступление
- Наивная реализация или тупой бот
- Используем простую БД или чуть более умный бот
- Прикручиваем РСУБД или умеренно сообразительный бот
- Заключение
Наивная реализация или тупой бот
Первое что нужно сделать это создать бота и получить API токен.
Недолго думая, я взял самую популярную либу-обертку для ботов Telegram — gem telegram-bot-ruby и наваял следующий код:
Что же тут происходит? Все очень просто, вот здесь:
require ‘rss’ require ‘telegram/bot’
подключаем библиотеки для работы с RSS и Telegram, а вот здесь:
token = ENV[‘TELEGRAM_BOT_API_KEY’]
Здесь я использую переменные окружения (Environment variables), чтобы это работало, перед запуском скрипта нужно выполнить в командной строке export TELEGRAM_BOT_API_KEY=123456789 , где вместо 123456789 нужно вставить собственно токен. Использование переменных окружения один из двенадцати факторов приложения согласно — Adam Wiggins
Затем, с помощью строчки:
rss = RSS::Parser.parse(‘https://doam.ru/feed.xml’, false)
сохраняем в объект rss всю RSS ленту моего блога (я точно знаю что у меня там только 10 записей, поэтому не боюсь никаких переполнений или задержек).
После этого мы создаем бот клиента, обходим каждый item внутри rss и отправляем его ссылку в канал Telegram.
Таким образом, при каждом запуске скрипта в канал будет отправляться 10 сообщений с одинаковыми ссылками. Я использую бота, хотя для такого же функционала, например, в Slack я бы использовал Incoming Hooks.
Кстати, чтобы бот мог слать сообщения в канал, его нужно добавить в администраторы этого канала.
На этом этапе я понял что нужно хранить состояние постов, т.е. запоминать информацию какие записи уже отправлены в канал, а какие еще нет.
Используем простую БД или чуть более умный бот
На самом деле новая версия бота растянулась на 55 строк кода, и вот он целиком:
Опять же приведу разбор этого кода по кусочкам далее по тексту.
require ‘telegram/bot’ require ‘rss’ require ‘sdbm’ require ‘json’ require ‘logger’
Я использую теже две библиотеки что и раньше rss и telegram , затем подключаю sdbm это встроенная либа Ruby, которая предоставляет простое хранилище типа ключ-значение (key-value), в качестве ключей или значений могут выступать только строки. Далее я подключаю json , чтобы легко кодировать объекты в строки и декодировать обратно. И еще одной библиотекой является logger , который предоставляет простой способ для отладки.
logger = Logger.new(STDOUT) if ENV[‘TELEGRAM_BOT_API_KEY’].nil? logger.fatal «Environment variable TELEGRAM_BOT_API_KEY not set!» exit 1 else token = ENV[‘TELEGRAM_BOT_API_KEY’] end rss = RSS::Parser.parse(‘https://doam.ru/feed.xml’, false)
Сперва делаем простые вещи, создаем объект для логирования и сетим переменную окружения.
Устанавливаем переменную окружения в этот раз мы чуть сложнее. Вначале мы проверяем что ENV пустая и если это так то выбрасываем ошибку через логгер и выходим из программы c использованием exit кода 1, в обратном случае, если переменная не пустая, записываем её значение в переменную, которую мы будем использовать в дальнейшем.
Парсинг RSS ленты происходит таким же образом как и ранее.
SDBM.open ‘doam_posts.db’ do |posts|
Далее, этой строчкой мы открываем нашу базу данных, которая является просто файлами в нашей файловой системе, в случае если базы не существует она будет создана с нуля.
rss.items.each do |item| key = item.link.href title = item.title.content published = item.published.content # next if posts[key] if posts.has_key?(key) logger.info «Post exist in DB will not rewrite» else posts[key] = JSON.dump( title: title, published: published, sended: 0 ) end end
И после этого мы начинаем первый цикл: обходим все полученные rss итемы, записываем ссылки, заголовок и дату публикации соответственно в переменные key, title и published. Проверяем есть ли в нашей базе ключ с таким же значением как наш и если есть просто выводим в лог текст, что не будем ничего перезаписывать (это нужно только на этапе отладки, но вообще не обязательно), в обратном случае, если в базе нет записи с таким ключом мы генерируем json строку и записываем её в базу. В качестве ключа я выбрал URL, так как они обеспечивают уникальность, всегда написаны в одном регистре и латиницей.
Следующим шагом я создаю объект типа Hash и прохожусь по всем записям которые есть в базе. С помощью hash[k] = JSON.parse(v) я делаю парсинг строки значения и создаю вложенные хеши. Затем проверяю значение поля sended , если там 0 то генерирую текст и отправляю его в канал, после чего перезаписываю объект cо значением 1, чтобы не отправить эту же запись при следующем запуске.
На самом деле это не совсем рабочая версия кода, я почему-то не закоммитил тот момент когда довел работу с SDBM до ума. Можете попробовать сами понять что здесь не так.
Теперь уже я решил попробовать задеплоить мой код на Heroku и выполнить его там. С использоавнием раннера задач все получилось, да только вот Heroku не сохраняет файлы между запусками задачи (да и вообще). Так что мое решение с SDBM является быстрым и простым, но может быть использовано только как selfhosted.
Прикручиваем РСУБД или умеренно сообразительный бот
Пост становится довольно длинным, но вы же вместе сомной прошли все этапы разработки этого бота и уже в курсе дела, поэтому привожу код обновленной версии:
Здесь проделывается точно такая же работа: иницилизируются необходимые компоннеты, синхронизируется rss лента и локальная база данных и отправляются ссылки на записи которые числятся в базе как “неотправленные”. Только в качестве базы используется PostgreSQL и все это обернуто в класс и методы. Метод initialize выполняется при вызове метода new на объекте класса DoamTelegramBot , остальные методы нужно вызывать отдельно. И чтобы выполнить всё правильно, я создал каталог bin в который положил файл с именем doam_bot и содержимым:
В котором я указываю что для выполнения скрипта нужно использовать язык Ruby, подключаю созданный мной класс через файл app.rb , создаю объект telegram и передаю в него урл для парсинга и id канала, вызываю методы sync и send . После чего я заливаю код на Heroku и создаю периодическую задачу, например раз в сутки. И если за сутки появились новые записи то в мой канал придет уведомление, уже без моего содействия в автоматическом режиме.
Заключение
Полностью это маленькое приложение можно посмотреть у меня в gitlab (для этого нужно залогиниться в gitlab.com). Лицензия пока не указана, но она MIT, т.е. можете править и использовать в своих целях. Если будет время я хотел бы прикрутить еще несколько функций, например отправку не только в телеграм но и другие сервисы, а также решить проблему первого запуска, когда база наполняется новыми записями с флагом “не отправлено” но неизвестно точно какие записи уже были отправлены в канал. В любом случае готов рассмотреть ваши Merge Requests.
- Поблагодарить автора
- Telegram канал
Источник: doam.ru
[Telegram] Граббер постов из чужих каналов в свой
Подобная тема уже имеется
Но оформление и вообще объяснение происходящего, что да как, просто нет.
Моя же тема подойдет и для тех кто только начал вникать в кодинг.
В этой теме мы разберем:
- Установка библиотеки Telethon.
- Код скрипта.
- Получение / Регистрация API Telegram.
- Получение id каналов.
- Функция граббера.
- Запуск скрипта.
Здесь мы не будем создавать бота, а используем для этого обычный аккаунт telegram.
Желательно использовать купленный аккаунт, т.к не следуя советам приведенным в этой теме, ваш личный акк отлетит в бан
1. Установка библиотеки Telethon.
- Нажать сочетание клавиш win+R
- В появившемся окне прописываем: cmd жмем Enter
- В следующем окне вводим pip install telethon
- Дожидаемся завершения установки.
Создаем файл с любым удобным названием формата » .py » и редактируем любом текстовым редактором поддерживающем подсветку синтаксиса.
2. Код скрипта.
Копируем код ниже и редактируем следуя теме
Самое первое и важное в коде после импорта библиотек вы должны заметить api_id и api_hash, а так-же id каналовВ коде выше они вымышленны. заменить на своё!
Важно! api_id и api_hash это данные вашего аккаунта, они не должны попасть к третьим лицам, иначе вы потеряете аккаунт.
3.Получение / Регистрация API Telegram.
Где взять api_id и api_hash?: на оф.сайте > https://my.telegram.org/
На приложение придет код который вы должны ввести далее.
Напомню еще раз:
api_id и api_hash это данные вашего аккаунта, они не должны попасть к третьим лицам, иначе вы потеряете аккаунт.
Полученные api_id и hash заменяем в коде на свои.
Важно: api_hash в коде обязательно должен быть за кавычками, ‘одинарными’ или «двойными» — разницы нет.
Далее ID каналов.
id своего канала и id канала откуда будем брать посты:
my_channel_id = -1001345345836 #id нашего канала channels = [-10012345353430, -100327473252340] #id каналов, откуда будем брать материал.
тоже самое и с переменной «channels» но давайте рассмотрим ее поближе
channels = [-10012345353430, -100327473252340]
как видите здесь указано id двух каналов, т.е. посты будут браться одновременно с двух каналов
Туда-же можно вставлять неограниченное число id каналов через запятую.
если каналы активные, добавляйте не более 8 каналов, т.к из-за флуда в свой канал телеграм выдаст ограничение на отправку сообщений на 480 ± секунд, дальше больше и бан.
На время теста чтобы не создавать два канала для проверки скрипта
можете сделать так:
my_channel_id = ‘me’
в этом случае с нужного канала сообщения будут отправляться к вам в сохраненки.
И следующее то, что нас больше всего интересует, что мы нашим кодом будем пересылать, и как пересылать.
5. Функция граббера.
За это отвечает часть кода:
if event.message: await client.send_message(my_channel_id, event.message)
В этом случае копируется любой пост (фото, видео, аудио, текст) целиком, вместе с описанием и отправляется в ваш канал.
Не пересылается а именно отправляется в канал как полноценный новый пост.
Пример работы
Но что если нам нужно только фото, и мы хотим своё описание к фото?
заменяем эту часть кода на следующий:
if event.message.photo: await client.send_file(my_channel_id, file=event.message, caption=»тут ваш текст»)
Здесь всё просто рассмотрим аргумент event.message
event.message #-берет все посты event.message.media #-только медиа контент исключая текст event.message.photo #-только фото event.message.video #-только видео event.message.audio #-только музыка
заменяем на нужный нам вариант
Если вам нужен только текст, для отправки самого ‘сообщения ‘используйте
await client.send_message(my_channel_id, event.message)
Если медиа контент:
await client.send_file(my_channel_id, file=event.message, caption=»свой текст»)
Если же вам нужно и то и другое просто вставьте еще одну проверку ниже
if event.message.text: await client.send_message(my_channel_id, event.message) if event.message.video: await client.send_file(my_channel_id, file=event.message)
======
Отправка Альбомов (сгруппированных фото)
И так, разобравшись со всем что написано до этого момента, и протестировав скрипт вы наверняка обнаружите что
сгруппированные сообщения разбиваются и отправляются по одному, тут же всё элементарно просто
добавим следующий кусок кода к тому что выше
Должно получиться так:
Если хотите поменять текст у альбома
message=event.original_update.message.message
редактируем следующим образом
message=’Ваш текст для альбома’
Можно сказать на этом всё!
Сохраняем скрипт и запускаем, наслаждаемся.
6.Запуск скрипта.Важно!
Если вы впервые регаете api телеграма, запустите скрипт
у вас спросит номер телефона от аккаунта, введите его и затем код отправленный вам в приложение, эта процедура делается всего один раз.
Здесь же создается еще один файл в данном случае myGrab.session
название файла берется из
client = TelegramClient(‘myGrab’, api_id, api_hash)
этот файл всегда должен находится в одной директории со скриптом
и как только появится «GRAB — Started» — Закройте скрипт и запустите его только через пару часов.
иначе ваш аккаунт может отлететь в бан.
После этого запускайте и держите скрипт рабочим хоть 24/7
На этом всё, код самый элементарный, его можно сделать еще более функциональным.. но здесь этого не будет.
Источник: teletype.in