JavaRush /Java Blog /Random-TK /Administrator bolup işlemek ukybyny we onuň üçin statisti...

Administrator bolup işlemek ukybyny we onuň üçin statistika goşýarys - “Java taslamasy A-dan Z”

Toparda çap edildi
Hemmelere salam, eziz dostlarym. Şeýlelikde, bot eýýäm işleýär we täze makalalar barada habarnamalar iberýär. Entek ulanmasaňyz, ine şu baglanyşyk: Javarush Telegram Bot . Bolýar, bu gün diňe administratorlar üçin işleýän buýruklary goşmak barada gürleşeris. Bu buýruklaryň biri statistika we kömek tagtasydyr. Bu näme üçin zerur? Häzirki wagtda eseri hakyky zerurlykdan has köp bu meseläniň çäginde düşündirişler bilen suratlandyrmak has gyzykly. "A-dan Z-a çenli Java taslamasy": Dolandyryjy bolup işlemek ukybyny we onuň üçin statistikany goşmak - 1Dogrusy, statistika toparyna barýandygymyz sebäpli, ony giňeldip we has habarly edip bileris. MVP-den soň, mysal üçin awtorlar üçin statistikany yzyna gaýtarmak mümkin bolar. Emma soňundan has köp ...)

Adminleri we buýruklary goşmaga düşüneliň

Işimizi esasy şahany täzeläp, şoňa esaslanyp täzesini döretmek bilen başlaýarys - STEP_9_JRTB-10. Haýsy buýrugyň adminlere degişlidigini we haýsysyna degişlidigini anyklamak üçin buýrugy bellik etmeli. Munuň üçin düşündiriş döredeliň. Bu näme many berýär? Muny öň etmedik. IDEA-da synp döredilende bu saýlanyp bilner. Men häzir görkezerin. Buýruk bukjasynda täze düşündiriş bukjasyny dörediň we onda AdminCommand düşündiriş: "Java-dan A-dan Z" taslamasy: Admin bolup işlemek ukybyny we onuň üçin statistika goşmak.  1-nji bölümAnnotasiýanyň özi şeýle bolar:
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 {
}
Bu ýerde başga zat gerek däl. Ondan soň, ony “StatCommand” buýrugyna goşýarys: "Java-dan A-dan Z" taslamasy: Admin bolup işlemek ukybyny we onuň üçin statistika goşmak.  1-nji bölümIndi hemme zat işlemeli ... Ora-da ýok? Nook, elbetde)) Netijäni dogry öndürmegi CommandContainer-ä öwretmeli. Munuň üçin geliň, nämä geçendigine baglylykda işlemek buýrugy berýän “RetrieCommand” usulyny täzeläliň. Ulanyjy adyny Telegramda administrator kesgitleýji hökmünde ulanarys. Chat_id-den üýtgeşik we okamak aňsat. Nädip almaly? Habar bilen gelýän täzelenme obýektinde:
update.getMessage().getFrom().getUserName()
Aboveokardakylaryň hemmesini jemläp, “CommandContainer # retveCommand” usulyny täzeläliň :
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));
}
Bu ýerde görşüňiz ýaly, berlen buýrukda AdminCommand düşündirişiniň bardygyny ýa-da ýokdugyny barlaýan isAdminCommand usulyny goşdum. Diňe administrator buýrugy bolsa, elýeterli adminler ýygyndysynda şol ulanyjy adynyň bardygyny ýa-da ýokdugyny barlaýarys. Theeri gelende aýtsak, ine, OOP, ähli şöhraty bilen: islendik ýerine ýetiriş bolup biljek interfeýsi geçýäris. Onlyöne diňe buýruk interfeýsini ýerine ýetirýän synpdan geçip bileris . Bir zatdan başga hemme zat düşnükli ýaly: adminler nireden geldi? Men häzir görkezerin. Häzirlikçe administratorlary aňsatlyk bilen sazlap bolar ýaly daşky gurşaw üýtgeýjisi hökmünde geçmek isleýärin. Bu üýtgeýjide, dolandyryjy boljak telegramma ulanyjylarynyň ähli ulanyjy atlary, dykgat bilen bölünen setir bolar. Munuň üçin application.properties-e goşuň:
bot.admins: robeskman,romankh3
“CommandContainer” konstruktorynda administratorlaryň ýygyndysyny geçeris we başlarys:
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-da eýýäm bir setirden kolleksiýa almagyň ähli jadylary bolar:
@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);
}
Aboveokardaky konstruktordan görşüňiz ýaly, ýene-de kolleksiýany döretmek üçin logika geçýän Gymmat düşündirişini ulanýarys. Ine, administrator goşmak gutardy. Indi, administrator däl botyň statistikasy barada maglumat almak islese, aşakdaky jogaby alar: Men saňa düşünemok I, düşünýänlerimi bilmek üçin ýaz / kömek et. Şeýlelik bilen bot buýruklary üçin rollary tapawutlandyrdyk.

