Телеграм бот на Java. Часть 1
Здравствуйте уважаемые подписчики и, просто проходившие мимо и заглянувшие на огонек, участники платформы Голос!
Сегодня я поделюсь своими мытарствами в плане написания бота для Телеграм. Как вы знаете я еще только учусь программированию на Java и мои посты - это не уроки, а всего лишь отражение моих мыслей при написании приложений. Честно говоря сам не до конца понял что сейчас написал, ну да ладно :) Итак, мысль о написании бота для своих нужд посещала меня уже неоднократно. Я упорно гуглил уроки по этой теме, но поиск выдавал только похожие темы для других языков программирования, а в частности это Pythom, JavaScript и PHP. Если и находил, то лишь уже готовый исходник, который был не очень хорошо комментирован.
И вот наконец я нашел серию неплохих вроде бы уроков по написанию простого бота на Java. Она правда на английском, но даже я смог для себя уловить основные моменты. Для написания бота используется библиотека telegrambots-3.1.0. Так как у меня нет сервера со статическим IP - адресом, то мой бот будет обращаться к серверам Телеграм с помощью Long Polling. В уроке нам предлагается написать так называемого эхо-бота, который отсылает нам наши же сообщения. Если вы уже интересовались данной темой, то знаете что все боты в Телеграм необходимо зарегистрировать у @BotFather. После регистрации он нам выдаст Токен бота, который мы должны будем использовать в запросах к Телеграм.
Не вижу смысла копипастить сюда исходник бота из урока. Я вам покажу только то что получилось у меня, когда я внес свои изменения в код. Мой бот по команде /time выдает мне в чат текущее время, все остальные сообщения он отсылает в пересылает обратно. В ближайшее время в планах привязать к нему показ курса выбранных пар с криптовалютной биржи, а также показ открытых и выполненных ордеров. Я мельком посмотрел как это делается и увидел что это все те же api запросы с последующим разбором JSON - ответов. Ну и наконец исходник бота :)
/**
* Created by Kovatelj on 06.07.2017.
*/
import org.telegram.telegrambots.api.methods.send.SendMessage;
import org.telegram.telegrambots.api.objects.Update;
import org.telegram.telegrambots.bots.TelegramLongPollingBot;
import org.telegram.telegrambots.exceptions.TelegramApiException;
import java.util.Date;
public class telegramBot extends TelegramLongPollingBot {
@Override
public void onUpdateReceived(Update update) {
// We check if the update has a message and the message has text
if (update.hasMessage() && update.getMessage().hasText()) {
// Set variables
Date currentDate = new Date();
String message_text = update.getMessage().getText();
long chat_id = update.getMessage().getChatId();
if (message_text.equals("/time")) {
String messageSend = currentDate.toString();
SendMessage message = new SendMessage().setChatId(chat_id).setText(messageSend);
try {
sendMessage(message); // Sending our message object to user
} catch (TelegramApiException e) {
e.printStackTrace();
}
} else {
String messageSend = message_text;
SendMessage message = new SendMessage().setChatId(chat_id).setText(messageSend);
try {
sendMessage(message); // Sending our message object to user
} catch (TelegramApiException e) {
e.printStackTrace();
}
}
}
}
@Override
public String getBotUsername() {
return "KoBaTeJIb_bot";
}
@Override
public String getBotToken() {
return "***************************************";
}
}
По понятным причинам токен я не стал выкладывать :) Надеюсь вам было интересно, буду продолжать писать этого бота дальше и рассказывать, что у меня из этого выходит :)
Подписывайтесь на мой блог! Всем спасибо и до новых встреч.