package ru.bvn13.jircbot.listeners; import org.pircbotx.hooks.events.JoinEvent; import org.pircbotx.hooks.events.NoticeEvent; import org.pircbotx.hooks.types.GenericMessageEvent; 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.database.entities.DeferredMessage; import ru.bvn13.jircbot.database.services.ChannelSettingsService; import ru.bvn13.jircbot.database.services.DeferredMessageService; import java.text.SimpleDateFormat; import java.util.List; /** * Created by bvn13 on 31.01.2018. */ @Component public class DeferredMessagesListener extends ImprovedListenerAdapter { private static final String COMMAND = "?tell"; private static SimpleDateFormat dt = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); @Autowired private ChannelSettingsService channelSettingsService; @Autowired private DeferredMessageService deferredMessageService; @Override public void onGenericMessage(final GenericMessageEvent event) throws Exception { if (!channelSettingsService.getChannelSettings(JircBot.extractServer(event.getBot().getServerHostname()), getChannelName(event)).getDeferredMessagesEnabled()) { return; } if (event.getUser().getUserId().equals(event.getBot().getUserBot().getUserId())) { return; } this.sendDeferredMessage(event); if (!event.getMessage().startsWith(COMMAND)) { return; } String message = event.getMessage().replace(COMMAND, "").trim(); String commands[] = message.split(" ", 2); if (commands.length != 2) { event.respond("Deferred messages usage: ?tell your message"); return; } String userName = event.getUser().getNick(); String channelname = this.getChannelName(event); if (commands[0].equalsIgnoreCase("me")) { // deferred to myself deferredMessageService.saveDeferredMessage(channelname, userName, userName.toLowerCase(), commands[1]); this.sendNotice(event,"Saved message to "+userName); } else { if (commands[0].equalsIgnoreCase(event.getBot().getUserBot().getNick())) { this.sendNotice(event,"Sorry, message cannot be deferred to me."); } else { // deferred to somebody deferredMessageService.saveDeferredMessage(channelname, userName, commands[0].toLowerCase(), commands[1]); this.sendNotice(event, "Saved message to " + commands[0]); } } } private void sendDeferredMessage(final GenericMessageEvent event) { if (event instanceof NoticeEvent) { return; } List deferredMessages = deferredMessageService.getDeferredMessagesForUser(this.getChannelName(event), event.getUser().getNick().toLowerCase()); if (deferredMessages != null && deferredMessages.size() > 0) { DeferredMessage msg = deferredMessages.get(0); String more = "" + (deferredMessages.size() > 1 ? " ("+(deferredMessages.size()-1)+" message/-s more)" : ""); event.respond("User "+msg.getSender()+" at "+dt.format(msg.getDtCreated())+" told you"+more+": "+msg.getMessage()); deferredMessageService.markMessageWasSent(msg); } } @Override public void onJoin(JoinEvent event) throws Exception { if (event.getUser().getUserId().equals(event.getBot().getUserBot().getUserId())) { return; } List deferredMessages = deferredMessageService.getDeferredMessagesForUser(this.getChannelName(event), event.getUser().getNick().toLowerCase()); if (deferredMessages != null && deferredMessages.size() > 0) { event.respond("You have "+deferredMessages.size()+" unread message(-s)"); } } }