Adminler üçin kömek buýrugy goşmak

Ondan soň, dolandyryjylar üçin aýratyn kömek buýrugyny döretmek mantykly bolar . Geljekde bu bölek ep-esli ösüp biler. Admin kömek bahasyny CommandName goşuň:
ADMIN_HELP("/ahelp")
Buýruk bukjasynda “AdminHelpCommand” synpyny dörediň :
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);
   }
}
Şu wagta çenli gaty ýönekeý. Geljekde gaty gowy ösüp biler. Bu buýruk üçin şablonymyzdan synag:
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);
   }
}
Elbetde, buýrugy kartamyzdaky CommandContainer-e goşmaly:
.put(ADMIN_HELP.getCommandName(), new AdminHelpCommand(sendBotMessageService))

Bot-a buýruklaryň düşündirişini goşmak

Telegram botlarynyň başga bir gyzykly aýratynlygy bar: ulanyjynyň buýruklary ulanmagyny aňsatlaşdyrmak üçin kabul eden buýruklarynyň bahalaryny we düşündirişlerini goşup bilersiňiz. Nämä meňzeýär? Mysal üçin, iň möhüm Telegram boty BotFather - e geçeliň . Eger çyzgy / bilen habar ýazyp başlasaňyz, bot opsiýalary hödürlär: "Java-dan A-dan Z" taslamasy: Admin bolup işlemek ukybyny we onuň üçin statistika goşmak.  1-nji bölümwritingazmagy dowam etdirseňiz, süzüler we degişli opsiýalary görkezer: "Java-dan A-dan Z" taslamasy: Admin bolup işlemek ukybyny we onuň üçin statistika goşmak.  1-nji bölümSalkyn işlemek, şeýlemi? Şonuň üçin bu ýerde hem edil şonuň ýaly etmek isleýärin. Men muny mümkin boldugyça iň gowy usul bilen ederin - Telegram programmasy arkaly. Munuň programma taýdan edilip bilinjekdigini bilýärin. Emma edip bilemok. Bu makalalaryň tapgyrynyň maksady üçin zerur däl. Muny nädip etmelidigini bilýän bar bolsa, maňa ýaz, bizem goşarys. Bu meselede islendik kömegi höwes bilen kabul ederin. Bir gezek munuň biziň üçin işleýän buýruk nagşy arkaly edilip bilinjekdigini okapdym. Indi muny nädip edip biljekdigimi size görkezerin: Telegramda BotFather tapmaly, sazlamak isleýän botymyzy saýlamaly. Ondan soň, bot we redaktirleme bölümini redaktirlemegi saýlaň. Indi Javarush üçin synag botumyň mysalyny ulanyp hemme zady görkezerin. BotFather-de buýruk ýazýarys: / mybots"Java-dan A-dan Z" taslamasy: Admin bolup işlemek ukybyny we onuň üçin statistika goşmak.  1-nji bölüm Soňra, zerur boty saýlaň, meniň ýagdaýymda test_javarush_community_bot bolar: "Java-dan A-dan Z" taslamasy: Admin bolup işlemek ukybyny we onuň üçin statistika goşmak.  1-7-nji bölümDüwmeleriň sanawyndan görnüşi ýaly, bu ýerde belligi görüp, boty pozup we geçirip bilersiňiz. başga biri. Boty redaktirlemek isleýäris, şonuň üçin Edit Bot saýlaýarys : Bu ýerde bolsa Edit Commands"Java-dan A-dan Z" taslamasy: Admin bolup işlemek ukybyny we onuň üçin statistika goşmak.  1-nji bölüm saýlaýarys : Diňe belli bir formatda habar bermeli, buýruklar hökmünde ýazylar. Ora-da hemmesini aýyrmak islesek, ýaz / boş. Bu maksat bilen, SET_UP_COMMANDS_BOT_FATHER taslamasynyň düýbünde bir faýl dörederin , onda bir zat bolaýsa dikeltmek ýa-da täzelemek aňsat bolar ýaly ähli buýruklarymyzy ýazaryn. SET_UP_COMMANDS_BOT_FATHER:"Java-dan A-dan Z" taslamasy: Admin bolup işlemek ukybyny we onuň üçin statistika goşmak.  1-nji bölüm
başlamak - bot duralgasy bilen işe başlamak / dikeltmek - bot addGroupSub bilen işini duruzmak - deleteGroupSub makalalar toparyna ýazylmak - makalalar toparyndan abunalyk etmekGroupSub - abuna ýazylan toparlaryň sanawy - meniň bilen işleşmäge kömek alyň
Bu ýerde administrator buýruklaryny ýerine ýetirmeýändigimiz düşnüklidir. Olar hakda diňe adminler bilmeli. Geliň, bu habary alyp, BotFather-e geçireliň: "Java-dan A-dan Z" taslamasy: Admin bolup işlemek ukybyny we onuň üçin statistika goşmak.  1-10-njy bölümAdat bolşy ýaly, ilkinji gezek netije bermedi. Birnäçe minut oýlananymdan soň, KamelCase-de däl-de, hemme buýruklary kiçi harp bilen geçirdim we hemme zat gowy boldy. Faýlymyzda täzeleýäris: SET_UP_COMMANDS_BOT_FATHER:
başlamak - bot duralgasy bilen işe başlamak / dikeltmek - bot addgroupsub bilen işini duruzmak - makalalar toparyna abuna ýazylmak - bir topar makala sanaw toparyndan abunalyk etmek - abuna ýazylan toparlaryň sanawy - meniň bilen işleşmäge kömek alyň
Indi botymyza baryp, buýruklaryň awtomatiki ýüklenendigini ýa-da ýokdugyny görüp bilersiňiz: "Java-dan A-dan Z" taslamasy: Admin bolup işlemek ukybyny we onuň üçin statistika goşmak.  1-nji bölümGör, indi nähili owadan! Şeýle hem, bu makalanyň çäginde statistikanyň işleýşini giňeltmek isledim, ýöne material eýýäm manyda-da, mazmunda-da köpdi. Şonuň üçin muny indiki gezek yza süýşüreris. Jagny, JRTB-10 meselesi doly ýerine ýetirilmedi: indiki makalada tamamlarys. Şol bir wagtyň özünde, esasy botda eýýäm bar bolan üýtgeşmeleri goşaryn. Awtory goldamak isleýärsiňiz, ýöne nädip bilmeýärsiňiz? Bu gaty ýönekeý - tg kanalyma , GitHub hasabyma ýazylyň we olar hakda pikirleriňizi şu ýerdäki makalalarda ýazyň. Bu seslenme meniň üçin möhümdir, şonuň üçin olaryň okalýandygyna we gyzyklanýandygyna düşünýärin.

Netijeler

Geliň, şu gün başdan geçirenlerimizi jemläliň:
  1. Öz bellikleriňizi nädip goşmalydygyny we toparlarda rollary kesgitlemek üçin marker hökmünde nädip ulanyp boljakdygyny ara alyp maslahatlaşdyk. .Eri gelende aýtsak, bu interfeýsiň kömegi bilen edilip bilnerdi. Edil şonuň ýaly, marker interfeýsini dörederis we soňra gelýän obýektiň bu interfeýsi ýerine ýetirýändigini ýa-da ýokdugyny barlarys.
  2. Adminler üçin Kömek buýrugy goşuldy. Özüm barada aýtsam, bu botyň ösüşinde-de möhüm bölek.
  3. Botda ýazylanda buýruklaryň düşündirişini we çykýan ýerini nädip goşmalydygyny ara alyp maslahatlaşdyk. Gyzykly aýratynlyk, hökman goşmaly.
Bu makala esaslanyp, çekmek haýyşyny döretdim , onuň jikme-jikliklerini görüp bilersiňiz. Hemişe bolşy ýaly üns bereniňiz üçin hemmäňize sag bolsun aýdýaryn: halanmak - ýazylmak - jaň , taslamamyz üçin ýyldyz, makalany teswirläň we baha beriň! Indiki makalada görüşeris!

Tapgyryň ähli materiallarynyň sanawy bu makalanyň başynda.

Teswirler
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION