@Override
    public boolean execute(WorldChannels plugin, CommandSender sender,
            Command command, String label, String[] args) {
        final Map<Flag, String> info = new EnumMap<Flag, String>(Flag.class);
        info.put(Flag.TAG, WorldChannels.TAG);
        if(!(sender instanceof Player)) {
            sender.sendMessage(Localizer.parseString(LocalString.NO_CONSOLE,
                    info));
        } else {
            try {
                final Channel channel = parseChannel(sender, args[0],
                        plugin.getModuleForClass(ConfigHandler.class));
                if(channel != null) {
                    if(sender.hasPermission(channel.getPermissionJoin())) {
                        channel.addListener(sender.getName());
                        plugin.getModuleForClass(ChannelManager.class).setCurrentChannel(sender.getName(), channel.getWorld() + channel.getName());
                        sender.sendMessage(ChatColor.GREEN + WorldChannels.TAG
                                + " Joined channel '" + channel.getName() + "'");
                    } else {
                        info.put(Flag.EXTRA, channel.getPermissionJoin());
                        sender.sendMessage(Localizer.parseString(
                                LocalString.PERMISSION_DENY, info));
                    }
                } else {
                    info.put(Flag.EXTRA, args[0]);
                    info.put(Flag.REASON, "channel");
                    sender.sendMessage(Localizer.parseString(
                            LocalString.UNKNOWN, info));
                }

            } catch(ArrayIndexOutOfBoundsException e) {
                info.put(Flag.EXTRA, "channel");
                sender.sendMessage(Localizer.parseString(
                        LocalString.MISSING_PARAM, info));
            }
        }
        return true;
    }