package ru.bvn13.jircbot.listeners; import org.pircbotx.hooks.events.JoinEvent; import org.pircbotx.hooks.events.MessageEvent; import org.pircbotx.hooks.events.PrivateMessageEvent; import org.pircbotx.hooks.types.GenericEvent; import org.pircbotx.hooks.types.GenericMessageEvent; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import ru.bvn13.jircbot.bot.ImprovedListenerAdapter; import ru.bvn13.jircbot.bot.JircBot; import ru.bvn13.jircbot.config.JircBotConfiguration; import ru.bvn13.jircbot.database.entities.ChannelSettings; import ru.bvn13.jircbot.database.services.ChannelSettingsService; import ru.bvn13.jircbot.model.Config; import java.util.concurrent.atomic.AtomicReference; /** * Created by bvn13 on 27.03.2018. */ @Component public class AdminListener extends ImprovedListenerAdapter { private static final Logger logger = LoggerFactory.getLogger(AdminListener.class); private static final String COMMAND = "?"; @Autowired private JircBotConfiguration configuration; @Autowired private ChannelSettingsService channelSettingsService; @Override public void onJoin(JoinEvent event) throws Exception { if (event.getChannel().getName().startsWith("#")) { if (event.getUser().getNick().equals(event.getBot().getNick())) { event.getBot().sendRaw().rawLineNow("MODE " + event.getBot().getUserBot().getNick() + " +B"); try { channelSettingsService.createChannelSettings(JircBot.extractServer(event.getBot().getServerHostname()), event.getChannel().getName()); } catch (Exception e) { logger.error("Could not create channel settings for channel "+event.getChannel().getName()+" at "+event.getBot().getServerHostname(), e); } } } } @Override public void onMessage(MessageEvent event) throws Exception { Config config = getBotConfig(event); if (config == null) { return; } if (event.getUser().isVerified() && !config.getMasterNick().isEmpty() && config.getMasterNick().equals(event.getUser().getNick())) { if (event.getMessage().startsWith(COMMAND)) { String command = event.getMessage().substring(COMMAND.length()); String commands[] = command.trim().split(" ", 2); if (commands[0].startsWith("+") || commands[0].startsWith("-")) { boolean isApply = commands[0].startsWith("+"); command = commands[0].substring(1); switch (command.toLowerCase()) { case "op" : if (commands.length == 1) { event.getBot().sendRaw().rawLine("PRIVMSG chanserv :" + (!isApply ? "deop" : "op") + " " + event.getChannel().getName() + " " + event.getUser().getNick()); } else { event.getBot().sendRaw().rawLine("PRIVMSG chanserv :" + (!isApply ? "deop" : "op") + " " + event.getChannel().getName() + " " + commands[1]); } break; case "v" : case "voice": if (commands.length == 1) { event.getBot().sendRaw().rawLine("MODE " + event.getChannel().getName() + " " + (isApply ? "+" : "-") + "v " + event.getUser().getNick()); } else { event.getBot().sendRaw().rawLine("MODE " + event.getChannel().getName() + " " + (isApply ? "+" : "-") + "v " + commands[1]); } break; } } else { switch (command.toLowerCase()) { case "inv" : case "invite" : if (command.length() > 1) { event.getBot().sendRaw().rawLine("INVITE " + event.getChannel().getName() + " " + commands[1]); } break; case "kick" : if (command.length() > 1) { event.getBot().sendRaw().rawLine("KICK " + event.getChannel().getName() + " " + commands[1] + (commands.length > 2 ? " "+commands[2] : "")); } break; } } } } } @Override public void onPrivateMessage(PrivateMessageEvent event) throws Exception { Config config = getBotConfig(event); if (config == null) { return; } if (event.getUser().isVerified() && !config.getMasterNick().isEmpty() && config.getMasterNick().equals(event.getUser().getNick())) { if (event.getMessage().startsWith(COMMAND)) { String command = event.getMessage().substring(COMMAND.length()); String commands[] = command.trim().split(" ", 2); if (commands.length != 2) { event.respondPrivateMessage("Wrong command"); return; } String args[] = null; switch (commands[0].toLowerCase()) { case "restart": event.getBot().stopBotReconnect(); break; case "join" : event.getBot().sendIRC().joinChannel(commands[1]); event.respondPrivateMessage("done"); break; case "leave" : event.getBot().sendRaw().rawLine("PART "+commands[1]); event.respondPrivateMessage("done"); break; case "privmsg" : event.getBot().sendRaw().rawLine("PRIVMSG "+commands[1]); event.respondPrivateMessage("done"); break; case "cmd" : args = commands[1].split(" ", 2); event.getBot().sendRaw().rawLine(args[1]); event.respondPrivateMessage("done"); break; case "set" : try { args = commands[1].split(" ", 4); // set, channel, mode/hello-message if (args.length == 3) { changeSettings(JircBot.extractServer(event.getBot().getServerHostname()), args[0], args[1], args[2]); //server, channel, set, mode event.respondPrivateMessage("done"); } else { event.respondPrivateMessage("SYNTAX: ?set