CodeGym /Blog Jawa /Acak /Nggawe Bot Telegram ing Jawa: saka konsepsi nganti panyeb...
John Squirrels
tingkat
San Francisco

Nggawe Bot Telegram ing Jawa: saka konsepsi nganti panyebaran

Diterbitake ing grup
Dadi apa bot? Sampeyan bisa maca liyane babagan iki kene . Kanggo miwiti, sampeyan kudu mriksa dokumentasi resmi kanggo perpustakaan sing digunakake kanggo ngembangake bot Telegram (sawise "API"). Bisa ditemokake ing kene .
Nggawe Bot Telegram ing Jawa: saka konsepsi nganti panyebaran - 1
Kabeh sing ana ing kono gampang diakses lan jelas. Iku misale jek kita mung bisa nulis kode lan bungah! Nanging ora dadi prasaja. Sawise mbuwang akeh wektu nggoleki, aku wis nemokake tidbits kawruh babagan pembangunan bot, contone, carane nggawe keyboard, nangani aCallbackQuery, lan liya-liyane. Nanging, aku ora nemokake pandhuan lengkap lan lengkap kanggo pangembangan bot Jawa. Sing njalari aku nulis artikel iki. Ana akeh situs web ing ngendi sampeyan bisa nggawe bot sing gampang disebarake dhewe. Nanging kasunyatane, akeh bot sing digawe nyedhiyakake informasi referensi lan liya-liyane. Bot kita minangka aplikasi web lengkap. Sampeyan bisa ngubungake database, nglakokake macem-macem panjalukan API, ngurai situs web, ngetung rumit, lan liya-liyane. Kemungkinan mung diwatesi dening imajinasi sampeyan. Muga-muga artikel ing ndhuwur bisa njlentrehake apa sing bakal daktulis. Gampang banget kanggo ndhaptar bot ing Telegram. Proses iki diterangake kanthi rinci ing dokumentasi sing disambung ing ndhuwur. Kanggo aplikasi kita, sampeyan mung kudu ngerti jeneng bot lan token sing ditampa nalika ndhaptar bot. pokoke, bot iku mung aplikasi web basis console. Ora ana mburi ngarep, mung pangolahan printah murni. Yen sampeyan pengin masterHibernate utawa sinau carane ngurai JSON , banjur iki proyek kanggo sampeyan. Ayo dadi miwiti kanthi nambah dependensi kanggo pom.xml(Aku bakal nganggep sampeyan nggunakake Maven). Sampeyan bisa nindakake kaya iki:

<dependency>
            <groupId>org.telegram</groupId>
            <artifactId>telegrambots</artifactId>
            <version>3.5</version>
</dependency>
Banjur gawe Botkelas sing marisi TelegramLongPollingBotkelas kasebut, lan ganti cara:

public class Bot extends TelegramLongPollingBot {

    /**
     * Method for receiving messages.
     * @param update Contains a message from the user.
     */
    @Override
    public void onUpdateReceived(Update update) {
    String message = update.getMessage().getText();
    sendMsg(update.getMessage().getChatId().toString(), message);
    }

    /**
     * Method for creating a message and sending it.
     * @param chatId chat id
     * @param s The String that you want to send as a message.
     */
    public synchronized void sendMsg(String chatId, String s) {
        SendMessage sendMessage = new SendMessage();
        sendMessage.enableMarkdown(true);
        sendMessage.setChatId(chatId);
        sendMessage.setText(s);
        try {
            sendMessage(sendMessage);
        } catch (TelegramApiException e) {
            log.log(Level.SEVERE, "Exception: ", e.toString());
        }
    }

    /**
     * This method returns the bot's name, which was specified during registration.
     * @return bot name
     */
    @Override
    public String getBotUsername() {
        return "BotName";
    }

    /**
     * This method returns the bot's token for communicating with the Telegram server
     * @return the bot's token
     */
    @Override
    public String getBotToken() {
        return "BotToken";
    }
}
Lan saiki isi mainmetode kasebut:

