JavaRush /جاوا بلاگ /Random-UR /ہم ایڈمنسٹریٹر کے طور پر کام کرنے کی صلاحیت اور اس کے لیے...

ہم ایڈمنسٹریٹر کے طور پر کام کرنے کی صلاحیت اور اس کے لیے اعداد و شمار شامل کرتے ہیں - "A to Z" جاوا پروجیکٹ

گروپ میں شائع ہوا۔
سب کو سلام، میرے پیارے دوستو۔ لہذا، بوٹ پہلے سے ہی کام کر رہا ہے اور نئے مضامین کے بارے میں اطلاعات بھیج رہا ہے۔ اگر آپ اسے ابھی تک استعمال نہیں کرتے ہیں، تو یہ لنک ہے: Javarush Telegram Bot ۔ ٹھیک ہے، آج ہم ان کمانڈز کو شامل کرنے کے بارے میں بات کریں گے جو صرف ایڈمنز کے لیے کام کرتے ہیں۔ ان میں سے ایک حکم شماریات اور مدد بورڈ ہے۔ یہ کیوں ضروری ہے؟ اس وقت اس کام کی اصل ضرورت سے زیادہ اس کام کے فریم ورک کے اندر تشریحات کے ساتھ کام کو بیان کرنا زیادہ دلچسپ ہے۔ "A سے Z تک جاوا پروجیکٹ": ایڈمنسٹریٹر کے طور پر کام کرنے کی صلاحیت اور اس کے لیے شماریات شامل کرنا - 1ٹھیک ہے، چونکہ ہم شماریات کی ٹیم میں جا رہے ہیں، اس لیے ہم اسے بڑھا سکتے ہیں اور اسے مزید معلوماتی بنا سکتے ہیں۔ MVP کے بعد، مثال کے طور پر، مصنفین کے لیے اعداد و شمار واپس کرنا ممکن ہو گا۔ لیکن بعد میں اس پر مزید...)

آئیے ان کے لیے ایڈمنز اور کمانڈز کو شامل کرنا سمجھتے ہیں۔

ہم اپنا کام مرکزی برانچ کو اپ ڈیٹ کرکے اور اس کی بنیاد پر ایک نیا بنا کر شروع کرتے ہیں - STEP_9_JRTB-10۔ یہ جاننے کے لیے کہ کون سی کمانڈ منتظمین پر لاگو ہوتی ہے اور کون سی ہر ایک پر لاگو ہوتی ہے، آپ کو ٹیم پر لیبل لگانا ہوگا۔ ایسا کرنے کے لیے، آئیے ایک تشریح بناتے ہیں۔ اس کا کیا مطلب ہے؟ ہم نے پہلے ایسا نہیں کیا ہے۔ IDEA میں کلاس بناتے وقت اسے منتخب کیا جا سکتا ہے۔ اب میں تمہیں دکھاتا ہوں۔ کمانڈ پیکیج میں، ایک نیا تشریحی پیکیج بنائیں اور اس میں AdminCommand تشریح: "A سے Z تک جاوا پروجیکٹ": ایڈمن کے طور پر کام کرنے کی صلاحیت اور اس کے لیے اعداد و شمار شامل کرنا۔  حصہ 1 - 2تشریح خود اس طرح ہوگی:
package com.github.javarushcommunity.jrtb.command.annotation;

import com.github.javarushcommunity.jrtb.command.Command;

import java.lang.annotation.Retention;

import static java.lang.annotation.RetentionPolicy.RUNTIME;

/**
* Mark if {@link Command} can be viewed only by admins.
*/
@Retention(RUNTIME)
public @interface AdminCommand {
}
ہمیں یہاں کسی اور چیز کی ضرورت نہیں ہے۔ اگلا، ہم اسے اپنی StatCommand کمانڈ میں شامل کریں: "A سے Z تک جاوا پروجیکٹ": ایڈمن کے طور پر کام کرنے کی صلاحیت اور اس کے لیے اعداد و شمار شامل کرنا۔  حصہ 1 - 3اب سب کچھ کام کرنا چاہیے... یا نہیں؟ نہیں، یقیناً)) ہمیں صحیح طریقے سے نتیجہ پیدا کرنے کے لیے اپنے CommandContainer کو سکھانے کی ضرورت ہے۔ ایسا کرنے کے لیے، آئیے retrieveCommand طریقہ کو اپ ڈیٹ کریں ، جو اس کے پاس کیا گیا ہے اس پر منحصر ہے کہ چلانے کے لیے کمانڈ جاری کرتا ہے۔ ہم اس کا صارف نام ٹیلی گرام میں بطور ایڈمن شناخت کنندہ استعمال کریں گے۔ یہ chat_id کے مقابلے میں منفرد اور پڑھنا آسان ہے۔ اسے کیسے حاصل کیا جائے؟ یہ اپ ڈیٹ آبجیکٹ میں ہے، جو اس پیغام کے ساتھ آتا ہے:
update.getMessage().getFrom().getUserName()
مندرجہ بالا سب کا خلاصہ کرتے ہوئے، آئیے CommandContainer#retrieveCommand طریقہ کو اپ ڈیٹ کریں :
public Command retrieveCommand(String commandIdentifier, String username) {
   Command orDefault = commandMap.getOrDefault(commandIdentifier, unknownCommand);
   if (isAdminCommand(orDefault)) {
       if (admins.contains(username)) {
           return orDefault;
       } else {
           return unknownCommand;
       }
   }
   return orDefault;
}

