Простой бот Telegram на Java с нуля
Ожидает приглашения
Привет, читатель.
Сегодня мы будем писать простейшего бота Telegram, который будет отвечать на команды. Такая статья была, но писали бота на Питоне.
0. А что такое «бот»?
Бот — это профиль в соцсети/мессенджере(в данном случае Telegram) который отвечает на команды.( В любом случае все действия буду происходить после выполнения команды)
Тип чата с ботом — это переписка 1 на 1.
1.С чего же начинать?
Здесь качать библиотеку Telegram(обязательно with-dependiciens)
IDE можно выбрать любую, я бы порекомендовал eclipse.
Импотрируем библиотеку Телеграма и приступаем.
2.Наследование бота
Для того чтобы отвечать на команды, класс должен наследовать TelegramLongPillingBot
Создаём класс:
![image](https://habrastorage.org/r/w1560/web/da3/f80/88b/da3f8088ba47442f81a0fa2f87b7d2b6.png)
И пишем в него:
Получить токен и username можно вбив в поиск @BotFather и написать ему /newbot
3.Как же нам добавить в него что-нибудь?
В телеграме нет «приветствующего сообщения», но когда мы нажимаем кнопку «Start» чтобы начать общение с ботом, то автоматом прописывается команда "/start", поэтому для начала добавим именно её. В telegramapi нету метода отправить сообщение по типу send(строка), но мы его создадим, после всех войдов пишем:
А в UpdateReceived дописываем это:
4.Ура, всё получилось, как запустить?
Можно в Runnable JAR File так как у нас есть метод main, но лучше запускать прямо из IDE:
![image](https://habrastorage.org/r/w1560/web/3db/5be/4be/3db5be4bea494a35b612c56a80988954.png)
Когда мы запустили бота, зарегистрировали и получили токен у BotFather, то мы можем написать ему /start и увидеть что всё работает. Но бот будет работать только когда он запущен.(Много ему не нужно, за 50-100 рублей/месяц на хостинге можно держать). Также с помощью Telegram API можно отправлять картинки, создавать inline-ботов с кнопками и многое другое, но о этом уже в продолжении…
Спасибо всем за просмотр!
Важно для прочтения!
Если ты не против, то изучи ООП и Jav'y прежде, чем учить другие библиотеки. Ибо ты не будешь браться за физику, не выучив математику. Тут то же самое.
Сегодня мы будем писать простейшего бота Telegram, который будет отвечать на команды. Такая статья была, но писали бота на Питоне.
Почему я выбрал именно Jav'y
Java в плане ботов, серверов, плагинов да и вообще программ будет удобнее для меня.
1. Виртуальная машина хоть и долгая, но если обрабатывать события в несколько потоков, то будет работать быстро.(Вообще для многих серверов/мультиплеерных игр в одном потоке не всегда получится обрабатывать события, в Jav'e сделать это гораздо проще)
2. Наличие хорошей документации и Javadoc'ов, которые можно сделать для всех библиотек(не только для системных)
1. Виртуальная машина хоть и долгая, но если обрабатывать события в несколько потоков, то будет работать быстро.(Вообще для многих серверов/мультиплеерных игр в одном потоке не всегда получится обрабатывать события, в Jav'e сделать это гораздо проще)
2. Наличие хорошей документации и Javadoc'ов, которые можно сделать для всех библиотек(не только для системных)
0. А что такое «бот»?
Бот — это профиль в соцсети/мессенджере(в данном случае Telegram) который отвечает на команды.( В любом случае все действия буду происходить после выполнения команды)
Тип чата с ботом — это переписка 1 на 1.
1.С чего же начинать?
Здесь качать библиотеку Telegram(обязательно with-dependiciens)
IDE можно выбрать любую, я бы порекомендовал eclipse.
Импотрируем библиотеку Телеграма и приступаем.
2.Наследование бота
Для того чтобы отвечать на команды, класс должен наследовать TelegramLongPillingBot
Создаём класс:
![image](https://habrastorage.org/web/da3/f80/88b/da3f8088ba47442f81a0fa2f87b7d2b6.png)
И пишем в него:
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](https://habrastorage.org/web/3db/5be/4be/3db5be4bea494a35b612c56a80988954.png)
Когда мы запустили бота, зарегистрировали и получили токен у BotFather, то мы можем написать ему /start и увидеть что всё работает. Но бот будет работать только когда он запущен.(Много ему не нужно, за 50-100 рублей/месяц на хостинге можно держать). Также с помощью Telegram API можно отправлять картинки, создавать inline-ботов с кнопками и многое другое, но о этом уже в продолжении…
Спасибо всем за просмотр!