package io.shockah.skylark.botcontrol;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import org.pircbotx.Channel;
import com.google.common.base.Joiner;
import io.shockah.skylark.Bot;
import io.shockah.skylark.BotManager;
import io.shockah.skylark.commands.CommandCall;
import io.shockah.skylark.commands.CommandParseException;
import io.shockah.skylark.commands.CommandResult;
import io.shockah.skylark.commands.NamedCommand;
import io.shockah.skylark.event.GenericUserMessageEvent;
public class PartCommand extends NamedCommand<List<String>, List<String>> {
private final BotControlPlugin plugin;
public PartCommand(BotControlPlugin plugin) {
super("part");
this.plugin = plugin;
}
@SuppressWarnings("unchecked")
@Override
public List<String> convertToInput(GenericUserMessageEvent e, Object input) throws CommandParseException {
if (input instanceof List<?>)
return (List<String>)input;
return super.convertToInput(e, input);
}
@Override
public List<String> parseInput(GenericUserMessageEvent e, String input) {
input = input.trim();
if (input.isEmpty()) {
if (e.getChannel() == null) {
throw new IllegalArgumentException("You must provide a channel.");
} else {
input = e.getChannel().getName();
}
}
return Arrays.asList(input.split("\\s"));
}
@Override
public CommandResult<List<String>> call(CommandCall call, List<String> input) {
if (call.outputMedium == null)
call.outputMedium = CommandCall.Medium.Notice;
if (!plugin.permissionsPlugin.permissionGranted(call.event.getUser(), plugin, names[0]))
return CommandResult.error("Permission required.");
List<String> result = new ArrayList<>();
BotManager manager = call.event.<Bot>getBot().manager;
for (String channelName : input) {
Channel channel = manager.getChannel(channelName);
if (channel != null) {
result.add(channelName);
channel.send().part();
}
}
String ircOutput = String.format("Left channels: %s", Joiner.on(", ").join(result));
return CommandResult.of(result, ircOutput);
}
}