Админка для телеграмм бот своими руками

Инструкция: Как создавать ботов в Telegram

24 июня разработчики Telegram открыли платформу для создания ботов. Новость кого-то обошла стороной Хабр, однако многие уже начали разрабатывать викторины. При этом мало где указаны хоть какие-то примеры работающих ботов.

Прежде всего, бот для Telegram — это по-прежнему приложение, запущенное на вашей стороне и осуществляющее запросы к Telegram Bot API. Причем API довольное простое — бот обращается на определенный URL с параметрами, а Telegram отвечает JSON объектом.

Рассмотрим API на примере создания тривиального бота:

1. Регистрация

Прежде чем начинать разработку, бота необходимо зарегистрировать и получить его уникальный id, являющийся одновременно и токеном. Для этого в Telegram существует специальный бот — @BotFather.

Пишем ему /start и получаем список всех его команд.
Первая и главная — /newbot — отправляем ему и бот просит придумать имя нашему новому боту. Единственное ограничение на имя — оно должно оканчиваться на «bot». В случае успеха BotFather возвращает токен бота и ссылку для быстрого добавления бота в контакты, иначе придется поломать голову над именем.

Для начала работы этого уже достаточно. Особо педантичные могут уже здесь присвоить боту аватар, описание и приветственное сообщение.

Не забудьте проверить полученный токен с помощью ссылки /getMe»>api.telegram.org/bot /getMe, говорят, не всегда работает с первого раза.

2. Программирование

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

Telegram позволяет не делать выгрузку сообщений вручную, а поставить webHook, и тогда они сами будут присылать каждое сообщение. Для Python, чтобы не заморачиваться с cgi и потоками, удобно использовать какой-нибудь реактор, поэтому я для реализации выбрал tornado.web. (для GAE удобно использовать связку Python2+Flask)

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

Приложение торнадо для обработки запросов принимает класс tornado.web.RequestHandler, в котором и будет логика бота.

Здесь CMD — словарь доступных команд, а send_reply — функция отправки ответа, которая на вход принимает уже сформированный объект Message.

Собственно, её код довольно прост:

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

3. Команды

Перво-наперво, необходимо соблюсти соглашение Telegram и научить бота двум командам: /start и /help:

Структура message[‘from’] — это объект типа User, она предоставляет боту информацию как id пользователя, так и его имя. Для ответов же полезнее использовать message[‘chat’][‘id’] — в случае личного общения там будет User, а в случае чата — id чата. В противном случае можно получить ситуацию, когда пользователь пишет в чат, а бот отвечает в личку.

Команда /start без параметров предназначена для вывода информации о боте, а с параметрами — для идентификации. Полезно её использовать для действий, требующих авторизации.

После этого можно добавить какую-нибудь свою команду, например, /base64:

Для пользователей мобильного Telegram, будет полезно сказать @BotFather, какие команды принимает наш бот:
I: /setcommands
BotFather : Choose a bot to change the list of commands.
I: @******_bot
BotFather: OK. Send me a list of commands for your bot. Please use this format:

Читайте также:  Как сделать ваз 2114 красивее своими руками

command1 — Description
command2 — Another description
I:
whoisyourdaddy — Information about author
base64 — Base64 decode
BotFather: Success! Command list updated. /help

C таким описанием, если пользователь наберет /, Telegram услужливо покажет список всех доступных команд.

4. Свобода

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

UPD: Как верно подсказали, такое пройдет только при личном общении. В чатах боту доставляются только сообщения, начинающиеся с команды (/ ) (https://core.telegram.org/bots#privacy-mode)

  • All messages that start with a slash ‘/’ (see Commands above)
  • Messages that mention the bot by username
  • Replies to the bot’s own messages
  • Service messages (people added or removed from the group, etc.)

Чтобы бот получал все сообщения в группах пишем @BotFather команду /setprivacy и выключаем приватность.

Для начала в Handler добавляем обработчик:

А потом в список команд добавляем псевдо-речь:

Здесь эмпирическая константа 75 относительно неплохо отражает вероятность того, что пользователь всё-таки хотел сказать. А format_map — удобна для одинакового описания строк как требующих подстановки, так и без нее. Теперь бот будет отвечать на приветствия и иногда даже обращаться по имени.

5. Не текст.

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

Для примера расширим словарь RESPONSES:

И будем отлавливать текст :

Видно, что теперь структура Message уже не содержит текст, поэтому необходимо модифицировать send_reply:

И все, теперь бот будет время от времени присылать стикер вместо времени:

6. Возможности

Благодаря удобству API и быстрому старту боты Telegram могут стать хорошей платформой для автоматизации своих действий, настройки уведомлений, создания викторин и task-based соревнований (CTF, DozoR и прочие).

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

7. Ограничения

К сожалению, на данный момент существует ограничение на использование webHook — он работает только по https и только с валидным сертификатом, что, например для меня пока критично за счет отсутствия поддержки сертифицирующими центрами динамических днс.

К счастью, Telegram также умеет работать и по ручному обновлению, поэтому не меняя кода можно создать еще одну службу Puller, которая будет выкачивать их и слать на локальный адрес:

P.S. По пункту 7 нашел удобное решение — размещение бота не у себя, а на heroku, благо все имена вида *.herokuapp.com защищены их собственным сертификатом.

UPD: Telegram улучшили Бот Апи, из-за чего, теперь не обязательно иметь отдельную функцию для отправки сообщений при установленном вебхуке, а в ответ на POST запрос можно отвечать тем же сформированным JSON с ответным сообщением, где одно из полей устанавливается как ч ‘method’: ‘sendMessage’ (или любой другой метод, используемый ботом).

Источник

Телеграмм-бот для системного администратора

Телеграмм-бот для системных администраторов. Это ни в коем случае не готовый проект, в нем есть над чем поработать. Это полуфабрикат и набор приемов который каждый админ может подпиливать под свои разные задачи.

Читайте также:  Как сделать шаблон своими руками для столешницы

Прежде чем продолжать у вас должен быть токен бота, чтобы зарегистрировать своего ботика и получить токен нужно найти пользователя @BotFather и написать ему. Нас интересует команда /newbot после чего потребуется наименование и имя бота, можете писать все что хотите главное в конце приставьте _bot. Когда имя будет подобрано вам BotFather вернет вам токен и ссылку на бота для быстрого добавления. На этом бота регистрация бота заканчивается.

Для быстрого добавления бота и чтобы было возможно быстро добавить его к себе лучше всего использовать специальную ссылку начинающуюся с символа @, взять его можно в инфо:

если такую ссылку комуто переслать то он может просто кликнуть по ней чтобы открыть чат с вашим ботом

Готовые шаблоны админботов

  • небольшой — всего около 300 строк
  • может исполнять команды описанные в функции logic
  • может получать и отправлять сообщения
  • может принимать файлы
  • есть проверка по паролю
  • ведет лог присланых команд
  • может открывать несколько сессий для одновременной работы (реализовано не полностью. Но взаимодействовать несколько человек одновременно могут

Минусы:

  • слишком простая авторизация. Пароль останется в чате на устройстве. Не может отличить устройства

скачать простого бота можно вот отсюда, в архиве содержится: 1. хелп с примерами разметки текста; 2. исходник

Для запуска нужно получить токен бота у BotFather как описывается в начале статьи и прописать в переменную $token скрипта. Работать должно сразу.

Функционал добавлять в функцию logic

  • Небольшой — всего около 450 строк
  • Может исполнять команды описанные в функции logic
  • Может получать и отправлять сообщения
  • Может принимать файлы
  • Есть проверка по паролю, может дополнительно проверять chat_id
  • Ведет лог присланых команд
  • Может открывать несколько сессий для одновременной работы (реализовано не полностью. На последнем этапе прикручивалась консоль, если работать в ней то у других пользователей будет зависание и может быть кик по таймауту.

Функционал который был реализован для примера:

  • Может принимать файлы, складывает их в папочку
  • Может показывать файлы из папочки
  • Может удалять файлы из папки загрузки
  • Может запускать файл на исполнение (посредством start-process)
  • Показывает список серверов с которым производится работа (просто список имен в текстовом файле)
  • Пингует серверы из списка и показывает какие из них онлайн
  • Отключает компы из списка
  • Показывает пользователей залогинившихся на терминал, делает вызов внешнего скрипта (нужно установить на терминал PSTerminalServices)
  • Делает logoff пользователя на терминале. Входишь в режим консоли и потом пишешь имена пользователей (нужно установить на терминал PSTerminalServices)
  • Делает скриншот того компа на котором запущен (но не передает обратно)
  • Открывает ssh-сессию с устройством в сети и переходит в режим ввода команд (для примера кредиталы и адрес жестко зашиты в скрипт. Для работы требует установки на машину с которой будет вестись управление модуля работы с ssh poshSSH)

Из того, что не было реализовано, но хотелось бы:

  • Обратная передача файлов (напишите кто знает как это сделать через powershell)
  • Неполноценная поддержка многопользовательской работы
  • Неполноценный режим консоли

Скачать бота можно вот отсюда, в архиве содержится:
1. хелп с примерами разметки текста;
2. конфигурационный файл config.csv;
3. сам бот — abormot.ps1;
4. набор вспомогательный файлов;
5. список компов для работы в текстовом файле ping-list.txt

Читайте также:  Интересные штучки для дачи своими руками

Для запуска нужно получить токен бота у BotFather как описывается в начале статьи и прописать в конфигурационном файле config.csv. Работать должно сразу.

Функционал добавлять в функцию logic

В некоторых организациях по требованиям иб если пароль введен неверное определенное количество раз то лочится учетная запись на определенное время. Чтобы снять лок пользователь должен позвонить админу. Этот бот сделан так что ему можно написать имя учетной записи и он ее разблокирует, но не более 3х раз в сутки. При превышении лимита он перенаправит пользователя к системному администратору и отправит оповещение ему в чат.

Для запуска нужно получить токен бота у BotFather прописать токен в переменную $token. Выставить номер чата админа в $adminChatID. Прописать адрес доменной машины и кредиталы к ней:

Я встроил в примере функцию unlock прямо в скрипт, для постоянного использования лучше создать реакцию на событие в журнале и самому генерировать это событие. По событию будет запускаться скрипт unlock из места которое доступно только админам, так вы не забудете пароль от домена в скрипте. Это важно.

Например нам нужно пробрасывать в общий ресурс фотографии от пользователей на выезде, или просто принимать файлы и знать от кого они пришли и кому отправить. Ниже пример бота принимающего фотографии от знакомых ему пользователей

Для запуска нужно получить токен бота у BotFather прописать токен в переменную $token, прописать ваш чат в switch 235 строки. Работать должно сразу. Не забудьте добавить нужный вам чат в switch

Как работать с bot api

1. Принять сообщение

Нужно выполнить Invoke-WebRequest на адрес

— токен бота полученный от BotFather
— для первого сообщения 0, для последующих номер последнего + 1. Если указывать последний номер то будете получать при каждом обращении последнее сообщение.
— время которое телеграмм подождет ответа если его нет прежде чем вернуть обратно пустую структуру. Годится для создания задержки в боте. Я использовал в ботиках задержку в 1 секунду чтобы не ждать на отладке.
на выходе получим структуру JSON которую парсим при помощи ConvertFrom-Json

На выходе в объекте $obj будет сообщение и от кого оно пришло

2. Скачать файл

Если передается файл то в структуре JSON будут переданы дополнительные параметры. Чтобы получить файл нужно вытащить file_id из сообщения, затем обратится по адресу:

Запрос вернет структуру JSON содержащую путь для скачивания. Далее скачиваем файл по ссылке

Предположим что нам передали файл, тогда код для его скачивания будет выглядеть так:

3. Написать что-нибудь

Телеграмм-бот поддерживает 2 режима разметки текста markdown и html.

Внимание: в html-режиме тэг br не поддерживается

*bold text* — жирный текст
_italic text_ — наклонный текст
[text](http://www.example.com/) — ссылка
`inline fixed-width code` — фиксированный

текстовый блок
«`text
pre-formatted fixed-width code block
«`

Для переноса строк используйте последовательность %0A

Пример отправки сообщения

Если данный код даст ошибку например при отправке строки вот такого типа:

Можно использовать метод отправки посложнее:

Если кто знает, как закачать файл обратно — скиньте, я дополню.

Источник

Оцените статью