CodeGym /جاوا بلاگ /Random-SD /جاوا ۾ هڪ ٽيليگرام بوٽ ٺاهڻ: تصور کان وٺي تعیناتي تائين
John Squirrels
سطح
San Francisco

جاوا ۾ هڪ ٽيليگرام بوٽ ٺاهڻ: تصور کان وٺي تعیناتي تائين

گروپ ۾ شايع ٿيل
پوء بوٽس ڇا آهن؟ توھان ھن بابت وڌيڪ پڙھي سگھوٿا هتي . شروع ڪرڻ لاءِ، توهان کي لائبريري لاءِ سرڪاري دستاويزن جو جائزو وٺڻ جي ضرورت آهي ٽيليگرام بوٽس کي ترقي ڪرڻ لاءِ استعمال ڪيو ويو (هاڻي "API"). اهو هتي ڳولي سگهجي ٿو .
جاوا ۾ هڪ ٽيليگرام بوٽ ٺاهڻ: تصور کان وٺي مقرري تائين - 1
اتي هر شيء بلڪل صاف ۽ رسائي آهي. اهو لڳي ٿو ته اسان صرف ڪوڊ لکي سگهون ٿا ۽ خوش ٿيو! پر اهو ايترو سادو ناهي. گهڻو وقت ڳولڻ ۾ گذارڻ کان پوءِ، مون کي بوٽ ڊولپمينٽ بابت ڄاڻ جون خبرون مليون آهن، مثال طور، ڪيبورڊ ڪيئن ٺاهجي، هڪ کي سنڀاليو CallbackQuery، وغيره. پر، مون کي جاوا بوٽ ڊولپمينٽ لاءِ مڪمل، مڪمل گائيڊ نه مليو. جنهن مون کي هي مضمون لکڻ تي مجبور ڪيو. ڪيتريون ئي ويب سائيٽون آهن جتي توهان پنهنجو آساني سان ترتيب ڏيڻ وارو بوٽ ٺاهي سگهو ٿا. پر حقيقت اها آهي ته، ٺاهيل بوٽن مان گهڻا حوالا معلومات مهيا ڪن ٿا ۽ پسند ڪن ٿا. اسان جو بوٽ هڪ مڪمل ويب ايپليڪيشن آهي. توھان ھڪڙي ڊيٽابيس کي پابند ڪري سگھو ٿا، مختلف API درخواستن تي عمل ڪري سگھو ٿا، ويب سائيٽن کي پارس ڪري سگھو ٿا، پيچيده حساب ڪتاب انجام ڏيو، ۽ وڌيڪ. امکانات صرف توهان جي تخيل تائين محدود آهن. مون کي اميد آهي ته مٿي بيان ڪرڻ ۾ مدد ڪئي آهي ته آئون ڇا لکڻ وارو آهيان. ٽيليگرام تي بوٽ رجسٽر ڪرڻ تمام آسان آهي. ھن عمل کي تفصيل سان بيان ڪيو ويو آھي مٿي ڏنل دستاويز ۾. اسان جي ايپليڪيشن لاءِ، توهان کي صرف ڄاڻڻ جي ضرورت آهي بوٽ جو نالو ۽ ٽوڪن جيڪو توهان وصول ڪندا آهيو جڏهن بوٽ کي رجسٽر ڪري رهيا آهيو. بنيادي طور تي، هڪ بوٽ صرف هڪ ڪنسول تي ٻڌل ويب ايپليڪيشن آهي. ڪو به سامهون آخر نه آهي، صرف خالص ڪمانڊ پروسيسنگ. جيڪڏهن توهان ماسٽر ڪرڻ چاهيو ٿا Hibernate يا سکو ته ڪيئن پارس ڪجي JSON ، پوءِ هي منصوبو آهي توهان لاءِ. اچو ته هڪ انحصار شامل ڪندي شروع ڪريو pom.xml(مان سمجهان ٿو ته توهان Maven استعمال ڪري رهيا آهيو). توهان هن طرح ڪري سگهو ٿا:
<dependency>
            <groupId>org.telegram</groupId>
            <artifactId>telegrambots</artifactId>
            <version>3.5</version>
