Привет, читатель.
Сегодня мы будем писать простейшего бота Telegram, который будет отвечать на команды. Такая статья была, но писали бота на Питоне.
1. Виртуальная машина хоть и долгая, но если обрабатывать события в несколько потоков, то будет работать быстро.(Вообще для многих серверов/мультиплеерных игр в одном потоке не всегда получится обрабатывать события, в Jav'e сделать это гораздо проще)
2. Наличие хорошей документации и Javadoc'ов, которые можно сделать для всех библиотек(не только для системных)
0. А что такое «бот»?
Бот — это профиль в соцсети/мессенджере(в данном случае Telegram) который отвечает на команды.( В любом случае все действия буду происходить после выполнения команды)
Тип чата с ботом — это переписка 1 на 1.
1.С чего же начинать?
Здесь качать библиотеку Telegram(обязательно with-dependiciens)
IDE можно выбрать любую, я бы порекомендовал eclipse.
Импотрируем библиотеку Телеграма и приступаем.
2.Наследование бота
Для того чтобы отвечать на команды, класс должен наследовать TelegramLongPillingBot
Создаём класс:
И пишем в него:
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:
Когда мы запустили бота, зарегистрировали и получили токен у BotFather, то мы можем написать ему /start и увидеть что всё работает. Но бот будет работать только когда он запущен.(Много ему не нужно, за 50-100 рублей/месяц на
Спасибо всем за просмотр!
Автор: весёлый усач