JavaRush /Blog Jawa /Random-JV /Kita nambah kemampuan kanggo bisa dadi administrator lan ...

Kita nambah kemampuan kanggo bisa dadi administrator lan statistik kanggo dheweke - "Proyek Jawa saka A nganti Z"

Diterbitake ing grup
Halo kabeh, kanca-kanca sing daktresnani. Dadi, bot wis kerja lan ngirim kabar babagan artikel anyar. Yen sampeyan durung nggunakake, iki link: Javarush Telegram Bot . Nah, dina iki kita bakal ngomong babagan nambahake perintah sing mung bisa digunakake kanggo admin. Salah sawijining prentah kasebut yaiku statistik lan papan bantuan. Yagene iki perlu? Saiki, luwih menarik kanggo njlèntrèhaké karya kanthi anotasi ing kerangka tugas iki tinimbang kabutuhan nyata. "Proyek Jawa saka A nganti Z": Nambahake kemampuan kanggo bisa dadi administrator lan statistik kanggo dheweke - 1Ya, amarga kita arep menyang tim statistik, kita bisa nggedhekake lan nggawe luwih informatif. Sawise MVP, bakal bisa bali statistik kanggo penulis, contone,. Nanging liyane babagan mengko ...)

Ayo ngerti nambah admin lan printah kanggo wong-wong mau

Kita miwiti karya kanthi nganyari cabang utama lan nggawe sing anyar adhedhasar - STEP_9_JRTB-10. Kanggo ngerteni prentah sing ditrapake kanggo admin lan sing ditrapake kanggo kabeh wong, sampeyan kudu menehi label tim kasebut. Kanggo nindakake iki, ayo nggawe anotasi. Iki artine apa? Kita wis ora nindakake iki sadurunge. Iki bisa dipilih nalika nggawe kelas ing IDEA. Aku bakal nuduhake sampeyan saiki. Ing paket printah, gawe paket anotasi anyar lan ing kono anotasi AdminCommand: "Proyek Jawa saka A nganti Z": Nambahake kemampuan kanggo bisa dadi admin lan statistik kanggo dheweke.  Bagean 1 - 2Anotasi kasebut dhewe bakal kaya mangkene:
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 {
}
Kita ora butuh apa-apa liyane ing kene. Sabanjure, kita nambahake menyang printah StatCommand: "Proyek Jawa saka A nganti Z": Nambahake kemampuan kanggo bisa dadi admin lan statistik kanggo dheweke.  Bagean 1 - 3Saiki kabeh kudu bisa ... Utawa ora? Ora, mesthi)) Kita kudu ngajari CommandContainer supaya bisa ngasilake asil kanthi bener. Kanggo nindakake iki, ayo nganyari metode retrieveCommand , sing ngetokake printah kanggo mbukak gumantung saka apa sing diterusake. Kita bakal nggunakake jeneng pangguna ing Telegram minangka pengenal admin. Iku unik lan luwih gampang diwaca tinimbang chat_id. Carane njaluk? Ana ing obyek Nganyari, sing dilengkapi pesen:
update.getMessage().getFrom().getUserName()
Ngringkes kabeh ing ndhuwur, ayo nganyari metode 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));
}
Kaya sing sampeyan ngerteni ing kene, aku nambahake metode isAdminCommand , sing mriksa manawa ana anotasi AdminCommand ing printah sing diwenehake. Lan yen prentah mung admin, kita priksa manawa kita duwe jeneng pangguna kasebut ing koleksi admin sing kasedhiya. Miturut cara, iki, OOP, ing kabeh kamulyan: kita mung ngliwati antarmuka, sing bisa dadi implementasine. Nanging kita mung bisa ngliwati kelas sing ngleksanakake antarmuka Command . Lan kabeh katon jelas, kajaba mung siji: saka ngendi para admin? Aku bakal nuduhake sampeyan saiki. Saiki aku pengin ngliwati admin minangka variabel lingkungan supaya bisa dikonfigurasi kanthi gampang. Variabel iki bakal ngemot baris sing kabeh jeneng panganggo pangguna telegram sing bakal dadi pangurus dituduhake, dipisahake karo koma. Kanggo nindakake iki, tambahake menyang application.properties:
bot.admins: robeskman,romankh3
Ing konstruktor CommandContainer kita bakal ngliwati koleksi admin lan miwiti:
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;
Lan wis ana ing JavaRushTelegramBot bakal ana kabeh keajaiban kanggo njupuk koleksi saka senar ing properti:
@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);
}
Nalika sampeyan bisa ndeleng saka konstruktor ndhuwur, kita maneh nggunakake Nilai anotasi , menyang kang kita pass logika kanggo nggawe koleksi. Lan iku, nambah admin wis rampung. Saiki, nalika non-admin pengin njaluk data ing statistik bot, dheweke bakal nampa jawaban ing ngisor iki: Aku ora ngerti sampeyan 😟, nulis / bantuan kanggo mangerteni apa aku ngerti. Kanthi cara iki, kita mbedakake peran kanggo perintah bot.

Nambahake printah bantuan kanggo admin

Sabanjure, bakal logis kanggo nggawe perintah pitulung sing kapisah kanggo pangurus. Ing mangsa ngarep, bagean iki bisa tuwuh kanthi signifikan. Tambah nilai bantuan admin menyang CommandName:
ADMIN_HELP("/ahelp")
Gawe kelas AdminHelpCommand ing paket perintah:
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);
   }
}
Supaya adoh iku banget prasaja. Bisa uga tuwuh kanthi apik ing mangsa ngarep. Kanggo printah iki, tes saka cithakan kita:
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);
   }
}
Mesthine, prentah kasebut kudu ditambahake menyang CommandContainer ing peta kita:
.put(ADMIN_HELP.getCommandName(), new AdminHelpCommand(sendBotMessageService))

Nambahake katrangan prentah menyang bot

Bot Telegram duwe fitur liyane sing menarik: sampeyan bisa nambah nilai lan katrangan saka printah sing ditampa kanggo nggampangake pangguna nggunakake printah kasebut. Apa sing katon? Contone, ayo menyang BotFather - bot Telegram sing paling penting. Yen sampeyan miwiti nulis pesen kanthi garis miring /, bot bakal menehi pilihan: "Proyek Jawa saka A nganti Z": Nambahake kemampuan kanggo bisa dadi admin lan statistik kanggo dheweke.  Bagean 1 - 4Lan yen sampeyan terus nulis, bakal nyaring lan nuduhake pilihan sing cocog: "Proyek Jawa saka A nganti Z": Nambahake kemampuan kanggo bisa dadi admin lan statistik kanggo dheweke.  Bagean 1 - 5Fungsi sing apik, ta? Dadi aku pengin nglakoni sing padha ing kene. Aku bakal nindakake kanthi cara sing paling apik - liwat aplikasi Telegram. Aku ngerti iki bisa rampung programmatically. Nanging aku ora bisa. Iki ora perlu kanggo tujuan seri artikel iki. Yen wong ngerti carane nindakake iki, nulis kanggo kula, kita bakal nambah. Aku bakal seneng nampa bantuan karo iki. Aku tau maca sing iki bisa rampung liwat pola printah sing bisa kanggo kita. Saiki aku bakal nuduhake sampeyan carane aku bisa nindakake iki: kita kudu golek BotFather ing Telegram, pilih bot sing pengin dikonfigurasi. Sabanjure, pilih nyunting bot lan bagean babagan printah. Saiki aku bakal nuduhake kabeh nggunakake conto bot test kanggo Javarush. Ing BotFather kita nulis printah: / mybots"Proyek Jawa saka A nganti Z": Nambahake kemampuan kanggo bisa dadi admin lan statistik kanggo dheweke.  Bagean 1 - 6 Sabanjure, pilih bot sing kita butuhake, ing kasusku bakal dadi test_javarush_community_bot: "Proyek Jawa saka A nganti Z": Nambahake kemampuan kanggo bisa dadi admin lan statistik kanggo dheweke.  Bagean 1 - 7Nalika sampeyan bisa ndeleng saka dhaptar tombol, ing kene sampeyan bisa ndeleng token, mbusak bot, lan transfer menyang wong liya. Kita kasengsem ing nyunting bot, supaya kita milih Sunting Bot : "Proyek Jawa saka A nganti Z": Nambahake kemampuan kanggo bisa dadi admin lan statistik kanggo dheweke.  Bagean 1 - 8Lan ing kene kita milih Sunting Perintah : "Proyek Jawa saka A nganti Z": Nambahake kemampuan kanggo bisa dadi admin lan statistik kanggo dheweke.  Bagean 1 - 9Kita mung kudu menehi pesen ing format tartamtu, lan bakal direkam minangka printah. Utawa yen kita pengin mbusak kabeh, nulis / kosong. Kanggo maksud iki, aku bakal nggawe file ing ROOT saka project SET_UP_COMMANDS_BOT_FATHER , kang aku bakal nulis kabeh printah kita supaya gampang kanggo mulihake utawa nganyari yen ana soko. SET_UP_COMMANDS_BOT_FATHER:
miwiti - miwiti / mulihake karya karo bot stop - ngaso gawe karo bot addGroupSub - langganan grup artikel deleteGroupSub - unsubscribe saka klompok artikel listGroupSub - dhaptar grup sing sampeyan langganan bantuan - njaluk bantuan nggarap kula
Cetha yen kita ora nindakake perintah admin ing kene. Mung admin kudu ngerti babagan. Ayo dadi njupuk pesen iki lan pass menyang BotFather: "Proyek Jawa saka A nganti Z": Nambahake kemampuan kanggo bisa dadi admin lan statistik kanggo dheweke.  Bagean 1 - 10Kaya biasane, iku ora bisa metu pisanan. Sawise sawetara menit mikir, Aku liwati kabeh printah ing cilik, lan ora ing CamelCase minangka sadurunge, lan kabeh dadi apik. Kita nganyari ing file kita: SET_UP_COMMANDS_BOT_FATHER:
miwiti - miwiti / mulihake karya karo bot stop - ngaso gawe karo bot addgroupsub - langganan grup artikel deletegroupsub - unsubscribe saka grup artikel listgroupsub - dhaptar grup sing sampeyan langganan bantuan - njaluk bantuan nggarap kula
Saiki sampeyan bisa pindhah menyang bot kita lan ndeleng apa printah wis dimuat kanthi otomatis: "Proyek Jawa saka A nganti Z": Nambahake kemampuan kanggo bisa dadi admin lan statistik kanggo dheweke.  Bagean 1 - 11Delengen carane ayu iku saiki! Aku uga pengin nggedhekake fungsi statistik ing kerangka artikel iki, nanging materi kasebut wis akeh banget ing makna lan isi. Mula, kita bakal nundha iki kanggo wektu sabanjure. Yaiku, tugas JRTB-10 durung rampung: kita bakal ngrampungake ing artikel sabanjure. Ing wektu sing padha, aku bakal nambah kabeh owah-owahan sing wis ana ing bot utama. Pengin ndhukung penulis, nanging ora ngerti carane? Gampang banget - langganan saluran tgku , akun GitHubku lan tulis pendapat sampeyan ing artikel ing kene. Umpan balik iki penting kanggo aku, mula aku ngerti manawa dheweke maca lan kasengsem.

kesimpulan

Ayo ngringkes apa sing kita lakoni dina iki:
  1. Kita ngrembug babagan carane nambah anotasi sampeyan dhewe lan carane bisa digunakake minangka panandha kanggo nggambarake peran ing tim. Miturut cara, iki bisa ditindakake kanthi nggunakake antarmuka. Kanthi cara sing padha, kita bakal nggawe antarmuka panandha banjur priksa manawa obyek sing teka nindakake antarmuka iki utawa ora.
  2. Added printah Bantuan kanggo admins. Kanggo kula, iki uga minangka bagean penting ing pangembangan bot iki.
  3. Kita rembugan carane nambah katrangan lan nyembul printah nalika nulis ing bot. Fitur menarik, mesthi worth nambah.
Adhedhasar artikel iki, aku nggawe panjaluk narik , sampeyan bisa ndeleng rinciane. Matur nuwun kabeh kanggo perhatian sampeyan, kaya biasane: kaya - langganan - lonceng , lintang kanggo proyek kita, komentar lan menehi rating artikel! Ditemokake ing artikel sabanjure!

Dhaptar kabeh materi ing seri kasebut ana ing wiwitan artikel iki.

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