سلام، میرے پیارے دوستو۔ جی ہاں، بالکل دوستو۔ میں مضامین کے اس سلسلے سے پہلے ہی اتنا واقف ہو چکا ہوں کہ وہ لوگ جو باقاعدگی سے تبصروں میں اپنا شکریہ ادا کرتے ہیں اور/یا یہ ظاہر کرتے ہیں کہ انہوں نے مواد کو پڑھ اور سمجھ لیا ہے، پہلے ہی قریب ہو چکے ہیں۔ آپ اور میں دو سمتوں سے ایک ہی مقصد کی طرف بڑھ رہے ہیں۔ آپ سمجھنا چاہتے ہیں، لیکن میں سمجھانا چاہتا ہوں۔ اور ہمارا ایک ہی حتمی مقصد ہے - ایک تحریری درخواست جو شروع سے آخر تک آپ کے لیے قابل فہم ہے۔ آپ نے اس مضمون میں جو کچھ بیان کروں گا اس کے بارے میں آپ نے پہلے ہی سنا ہوگا۔ مجھے نہیں لگتا کہ میں آپ کو کوئی نئی اور غیر معمولی بات بتاؤں گا (لیکن پروجیکٹ کے فریم ورک کے اندر اسے جاننا/دوہرانا ضروری ہے)۔ موسم بہار میں میں نے اپنے لیے ایک بوٹ لکھا، لہذا ہم اس کے "نمونوں" پر بھروسہ کریں گے۔
ہم JRTB-2 لکھتے ہیں۔
ہم ویسا ہی کریں گے جیسا کہ ہم نے ٹاسک JRTB-0 کے ساتھ مضمون میں کیا تھا ۔- ہم ctrl + t مجموعہ استعمال کرکے مقامی پروجیکٹ میں مین برانچ کو اپ ڈیٹ کرتے ہیں ۔
- مرکزی شاخ کی بنیاد پر، ہم بناتے ہیں:
- ایک بوٹ شامل کریں۔
- ہم کیا کیا گیا ہے اس کی تفصیل کے ساتھ ایک نیا عہد بناتے ہیں اور اسے GitHub پر دھکیلتے ہیں۔
- مین برانچ کے لیے پل کی درخواست بنائیں اور اسے دوبارہ چیک کریں۔ ہم تعمیر کے گزرنے کا انتظار کر رہے ہیں (گیتھب ایکشنز)، اسے مین برانچ میں ضم کر دیں۔
- متعلقہ کام کو بند کریں۔
ٹیلیگرام بوٹ کیا ہے؟
ہم، ڈویلپرز، ٹیلیگرام بوٹ کے ساتھ کام کرنے کا اس طرح تصور کر سکتے ہیں: ہم ان کے کلائنٹ کو ان کے ساتھ کام کرنے کے لیے استعمال کرتے ہیں۔ ہمارے پاس کام کے لیے ایک ریڈی میڈ لائبریری ہے ۔ کارروائیوں کا ایک مجموعہ ہے جس کے بعد ٹیلیگرام بوٹ کو معلوم ہو جائے گا کہ یہ ہمارے پروگرام سے وابستہ ہے۔ اور پہلے سے ہی پروگرام کے اندر ہم سیکھیں گے کہ خطوط، کمانڈ کیسے وصول کیے جاتے ہیں اور کسی نہ کسی طرح ان پر کارروائی کی جاتی ہے۔ ٹیلیگرام بوٹس میں کمانڈ جیسی ایک چیز ہے : یہ سلیش "/" سے شروع ہوتی ہے۔ اس کے بعد، ہم فوری طور پر لفظ کو ایک ساتھ لکھتے ہیں، اور یہ ایک حکم سمجھا جائے گا. مثال کے طور پر، دو احکامات ہیں جو ہر ایک کو معلوم ہونا چاہئے:- /start - بوٹ کے ساتھ کام کرنا شروع کریں۔
- /stop - بوٹ کے ساتھ کام ختم کریں۔
BotFather کے ساتھ ایک بوٹ بنائیں
بوٹ کو جوڑنے کے لیے، آپ کو پہلے اسے بنانا ہوگا۔ ٹیلیگرام کا ایک طریقہ ہے - اپنے منفرد نام کے ساتھ بوٹ بنانا۔ اس کے ساتھ ایک ٹوکن بھی ہوگا (ایک بڑی تار جو پاس ورڈ کی طرح کام کرتی ہے)۔ میں نے پہلے ہی JavaRush - @javarush_community_bot کے لیے ایک بوٹ بنا لیا ہے ۔ یہ بوٹ ابھی تک خالی ہے اور کچھ نہیں کر سکتا۔ اہم بات یہ ہے کہ نام کے آخر میں _bot ہونا چاہیے ۔ یہ دکھانے کے لیے کہ یہ کیسے کرنا ہے، میں ایک بوٹ بناؤں گا جس پر ہم اپنی فعالیت کی جانچ کریں گے۔ حقیقی منصوبوں کے لحاظ سے، یہ ایک آزمائشی ماحول ہوگا۔ اور ہمارا سب سے اہم پروڈ ماحول ہوگا (پروڈ - پروڈکشن، یعنی حقیقی ماحول جس پر پروجیکٹ کو عمل میں لایا جائے گا)۔ بلاشبہ، ایک اور ماحول شامل کرنا ممکن ہو گا - ایک سینڈ باکس ماحول: ایک عام سینڈ باکس، زیادہ قابل تبدیلی اور تمام ترقیاتی شرکاء کے لیے قابل رسائی۔ لیکن یہ صرف پروجیکٹ کی تخلیق کے مرحلے پر صورتحال کو پیچیدہ کرے گا۔ ابھی کے لیے، آئیے ٹیسٹ اور سینڈ باکس کے ماحول کے لیے دو مزید بوٹس بنائیں۔ پہلا مرحلہ ٹیلیگرام میں ہی بوٹ بنانا (رجسٹر) کرنا ہے۔ ہمیں بوٹ تلاش کرنے کی ضرورت ہے: @BotFather اور اس پر کمانڈ لکھیں: /newbot اگلا، ہم سے اس بوٹ کو ایک نام دینے کو کہا جاتا ہے۔ چونکہ یہ جانچ کے کاموں کے لیے ایک بوٹ ہے، اس لیے اس کا نام مناسب ہوگا: [TEST] JavarushBot اب وقت آگیا ہے کہ ایک منفرد نام دیا جائے جس کے ذریعے اسے ہمیشہ پایا جا سکتا ہے - اس کا صارف نام: test_javarush_community جیسا کہ میں نے اوپر کہا، آپ کو _bot شامل کرنے کی ضرورت ہے۔ صارف نام کا لاحقہ، تو ہم دوبارہ لکھتے ہیں: test_javarush_community_bot اور بس! بوٹ بنایا گیا ہے۔ اب، صارف نام اور ٹوکن کا استعمال کرتے ہوئے، اسے ہمارے پروجیکٹ سے منسلک کیا جا سکتا ہے۔ بلاشبہ، ٹیسٹ سرور کے ہموار آپریشن کے لیے، میں عوامی دیکھنے کے لیے اس بوٹ کا ٹوکن (بنیادی طور پر بوٹ تک رسائی کے لیے پاس ورڈ) ظاہر نہیں کروں گا۔ہم بوٹ کو پروجیکٹ سے جوڑتے ہیں۔
ہم لائبریری کو معمول کے مطابق شامل نہیں کریں گے، لیکن فوری طور پر اپنے کنکال - اسپرنگ بوٹ سے فائدہ اٹھائیں گے۔ اس کے پاس اسٹارٹر جیسی چیز ہے۔ لائبریری کو شامل کر کے، ہم SpringBoot کو یہ بتانے کے لیے استعمال کر سکتے ہیں کہ ہم پروجیکٹ کو صحیح طریقے سے ترتیب دینا چاہتے ہیں۔ اگر ہم معمول کے راستے پر جائیں، جو کہ بہت سی جگہوں پر بیان کیا گیا ہے، تو ہمیں کسی جگہ ایک کنفیگریشن بنانے کی ضرورت ہوگی جس میں کچھ اس طرح ہو:ApiContextInitializer.init();
TelegramBotsApi telegramBotsApi = new TelegramBotsApi();
try {
telegramBotsApi.registerBot(Bot.getBot());
} catch (TelegramApiRequestException e) {
e.printStackTrace();
}
یہاں ایک آبجیکٹ بنایا گیا ہے جس کے ساتھ آپ بوٹ کے ساتھ کنکشن قائم کر سکتے ہیں۔ ہمارے معاملے میں، ہم جس سٹارٹر کو جوڑنا چاہتے ہیں وہ ہمارے لیے کہیں نہ کہیں "انڈر دی ہڈ" کرے گا (یہ آئی ٹی میں اکثر استعمال ہونے والے فقرے کا ترجمہ بھی ہے - انڈر دی ہڈ)۔ یہاں اس اسٹارٹر کا ایک لنک ہے ۔ آپ فوری طور پر README.md فائل سے دیکھ سکتے ہیں کہ یہ کیا ہے، کیوں اور اسے کیسے استعمال کیا جائے۔ اسے مربوط کرنے کے لیے، آپ کو صرف اس انحصار کو میموری میں شامل کرنے کی ضرورت ہے۔ بس اتنا ہے :) یہاں مطلوبہ انحصار ہے:
<dependency>
<groupId>org.telegram</groupId>
<artifactId>telegrambots-spring-boot-starter</artifactId>
<version>5.0.1</version>
</dependency>
ہم اسے اپنی یادداشت میں شامل کرتے ہیں۔ ہم توقع کے مطابق ورژن انسٹال کرتے ہیں اور Maven پروجیکٹ کو اپ ڈیٹ کرتے ہیں۔ تفصیل کی بنیاد پر، ہمیں صرف ایک نئی کلاس بنانے کی ضرورت ہے، TelegramLongPollingBot سے وراثت میں حاصل کریں اور اس کلاس کو اپنے SpringBoot کے ایپلیکیشن سیاق و سباق میں شامل کریں۔ ایپلیکیشن سیاق و سباق وہ جگہ ہے جہاں پروجیکٹ کو چلانے کے لیے تخلیق کردہ اشیاء کو محفوظ کیا جاتا ہے۔ کلاس شامل کرنے کے لیے، آپ کو تشریحات میں سے ایک استعمال کرنے کی ضرورت ہے: @Component، @Service، @Repository، @Controller۔ یا @Bean تشریح اگر کنفیگریشن کلاس میں کسی طریقہ کے ذریعے بنائی گئی ہو (یعنی ایسی کلاس میں جس پر کنفیگریشن تشریح کے ساتھ نشان لگایا گیا ہو)۔ میں سمجھتا ہوں کہ یہ سب کچھ اب بھی سمجھ سے باہر ہے۔ لیکن جب آپ اس کا پتہ لگانا شروع کریں گے تو آپ دیکھیں گے کہ وہاں کچھ بھی پیچیدہ نہیں ہے۔ Spring Boot کو تیزی سے سمجھنے کے لیے، میں ایک عمدہ کتاب تجویز کرتا ہوں - Spring In Action 5th ایڈیشن۔ اگر خواہش ہو تو اس کتاب پر مبنی مضامین کا سلسلہ لکھ سکتا ہوں۔ چلو واپس جا ئیں. اس پیکیج میں جو JavarushTelegramBotApplication پر مشتمل ہے، ہم بوٹ پیکج بناتے ہیں ، جس میں ہمارا ٹیلیگرام بوٹ ہوگا۔ اس کا نام JavaRushTelegramBot ہوگا :
package com.github.javarushcommunity.jrtb.bot;
import org.telegram.telegrambots.bots.TelegramLongPollingBot;
import org.telegram.telegrambots.meta.api.objects.Update;
/**
* Telegrambot for Javarush Community from Javarush community.
*/
@Component
public class JavarushTelegramBot extends TelegramLongPollingBot {
@Override
public void onUpdateReceived(Update update) {
}
@Override
public String getBotUsername() {
return null;
}
@Override
public String getBotToken() {
return null;
}
}
یہ کلاس خلاصہ تھی اور تین طریقوں کو نافذ کرنا تھا۔ آئیے ان کے بارے میں مزید تفصیل سے بات کرتے ہیں:
- onUpdateReceived(اپ ڈیٹ اپ ڈیٹ) - یہ داخلی نقطہ ہے جہاں صارفین کے پیغامات پہنچیں گے۔ تمام نئی منطق یہاں سے آئے گی۔
- getBotUsername() - یہاں آپ کو ہمارے بوٹ کا صارف نام شامل کرنا ہوگا جس سے ہم جڑیں گے؛
- getBotToken() - اور یہ، اس کے مطابق، بوٹ ٹوکن ہے۔
- bot.username ;
- bot.token _
package com.github.javarushcommunity.jrtb.bot;
import org.springframework.beans.factory.annotation.Value;
import org.telegram.telegrambots.bots.TelegramLongPollingBot;
import org.telegram.telegrambots.meta.api.objects.Update;
/**
* Telegram bot for Javarush Community from Javarush community.
*/
@Component
public class JavarushTelegramBot extends TelegramLongPollingBot {
@Value("${bot.username}")
private String username;
@Value("${bot.token}")
private String token;
@Override
public void onUpdateReceived(Update update) {
}
@Override
public String getBotUsername() {
return username;
}
@Override
public String getBotToken() {
return token;
}
}
یہ دیکھا جا سکتا ہے کہ ہم نے متغیر کی قدر کو تشریح میں منتقل کر دیا ہے۔ اور جب SpringBoot ہمارے بوٹ آبجیکٹ کو تخلیق کرتا ہے، تو قدریں پراپرٹیز سے لی جائیں گی (دوبارہ، انگریزی سے ٹریسنگ پیپر - پراپرٹیز)۔ ہم تقریباً وہاں پہنچ چکے ہیں۔ آپ کو بوٹ کو کچھ جواب دینے کی ضرورت ہے۔ لہذا، آئیے onUpdateReceived طریقہ کو اپ ڈیٹ کریں ۔ ہمیں بوٹ پر آنے والے پیغام کو بازیافت کرنے اور اسے واپس بھیجنے کی ضرورت ہے۔ اس طرح ہم جان لیں گے کہ بوٹ کام کر رہا ہے۔ ایسا کرنے کے لیے، ہم تقریباً اور جلدی سے لکھیں گے کہ کیا ضرورت ہے:
@Override
public void onUpdateReceived(Update update) {
if(update.hasMessage() && update.getMessage().hasText()) {
String message = update.getMessage().getText().trim();
String chatId = update.getMessage().getChatId().toString();
SendMessage sm = new SendMessage();
sm.setChatId(chatId);
sm.setText(message);
try {
execute(sm);
} catch (TelegramApiException e) {
//todo add logging to the project.
e.printStackTrace();
}
}
}
یہاں سب کچھ بہت آسان ہے: ہم چیک کرتے ہیں کہ پیغام واقعی موجود ہے، لہذا ہم خود ہی پیغام ( پیغام ) اور چیٹ آئی ڈی ( chatId ) کو نکالتے ہیں جس میں خط و کتابت ہو رہی ہے۔ اس کے بعد، ہم پیغام بھیجنے کے لیے ایک آبجیکٹ بناتے ہیں SendMessage ، خود پیغام اور چیٹ آئی ڈی اسے بھیجتے ہیں - یعنی بوٹ کو کیا بھیجنا ہے اور کہاں۔ ہمارے پاس پہلے ہی یہ کافی ہے۔ اگلا، ہم JavarushTelegramBotApplication کلاس میں بنیادی طریقہ چلاتے ہیں اور ٹیلیگرام میں اپنے بوٹ کو تلاش کرتے ہیں: لاگز سے ہم دیکھتے ہیں کہ بوٹ شروع ہو گیا ہے۔ لہذا، اب وقت آگیا ہے کہ ٹیلی گرام پر جائیں اور بوٹ کو لکھیں: ہم اسٹارٹ پر کلک کرتے ہیں اور ہمیں فوری طور پر جواب موصول ہوتا ہے: آئیے چیک کرنے کے لیے کچھ اور بکواس لکھتے ہیں: اور بس، اس وقت ہم کہہ سکتے ہیں کہ ہمارا JRTB-2 کام مکمل ہو گیا ہے۔ . آپ واقعی یہاں ابھی تک کوئی ٹیسٹ نہیں لکھ سکتے، اس لیے ہم سب کچھ ویسا ہی چھوڑ دیں گے۔ اس کے بعد آپ کو ایک نیا عہد بنانے کی ضرورت ہے: کمٹ کے نام پر توجہ دیں: ایک بار پھر میں آپ کی توجہ اس طرف مبذول کر رہا ہوں۔ ایک کمٹ میں پہلے کام کا نام ہوتا ہے، اور پھر کیا کیا گیا ہے اس کی مزید تفصیلی وضاحت۔ Commit and Push... پر کلک کریں اور دوبارہ Push پر کلک کرکے تصدیق کریں : ہمارے پروجیکٹ پر جائیں ۔ پہلے کی طرح، GitHub نے پہلے ہی نئی برانچ دیکھی ہے اور مین کے لیے پل کی درخواست بنانے کی پیشکش کی ہے۔ ہم مزاحمت نہیں کرتے اور اسے تخلیق کرتے ہیں: ہمیشہ کی طرح، ہم نے پہلے ہی ایک لیبل، ایک پروجیکٹ کا انتخاب کیا ہے اور اسے مجھے تفویض کیا ہے۔ آخر میں، پل کی درخواست بنائیں پر کلک کریں۔ آئیے تھوڑا انتظار کریں جب تک کہ تعمیر مکمل ہو جائے - اور بس، پل کی درخواست ضم ہونے کے لیے تیار ہے:
ورژننگ
میں نے کسی نہ کسی طرح یہ نقطہ یاد کیا کہ ہمیں ورژن بنانے کی ضرورت ہے۔ ایسا کرنے کے لیے، ہم اپنی برانچ میں کچھ اور تبدیلیاں کریں گے۔ ہم IDEA پر واپس جاتے ہیں اور میموری میں پروجیکٹ ورژن کو دیکھتے ہیں: ورژن 0.0.1-SNAPSHOT ہے ۔ یہ ڈیوٹی ورژن ہے۔ اور ہم ہر نئے حل شدہ مسئلے کے ساتھ پروجیکٹ کے ورژن کو اپ ڈیٹ کرکے شروع کریں گے۔ جب تک ہم MVP تک نہیں پہنچیں گے، ورژن لاحقہ کے ساتھ آئے گا -SNAPSHOT۔ ورژننگ اسکیم کیا ہوگی؟ XYZ-SNAPSHOT کہاں:- X - اہم ورژن اپ ڈیٹ، اکثر پچھلے ورژن کے ساتھ پسماندہ مطابقت کے ساتھ مسائل پر مشتمل ہے؛
- Y - بہت بڑی تبدیلیاں نہیں، پچھلے ورژن کے ساتھ مکمل طور پر ہم آہنگ؛
- Z نقائص کا ایک کاؤنٹر ہے جو ہم نے پایا اور ٹھیک کیا۔
GO TO FULL VERSION