Kamusta kayong lahat! Sa ilang mga punto sa iyong pag-aaral, gusto mong lumipat mula sa paglutas ng mga problema sa paglikha ng mga tunay na proyekto na magiging batayan ng iyong portfolio. Noong sinimulan ko ang aking internship (na lubos kong inirerekomenda sa lahat), nakatanggap ako ng alok na magsulat ng telegram bot bilang isang freelancer. Dahil sa kaunting kaalaman ko, nagsulat ako ng medyo simpleng bot ( ang huling commit bago lumipat sa Spring ), na naglalaman ng tatlong thread:
at Telegram API : Kasama sa TelegramBots-Spring-Boot-Starter library ang Spring Boot at Telegram API. Ang paggamit nito ay nagpapahintulot sa amin na magdeklara ng bot sa aming code sa medyo simpleng paraan, at ang Spring mismo ang gagawa ng Bean at i-activate ang bot. Kung interesado ka sa kung ano ang nangyayari sa ilalim ng hood sa sandaling ito, pagkatapos ay tingnan ang mga mapagkukunan ng library (sa kapaligiran ng pag-unlad o sa Github ). Nagdaragdag din kami ng mga parameter ng compilation: Huwag kalimutang i-update ang lahat ng dependencies pagkatapos punan ang pom! Gumawa tayo ng dalawang klase - App at Bot, pati na rin ang application.yaml file sa folder ng resources. Ang istraktura ng aking proyekto ay ganito: Sa yugtong ito, idagdag natin ang mga kredensyal ng ating bot sa application.yaml:
- thread ng pagtanggap ng mensahe;
- thread ng pagpapadala ng mensahe;
- thread ng pag-iiskedyul ng kaganapan (nag-check ito para sa mga naka-iskedyul na mensahe at na-update ang naka-cache na data mula sa JSON).
bot:
name: JavaRushTelegramBot
token: 22313424:AAF4gck4D8gDhq68E7k0UH8vlyQADhxQhYo
Nagbibigay-daan sa amin ang hierarchical notation na maiwasan ang pag-uulit (bot.name, bot.token) at pagbutihin ang pagiging madaling mabasa. Kung hindi ka pa nakakagawa ng bot, maaari kang gumawa ng isa sa pamamagitan ng pagsunod sa mga opisyal na tagubilin . Kung ayaw mong ipakita ang mga kredensyal ng bot sa application.yaml (na tama), gumamit ng mga variable ng kapaligiran kapag nagde-deploy:
bot:
name: ${BOT_NAME}
token: ${BOT_TOKEN}
Pagpuno sa klase ng Bot:
package com.whiskels.telegram.bot;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.telegram.telegrambots.bots.TelegramLongPollingBot;
import org.telegram.telegrambots.meta.api.methods.send.SendMessage;
import org.telegram.telegrambots.meta.api.objects.Update;
import org.telegram.telegrambots.meta.exceptions.TelegramApiException;
// Аннотация @Component необходима, чтобы наш класс распознавался Spring, How полноправный Bean
@Component
// Наследуемся от TelegramLongPollingBot - абстрактного класса Telegram API
public class Bot extends TelegramLongPollingBot {
// Аннотация @Value позволяет задавать meaning полю путем считывания из application.yaml
@Value("${bot.name}")
private String botUsername;
@Value("${bot.token}")
private String botToken;
/* Перегружаем метод интерфейса LongPollingBot
Теперь при получении messages наш бот будет отвечать сообщением Hi!
*/
@Override
public void onUpdateReceived(Update update) {
try {
execute(new SendMessage().setChatId(update.getMessage().getChatId())
.setText("Hi!"));
} catch (TelegramApiException e) {
e.printStackTrace();
}
}
// Геттеры, которые необходимы для наследования от TelegramLongPollingBot
public String getBotUsername() {
return botUsername;
}
public String getBotToken() {
return botToken;
}
}
Punan ang klase ng App:
package com.whiskels.telegram;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.telegram.telegrambots.ApiContextInitializer;
// Аннотация, которая объединяет в себя @Configuration, @EnableAutoConfiguration, @ComponentScan
@SpringBootApplication
public class App {
public static void main(String[] args) {
// Здесь code написан по заветам
// https://github.com/rubenlagus/TelegramBots/tree/master/telegrambots-spring-boot-starter
ApiContextInitializer.init();
SpringApplication.run(App.class, args);
}
}
Kung ginawa namin ang lahat ng tama, maaari naming patakbuhin ang main at kumusta sa aming bot. handa na! Matagumpay naming naisulat at nailunsad ang isang telegram bot na nagsasabing kumusta sa bawat papasok na mensahe. Kung ang artikulong ito ay kapaki-pakinabang sa iyo, kung gayon ang pinakamahusay na salamat ay kung titingnan mo ang aking repositoryo at mag-iiwan ng bituin. Doon ay makikita mo rin ang aking bersyon ng telegram bot, na mayroong maraming kawili-wiling mga tampok:
- pag-iimbak ng mga user sa isang database ng Postgres;
- awtorisasyon ng pag-access sa mga command batay sa mga tungkulin ng user;
- paggamit ng mga custom na anotasyon @BotCommand at @RequiredRoles upang lumikha ng mga humahawak ng mensahe at suriin ang mga karapatan ng user;
- suporta para sa paggawa ng iskedyul ng notification.
GO TO FULL VERSION