Простой бот Telegram на Java с нуля

Привет, читатель.

Важно для прочтения!
Если ты не против, то изучи ООП и Jav'y прежде, чем учить другие библиотеки. Ибо ты не будешь браться за физику, не выучив математику. Тут то же самое.

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

Почему я выбрал именно Jav'y
Java в плане ботов, серверов, плагинов да и вообще программ будет удобнее для меня.

1. Виртуальная машина хоть и долгая, но если обрабатывать события в несколько потоков, то будет работать быстро.(Вообще для многих серверов/мультиплеерных игр в одном потоке не всегда получится обрабатывать события, в Jav'e сделать это гораздо проще)

2. Наличие хорошей документации и Javadoc'ов, которые можно сделать для всех библиотек(не только для системных)

0. А что такое «бот»?

Бот — это профиль в соцсети/мессенджере(в данном случае Telegram) который отвечает на команды.( В любом случае все действия буду происходить после выполнения команды)

Тип чата с ботом — это переписка 1 на 1.

1.С чего же начинать?

Здесь качать библиотеку Telegram(обязательно with-dependiciens)

IDE можно выбрать любую, я бы порекомендовал eclipse.

Импотрируем библиотеку Телеграма и приступаем.

2.Наследование бота
Для того чтобы отвечать на команды, класс должен наследовать TelegramLongPillingBot

Создаём класс:

image

И пишем в него:

package ru.thematdev.bot;

import org.telegram.telegrambots.api.objects.Update;
import org.telegram.telegrambots.bots.TelegramLongPollingBot;

public class Example extends TelegramLongPollingBot{
        public static void main(String[] args) {
	ApiContextInitializer.init(); // Инициализируем апи
	TelegramBotsApi botapi = new TelegramBotsApi();
	try {
		botapi.registerBot(new Bot());
	} catch (TelegramApiException e) {
		e.printStackTrace();
	}
	}
	@Override
	public String getBotUsername() {
		return "USER";
                //возвращаем юзера
	}

	@Override
	public void onUpdateReceived(Update e) {
		// Тут будет то, что выполняется при получении сообщения
	}

	@Override
	public String getBotToken() {
		return "YOUR_BOT_TOKEN";
                //Токен бота
	}

}

Получить токен и username можно вбив в поиск @BotFather и написать ему /newbot

3.Как же нам добавить в него что-нибудь?

В телеграме нет «приветствующего сообщения», но когда мы нажимаем кнопку «Start» чтобы начать общение с ботом, то автоматом прописывается команда "/start", поэтому для начала добавим именно её. В telegramapi нету метода отправить сообщение по типу send(строка), но мы его создадим, после всех войдов пишем:

	@SuppressWarnings("deprecation") // Означает то, что в новых версиях метод уберут или заменят
	private void sendMsg(Message msg, String text) {
		SendMessage s = new SendMessage();
		s.setChatId(msg.getChatId()); // Боту может писать не один человек, и поэтому чтобы отправить сообщение, грубо говоря нужно узнать куда его отправлять
		s.setText(text);
		try { //Чтобы не крашнулась программа при вылете Exception 
			sendMessage(s);
		} catch (TelegramApiException e){
			e.printStackTrace();
		}
	}

А в UpdateReceived дописываем это:

		Message msg = e.getMessage(); // Это нам понадобится
		String txt = msg.getText();
		if (txt.equals("/start")) {
			sendMsg(msg, "Hello, world! This is simple bot!"); 
		}

4.Ура, всё получилось, как запустить?
Можно в Runnable JAR File так как у нас есть метод main, но лучше запускать прямо из IDE:

image

Когда мы запустили бота, зарегистрировали и получили токен у BotFather, то мы можем написать ему /start и увидеть что всё работает. Но бот будет работать только когда он запущен.(Много ему не нужно, за 50-100 рублей/месяц на хостинге можно держать). Также с помощью Telegram API можно отправлять картинки, создавать inline-ботов с кнопками и многое другое, но о этом уже в продолжении…

Спасибо всем за просмотр!
Метки:
Telegram, bot, telegram api