private boolean isAdminCommand(Command command) {
   return nonNull(command.getClass().getAnnotation(AdminCommand.class));
}
جیسا کہ آپ یہاں دیکھ سکتے ہیں، میں نے شامل کیا ہے isAdminCommand طریقہ ، جو چیک کرتا ہے کہ آیا فراہم کردہ کمانڈ پر AdminCommand تشریح موجود ہے۔ اور اگر یہ صرف ایڈمن کی کمانڈ ہے، تو ہم یہ دیکھنے کے لیے چیک کرتے ہیں کہ آیا ہمارے پاس ہمارے دستیاب ایڈمنز کے مجموعے میں وہ صارف نام موجود ہے۔ ویسے، یہ یہاں ہے، OOP، اپنی پوری شان کے ساتھ: ہم صرف ایک انٹرفیس پاس کرتے ہیں، جو کوئی بھی نفاذ ہو سکتا ہے۔ لیکن ہم صرف اس کلاس کو پاس کر سکتے ہیں جو کمانڈ انٹرفیس کو نافذ کرتی ہے ۔ اور سب کچھ واضح نظر آتا ہے، سوائے ایک چیز کے: ایڈمنز کہاں سے آئے؟ میں تمہیں اب دکھاتا ہوں۔ فی الحال میں ایڈمنز کو ماحولیاتی متغیر کے طور پر پاس کرنا چاہتا ہوں تاکہ اسے آسانی سے کنفیگر کیا جا سکے۔ یہ متغیر ایک لائن پر مشتمل ہوگا جس میں ٹیلیگرام استعمال کرنے والوں کے تمام صارف نام جو ایڈمنسٹریٹر ہوں گے، کوما سے الگ کرکے اشارہ کیا گیا ہے۔ ایسا کرنے کے لیے، application.properties میں شامل کریں:
bot.admins: robeskman,romankh3
CommandContainer کنسٹرکٹر میں ہم منتظمین کا مجموعہ پاس کریں گے اور اسے شروع کریں گے:
public class CommandContainer {

   private final ImmutableMap<String, Command> commandMap;
   private final Command unknownCommand;
   private final List<String> admins;

   public CommandContainer(SendBotMessageService sendBotMessageService, TelegramUserService telegramUserService,
                           JavaRushGroupClient javaRushGroupClient, GroupSubService groupSubService,
                           List<String> admins) {

       this.admins = admins;
اور پہلے ہی JavaRushTelegramBot میں پراپرٹیز میں سٹرنگ سے کلیکشن حاصل کرنے کا تمام جادو موجود ہوگا:
@Autowired
public JavarushTelegramBot(TelegramUserService telegramUserService, JavaRushGroupClient groupClient, GroupSubService groupSubService,
                          @Value("#{'${bot.admins}'.split(',')}") List<String> admins) {
   this.commandContainer =
           new CommandContainer(new SendBotMessageServiceImpl(this),
                   telegramUserService, groupClient, groupSubService, admins);
}
جیسا کہ آپ اوپر کنسٹرکٹر سے دیکھ سکتے ہیں، ہم دوبارہ ویلیو اینوٹیشن استعمال کرتے ہیں ، جس میں ہم مجموعہ بنانے کے لیے منطق کو پاس کرتے ہیں۔ اور بس، ایڈمن کو شامل کرنا ختم ہو گیا۔ اب، جب کوئی نان ایڈمن بوٹ کے اعدادوشمار پر ڈیٹا حاصل کرنا چاہتا ہے، تو اسے درج ذیل جواب ملے گا: میں آپ کو سمجھ نہیں رہا ہوں 😟، لکھیں /مدد یہ معلوم کرنے کے لیے کہ میں کیا سمجھتا ہوں۔ اس طرح ہم نے بوٹ کمانڈز کے کرداروں میں فرق کیا۔

منتظمین کے لیے مدد کی کمانڈ شامل کرنا

اگلا، منتظمین کے لیے علیحدہ مدد کمانڈ بنانا منطقی ہوگا ۔ مستقبل میں، یہ حصہ نمایاں طور پر بڑھ سکتا ہے. کمانڈ نام میں ایڈمن ہیلپ ویلیو شامل کریں:
ADMIN_HELP("/ahelp")
کمانڈ پیکیج میں AdminHelpCommand کلاس بنائیں :
package com.github.javarushcommunity.jrtb.command;

import com.github.javarushcommunity.jrtb.service.SendBotMessageService;
import org.telegram.telegrambots.meta.api.objects.Update;

import static com.github.javarushcommunity.jrtb.command.CommandName.STAT;
import static java.lang.String.format;

/**
* Admin Help {@link Command}.
*/
public class AdminHelpCommand implements Command {

   public static final String ADMIN_HELP_MESSAGE = format("✨<b>Доступные команды админа</b>✨\n\n"
                   + "<b>Получить статистику</b>\n"
                   + "%s - статистика бота\n",
           STAT.getCommandName());

   private final SendBotMessageService sendBotMessageService;

   public AdminHelpCommand(SendBotMessageService sendBotMessageService) {
       this.sendBotMessageService = sendBotMessageService;
   }

   @Override
   public void execute(Update update) {
       sendBotMessageService.sendMessage(update.getMessage().getChatId().toString(), ADMIN_HELP_MESSAGE);
   }
}
اب تک یہ بہت آسان ہے۔ یہ مستقبل میں کافی اچھی طرح سے بڑھ سکتا ہے۔ اس کمانڈ کے لیے، ہماری ٹیمپلیٹ سے ایک ٹیسٹ:
package com.github.javarushcommunity.jrtb.command;

import org.junit.jupiter.api.DisplayName;

import static com.github.javarushcommunity.jrtb.command.AdminHelpCommand.ADMIN_HELP_MESSAGE;
import static com.github.javarushcommunity.jrtb.command.CommandName.ADMIN_HELP;

@DisplayName("Unit-level testing for AdminHelpCommand")
public class AdminHelpCommandTest extends AbstractCommandTest {

   @Override
   String getCommandName() {
       return ADMIN_HELP.getCommandName();
   }

   @Override
   String getCommandMessage() {
       return ADMIN_HELP_MESSAGE;
   }

   @Override
   Command getCommand() {
       return new AdminHelpCommand(sendBotMessageService);
   }
}
یقینا، کمانڈ کو ہمارے نقشے میں کمانڈ کنٹینر میں شامل کرنے کی ضرورت ہے:
.put(ADMIN_HELP.getCommandName(), new AdminHelpCommand(sendBotMessageService))

بوٹ میں کمانڈز کی تفصیل شامل کرنا

ٹیلیگرام بوٹس میں ایک اور دلچسپ خصوصیت ہے: آپ ان کمانڈز کی قدریں اور وضاحتیں شامل کر سکتے ہیں جنہیں وہ قبول کرتا ہے تاکہ صارف کے لیے کمانڈز کو استعمال کرنا آسان ہو۔ یہ کیسا لگتا ہے؟ مثال کے طور پر، آئیے بوٹ فادر پر جائیں - ٹیلیگرام کا سب سے اہم بوٹ۔ اگر آپ سلیش/ کے ساتھ پیغام لکھنا شروع کرتے ہیں، تو بوٹ آپشنز پیش کرے گا: "A سے Z تک جاوا پروجیکٹ": ایڈمن کے طور پر کام کرنے کی صلاحیت اور اس کے لیے اعداد و شمار شامل کرنا۔  حصہ 1 - 4اور اگر آپ لکھنا جاری رکھیں گے، تو یہ فلٹر کرے گا اور متعلقہ آپشنز دکھائے گا: "A سے Z تک جاوا پروجیکٹ": ایڈمن کے طور پر کام کرنے کی صلاحیت اور اس کے لیے اعداد و شمار شامل کرنا۔  حصہ 1 - 5بہترین فعالیت، ٹھیک ہے؟ تو میں یہاں بھی ایسا ہی کرنا چاہتا ہوں۔ میں ٹیلیگرام ایپلی کیشن کے ذریعے - یہ سب سے بہتر طریقے سے کروں گا۔ میں جانتا ہوں کہ یہ پروگرام کے لحاظ سے کیا جا سکتا ہے۔ لیکن میں نہیں کر سکتا. مضامین کے اس سلسلے کے مقاصد کے لیے یہ ضروری نہیں ہے۔ اگر کوئی جانتا ہے کہ یہ کیسے کرنا ہے، مجھے لکھیں، ہم اسے شامل کریں گے. میں اس کے ساتھ کسی بھی مدد کو بخوشی قبول کروں گا۔ میں نے ایک بار پڑھا تھا کہ یہ ہمارے لیے کام کرنے والے کمانڈ پیٹرن کے ذریعے کیا جا سکتا ہے۔ اب میں آپ کو دکھاؤں گا کہ میں یہ کیسے کر سکتا ہوں: ہمیں ٹیلیگرام میں بوٹ فادر کو تلاش کرنے کی ضرورت ہے، اس بوٹ کو منتخب کریں جسے ہم کنفیگر کرنا چاہتے ہیں۔ اگلا، بوٹ میں ترمیم کریں اور کمانڈز کے بارے میں سیکشن کو منتخب کریں۔ اب میں Javarush کے لیے اپنے ٹیسٹ بوٹ کی مثال کا استعمال کرتے ہوئے سب کچھ دکھاؤں گا۔ BotFather پر ہم کمانڈ لکھتے ہیں: /mybots"A سے Z تک جاوا پروجیکٹ": ایڈمن کے طور پر کام کرنے کی صلاحیت اور اس کے لیے اعداد و شمار شامل کرنا۔  حصہ 1 - 6 اگلا، ہمیں جس بوٹ کی ضرورت ہے اسے منتخب کریں، میرے معاملے میں یہ test_javarush_community_bot ہوگا: "A سے Z تک جاوا پروجیکٹ": ایڈمن کے طور پر کام کرنے کی صلاحیت اور اس کے لیے اعداد و شمار شامل کرنا۔  حصہ 1 - 7جیسا کہ آپ بٹنوں کی فہرست سے دیکھ سکتے ہیں، یہاں آپ ٹوکن دیکھ سکتے ہیں، بوٹ کو حذف کر سکتے ہیں، اور اسے منتقل کر سکتے ہیں۔ کوئی اور. ہم بوٹ میں ترمیم کرنے میں دلچسپی رکھتے ہیں، اس لیے ہم Edit Bot کو منتخب کرتے ہیں : "A سے Z تک جاوا پروجیکٹ": ایڈمن کے طور پر کام کرنے کی صلاحیت اور اس کے لیے اعداد و شمار شامل کرنا۔  حصہ 1 - 8اور یہاں ہم Edit Commands کو منتخب کرتے ہیں : "A سے Z تک جاوا پروجیکٹ": ایڈمن کے طور پر کام کرنے کی صلاحیت اور اس کے لیے اعداد و شمار شامل کرنا۔  حصہ 1 - 9ہمیں صرف ایک مخصوص فارمیٹ میں پیغام فراہم کرنے کی ضرورت ہے، اور اسے بطور کمانڈ ریکارڈ کیا جائے گا۔ یا اگر ہم ان سب کو ہٹانا چاہتے ہیں تو /خالی لکھیں۔ اس مقصد کے لیے، میں پروجیکٹ کے روٹ میں ایک فائل بناؤں گا SET_UP_COMMANDS_BOT_FATHER ، جس میں میں اپنی تمام کمانڈز لکھوں گا تاکہ کچھ ہونے کی صورت میں اسے بحال یا اپ ڈیٹ کرنا آسان ہو۔ SET_UP_COMMANDS_BOT_FATHER:
شروع کریں - بوٹ اسٹاپ کے ساتھ کام شروع کریں / بحال کریں - بوٹ ایڈ گروپسب کے ساتھ کام کو روکیں - مضامین کے ایک گروپ کو سبسکرائب کریں حذف کریں گروپسب - مضامین کے ایک گروپ سے ان سبسکرائب کریں گروپسب - ان گروپس کی فہرست جن میں آپ نے سبسکرائب کیا ہے - میرے ساتھ کام کرنے میں مدد حاصل کریں
یہ واضح ہے کہ ہم یہاں ایڈمن کمانڈ نہیں لیتے ہیں۔ ان کے بارے میں صرف منتظمین کو معلوم ہونا چاہیے۔ آئیے یہ پیغام لیں اور اسے BotFather تک پہنچائیں: "A سے Z تک جاوا پروجیکٹ": ایڈمن کے طور پر کام کرنے کی صلاحیت اور اس کے لیے اعداد و شمار شامل کرنا۔  حصہ 1 - 10جیسا کہ عام طور پر ہوتا ہے، یہ پہلی بار کام نہیں کر سکا۔ چند منٹ کی سوچ کے بعد، میں نے تمام کمانڈز کو چھوٹے کیس میں پاس کیا، نہ کہ پہلے کی طرح CamelCase میں، اور سب کچھ ٹھیک ہو گیا۔ ہم اپنی فائل میں اپ ڈیٹ کریں: SET_UP_COMMANDS_BOT_FATHER:
شروع کریں - بوٹ اسٹاپ کے ساتھ کام شروع کریں / بحال کریں - بوٹ ایڈ گروپسب کے ساتھ کام کو روکیں - مضامین کے ایک گروپ کو سبسکرائب کریں حذف کریں گروپسب - مضامین کے ایک گروپ سے رکنیت ختم کریں گروپسب - ان گروپس کی فہرست جن میں آپ نے سبسکرائب کیا ہے - میرے ساتھ کام کرنے میں مدد حاصل کریں
اب آپ ہمارے بوٹ پر جا کر دیکھ سکتے ہیں کہ آیا کمانڈز خود بخود لوڈ ہو گئے ہیں: "A سے Z تک جاوا پروجیکٹ": ایڈمن کے طور پر کام کرنے کی صلاحیت اور اس کے لیے اعداد و شمار شامل کرنا۔  حصہ 1 - 11دیکھو اب یہ کتنا خوبصورت ہے! میں اس مضمون کے فریم ورک کے اندر اعداد و شمار کی فعالیت کو بھی بڑھانا چاہتا تھا، لیکن مواد پہلے سے ہی معنی اور مواد دونوں لحاظ سے بہت بڑا تھا۔ اس لیے ہم اسے اگلی بار کے لیے ملتوی کر دیں گے۔ یعنی JRTB-10 کا کام مکمل طور پر نہیں ہوا ہے: ہم اسے اگلے مضمون میں مکمل کریں گے۔ ایک ہی وقت میں، میں مرکزی بوٹ میں پہلے سے موجود تمام تبدیلیوں کو شامل کروں گا۔ مصنف کی حمایت کرنا چاہتے ہیں، لیکن نہیں جانتے کہ کیسے؟ یہ بہت آسان ہے - میرے tg چینل ، میرے GitHub اکاؤنٹ کو سبسکرائب کریں اور یہاں مضامین میں ان کے بارے میں اپنی رائے لکھیں۔ یہ تاثرات میرے لیے اہم ہیں، اس لیے میں سمجھتا ہوں کہ وہ پڑھے ہوئے ہیں اور ان میں دلچسپی رکھتے ہیں۔

نتائج

آئیے خلاصہ کرتے ہیں کہ آج ہم کیا گزرے:
  1. ہم نے اس بات پر تبادلہ خیال کیا کہ آپ کی اپنی تشریح کیسے شامل کی جائے اور اسے ٹیموں میں کرداروں کی وضاحت کرنے کے لیے بطور مارکر کیسے استعمال کیا جا سکتا ہے۔ ویسے، یہ انٹرفیس کا استعمال کرتے ہوئے کیا جا سکتا تھا. اسی طرح، ہم ایک مارکر انٹرفیس بنائیں گے اور پھر چیک کریں گے کہ آنے والی چیز اس انٹرفیس کو نافذ کرتی ہے یا نہیں۔
  2. ایڈمنز کے لیے ہیلپ کمانڈ شامل کر دی گئی۔ میرے لئے، یہ بھی اس بوٹ کی ترقی میں ایک اہم حصہ ہے.
  3. ہم نے اس بات پر تبادلہ خیال کیا کہ بوٹ میں لکھتے وقت کمانڈز کی تفصیل اور پاپ اپ کیسے شامل کیا جائے۔ دلچسپ خصوصیت، یقینی طور پر شامل کرنے کے قابل۔
اس مضمون کی بنیاد پر، میں نے ایک پل کی درخواست بنائی ، آپ اس کی تفصیلات دیکھ سکتے ہیں۔ آپ کی توجہ کے لیے آپ سب کا شکریہ، ہمیشہ کی طرح: پسند کریں - سبسکرائب کریں - گھنٹی ، ہمارے پروجیکٹ کے لیے ستارہ، تبصرہ کریں اور مضمون کی درجہ بندی کریں! اگلے مضمون میں ملتے ہیں!

سیریز کے تمام مواد کی فہرست اس مضمون کے شروع میں ہے۔

تبصرے
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION