Авто отправитель сообщений в Телеграмме

В комментариях к одной из статей про Telegram CLI товарищ под ником Aluminium задался вопросом отправки контента небольшого лог-файла в чат телеграма. Как мне показалось, использовать Telegram CLI и демона для этой задачи чересчур. Для таких целей идеально подходит бот, которого написать достаточно просто. Из этого всего получился такой простенький бот. Если вам интересно, как это всё рождалось, прошу в пост.

Вместо вступления

Как раз сегодня я решил начать подбирать себе какую-нибудь систему управления временем: таймменеджмент, если по-русски. Первое, что пришло мне в голову — заезженная Pomodoro: вы определяете время для работы, в течении которого вы исключительно работаете, и такое же время для отдыха.

Я выбрал на сегодня 5 задач и выделил на каждую из неё по часу. Одна из этих задач — написание такого бота.

Quidquid latine dictum sit, altum sonatur.*

*Все, что сказано на латыни, звучит как мудрость

Главный вопрос при начале проекта — какой язык использовать? Изучить что-то новое, или писать на старом? Я решил попробовать попробовать мейнстримовый NodeJS. Убил пол часа на попытки запустить какой-нибудь hello world на этом добре. Но не судьба — времени в обрез.

Как настроить автоудаление сообщений в личном чате в Telegram

Я вспомнил, что когда-то баловался с ботами для Telegram на Python. Что ж, эксгумировал старые сорцы и освежил память. В том скрипте использовалась обертка над API Telegram ботов python-telegram-bot. На нём я и остановился.

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

Чё почём

Разберёмся для начала с конфигом. Сначала он был написан в json формате, но в нём нельзя писать комментарии, поэтому отказался от него в пользу YAML.

Комменты там на английском, потому что я выпендриваюсь это универсальный язык и я стараюсь писать все доки и ридмики для своих наработок на нём, чтобы охватить бОльшую аудиторию. Но коли этот блог ведётся на Великом и Могучем, считаю своим долгом перевести.

Еще по теме:  Как заблокировать в Телеграмме канал забанить

Первым делом

Первым делом я написал вывод файлов по команде /cat . Бот, получив такую команду прочитает все файлы из списка и поочереди выдаст их в чат.

Тут был небольшой подводный камень — Телега не может перевозить сообщения тяжелее 4096 байт, поэтому при попытке отправить прочитать большой файл всё накрывалось медным тазом.

Странно, что python-telegram-bot не решает это из коробки, но написать своё решение не составило труда: бьём файл на куски по 4КиБ и отсылать отдельными сообщениями.

Вот кусок кода, который это делает.

with open(filename, ‘rb’) as file: data = [] while True: data_chunk = file.read(4096) if not data_chunk: break data.append(data_chunk)

Можно, конечно, не запихивать сначала весь файл в массив, а сразу слать кусками. Но файл может быть очень большим и передача может прерваться где-нибудь на середине. Уж лучше ничего. Но всё в ваших руках — можете переписать под свои нужды 🙂

Ещё один момент — чтобы Telegram никак не козявил содержимое наших файлов, его нужно перед отправкой обернуть в три Markdown’овские тильды, тобиш «`контент«`. Но при тестах обнаружился один косячок: у многострочных файлов Телега обрубала первую строку. Причем по какому-то непонятному признаку.

Урок. Автоматическая отправка сообщений в телеграмм для Телефона

Чтобы этого избежать, до и после контента нужно поставить символ новой строки. И у нас получается «`nконтентn«`. И, да, нужно ещё прописать, что сообщение уходит в формате Markdown.

А вот строчка кода, которая отправляет мессагу таким образом:

bot.sendMessage(chat_id, parse_mode=»Markdown», text=»«`n%sn«`» % data_chunk)

Вторым делом

Далее я реализовал отправку содержимого файла с заданным интервалом.

Библиотека-обертка работает асинхронно, поэтому ни о каких while True с счетчиками и речи быть не может. (Такое вообще нельзя писать никогда).

К счастью, умный люди уже за нас подумали и написать очередь задач JobQueue. И он нам идеально подходит.

Создаём объект Job с нужными параметрами и запихиваем его в очередь:

notification_job = Job(callback_cat, config[‘interval’], context=chat_id) job_queue.put(notification_job, next_t=0.0)

2 важных момента:

  1. context=chat_id — вызов функции callback_cat , как понятно из названия, будет производиться асинхронно, поэтому я нужно сохранить информацию о чате, в котрый нужно отправить сообщение.
  2. next_t=0.0 — указывает, что первый раз notification_job нужно выполнить сразу.

Чтобы это добро начало нам слаться каждые interval секунд, нужно написать в чат команду /start .

Еще по теме:  Никому не давайте код даже если его требуют от имени Telegram

Кстати, в доке секунды прописывались типом float, но int тоже сканал.

Напоследок

Допилил ещё парсинг аргументов к команде /cat , так что ей можно передавать названия файлов через пробел и она выведет только их. Допустим запрос только файлов, указанных в конфиге(да, я параноик).

Чтобы остановить отправку файлов достаточно написать в чат /stop . Но даже после этого можно вручную запрашивать содержимое файлов с помощью /cat

Ещё момент: в терминал при запуске ничего выводиться не будет, все логи будут писаться в файл bot.log , который при каждом запуске будет перетираться. Так что не откладывайте напильник далеко — он вам пригодится 🙂

TODOшечка

Обернуть это дело в демона и прописать его в автозапуск я оставлю вам на домашнее задание. Я пока для себя не придумал способов применения этого бота, поэтому писать демона просто не вижу необходимым. А как это сделать под Fedora мы уже разбирались здесь.

Кстати, о помидорах: в конце первого часа мне казалось, что вот-вот ещё пять минут и тут всё будет готово. Короче, потратил я на это всё, вместе с написанием этой статьи, 4 часа. Систему нужно дорабатывать…

А в процессе написания приходили на ум всякие идеи, которые вы, мои

пересылка почты в телеграм

Кому пересылка почты в телеграм может быть очень кстати:

  1. Менеджерам и владельцам сайтов и интернет-магазинов.
    Ведь чаще всего на сайте сформированные заказы и заявки отправляются именно на электронную почту. Чем быстрее будет реакция на заказ, тем больше вероятность успешной продажи.
  2. Владельцам электронных кошельков.
    Часто уведомление о платежах или поступлениях приходит только на емейл, а уведомление по смс уже требует отдельной платы. В этом случае можно сэкономить и получать на смартфон нужные уведомления через телеграм.
  3. Сисадминам, владельцам камер видеонаблюдения и т.п.
    Информация с серверов и устройств часто приходит только на емейл, а на телеграм получать такие уведомления проще и удобнее.

Выбор телеграм бота для почты

Чтобы пересылать почту в телеграм понадобится специальный бот (программа). Она выглядит как обычный контакт в списке, но позволяет принимать и отправлять почту из телеги.

Я тестировал ботов: Гугл, Яндекс, сторонний сервис Etlgr.com

Еще по теме:  Логи чекнкть в ТГ

Краткое резюме — все они плохие

  • гугл требует для России и Ирана VPN при авторизации, да и есть подозрения что вообще гугл может отвалиться. Сам бот на английском, и довольно «деревянный».
  • яндекс на момент написания статьи не умеет принимать (!) почту в телеграм, только отправляет (то есть пишешь в телеграм — приходит в яндекс почту), это какой-то позор нахрен вообще такой бот??
  • etlgr.com работает с любой почтой, использует специально сгенерированный емейл, вроде всё толково, но платный — хочет 1,99$ в месяц, сдурели.

Короче, помыкавшись, решил остановиться на Гугл боте для почты, так как других вариантов особо и нет.

Порядок установки

Итак, моя задача: хочу получать уведомления о приходе и расходе денег с кошелька Юмани, а также заявки с блога мгновенно в телеграм.

Сейчас уведомления приходят просто на почту с темами, вроде: «Вы заплатили из кошелька . «, «Ваш кошелек . пополнен» и «Заявка с блога . «

пересылка почты в телеграм

В яндекс почте это делается как на скриншоте.

как переслать почту в телеграм

Прописываем правила переадресации.
Рекомендую убрать флажок «Положить в папку», тогда письма будут и на почту приходить, а не только в телеграм.

как переслать почту в телеграм

Затем установил телеграмовского бота как обычно. То есть кликнул по ссылке https://t.me/GmailBot, открыл её в телеграме и затем ввёл команду /start

пересылка почты в телеграм

Мне было предложено авторизоваться в gmail почте, что и надо сделать.

Обратите внимание, что для России и Ирана они требуют авторизацию через VPN.

Настройки бота

У меня некоторые письма в телеграм приходили не сразу.

Я зашел в настройки gmail бота /settings и там отметил все папки как whitelable, после чего письма в телеграм стали приходить быстрее.

отправка писем в телеграм

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

Тестируем

Теперь отправляю тестовое сообщение с темой, например, «Заявка с блога».

пересылка писем в телеграм

Пришло в телеграм

как написать письмо в телеграм канал

Выводы и итоги

Остальные или кривые, или платные, или бесперспективные.

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

  • Оптимизация бизнеса
  • Создание магазина
  • Создание сайта компании

Полезные цитаты: Сегодня я богат именно благодаря тому, что я сделал в свободное время (Р.Кийосаки)

Источник: moytop.com

Рейтинг
( Пока оценок нет )
Загрузка ...