def add_player(self, player: str, level_name: Optional[str] = None) -> int: """ Add a new player with permission level level_name If level_name is not set use default level Then save the permission data to file :param player: the name of the player :param level_name: the permission level name :return: the permission of the player after operation done """ if level_name is None: level_name = self.get_default_permission_level() PermissionLevel.from_value(level_name) # validity check self.get_permission_group_list(level_name).append(player) self.mcdr_server.logger.debug('Added player {} with permission level {}'.format(player, level_name), option=DebugOption.PERMISSION) self.save() return PermissionLevel.from_value(level_name).level
def get_permission_group_list(self, value): """ Return the list of the player who has permission level <level> Example return value: ['Steve', 'Alex'] :param str or int value: a permission related object :rtype: list[str] """ level_name = PermissionLevel.from_value(value).name if self._data[level_name] is None: self._data[level_name] = [] return self._data[level_name]
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))
def query_player_permission(self, source: CommandSource, player: Optional[str]): if player is None: level = source.get_permission_level() source.reply( self.tr('mcdr_command.query_player_permission.self', PermissionLevel.from_value(level))) else: if not Validator.player_name(player): source.reply(self.tr('mcdr_command.invalid_player_name')) return else: level = self.mcdr_server.permission_manager.get_player_permission_level( player, auto_add=False) if level is not None: source.reply( self.tr('mcdr_command.query_player_permission.player', player, PermissionLevel.from_value(level))) else: source.reply( self.tr( 'mcdr_command.query_player_permission.player_unknown', player))
def list_permission(self, source: CommandSource, target_value: Optional[str]): specified_level = PermissionLevel.get_level(target_value) if specified_level is None: # show default level information if target permission not specified source.reply( RText( self.tr( 'mcdr_command.list_permission.show_default', self.mcdr_server.permission_manager. get_default_permission_level())).c( RAction.suggest_command, '{} permission setdefault '.format( self.control_command_prefix)). h(self.tr('mcdr_command.list_permission.suggest_setdefault'))) for permission_level in PermissionLevel.INSTANCES: if specified_level is None or permission_level == specified_level: source.reply( RText('§7[§e{}§7]§r'.format(permission_level.name)).c( RAction.run_command, '{} permission list {}'.format( self.control_command_prefix, permission_level.name) ).h( self.tr('mcdr_command.list_permission.suggest_list', permission_level.name))) for player in self.mcdr_server.permission_manager.get_permission_group_list( permission_level.name): texts = RText('§7-§r {}'.format(player)) if self.can_see_rtext(source): texts += RTextList( RText(' [✎]', color=RColor.gray).c( RAction.suggest_command, '{} permission set {} '.format( self.control_command_prefix, string_util.auto_quotes(player))). h( self.tr( 'mcdr_command.list_permission.suggest_set', player)), RText(' [×]', color=RColor.gray).c( RAction.suggest_command, '{} permission remove {}'.format( self.control_command_prefix, string_util.auto_quotes(player))). h( self.tr( 'mcdr_command.list_permission.suggest_disable', player)), ) source.reply(texts)
def set_permission_level(self, player: str, value: Union[int, str]) -> None: """ Set the permission level of the given player :param player: The name of the player that you want to set his/her permission level :param value: The target permission level you want to set the player to. It can be an int or a str as long as it's related to the permission level. Available examples: 1, '1', 'user' :raise: TypeError if the value parameter doesn't proper represent a permission level """ level = PermissionLevel.get_level(value) if level is None: raise TypeError( 'Parameter level needs to be a permission related value') self._mcdr_server.permission_manager.set_permission_level( player, value)
def set_permission_level(self, player, value): """ Set the permission level of a player :param str player: The name of the player that you want to set his/her permission level :param value: The target permission level you want to set the player to. It can be an int or a str as long as it's related to the permission level. Available examples: 1, '1', 'user' :type value: int or str :raise: TypeError if param value is illegal """ level = PermissionLevel.get_level(value) if level is None: raise TypeError( 'Parameter level needs to be a permission related value') self.__mcdr_server.permission_manager.set_permission_level( player, value)
def list_permission(self, source: CommandSource, target_value): specified_level = PermissionLevel.get_level(target_value) if specified_level is None: # show default level information if target permission not specified source.reply( RText( self.tr( 'mcdr_command.list_permission.show_default', self.mcdr_server.permission_manager. get_default_permission_level())).c( RAction.suggest_command, '!!MCDR permission setdefault '). h(self.tr('mcdr_command.list_permission.suggest_setdefault'))) for permission_level in PermissionLevel.INSTANCES: if specified_level is None or permission_level == specified_level: source.reply( RText('§7[§e{}§7]§r'.format(permission_level.name)).c( RAction.run_command, '!!MCDR permission list {}'. format(permission_level.name)).h( self.tr( 'mcdr_command.list_permission.suggest_list', permission_level.name))) for player in self.mcdr_server.permission_manager.get_permission_group_list( permission_level.name): texts = RText('§7-§r {}'.format(player)) if self.should_display_buttons(source): texts += RTextList( RText(' [✎]', color=RColor.gray).c( RAction.suggest_command, '!!MCDR permission set {} '.format(player)). h( self.tr( 'mcdr_command.list_permission.suggest_set', player)), RText(' [×]', color=RColor.gray).c( RAction.suggest_command, '!!MCDR permission remove {}'.format(player)). h( self.tr( 'mcdr_command.list_permission.suggest_disable', player)), ) source.reply(texts)
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))
def query_self_permission(self, source: CommandSource): source.reply( self.tr('mcdr_command.query_player_permission.self', PermissionLevel.from_value(source.get_permission_level())))