JavaRush /جاوا بلاگ /Random-SD /اسان ايڊمنسٽريٽر طور ڪم ڪرڻ جي صلاحيت شامل ڪريون ٿا ۽ ان ...

اسان ايڊمنسٽريٽر طور ڪم ڪرڻ جي صلاحيت شامل ڪريون ٿا ۽ ان لاءِ شماريات - ”جاوا پروجيڪٽ A کان 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 Constructor ۾ اسان منتظمين جو مجموعو پاس ڪنداسين ۽ ان کي شروع ڪنداسين:
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);
}
جيئن توهان مٿي ڏنل تعمير ڪندڙ مان ڏسي سگهو ٿا، اسان ٻيهر استعمال ڪريون ٿا Value annotation ، جنهن ۾ اسان ڪليڪشن ٺاهڻ لاءِ منطق پاس ڪريون ٿا. ۽ اھو اھو آھي، اھڙي طرح منتظم کي شامل ڪرڻ ختم ٿي ويو آھي. هاڻي، جڏهن هڪ غير منتظم بوٽ جي انگن اکرن تي ڊيٽا حاصل ڪرڻ چاهيندو، ته هن کي هيٺ ڏنل جواب ملندو: مان توهان کي سمجهي نه سگهيو آهيان 😟، لکو /مدد اهو معلوم ڪرڻ لاءِ ته مان ڇا سمجهان ٿو. هن طريقي سان اسان bot حڪمن لاء ڪردار مختلف ڪيو.

منتظمين لاءِ مدد جو حڪم شامل ڪرڻ

اڳيون، اهو منطقي هوندو ته منتظمين لاءِ الڳ مدد ڪمانڊ ٺاهيو وڃي . مستقبل ۾، هي حصو خاص طور تي وڌي سگهي ٿو. CommandName ۾ منتظم مدد جي قيمت شامل ڪريو:
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))

بوٽ ۾ حڪمن جي وضاحت شامل ڪرڻ

ٽيليگرام جي بوٽن ۾ هڪ ٻي دلچسپ خصوصيت آهي: توهان شامل ڪري سگهو ٿا قدر ۽ بيانن جا بيان جيڪي اهو قبول ڪري ٿو صارف لاءِ حڪمن کي استعمال ڪرڻ آسان بڻائي ٿو. اهو ڇا وانگر آهي؟ مثال طور، اچو ته BotFather ڏانهن وڃو - سڀ کان اهم ٽيليگرام بوٽ. جيڪڏهن توهان سليش / سان هڪ پيغام لکڻ شروع ڪيو، ته بوٽ اختيارات پيش ڪندو: "جاوا پروجيڪٽ A کان Z تائين": هن لاءِ ايڊمن ۽ شماريات جي طور تي ڪم ڪرڻ جي صلاحيت شامل ڪرڻ.  حصو 1 - 4۽ جيڪڏهن توهان لکڻ جاري رکو ٿا، اهو فلٽر ڪندو ۽ لاڳاپيل اختيارن کي ڏيکاريندو: "جاوا پروجيڪٽ A کان Z تائين": هن لاءِ ايڊمن ۽ شماريات جي طور تي ڪم ڪرڻ جي صلاحيت شامل ڪرڻ.  حصو 1 - 5بهترين ڪارڪردگي، صحيح؟ تنهنڪري مان هتي ساڳيو ڪم ڪرڻ چاهيان ٿو. مان ان کي بهترين طريقي سان ڪندس - ٽيليگرام ايپليڪيشن ذريعي. مان ڄاڻان ٿو ته اهو پروگرام جي لحاظ سان ٿي سگهي ٿو. پر مان نه ٿو ڪري سگهان. هي مضمونن جي هن سلسلي جي مقصدن لاء ضروري نه آهي. جيڪڏهن ڪو ڄاڻي ٿو ته اهو ڪيئن ڪجي، مون ڏانهن لکو، اسان ان کي شامل ڪنداسين. مان خوشيءَ سان قبول ڪندس ڪنهن به مدد سان. مون هڪ دفعو پڙهيو آهي ته اهو ڪمان جي نموني ذريعي ٿي سگهي ٿو جيڪو اسان لاء ڪم ڪري ٿو. هاڻي مان توهان کي ڏيکاريندس ته آئون اهو ڪيئن ڪري سگهان ٿو: اسان کي ٽيليگرام ۾ BotFather ڳولڻ جي ضرورت آهي، بوٽ چونڊيو جيڪو اسان ترتيب ڏيڻ چاهيون ٿا. اڳيون، چونڊيو بوٽ کي ايڊٽ ڪريو ۽ سيڪشن بابت حڪم. ھاڻي مان سڀ ڪجھ ڏيکاريندس پنھنجي ٽيسٽ بوٽ جو مثال استعمال ڪندي 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:
شروع ڪريو - بوٽ اسٽاپ سان ڪم شروع ڪريو / بحال ڪريو - بوٽ اسٽاپ سان ڪم کي روڪيو گروپ سبسب - مضمونن جي ھڪڙي گروپ ۾ رڪنيت حاصل ڪريو DeleteGroupSub - رڪنيت ختم ڪريو مضمونن جي ھڪڙي گروپ مان گروپ سبسب - گروپن جي فهرست جن ۾ توھان رڪنيت حاصل ڪئي آھي مدد - مون سان ڪم ڪرڻ ۾ مدد حاصل ڪريو
اهو واضح آهي ته اسان هتي منتظم حڪم نه کڻندا آهيون. صرف منتظمين کي انهن جي باري ۾ ڄاڻڻ گهرجي. اچو ته هي پيغام وٺون ۽ ان کي منتقل ڪريو BotFather: "جاوا پروجيڪٽ A کان Z تائين": هن لاءِ ايڊمن ۽ شماريات جي طور تي ڪم ڪرڻ جي صلاحيت شامل ڪرڻ.  حصو 1 - 10جيئن عام طور تي ڪيس آهي، اهو پهريون ڀيرو ڪم نه ڪيو. ڪجهه منٽن جي سوچڻ کان پوء، مون سڀني حڪمن کي لوئر ڪيس ۾ پاس ڪيو، نه ڪي ڪيمل ڪيس ۾، ۽ سڀ ڪجهه ٺيڪ ٿي ويو. اسان پنهنجي فائل ۾ اپڊيٽ ڪيو: 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