package org.manalith.ircbot.plugin.admin; import java.util.ArrayList; import org.apache.commons.lang3.ArrayUtils; import org.apache.commons.lang3.StringUtils; import org.manalith.ircbot.plugin.Plugin; import org.manalith.ircbot.plugin.PluginManager; import org.manalith.ircbot.plugin.SimplePlugin; import org.manalith.ircbot.resources.MessageEvent; public class HelpPlugin extends SimplePlugin { private static final String[] HELP_COMMANDS = new String[] { "!명령어", "!명령", "!도움", "!도움말", "!help", "!plugins" }; private PluginManager pluginManager; public HelpPlugin(PluginManager pluginManager) { this.pluginManager = pluginManager; } @Override public String getName() { return "도움말"; } @Override public String getCommands() { return StringUtils.join(HELP_COMMANDS, ", "); } @Override public String getHelp() { return "설 명: 플러그인들의 목록 및 각 플러그인에 대한 도움말을 출력합니다. 사용법: !명령어|!명령|!도움|!help|!plugins [명령] (명령이름 생략 가능)"; } @Override public void onMessage(MessageEvent event) { String result = parseMessage(event.getMessage()); if (result != null) event.respond(result); } @Override public void onPrivateMessage(MessageEvent event) { String result = parseMessage(event.getMessage()); if (result != null) event.respond(result); } private String parseMessage(String message) { String[] msgs = StringUtils.split(message); if (ArrayUtils.contains(HELP_COMMANDS, msgs[0])) { if (msgs.length == 1) { return getPluginInfo(); } else if (msgs.length == 2) { return getPluginInfo(msgs[1]); } else { return "너무 많은 값이 있습니다."; } } else { return null; } } private String getPluginInfo() { ArrayList<String> plugins = new ArrayList<>(); for (Plugin p : pluginManager.getPlugins()) { String name = p.getName(); String commands = p.getCommands(); if (StringUtils.isNotBlank(commands)) { plugins.add(String.format("%s(%s)", name, commands)); } else { plugins.add(name); } } return StringUtils.join(plugins, ", "); } private String getPluginInfo(String command) { for (Plugin p : pluginManager.getPlugins()) if (StringUtils.contains(p.getCommands(), command)) return p.getHelp(); return String.format("그런 명령어가 존재하지 않습니다: %s", command); } }