コード例 #1
0
 def _print_plugin_operation_result_if_no_error(self, source: CommandSource,
                                                ret: FunctionCallResult):
     if ret.no_error:
         source.reply(
             self.mcdr_server.plugin_manager.last_operation_result.to_rtext(
                 show_path=source.has_permission(
                     PermissionLevel.PHYSICAL_SERVER_CONTROL_LEVEL)))
コード例 #2
0
 def on_mcdr_command_unknown_argument(self, source: CommandSource,
                                      error: CommandError):
     if source.has_permission(PermissionLevel.MCDR_CONTROL_LEVEL):
         command = error.get_parsed_command().rstrip(' ')
         source.reply(
             RText(self.tr('mcdr_command.command_not_found', command)).h(
                 self.tr('mcdr_command.command_not_found_suggest',
                         command)).c(RAction.run_command, command))
     else:
         self.on_mcdr_command_permission_denied(source, error)
コード例 #3
0
 def reload_all_plugin(self, source: CommandSource):
     ret = self.function_call(
         source,
         self.mcdr_server.plugin_manager.refresh_all_plugins,
         'reload_all_plugin',
         log_success=False)
     if ret.no_error:
         source.reply(
             self.mcdr_server.plugin_manager.last_operation_result.to_rtext(
                 show_path=source.has_permission(
                     PermissionLevel.PHYSICAL_SERVER_CONTROL_LEVEL)))
コード例 #4
0
 def set_default_permission(self, source: CommandSource, value: str):
     permission_level = PermissionLevel.get_level(value)
     if permission_level is None:
         source.reply(self.tr('mcdr_command.invalid_permission_level'))
     elif not source.has_permission(permission_level.level):
         source.reply(self.tr('mcdr_command.permission_not_enough'))
     else:
         self.mcdr_server.permission_manager.set_default_permission_level(
             permission_level)
         if source.is_player:
             source.reply(
                 self.tr(
                     'permission_manager.set_default_permission_level.done',
                     permission_level.name))
コード例 #5
0
 def remove_player_permission(self, source: CommandSource, player: str):
     if not Validator.player_name(player):
         source.reply(self.tr('mcdr_command.invalid_player_name'))
     else:
         if not source.has_permission(
                 self.mcdr_server.permission_manager.
                 get_player_permission_level(player)):
             source.reply(self.tr('mcdr_command.permission_not_enough'))
         else:
             self.mcdr_server.permission_manager.remove_player(player)
             source.reply(
                 self.tr(
                     'mcdr_command.remove_player_permission.player_removed',
                     player))
コード例 #6
0
    def process_help_command(self, source: CommandSource,
                             context: CommandContext):
        page = context.get('page')
        source.reply(self.tr('mcdr_command.help_message.title'))
        matched = []  # type: List[HelpMessage]
        for msg in self.mcdr_server.plugin_manager.registry_storage.help_messages:  # type: HelpMessage
            if source.has_permission(msg.permission):
                matched.append(msg)
        matched_count = len(matched)

        if page is not None:
            left, right = (
                page - 1) * HELP_MESSAGE_PER_PAGE, page * HELP_MESSAGE_PER_PAGE
        else:
            left, right = 0, matched_count
        for i in range(left, right):
            if 0 <= i < matched_count:
                msg = matched[i]
                source.reply(
                    RTextList(
                        RText(msg.prefix,
                              color=RColor.gray).c(RAction.suggest_command,
                                                   msg.prefix), ': ',
                        translation_util.translate_from_dict(
                            msg.message,
                            self.server_interface.get_mcdr_language(),
                            default='')))

        if page is not None:
            has_prev = 0 < left < matched_count
            has_next = 0 < right < matched_count
            color = {False: RColor.dark_gray, True: RColor.gray}
            prev_page = RText('<-', color=color[has_prev])
            if has_prev:
                prev_page.c(RAction.run_command, '{} {}'.format(
                    self.help_command_prefix, page - 1)).h(
                        self.tr(
                            'mcdr_command.help_message.previous_page_hover'))
            next_page = RText('->', color=color[has_next])
            if has_next:
                next_page.c(RAction.run_command, '{} {}'.format(
                    self.help_command_prefix, page + 1)).h(
                        self.tr('mcdr_command.help_message.next_page_hover'))

            source.reply(
                RTextList(
                    prev_page, ' {} '.format(
                        self.tr('mcdr_command.help_message.page_number',
                                page)), next_page))
コード例 #7
0
 def set_player_permission(self, source: CommandSource, player, value):
     permission_level = PermissionLevel.get_level(value)
     if permission_level is None:
         source.reply(self.tr('mcdr_command.invalid_permission_level'))
     elif not Validator.player_name(player):
         source.reply(self.tr('mcdr_command.invalid_player_name'))
     else:
         # Source with permission level x is allowed manipulate players/level in permission level range [0, x]
         if not source.has_permission(
                 max(
                     permission_level.level,
                     self.mcdr_server.permission_manager.
                     get_player_permission_level(player))):
             source.reply(self.tr('mcdr_command.permission_not_enough'))
         else:
             self.mcdr_server.permission_manager.set_permission_level(
                 player, permission_level)
             if source.is_player:
                 source.reply(
                     self.tr('permission_manager.set_permission_level.done',
                             player, permission_level.name))
コード例 #8
0
    def print_mcdr_status(self, source: CommandSource):
        def bool_formatter(bl: bool) -> RText:
            return RText(bl, RColor.green if bl else RColor.red)

        rcon_status_dict = {
            True: self.tr('mcdr_command.print_mcdr_status.online'),
            False: self.tr('mcdr_command.print_mcdr_status.offline')
        }

        source.reply(
            RText(
                self.tr('mcdr_command.print_mcdr_status.line1',
                        core_constant.NAME, core_constant.VERSION)).c(
                            RAction.open_url, core_constant.GITHUB_URL).h(
                                RText(core_constant.GITHUB_URL,
                                      styles=RStyle.underlined,
                                      color=RColor.blue)))

        if not source.has_permission(PermissionLevel.MCDR_CONTROL_LEVEL):
            return
        source.reply(
            RText.join('\n', [
                RText(
                    self.tr('mcdr_command.print_mcdr_status.line2',
                            self.tr(self.mcdr_server.mcdr_state.value))),
                RText(
                    self.tr('mcdr_command.print_mcdr_status.line3',
                            self.tr(self.mcdr_server.server_state.value))),
                RText(
                    self.tr(
                        'mcdr_command.print_mcdr_status.line4',
                        bool_formatter(self.mcdr_server.is_server_startup()))),
                RText(
                    self.tr(
                        'mcdr_command.print_mcdr_status.line5',
                        bool_formatter(
                            self.mcdr_server.should_exit_after_stop()))),
                RText(
                    self.tr(
                        'mcdr_command.print_mcdr_status.line6',
                        rcon_status_dict[
                            self.server_interface.is_rcon_running()])),
                RText(
                    self.
                    tr('mcdr_command.print_mcdr_status.line7',
                       self.mcdr_server.plugin_manager.get_plugin_amount())).c(
                           RAction.suggest_command, '!!MCDR plugin list')
            ]))

        if not source.has_permission(
                PermissionLevel.PHYSICAL_SERVER_CONTROL_LEVEL):
            return
        source.reply(
            RText.join('\n', [
                self.tr(
                    'mcdr_command.print_mcdr_status.extra_line1',
                    self.mcdr_server.process.pid
                    if self.mcdr_server.process is not None else '§rN/A§r'),
                self.tr('mcdr_command.print_mcdr_status.extra_line2',
                        self.mcdr_server.task_executor.task_queue.qsize(),
                        core_constant.MAX_TASK_QUEUE_SIZE),
                self.tr('mcdr_command.print_mcdr_status.extra_line3',
                        threading.active_count())
            ]))
        thread_pool_counts = 0
        for thread in threading.enumerate():
            name = thread.getName()
            if not name.startswith('ThreadPoolExecutor-'):
                source.reply('  §7-§r {}'.format(name))
            else:
                thread_pool_counts += 1
        if thread_pool_counts > 0:
            source.reply('  §7-§r ThreadPoolExecutor thread x{}'.format(
                thread_pool_counts))
コード例 #9
0
    def print_mcdr_status(self, source: CommandSource):
        def bool_formatter(bl):
            return '{}{}§r'.format('§a' if bl else '§7', bl)

        rcon_status_dict = {
            True: self.tr('mcdr_command.print_mcdr_status.online'),
            False: self.tr('mcdr_command.print_mcdr_status.offline')
        }

        source.reply(
            RTextList(
                RText(
                    self.tr('mcdr_command.print_mcdr_status.line1',
                            core_constant.NAME, core_constant.VERSION)).c(
                                RAction.open_url, core_constant.GITHUB_URL).h(
                                    RText(core_constant.GITHUB_URL,
                                          styles=RStyle.underlined,
                                          color=RColor.blue)), '\n',
                RText(
                    self.tr('mcdr_command.print_mcdr_status.line2',
                            self.tr(self.mcdr_server.mcdr_state.value))), '\n',
                RText(
                    self.tr('mcdr_command.print_mcdr_status.line3',
                            self.tr(self.mcdr_server.server_state.value))),
                '\n',
                RText(
                    self.tr(
                        'mcdr_command.print_mcdr_status.line4',
                        bool_formatter(self.mcdr_server.is_server_startup()))),
                '\n',
                RText(
                    self.tr(
                        'mcdr_command.print_mcdr_status.line5',
                        bool_formatter(
                            self.mcdr_server.should_exit_after_stop()))), '\n',
                RText(
                    self.tr(
                        'mcdr_command.print_mcdr_status.line6',
                        rcon_status_dict[
                            self.server_interface.is_rcon_running()])), '\n',
                RText(
                    self.
                    tr('mcdr_command.print_mcdr_status.line7',
                       self.mcdr_server.plugin_manager.get_plugin_amount())).c(
                           RAction.suggest_command, '!!MCDR plugin list')))
        if source.has_permission(
                PermissionLevel.PHYSICAL_SERVER_CONTROL_LEVEL):
            source.reply(
                RTextList(
                    self.tr(
                        'mcdr_command.print_mcdr_status.extra_line1',
                        self.mcdr_server.process.pid if
                        self.mcdr_server.process is not None else '§rN/A§r'),
                    '\n',
                    self.tr('mcdr_command.print_mcdr_status.extra_line2',
                            self.mcdr_server.task_executor.task_queue.qsize(),
                            core_constant.MAX_TASK_QUEUE_SIZE), '\n',
                    self.tr('mcdr_command.print_mcdr_status.extra_line3',
                            threading.active_count())))
            for thread in threading.enumerate():
                source.reply('  §r-§r {}'.format(thread.getName()))
コード例 #10
0
 def process_mcdr_command(self, source: CommandSource):
     if source.has_permission(PermissionLevel.MCDR_CONTROL_LEVEL):
         source.reply(
             self.get_help_message(source, 'mcdr_command.help_message'))
     else:
         self.command_status.print_mcdr_status(source)
コード例 #11
0
 def process_help_command(self, source: CommandSource):
     for msg in self.mcdr_server.plugin_manager.registry_storage.help_messages:  # type: HelpMessage
         if source.has_permission(msg.permission):
             source.reply(
                 RText('§7{}§r: '.format(msg.prefix)).c(
                     RAction.suggest_command, msg.prefix) + msg.message)