public static void main(String[] args) {
        ApiContextInitializer.init();
        TelegramBotApi telegramBotApi = new TelegramBotApi();
        try {
            telegramBotApi.registerBot(Bot.getBot());
        } catch (TelegramApiRequestException e) {
            e.printStackTrace();
        }
}
Sawise ngisi lan getBotUsername()cara getBotToken(), miwiti bot. Saiki, iki mung ngarahake pesen apa wae sing dikirim, kaya " pangilon ". Kerjane kaya mangkene: nalika sampeyan miwiti aplikasi kasebut, mula ngirim panjaluk menyang server Telegram, saben n detik, ing URL ing ngisor iki: https://api.telegram.org/BotToken/getMe , ing ngendi BotToken minangka token bot sampeyan. . Nanggepi, nampa JSON sing ngemot kabeh pesen. Saben pesen kasebut diproses dening perpustakaan lan diterusake menyang OnUpdateReceived(Update update)metode minangkaUpdateobyek. Lan sing kita bisa karo. Ing kene ana kaendahan bot Telegram: bisa mlaku ing komputer apa wae, nyoba mung mbutuhake aplikasi kasebut, lan sampeyan ora perlu nyebarake menyang host sawise saben owah-owahan. Iki trep banget. Mesthi, sampeyan bisa ngatur bot supaya bisa digunakake nggunakake webhooks. Sampeyan bisa nemokake pituduh ing Internet. Kanggo gamblang, kita bakal nggunakake LongPolling. Cara pesen diproses lan apa sing dikirim minangka respon mung diwatesi dening kemampuan basa lan perpustakaan. Kabeh liyane terserah sampeyan. Sampeyan bisa nggawe bot sing bakal nggoleki video YouTube kanggo sampeyan. Sampeyan bisa nggawe bot sing bakal ngirim apa sing sampeyan kirim saben dina, kaya kapsul wektu saka setahun kepungkur. Utawa sampeyan bisa sinau kanggo nggabungake karo sistem CRM lan nggawe bot kanggo bisnis cilik-sampeyan mung diwatesi dening bayangan sampeyan. Ngalih. Wong-wong sing wis nggunakake bot ngerti sing trep kanggo sesambungan karo wong-wong mau nggunakake printah sing diwiwiti karo karakter " /", contone /start,. Nanging ana cara sing luwih trep: tombol. Ana rong jinis tombol: sing katon ing kolom input ( ReplyKeyboardMarkup) lan tombol sing ana ing sangisore pesen sing disambungake (InlineKeyboardMarkup). Sampeyan bisa entuk pangerten dhasar saka deskripsi kasebut ing dokumentasi.

ReplyKeyboardMarkup

Ing kasunyatan, iki array saka tombol arrays List<KeyboardRow <KeyboardButton>>:. Iki kode conto sing nggawe keyboard:

public synchronized void setButtons(SendMessage sendMessage) {
        // Create a keyboard
        ReplyKeyboardMarkup replyKeyboardMarkup = new ReplyKeyboardMarkup();
        sendMessage.setReplyMarkup(replyKeyboardMarkup);
        replyKeyboardMarkup.setSelective(true);
        replyKeyboardMarkup.setResizeKeyboard(true);
        replyKeyboardMarkup.setOneTimeKeyboard(false);

        // Create a list of keyboard rows
        List<KeyboardRow> keyboard = new ArrayList<>();

        // First keyboard row
        KeyboardRow keyboardFirstRow = new KeyboardRow();
        // Add buttons to the first keyboard row
        keyboardFirstRow.add(new KeyboardButton("Hi"));

        // Second keyboard row
        KeyboardRow keyboardSecondRow = new KeyboardRow();
        // Add the buttons to the second keyboard row
        keyboardSecondRow.add(new KeyboardButton("Help");

        // Add all of the keyboard rows to the list
        keyboard.add(keyboardFirstRow);
        keyboard.add(keyboardSecondRow);
        // and assign this list to our keyboard
        replyKeyboardMarkup.setKeyboard(keyboard);
    }
Kita nelpon cara iki ing sendMsg()cara, sawise ngirim pesen. Iki carane nyiyapake keyboard kanggo pesen kasebut. Nalika kita ngirim pesen iki kanggo pangguna, dheweke bakal weruh teks pesen lan 2 tombol sing ngomong "Hi" lan "Bantuan" , siji ing sangisore liyane. Nalika salah siji tombol iki diklik, bot dikirim pesen sing ngemot teks tombol. Dadi, yen klien ngeklik "Bantuan" , bot bakal nampa pesen kanthi "Bantuan". Kanggo bot, bakal katon yen klien dhewe nulis "Bantuan" lan ngirim teks menyang bot. Banjur sampeyan ngolah pesen kasebut.

InlineKeyboardMarkup

Iki uga minangka array saka array. Iku padha karo Markup sadurungé, nanging logika dianggo sethitik beda kene. Jinis keyboard iki ditempelake ing pesen tartamtu lan ana mung kanggo iku. Mangkene cara kanggo nyetel keyboard inline:

private void setInline() {
        List<List<InlineKeyboardButton>> buttons = new ArrayList<>();
        List<InlineKeyboardButton> buttons1 = new ArrayList<>();
        buttons1.add(new InlineKeyboardButton().setText("Button").setCallbackData(17));
        buttons.add(buttons1);

        InlineKeyboardMarkup markupKeyboard = new InlineKeyboardMarkup();
        markupKeyboard.setKeyboard(buttons);
    }
Nggawe Listing List, lan nambah tombol inline kanggo baris pisanan. Tombol iki bisa ngemot URL, link menyang saluran, utawa CallbackQuery, sing bakal daktulis mengko. Iki ngendi kita nyetel teks tombol, sing bakal dideleng pangguna, banjur nyetel data sing bakal dikirim menyang bot. Ing conto kita, pangguna ndeleng "Hai", lan nalika tombol dipencet nomer 17 bakal dikirim menyang bot. Iki kita CallbackQuery. A sawetara tembung babagan CallbackQuery. Kanggo njupuk data iki saka Updateobyek, sampeyan kudu nglakokaké update.getCallbackQuery(). Cara iki ngasilake CallbackQuery, saka ngendi sampeyan bisa ngakses data sing dikirim menyang bot. Aja nyoba njupuk data iki liwat update.getMessage().getText()cara-sampeyan bakal entuk NullPointerException.

@Override
    public void onUpdateReceived(Update update) {
        if(update.hasMessage()) {
            ThreadClass thread = new ThreadClass(update.getMessage());
        } else  if(update.hasCallbackQuery()) {
            AnswerCallbackThread answerThread = new AnswerCallbackThread(update.getCallbackQuery());
        }
    }
Yen ana pesen, kita ngirim menyang thread anyar kanggo proses; yen ana CallbackQuery, kita ngirim menyang thread cocok kanggo Processing. Sampeyan bisa ngirim respon menyang a CallbackQuery. Saben obyek ing Telegram duwe id dhewe. Kanggo ngirim respon menyang tartamtu CallbackQuery, sampeyan mung kudu ngerti id sawijining, kang kita njaluk saka obyek sing cocog. Kanggo ngirim respon, kita nelpon cara iki:

public synchronized void answerCallbackQuery(String callbackId, String message) {
        AnswerCallbackQuery answer = new AnswerCallbackQuery();
        answer.setCallbackQueryId(callbackId);
        answer.setText(message);
        answer.setShowAlert(true);
        try {
            answerCallbackQuery(answer);
        } catch (TelegramApiException e) {
            e.printStackTrace();
        }
    }
PENTING:Tèks ing tanggepan CallbackQuerykudu ora luwih saka 200 karakter! Sawise ngirim respon kasebut, klien bakal weruh jendhela pop-up sing ngemot pesen kasebut. Jendhela iki bisa ilang sawetara detik sawise katon, utawa bisa tetep nganti pangguna menet OK. Kanggo ngalih mode, kita nelpon answer.setShowAlert(true)cara. Yen sampeyan pindhah truemenyang cara, jendhela tetep nganti OK ditekan. Yen sampeyan pass palsu, banjur ilang sawise 5 detik. Iki kabeh fitur dhasar perpustakaan Telegram Bot . Yen sampeyan pengin, sampeyan bisa sinau babagan carane ngirim multimedia, geolokasi, lsp. Ayo pindhah menyang deploying bot menyang platform hosting. Kanggo proyekku, aku milih Heroku. Aku mikir iku platform hosting sing rada trep karo CLI dhewe. Gratis, nanging ing rencana iki bot sampeyan bakal hibernate sawise 30 menit ora nampa panjaluk. Iku bakal tangi nalika panjalukan ditampa. Iki kedadeyan kanthi cepet, sampeyan ora bakal sok dong mirsani (kajaba, mesthi, sambungan database ora diwiwiti maneh). Rencana gratis diwatesi dening database 5MB, ruang disk 100MB, data 2TB saben wulan, lan 1 dyno. A dyno minangka aplikasi sing mlaku. Aku bakal langsung ngomong yen penyebaran sing nyebabake aku angel, amarga aku durung nate masang aplikasi sadurunge. Sajrone panyebaran, Heroku mbutuhake file sing jenenge Procfile (tanpa ekstensi). Kita nggawe ing ROOT project. Nang, kita nulis worker: sh target/bin/workerBot, ngendi workerBot jeneng kasebut ing pom.xml. A shscript, kui dening Maven Aplikasi Assembler Plugin (appassembler-maven-plugin), bakal miwiti. Skrip kasebut nerangake carane mbukak file jar sing dikompilasi. Jeneng kelas sing bakal diluncurake ditemtokake ing antarane <mainClass>lan </mainClass>, dene jeneng skrip diwenehi ing antarane <name>lan </name>ing pom.xml:

...
<build>
    <plugins>
        ...
       <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>appassembler-maven-plugin</artifactId>
            <version>1.1.1</version>
            <configuration>
                <assembleDirectory>target</assembleDirectory>
                <programs>
                    <program>
                        <mainClass>com.home.server.TelegramBot</mainClass>
                        <name>workerBot</name>
                    </program>
                </programs>
            </configuration>
            <executions>
                <execution>
                    <phase>package</phase>
                    <goals>
                        <goal>assemble</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>
Sadurunge miwiti proses iki, sampeyan kudu ndhaftar ing Heroku , lan nginstal loro Git lan Heroku CLI . Yen aplikasi sampeyan mbutuhake basis data, aja lali nambahake basis data sing dibutuhake nalika nggawe aplikasi anyar. Salajengipun, sampeyan kudu nemtokake host, jeneng pangguna, sandhi lan port kanggo database sampeyan, banjur nuduhake ing aplikasi sampeyan. Sabanjure, sadurunge nyebarke, gawe proyek sampeyan nggunakake Maven .

mvn clean install
Pisanan, kita pindhah menyang direktori proyek lan miwiti repositori kanthi printah git init. Banjur kita nambah proyek kita menyang repositori iki.

git add .
Banjur kita nindakake owah-owahan

git commit -m "First commit in the project"
Sabanjure, sampeyan kudu mlebu menyang heroku. Tulis ing ngisor iki ing baris printah

heroku login
Ketik kredensial sing digawe nalika registrasi. Sawise iku, nemtokake URL repositori sampeyan ing heroku. Sampeyan nindakake iki ing setelan. Banjur kita nulis

git remote add heroku [url]
Repositori heroku remot ditambahake kanggo gudang sampeyan. Sabanjure kita nulis

git push heroku master
Banjur ngenteni ... yen aplikasi kasebut sukses, jalanake perintah ing ngisor iki

heroku ps:scale worker=1
Lan iku, aplikasi sampeyan wis aktif. Yen ora, deleng log kasebut kanthi teliti. Paling kamungkinan, kesalahan ing aplikasi sampeyan wis nyebabake gagal. Matur nuwun kanggo maca artikel sing dawa banget. Muga-muga ana sing bisa migunani lan bakal nylametake sampeyan akeh wektu ing wilayah sing nyebabake masalah nalika pembangunan.
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION