JavaRush /Blog Jawa /Random-JV /Nggawe bot Telegram ing Jawa: saka ide nganti panyebaran
John Watson
tingkat

Nggawe bot Telegram ing Jawa: saka ide nganti panyebaran

Diterbitake ing grup
Apa iku bot? Sampeyan bisa maca babagan iki kanthi rinci ing kene . Pisanan, sampeyan kudu maca dokumentasi resmi kanggo perpustakaan kanggo ngembangake bot ing Telegram (sabanjuré diarani API). Dheweke dumunung ing kene . Nggawe bot Telegram ing Jawa: saka ide nganti panyebaran - 1Kabeh sing ana banget diakses lan dingerteni. Iku bakal koyone sing nulis lan bungah-bungah! Nanging iku ora sing prasaja. Sawise mbuwang akeh wektu ing mesin telusur, aku nemokake potongan kawruh babagan pangembangan bot, contone, carane nggawe keyboard, proses CallbackQuery, lan liya-liyane. Aku ora nate nemokake pandhuan lengkap lan lengkap kanggo ngembangake bot ing Jawa. Iki nyebabake aku nulis artikel iki. Ana akeh situs ing Internet ing ngendi sampeyan bisa nggawe bot dhewe kanthi panyebaran sing wis siap. Nanging titik kasebut. sing paling akeh, bot digawe sing bisa nyedhiyakake informasi latar mburi lan liya-liyane. Bot kita minangka aplikasi web lengkap sing sampeyan bisa ngiket database, nggawe panjalukan kanggo macem-macem API, ngurai situs, ngetung rumit, lsp. Prakara mung diwatesi dening imajinasi sampeyan. Mugi-mugi ing larik-larik punika kula sampun njelasaken sekedhik babagan ingkang badhe kula aturaken. Ndhaptar bot ing Telegram gampang banget; proses iki diterangake kanthi rinci ing dokumentasi ing tautan ing ndhuwur. Kanggo aplikasi kita, sampeyan mung kudu ngerti jeneng bot lan token sing bakal ditampa nalika registrasi. Ateges, bot mung minangka aplikasi web konsol. Ora ana frontend, pangolahan printah murni. Yen sampeyan pengin nguasai Hibernate kanthi apik utawa sinau babagan parse JSON, mula proyek iki kanggo sampeyan. Ayo dadi miwiti kanthi nyakup dependensi ing pom.xml (kita nganggep yen sampeyan nggunakake Maven). Sampeyan bisa nindakake kaya iki:
<dependency>
            <groupId>org.telegram</groupId>
            <artifactId>telegrambots</artifactId>
            <version>3.5</version>
</dependency>
Banjur kita nggawe kelas Bot, warisan saka kelas TelegramLongPollingBot, overriding 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 setting up a message and sending it.
     * @param chatId chat id
     * @param s The string 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());
        }
    }

    /**
     * The method returns the name of the bot specified during registration.
     * @return bot name
     */
    @Override
    public String getBotUsername() {
        returnBotName;
    }

    /**
     * The method returns the bot's token to communicate with the Telegram server
     * @return token for the bot
     */
    @Override
    public String getBotToken() {
        returnBotToken;
    }
}
Nah, isi metode kasebut main:
public static void main(String[] args) {
        ApiContextInitializer.init();
        TelegramBotsApi telegramBotsApi = new TelegramBotsApi();
        try {
            telegramBotsApi.registerBot(Bot.getBot());
        } catch (TelegramApiRequestException e) {
            e.printStackTrace();
        }
}
Kanthi ngetik menyang metode getBotUsername(), getBotToken()kita miwiti bot. Saiki, dheweke mung ngarahake pesen apa wae sing dikirim menyang dheweke, minangka "pangilon". Kabeh bisa kaya ing ngisor iki: nalika sampeyan miwiti aplikasi kasebut, mula ngirim panjaluk GET menyang server Telegram sapisan saben n sawetara detik ing URL ing ngisor iki: https://api.telegram.org/BotToken/getMe, ing ngendi BotToken ana. token bot sampeyan, nampa respon JSON sing ngemot kabeh pesen. Saben pesen kasebut diproses dening perpustakaan lan dadi metode OnUpdateReceived(Update update)minangka obyek Update. Sing apa kita bisa karo. Iki minangka kaendahan bot Telegram, bisa digunakake ing komputer apa wae, kanggo nyoba sampeyan mung kudu mbukak aplikasi kasebut, sampeyan ora perlu nyebarake menyang hosting sawise saben owah-owahan. Iku banget nyaman. Mesthi wae, bot kasebut bisa dikonfigurasi supaya bisa nggunakake webhook; manual bisa ditemokake ing Internet; kanggo kesederhanaan, kita bakal bisa nggunakake LongPolling. Cara ngolah pesen lan apa sing kudu dikirim kanggo nanggepi mung diwatesi dening alat basa lan perpustakaan, kabeh liya ana ing kawicaksanan sampeyan. Sampeyan bisa nggawe bot sing bakal nelusuri video ing YouTube kanggo sampeyan, sampeyan bisa nggawe bot sing saben dina bakal ngirim apa sing dikirim kanggo dhewe, contone, ing taun, jenis kapsul wektu. Utawa sampeyan bisa sinau carane nggabungake menyang sistem CRM lan nggawe bot kanggo bisnis cilik, kabeh diwatesi dening bayangan sampeyan. Terusna. Wong-wong sing wis nggunakake bot ngerti sing trep kanggo sesambungan karo wong-wong mau nggunakake printah diwiwiti karo tandha «/», contone /start. Nanging ana cara sing luwih trep - tombol. Ana rong jinis tombol: sing katon ing ngisor kolom input, ReplyKeyboardMarkuplan tombol sing katon langsung ing ngisor pesen sing disambungake InlineKeyboardMarkup. Ing dokumentasi sampeyan bisa sedhela familiarize dhewe karo gambaran sing. ReplyKeyboardMarkup. Ateges iki array saka tombol arrays List<KeyboardRow<KeyboardButton>>,. Iki minangka conto kode 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 strings
        List<KeyboardRow> keyboard = new ArrayList<>();

        // First line of the keyboard
        KeyboardRow keyboardFirstRow = new KeyboardRow();
        // Add buttons to the first line of the keyboard
        keyboardFirstRow.add(new KeyboardButton(“Привет”));

        // Second line of the keyboard
        KeyboardRow keyboardSecondRow = new KeyboardRow();
        // Add buttons to the second line of the keyboard
        keyboardSecondRow.add(new KeyboardButton(“Помощь”);

        // Add all keyboard strings to the list
        keyboard.add(keyboardFirstRow);
        keyboard.add(keyboardSecondRow);
        // and set this list to our keyboard
        replyKeyboardMarkup.setKeyboard(keyboard);
    }
Ing cara sendMsg(), kita nelpon cara iki kanthi ngirim pesen menyang, saéngga nyetel keyboard kanggo pesen kasebut. Nalika kita ngirim pesen iki kanggo pangguna, dheweke bakal weruh teks pesen sing disetel, uga 2 tombol sing ngomong Hello lan Pitulung, jejere saben liyane. Kanthi ngeklik tombol kasebut, pesen bakal dikirim menyang bot, teks sing ditulis ing tombol kasebut. Yaiku, yen klien ngeklik "Bantuan", bot bakal nampa pesen kanthi teks "Bantuan". Kanggo dheweke, kaya-kaya klien dhewe nulis teks "Bantuan" lan dikirim menyang dheweke. Inggih, banjur sampeyan proses pesen kuwi. InlineKeyboardMarkup Iki uga array saka array, iku padha karo Markup sadurungé, nanging logika operasi kene rada beda. Papan tombol kasebut disambungake menyang pesen tartamtu lan mung ana. Mangkene cara kanggo nginstal keyboard Inline
private void setInline() {
        List<List<InlineKeyboardButton>> buttons = new ArrayList<>();
        List<InlineKeyboardButton> buttons1 = new ArrayList<>();
        buttons1.add(new InlineKeyboardButton().setText(“Кнопка“).setCallbackData(17));
        buttons.add(buttons1);

        InlineKeyboardMarkup markupKeyboard = new InlineKeyboardMarkup();
        markupKeyboard.setKeyboard(buttons);
    }
Nggawe Listing List, nambah tombol Inline menyang baris pisanan. Tombol kasebut bisa ngemot URL, link menyang saluran, utawa CallbackQuery, sing bakal daktulis mengko. Ing kene kita nyetel teks kanggo tombol kita sing bakal dideleng pangguna lan banjur nyetel data sing bakal dikirim menyang bot. Ing conto kita, pangguna ndeleng "Hello", lan nalika diklik, bot bakal dikirim nomer 17, iki kita CallbackQuery. A sawetara tembung babagan CallbackQuery. Kanggo njupuk data kasebut saka obyek, Updatesampeyan kudu nglakokaké update.getCallbackQuery(), cara iki bali CallbackQuery, saka ngendi sampeyan wis bisa njaluk data ditransfer menyang bot. Ora perlu nyoba kanggo njupuk data iki liwat cara update.getMessage().getText(), njaluk 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 pesen kanggo diproses menyang thread anyar; yen ana pesen CallbackQuery, kita ngirim kanggo diproses menyang thread sing cocog. Sampeyan CallbackQuerybisa ngirim balesan. Saben obyek ing Telegram duwe id dhewe. Kanggo ngirim respon menyang tartamtu, CallbackQuerykita mung kudu ngerti id, sing bakal ditampa saka obyek sing cocog. Kanggo ngirim respon, 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:Teks ing jawaban CallbackQueryngirim ora luwih saka 200 karakter! Nalika ngirim respon kasebut, klien bakal nampa jendhela pop-up ing ngendi pesen kasebut bakal ditulis. Jendhela kasebut bisa ilang sawetara detik sawise katon, utawa bisa macet nganti pangguna menet OK. Kanggo ngalih mode iki, kita nelpon answer.setShowAlert(true). Nalika truejendhela macet nganti sampeyan menet OK, nalika falseilang sawise 5 detik. Ing asas, iki kabeh fitur dhasar saka perpustakaan bot Telegram. Yen sampeyan pengin, sampeyan bisa sinau babagan ngirim multimedia, geolokasi, lsp saka dokumentasi. Ayo pindhah menyang deploying bot kita ing hosting. Kanggo proyekku, aku milih Heroku, amarga miturut pendapatku iku hosting sing cukup trep sing duwe CLI dhewe. Gratis, nanging ing tingkat iki bot sampeyan bakal pindhah menyang hibernasi sawise 30 menit yen ora ana panjalukan. Nalika panjaluk dikirim menyang dheweke, dheweke tangi. Iki kedadeyan kanthi cepet, sampeyan ora bakal sok dong mirsani (kajaba, mesthine, sambungan menyang database digawe maneh). Watesan rencana gratis yaiku database 5MB, ruang disk 100MB, lalu lintas 2TB saben wulan, 1 dino. Dino aplikasi sampeyan mlaku. Aku bakal langsung ngomong yen tataran panyebaran sing nyebabake kesulitan kanggo aku, amarga aku durung nate masang aplikasi sadurunge. Nalika nyebarake, Heroku mbutuhake file sing jenenge Procfile (tanpa ekstensi). worker: sh target/bin/workerBot Kita nggawe ing ROOT saka project, nulis workerBot ana - jeneng sing kita nemtokake ing pom.xml script sh kui nggunakake Maven plugin appassembler-maven-plugin bakal dibukak. Skrip kasebut nggambarake jar sing dikompilasi. Jeneng kelas sing bakal diluncurake dituduhake ing antarane <mainClass></mainClass>, jeneng skrip antarane <name></name> 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, nginstal Git lan Heroku CLI. Yen aplikasi sampeyan mbutuhake database, banjur nalika ndhaptar aplikasi anyar, aja lali nambah database sing dibutuhake. Sabanjure, sampeyan kudu nemokake host, jeneng pangguna, sandhi lan port database sampeyan, banjur nemtokake ing aplikasi sampeyan. Sabanjure, sadurunge nyebarke, gawe proyek sampeyan nggunakake Maven.
mvn clean install
Kanggo miwiti, kita pindhah menyang direktori proyek kita, miwiti repositori kanthi printahgit init Banjur kita nambah proyek kita menyang gudang iki
git add .
Sawise kita nindakake owah-owahan
git commit -m “First commit in project”
Sabanjure sampeyan kudu mlebu menyang heroku, nulis ing baris printah
heroku login
Ketik data sing ditemtokake nalika registrasi. Banjur sampeyan kudu ngerteni URL repositori sampeyan ing Heroku, iki wis rampung ing setelan. Banjur kita nulis
git remote add heroku [url]
Repositori remot heroku bakal ditambahake menyang gudang sampeyan. Sabanjure kita nulis
git push heroku master
Kita ngenteni ... Yen panyebaran aplikasi kasebut sukses, kita nglakokake perintah kasebut
heroku ps:scale worker=1
Lan iku, aplikasi sampeyan lagi mlaku. Yen iki ora kelakon, priksa log kasebut kanthi teliti; kemungkinan ana kesalahan ing aplikasi sampeyan sing nyebabake kacilakan. Matur nuwun kanggo maca artikel sing dawa banget, muga-muga ana sing bisa migunani lan ngirit wektu akeh ing papan sing aku kesandhung sajrone pembangunan.
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION