Halo kabeh! Ing sawetara titik nalika sinau, sampeyan pengin pindhah saka ngrampungake masalah menyang nggawe proyek nyata sing bakal dadi basis portofolio sampeyan. Nalika aku miwiti internship (sing aku banget nyaranake kanggo kabeh wong), aku nampa tawaran kanggo nulis bot telegram minangka freelancer. Amarga sethithik kawruhku, aku nulis bot sing cukup prasaja ( komitmen pungkasan sadurunge migrasi menyang Spring ), sing ngemot telung utas:
lan Telegram API : Perpustakaan TelegramBots-Spring-Boot-Starter kalebu Spring Boot lan Telegram API. Nggunakake ngidini kita ngumumake bot ing kode kita kanthi cara sing cukup prasaja, lan Spring dhewe bakal nggawe Bean lan ngaktifake bot kasebut. Yen sampeyan kasengsem ing apa sing kedadeyan ing wektu iki, banjur deleng sumber perpustakaan (ing lingkungan pangembangan utawa ing Github ). Kita uga nambah paramèter kompilasi: Aja lali nganyari kabeh dependensi sawise ngisi pom! Ayo nggawe rong kelas - App lan Bot, uga file application.yaml ing folder sumber daya. Struktur proyekku katon kaya iki: Ing tahap iki, ayo nambahake kredensial bot kita menyang application.yaml:
- pesen nampa thread;
- thread ngirim pesen;
- Utas jadwal acara (mriksa pesen sing dijadwal lan data cache sing dianyari saka JSON).
bot:
name: JavaRushTelegramBot
token: 22313424:AAF4gck4D8gDhq68E7k0UH8vlyQADhxQhYo
Notasi hierarki ngidini kita ngindhari pengulangan (bot.name, bot.token) lan nambah keterbacaan. Yen sampeyan durung nggawe bot, sampeyan bisa nggawe bot kanthi nuruti instruksi resmi . Yen sampeyan ora pengin nampilake kredensial bot ing application.yaml (sing bener), gunakake variabel lingkungan nalika nyebarake:
bot:
name: ${BOT_NAME}
token: ${BOT_TOKEN}
Ngisi kelas 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;
}
}
Isi kelas 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);
}
}
Yen kita nindakake kabeh kanthi bener, mula kita bisa mbukak utama lan ngucapake salam marang bot kita. siyap! Kita wis sukses nulis lan ngluncurake bot telegram sing ngucapake salam kanggo saben pesen sing mlebu. Yen artikel iki migunani kanggo sampeyan, matur nuwun sing paling apik yen sampeyan ndeleng gudangku lan ninggalake bintang. Ing kana sampeyan uga bakal nemokake versi bot telegramku, sing nduweni akeh fitur menarik:
- nyimpen pangguna ing database Postgres;
- wewenang akses menyang printah adhedhasar peran pangguna;
- nggunakake anotasi khusus @BotCommand lan @RequiredRoles kanggo nggawe pawang pesen lan mriksa hak pangguna;
- dhukungan kanggo nggawe jadwal kabar.
GO TO FULL VERSION