</dependency>
پوء ھڪڙو Botڪلاس ٺاھيو جيڪو TelegramLongPollingBotڪلاس کي ورثي ۾ ڏئي، ۽ ان جي طريقن کي ختم ڪريو:
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";
    }
}
۽ هاڻي طريقي جي مواد main:
public static void main(String[] args) {
        ApiContextInitializer.init();
        TelegramBotApi telegramBotApi = new TelegramBotApi();
        try {
            telegramBotApi.registerBot(Bot.getBot());
        } catch (TelegramApiRequestException e) {
            e.printStackTrace();
        }
}
getBotUsername()۽ طريقن کي ڀرڻ کان پوء getBotToken()، بوٽ شروع ڪريو. في الحال، اهو صرف اسان ڏانهن موڪلي ٿو ڪنهن به پيغام کي جيڪو اسان ان ڏانهن موڪليو آهي، هڪ قسم جي " عڪس " وانگر . اهو هن طرح ڪم ڪري ٿو: جڏهن توهان اپليڪيشن شروع ڪريو ٿا، اهو ٽيليگرام سرور ڏانهن درخواستون موڪلڻ شروع ڪري ٿو، هڪ ڀيرو هر n سيڪنڊن ۾، هيٺ ڏنل URL تي: https://api.telegram.org/BotToken/getMe ، جتي BotToken توهان جي بوٽ جو ٽوڪن آهي. . جواب ۾، اهو حاصل ڪري ٿو JSON سڀني پيغامن تي مشتمل آهي. انهن پيغامن مان هر هڪ لائبريري طرفان پروسيس ڪيو ويندو آهي ۽ OnUpdateReceived(Update update)طريقي سان هڪ Updateاعتراض جي طور تي منظور ڪيو ويندو آهي. ۽ اھو اھو آھي جيڪو اسان ڪم ڪريون ٿا. هتي ٽيليگرام بوٽن جي خوبي آهي: اهي ڪنهن به ڪمپيوٽر تي هلائي سگهن ٿا، ان کي جانچڻ لاءِ صرف ايپليڪيشن کي شروع ڪرڻ جي ضرورت آهي، ۽ توهان کي هر تبديلي کان پوءِ ان کي ميزبان تي لڳائڻ جي ضرورت ناهي. هي تمام آسان آهي. يقينا، توهان ويب هوڪس استعمال ڪندي ڪم ڪرڻ لاءِ هڪ بوٽ ترتيب ڏئي سگهو ٿا. توھان انٽرنيٽ تي ھن لاء ھدايتون ڳولي سگھو ٿا. سادگي لاءِ، اسين استعمال ڪنداسين LongPolling . ڪئين پيغامن تي عمل ڪيو وڃي ٿو ۽ توهان جواب ۾ جيڪي موڪليو ٿا صرف ٻولي ۽ لائبريري جي صلاحيتن تائين محدود آهن. باقي سڀ ڪجهه توهان تي آهي. توهان هڪ بوٽ ٺاهي سگهو ٿا جيڪو توهان لاءِ يوٽيوب وڊيوز ڳوليندو. توهان هڪ بوٽ ٺاهي سگهو ٿا جيڪو توهان کي موڪليندو جيڪو توهان پاڻ کي روزانو موڪليندا آهيو، جهڙوڪ هڪ سال اڳ کان ٽائيم ڪيپسول. يا توهان CRM سسٽم سان ضم ٿيڻ ۽ ننڍن ڪاروبارن لاءِ بوٽ ٺاهڻ سکي سگهو ٿا- توهان صرف پنهنجي تخيل تائين محدود آهيو. هلندو رهڻ. جن بوٽس استعمال ڪيا آھن اھي ڄاڻن ٿا ته انھن سان رابطو ڪرڻ آسان آھي ڪمانڊ استعمال ڪندي جيڪي " /" ڪردار سان شروع ٿين ٿا، مثال طور، /start. پر اتي ھڪڙو وڌيڪ آسان طريقو آھي: بٽڻ. اتي ٻه قسم جا بٽڻ آهن: اهي جيڪي هڪ ان پٽ فيلڊ ( ReplyKeyboardMarkup) هيٺ ظاهر ٿيندا آهن ۽ بٽڻ جيڪي سڌو سنئون پيغام جي هيٺان هوندا آهن جيڪي اهي ڳنڍيل آهن ( InlineKeyboardMarkup). توھان حاصل ڪري سگھوٿا انھن بابت بنيادي سمجھاڻي انھن جي تفصيلن مان دستاويزن ۾.

ReplyKeyboard Markup

حقيقت ۾، هي بٽڻ جي صفن جو هڪ صف آهي: List<KeyboardRow <KeyboardButton>>. هتي نمونو ڪوڊ آهي جيڪو هڪ ڪيبورڊ ٺاهي ٿو:
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);
    }
اسان هن طريقي کي sendMsg()طريقي سان سڏين ٿا، ان کي پيغام ڏيڻ کان پوء. هي آهي اسان انهي پيغام لاءِ ڪيبورڊ سيٽ اپ ڪيو. جڏهن اسان هي پيغام صارف ڏانهن موڪليندا آهيون، هو اسان جي پيغام جو متن ۽ 2 بٽڻ ڏسندو جيڪي چوندا آهن "هاء" ۽ "مدد" ، هڪ ٻئي جي هيٺان. جڏهن انهن مان هڪ بٽڻ تي ڪلڪ ڪيو ويندو آهي، بوٽ هڪ پيغام موڪليو ويندو آهي جنهن ۾ بٽڻ جو متن شامل آهي. تنهن ڪري، جيڪڏهن ڪلائنٽ "مدد" تي ڪلڪ ڪري ، بوٽ کي "مدد" سان هڪ پيغام ملي ويندو. بوٽ ڏانهن، اهو لڳي ٿو ته ڪلائنٽ پاڻ کي "مدد" لکيو ۽ متن کي بوٽ ڏانهن موڪليو. ۽ پوء توهان پيغامن تي عمل ڪيو.

ان لائن ڪي بورڊ مارڪ اپ

هي پڻ صفن جو هڪ سلسلو آهي. اهو ساڳيو آهي پوئين مارڪ اپ، پر منطق هتي ٿورو مختلف ڪم ڪري ٿو. هن قسم جي ڪيبورڊ هڪ مخصوص پيغام سان ڳنڍيل آهي ۽ صرف ان لاء موجود آهي. هتي هڪ ان لائن ڪيبورڊ قائم ڪرڻ جو طريقو آهي:
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);
    }
Listاندر اندر ٺاھيو List، ۽ ان لائن بٽڻ کي پھرين قطار ۾ شامل ڪريو. ھن بٽڻ ۾ ھڪڙو URL، ھڪڙي چينل جي لنڪ، يا ھڪڙو شامل ٿي سگھي ٿو CallbackQuery، جنھن بابت مان ٿوري دير بعد لکندس. هي اهو آهي جتي اسان پنهنجي بٽڻ جو متن سيٽ ڪيو، جيڪو صارف کي ڏسڻ ۾ ايندو، ۽ پوء اسان ڊيٽا کي سيٽ ڪيو جيڪو بوٽ ڏانهن موڪليو ويندو. اسان جي مثال ۾، صارف "هاء" ڏسي ٿو، ۽ جڏهن بٽڻ کي دٻايو ويندو آهي نمبر 17 بوٽ ڏانهن موڪليو ويندو. هي اسان جو آهي CallbackQuery. جي حوالي سان چند لفظ CallbackQuery. هن ڊيٽا کي Updateاعتراض مان حاصل ڪرڻ لاء، توهان کي عمل ڪرڻ جي ضرورت آهي update.getCallbackQuery(). اهو طريقو واپس ڪري ٿو هڪ CallbackQuery، جنهن مان توهان رسائي حاصل ڪري سگهو ٿا ڊيٽا کي منتقل ڪيو ويو بوٽ ڏانهن. ھن ڊيٽا کي طريقي سان حاصل ڪرڻ جي ڪوشش نه ڪريو- update.getMessage().getText()توھان حاصل ڪندا 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());
        }
    }
جيڪڏهن ڪو پيغام آهي، اسان ان کي پروسيسنگ لاءِ نئين سلسلي ڏانهن موڪليندا آهيون؛ جيڪڏهن اتي آهي CallbackQuery، اسان پروسيسنگ لاء مناسب موضوع ڏانهن موڪليندا آهيون. توهان هڪ جواب موڪلي سگهو ٿا CallbackQuery. ٽيليگرام ۾ هر شئي جي پنهنجي سڃاڻپ آهي. هڪ مخصوص ڏانهن جواب موڪلڻ لاءِ CallbackQuery، توهان کي صرف ان جي سڃاڻپ ڄاڻڻ جي ضرورت آهي، جيڪا اسان لاڳاپيل اعتراض مان حاصل ڪريون ٿا. جواب موڪلڻ لاء، اسان هن طريقي کي سڏيندا آهيون:
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();
        }
    }
اهم:جواب ۾ متن CallbackQuery200 اکرن کان وڌيڪ نه هجڻ گهرجي! اهڙو جواب موڪلڻ کان پوءِ، ڪلائنٽ هڪ پاپ اپ ونڊو ڏسندو جنهن ۾ پيغام هوندو. هي ونڊو ظاهر ٿيڻ کان ڪجهه سيڪنڊن بعد غائب ٿي سگهي ٿو، يا اهو جاري رهي سگهي ٿو جيستائين صارف OK کي دٻائي. طريقن کي تبديل ڪرڻ لاء، اسان کي سڏين ٿا answer.setShowAlert(true)طريقو. جيڪڏهن توهان trueطريقي سان پاس ڪريو ٿا، ونڊو جاري رهي جيستائين OK کي دٻايو وڃي. جيڪڏهن توهان غلط پاس ڪيو، پوء اهو 5 سيڪنڊن کان پوء غائب ٿي ويندو. اهي سڀئي ٽيليگرام بوٽ لائبريري جون بنيادي خاصيتون آهن. جيڪڏھن توھان چاھيو ٿا، توھان سکي سگھو ٿا شيون جھڙوڪ ملٽي ميڊيا، جغرافيائي مقام، وغيره ڪيئن موڪلجي. اچو ته اڳتي ھلي پنھنجي بوٽ کي ھوسٽنگ پليٽ فارم تي ترتيب ڏيو. منهنجي منصوبي لاء، مون هيروڪو چونڊيو . مان سمجهان ٿو ته اهو هڪ نهايت آسان هوسٽنگ پليٽ فارم آهي پنهنجي CLI سان. اهو مفت آهي، پر هن منصوبي تي توهان جو بوٽ 30 منٽن کان پوءِ hibernate ٿيندو بغير ڪنهن درخواست جي. اهو اٿندو جڏهن هڪ درخواست ملي ويندي. اهو تمام جلدي ٿئي ٿو، توهان کي خبر به نه پوندي (جيستائين، يقينا، ڊيٽابيس ڪنيڪشن ٻيهر شروع نه ٿئي). مفت منصوبو 5MB ڊيٽابيس، 100MB ڊسڪ اسپيس، هر مهيني 2TB ڊيٽا، ۽ 1 ڊائنو تائين محدود آهي. هڪ ڊنو توهان جي هلندڙ ايپليڪيشن آهي. مان فوري طور تي چوندس ته اها تعیناتي هئي جيڪا مون کي مشڪلاتن جو سبب بڻي، ڇو ته مون ڪڏهن به پنهنجي درخواستن کي ترتيب نه ڏني هئي. مقرري دوران، هيروڪو کي ضرورت آهي هڪ فائل نالي Procfile (بغير واڌ جي). اسان ان کي پروجيڪٽ جي روٽ ۾ ٺاهيو. اندر، اسين لکون ٿا worker: sh target/bin/workerBot، جتي workerBot جو نالو بيان ڪيل آهي pom.xml. هڪ sh اسڪرپٽ، ٺاهيل Maven Application Assembler Plugin (appassembler-maven-plugin)، لانچ ٿيندي. اسڪرپٽ بيان ڪري ٿو ته ڪيئن هڪ مرتب ڪيل جار فائل لانچ ڪجي. شروع ڪرڻ لاءِ ڪلاس جو نالو <mainClass>۽ وچ ۾ بيان ڪيو ويو آهي </mainClass>، جڏهن ته اسڪرپٽ جو نالو <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>
هن عمل کي شروع ڪرڻ کان پهريان، توهان کي Heroku تي رجسٽر ڪرڻ گهرجي ، ۽ Git ۽ Heroku CLI ٻنهي کي انسٽال ڪرڻ گهرجي . جيڪڏهن توهان جي ايپليڪيشن کي ڊيٽابيس جي ضرورت آهي، ته پوءِ گهربل ڊيٽابيس شامل ڪرڻ نه وساريو جڏهن توهان نئين ايپليڪيشن ٺاهيندا آهيو. وڌيڪ، توھان کي توھان جي ڊيٽابيس لاءِ ميزبان، يوزرنيم، پاسورڊ ۽ بندرگاھ جو تعين ڪرڻ جي ضرورت آھي، ۽ پوءِ انھن کي پنھنجي ايپليڪيشن ۾ ظاھر ڪيو. اڳيون، ترتيب ڏيڻ کان اڳ، Maven استعمال ڪندي پنھنجي منصوبي کي ٺاھيو .
mvn clean install
پهرين، اسان وڃون ٿا اسان جي پروجيڪٽ ڊاريڪٽري ۽ ڪمانڊ سان مخزن کي شروع ڪريو git init. پوء اسان اسان جي پروجيڪٽ کي هن مخزن ۾ شامل ڪيو.
git add .
پوء اسان تبديليون انجام ڏيون ٿا
git commit -m "First commit in the project"
اڳيون، توهان کي هيروڪو ۾ سائن ان ٿيڻ جي ضرورت آهي. ھيٺ ڏنل ڪمانڊ لائن تي لکو
heroku login
داخل ڪريو سندون جيڪي توھان ٺاھيو رجسٽريشن دوران. ان کان پوء، هيروڪو تي توهان جي مخزن جي URL جو اندازو لڳايو. توھان ھي ڪريو سيٽنگون ۾. پوءِ لکنداسين
git remote add heroku [url]
هڪ ريموٽ هيروڪو مخزن توهان جي مخزن لاءِ شامل ڪيو ويو آهي. اڳتي هلي اسين لکنداسين
git push heroku master
پوءِ اسان انتظار ڪريو... جيڪڏهن ايپليڪيشن ڪاميابي سان ٺهي ٿي، هيٺ ڏنل حڪم تي عمل ڪريو
heroku ps:scale worker=1
۽ اھو اھو آھي، توھان جي ايپليڪيشن تيار ۽ ھلندي آھي. جيڪڏهن اهو نه آهي، لاگن کي احتياط سان ڏسو. گهڻو ڪري، توهان جي ايپليڪيشن ۾ هڪ غلطي ان کي ناڪام ٿيڻ جو سبب بڻيو آهي. اهڙي ڊگهي مضمون پڙهڻ لاء توهان جي مهرباني. مون کي اميد آهي ته ڪو ماڻهو اهو مفيد ثابت ٿيندو ۽ اهو توهان کي انهن علائقن ۾ گهڻو وقت بچائيندو جنهن مون کي ترقي جي دوران مصيبت ڏني.
تبصرا
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION