В комментариях к одной из статей про Telegram CLI товарищ под ником Aluminium задался вопросом отправки контента небольшого лог-файла в чат телеграма. Как мне показалось, использовать Telegram CLI и демона для этой задачи чересчур. Для таких целей идеально подходит бот, которого написать достаточно просто. Из этого всего получился такой простенький бот. Если вам интересно, как это всё рождалось, прошу в пост.
Вместо вступления
Как раз сегодня я решил начать подбирать себе какую-нибудь систему управления временем: таймменеджмент, если по-русски. Первое, что пришло мне в голову — заезженная Pomodoro: вы определяете время для работы, в течении которого вы исключительно работаете, и такое же время для отдыха.
Я выбрал на сегодня 5 задач и выделил на каждую из неё по часу. Одна из этих задач — написание такого бота.
Quidquid latine dictum sit, altum sonatur.*
*Все, что сказано на латыни, звучит как мудрость
Главный вопрос при начале проекта — какой язык использовать? Изучить что-то новое, или писать на старом? Я решил попробовать попробовать мейнстримовый NodeJS. Убил пол часа на попытки запустить какой-нибудь hello world на этом добре. Но не судьба — времени в обрез.
Как использовать Telegram в качестве органайзера и отправлять отложенные сообщения #Shorts
Я вспомнил, что когда-то баловался с ботами для 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 важных момента:
- context=chat_id — вызов функции callback_cat , как понятно из названия, будет производиться асинхронно, поэтому я нужно сохранить информацию о чате, в котрый нужно отправить сообщение.
- next_t=0.0 — указывает, что первый раз notification_job нужно выполнить сразу.
Чтобы это добро начало нам слаться каждые interval секунд, нужно написать в чат команду /start .
Кстати, в доке секунды прописывались типом float, но int тоже сканал.
Напоследок
Допилил ещё парсинг аргументов к команде /cat , так что ей можно передавать названия файлов через пробел и она выведет только их. Допустим запрос только файлов, указанных в конфиге(да, я параноик).
Чтобы остановить отправку файлов достаточно написать в чат /stop . Но даже после этого можно вручную запрашивать содержимое файлов с помощью /cat
Ещё момент: в терминал при запуске ничего выводиться не будет, все логи будут писаться в файл bot.log , который при каждом запуске будет перетираться. Так что не откладывайте напильник далеко — он вам пригодится 🙂
TODOшечка
Обернуть это дело в демона и прописать его в автозапуск я оставлю вам на домашнее задание. Я пока для себя не придумал способов применения этого бота, поэтому писать демона просто не вижу необходимым. А как это сделать под Fedora мы уже разбирались здесь.
Кстати, о помидорах: в конце первого часа мне казалось, что вот-вот ещё пять минут и тут всё будет готово. Короче, потратил я на это всё, вместе с написанием этой статьи, 4 часа. Систему нужно дорабатывать…
А в процессе написания приходили на ум всякие идеи, которые вы, мои дорогие читатели, при желании можете с легкостью дописать. А я просто оставлю эти идеи здесь, пусть они ждут своих героев 🙂
Добавить возможность редактирования конфига на лету с помощью чата. Я сразу этого не хотел делать, потому что ещё тогда ещё не придумал, как буду ограничивать доступ к доту. Хотя метод с именем пользователя выглядит достаточно надежно, но какой-нибудь злой дядька, получивший доступ к компу с открытым Telegram’ом может натворить дел, так что нужно секурить каким-нибудь паролем.
- /unlock_config — включение возможности редактирования конфига из чата. Пароль, естественно, хранится в конфиге в хэшированном виде, а после ввода пароля сообщение нужно удалять 🙂
- /set_interval — изменение интервала отправки сообщений
- /add_file и /remove_file — добавлениеудаление файлов виз списка допустимых.
- /head и /tail — аналоги соответствующих комманд в *nix подобных системах — выводить кусок с начала или с конца файла соответсвтенно.
- /watch — наблюдать за файлом и отсылать изменения в реальном времени. Соответственно, нужен /unwatch
- /lock_config — после всех махинаций нужно залочить конфиг обратно.
Много чего ещё можно придумать — всё в ваших руках. Пользуйтесь на здоровье и обязательно пишите комментарии — меня они очень вдохновляют 🙂
Источник: shanginn.ru
Как запланировать сообщение в Telegram: пошаговая инструкция, как использовать опцию
Популярность мессенджера Telegram постоянно набирает популярность. Независимо от того, знаете ли вы о нем все или только зарегистрировались, стоит знать, что функциональность программы на очень высоком уровне, а разработчики постоянно радуют пользователей новыми интересными возможностями. О том, как можно отправить запланированное ранее сообщение, мы расскажем далее в статье.
Работа с отложенными сообщениями
В «Телеграмм» можно запланировать отправку сообщений в конкретный момент. А чтобы настроить его отправку, следует пройти несколько простых шагов:
- открываем мессенджер и переходим в нужную беседу;
- вводим текст сообщения;
- делаем долгий тап по кнопке отправки сообщения;
- в открывшемся меню выбираем «Отправить позже»;
- устанавливаем нужную дату.
После проделанных действий рядом с чатом отобразится иконка с часами. Запланированное сообщение можно редактировать, менять время отправки или вовсе отменять его.
После его создания в списке чатов появится папка, где будут храниться все отложенные сообщения. Это нужно для удобства управления, особенно если вы собираетесь пользоваться названной функцией часто.
Когда в чате запланированы сообщения, то рядом с полем ввода текста отобразится иконка календаря. Это может быть полезно многим, например, если вам требуется попросить коллегу захватить на работу какую-либо нужную вещь, но про это получилось вспомнить только ночью перед рабочим днем. Чтобы вдруг ночью не разбудить человека можно запланировать сообщение на утро, и ваш коллега точно не пропустит эту просьбу.
Напоминания для себя
Также это полезно и для самого пользователя. Например, если не хочется добавлять напоминание о чем-либо в календарь, можно сделать это в своем любимом мессенджере. Там есть канал «Избранное», куда можно сохранять сообщения для себя. Точно так же пишите туда сообщение и планируете его отправку в нужное время, тем самым напоминая себе о чем-либо важном.
Облегчение работы администратора канала
Оценят функцию и администраторы каналов, которым требуется равномерно добавлять контент для пользователей. Администратор может создать несколько постов, распланировать их отправку и не беспокоиться, что в нужный момент не будет возможности выложить контент.
Telegram — мессенджер, позволяющий обмениваться текстовыми сообщениями, фотографиями, документами, совершать голосовые звонки. Недавние обновления приложения позволили организовывать полноценные конференции. По последним данным, ежемесячно мессенджер использует порядка 500 миллионов пользователей. Многие пользователи стали реже посещать социальные сети, предпочитая получать информацию в каналах «Телеграма».
Источник: fb.ru
Что такое Draft в Телеграм
На протяжении нескольких лет Телеграм остается ключевым мессенджером в русскоязычном пространстве, а тему раскрутки Телеграм-каналов и слива трафика на них не обсуждает только ленивый. С каждым месяцем открываются новые фишки и «пасхалки», которые команда Павла Дурова заложила для пользователей. И сегодня коснемся одной из них: draft telegram.
Что значит Draft
Draft – это обычный черновик, то есть написанное, но не ушедшее сообщение, которое ждет отправки. Предположим, вы писали важный месседж, но вас внезапно отвлекли, и вы не успели отослать сообщение. Не беда: текст сохранится в диалоге, и его можно будет отправить в любой удобный момент.
Вот так выглядит черновик в диалоге. На момент написания он поднимается выше остальных чатов, и далее уходит вниз по мере обновления ленты. Отдельно отметим, что диалог с черновиком переносится в верх пользовательской ленты, чтобы о нем не забыли.
Чем полезны черновики
Такая функция как draft будет полезна тем, кто в Телеграме пишет относительно длинные тексты – копирайтерам, журналистам, SMM-щикам. Создавать черновики удобно, ведь теперь не нужно открывать Google Docs, Word или любой другой редактор. Текст сохранится в Телеграме, а писать и редактировать можно с любого устройства, будь то компьютер или телефон. Создавать черновики можно как в чате с самим собой (Избранное), так и в диалогах с другими пользователями: пока вы не отправили сообщение, оно видно только вам.
Draft в Телеграме также полезен и уникален тем, что он функционирует на основе кроссплатформенности приложения. Мессенджер сохраняет и синхронизирует текст на всех залогиненных устройствах. Вы можете начать писать сообщение на телефоне, а потом закончите на компьютере с того момента, на котором остановились. Это работает благодаря тому, что все черновики хранятся в облачном пространстве Телеграма.
Как пользоваться функцией
Со значением draft в телеграмме разобрались, можно затронуть этот вопрос на практике. Все предельно просто: если начать писать сообщение, но сделать паузу примерно на 10-12 секунд, оно сохранится как черновик. Любое написанное и не отосланное сообщение в диалоге помечается красным цветом, а сам чат переносится вверх, под список закрепленных чатов, и уходит вниз по мере обновления ленты.
Чтобы убрать черновик, достаточно удалить все написанное. После этого чат уходит вниз, занимая место соответственно последнему отправленному сообщению.
А что делать, если черновиков накопилось слишком много? В таком случае необходимо зайти в настройки Телеграма, нажать на пункт «Конфиденциальность и безопасность», затем кнопку «Удалить». Все, теперь ваши диалоги чисты.
FAQ
Можно ли отключить сохранение черновика и каким образом?
Отключение функции черновиков в мессенджере не предусмотрено. Они не мешают юзерам использовать Телеграм по предназначению.
Источник: trafficcardinal.com