Отправляем сообщения в Telegram из java — Задание 61. Бот для телеграмма

Задание: реализовать программу-бота для телеграмма, которая будет отвечать на запросы пользователя (обычного человека, использующего телеграмм) и предоставлять для него полезную информацию.

Тема-пример этой статьи Бот-эхо

:

  • Бот отвечает таким же сообщением, какое пользователь отправил
  • Бот шлет Привет! Как дела? в 22:39 каждый день

Тема на оценку Бот-Remembrall:

  • Боту можно отправить сообщение о чем-то важном, например 20:00 загамать в доту, 5 марта сделать дз по информатике
  • Бот предупредит о важном событии в указанное время (или за день до даты)
  • Придумать какую-нибудь дополнительную полезную функциональность
  • Опционально Напоминание может содержать геотег (метку на карте)
  • Опционально Предупреждать за N минут до звонка (N — настраиваемое)
  • Опционально Да что угодно!

Альтернативные темы:

  • Генератор мемов (пользователь выбирает картинку и указывает текст для наложения)
  • Оповещатель о новых сообщениях в vkontakte
  • Выдаватель новых/случайных анекдотов/новостей из указанной пользователем группы vkontakte

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

В инструкции описано как сделать бота на Java, но Python для данной задачи на мой взгляд подходит лучше, так что любой другой язык для этого задания разрешен. Здесь есть ссылки для многих языков.

Дедлайн:

TBA

1) Про ботов

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

2) Регистрация бота

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

Для этого надо открыть https://telegram.me/botfather и нажать SEND MESSAGE, это откроет BotFather в установленном Телеграмме.

Теперь надо попросить у него выдать для нас идентификатор (и сделать это с уважением):

  • /start
  • /newbot
  • Указать имя бота, например PolarNickTestBot
  • Указать username оканчивающийся на _bot, например polar_nick_test_bot
  • В ответ вам будет выслан HTTP API (в дальнейшем ключ бота), что-то вроде 332239602:AAHGJSrMvTxVm239c3JJzHaz239mXyEE9tI

3) Библиотека Telegram API

Все взаимодействие с серверами телеграмма обернуто в нескольких удобных библиотеках, в рамках данной статьи предлагается использовать данную библиотеку — TelegramBots.

Создайте пустой проект, назвав его например TelegramEcho.

Скачайте отсюда файл telegrambots-<версия>-jar-with-dependencies.jar.

Теперь эту библиотеку надо подключить к проекту:

  1. File->Project Structure->Libraries
  2. Зеленый плюсик сверху слева -> Java
  3. Указать скачанный файл, нажать Ok

4) Простой echo-bot

Создаем какой-нибудь класс и пишем в нем main-функцию — точку входа в приложение:

public static void main(String[] args) {

Наследуем наш класс от TelegramLongPollingBot. Например:

public class MyTelegramBot extends TelegramLongPollingBot {

Не забываем все ошибки Cannot resolve symbol решать через Alt+Enter->Import class.

В данном случае появится в том числе ошибка Class must either be declared abstract or implement abstract method.... Надо реализовать эти методы, по аналогии с тем как мы это делали при обработки нажатия кнопок/движения мышек/получения сообщений в задании 41 (Alt+Enter -> Implement methods).

В main-функции надо инициализировать библиотеку и запустить наш бот:

Теперь надо действительно реализовать те абстрактные методы, которые нам достались в наследство. Два из них заполняются тривиально — теми значениями, которые вы указали или получили на шаге 2 (в процессе регистрации бота):

Осталось делать что-нибудь, когда бот получает сообщения. Это делается в onUpdateReceived:

Но просто записывать в консоль полученное сообщение не интересно. Давайте ответим пользователю этим же сообщением в ответ:

Еще например можно было бы отправлять это сообщение как «ответ» на входящее сообщение:

sendMessage.setReplyToMessageId(message.getMessageId());

5) Дополнительные материалы

Взаимодействие с vkontakte: для этого есть библиотека, которая оборачивает взаимодействие с API. С помощью этой библиотеки можно написать бота для vkontakte.

Забор информации с произвольного сайта: для этого надо выкачивать соответствующую html-страницу, и из нее извлекать информацию. Помочь может например библиотека jsoup. Примеры работы с этой библиотеки можно нагуглить, например это.

6) Отправка задания

ВАЖНО Обратите внимание, что API-ключ бота дает доступ и контроль над ботом. Поэтому если кто-то получит доступ к этому ключу — он сможет перехватить контроль над ботом. Поэтому при отправки кода мне или кому-либо еще — обязательно удалите API-ключ бота из исходников.

Отправляйте выполненное задание ввиде zip-архива src папки, и пожалуйста:

Поделиться:
Нет комментариев

Добавить комментарий

Ваш e-mail не будет опубликован. Все поля обязательны для заполнения.

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.