mirror of https://github.com/bvn13/JIrcBot.git
added deferred messages stored by user ident (regexp pattern)
parent
8079bb470d
commit
e6ef25c935
|
@ -28,6 +28,10 @@ public class DeferredMessage extends BaseModel {
|
|||
@Setter
|
||||
private String recipient;
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
private String recipientIdent;
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
@Type(type = "text")
|
||||
|
|
|
@ -2,6 +2,7 @@ package ru.bvn13.jircbot.database.repositories;
|
|||
|
||||
import org.springframework.data.jpa.repository.JpaRepository;
|
||||
import org.springframework.data.jpa.repository.Query;
|
||||
import org.springframework.data.repository.query.Param;
|
||||
import org.springframework.stereotype.Repository;
|
||||
import ru.bvn13.jircbot.database.entities.DeferredMessage;
|
||||
|
||||
|
@ -13,4 +14,7 @@ import java.util.List;
|
|||
@Repository
|
||||
public interface DeferredMessageRepository extends JpaRepository<DeferredMessage, Long> {
|
||||
List<DeferredMessage> getDeferredMessagesByChannelNameAndRecipientAndSentOrderByDtCreated(String channelName, String recipient, Boolean sent);
|
||||
@Query(nativeQuery=true,
|
||||
value = "select d.* from DeferredMessage as d where d.channelName = :channelName and d.recipientIdent regexp :ident and d.sent = :sent")
|
||||
List<DeferredMessage> getDeferredMessagesByChannelNameAndRecipientIdentAndSentOrderByDtCreated(@Param("channelName") String channelName, @Param("ident") String recipientIdent, @Param("sent") Boolean sent);
|
||||
}
|
||||
|
|
|
@ -6,9 +6,12 @@ import org.springframework.transaction.annotation.Transactional;
|
|||
import ru.bvn13.jircbot.database.entities.DeferredMessage;
|
||||
import ru.bvn13.jircbot.database.repositories.DeferredMessageRepository;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.atomic.AtomicInteger;
|
||||
import java.util.stream.Collectors;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
/**
|
||||
* Created by bvn13 on 31.01.2018.
|
||||
|
@ -19,8 +22,10 @@ public class DeferredMessageService {
|
|||
@Autowired
|
||||
private DeferredMessageRepository deferredMessageRepository;
|
||||
|
||||
public List<DeferredMessage> getDeferredMessagesForUser(String channelName, String user) {
|
||||
return deferredMessageRepository.getDeferredMessagesByChannelNameAndRecipientAndSentOrderByDtCreated(channelName, user.toLowerCase(), false);
|
||||
public List<DeferredMessage> getDeferredMessagesForUser(String channelName, String user, String ident) {
|
||||
List<DeferredMessage> messagesByNickname = deferredMessageRepository.getDeferredMessagesByChannelNameAndRecipientAndSentOrderByDtCreated(channelName, user.toLowerCase(), false);
|
||||
List<DeferredMessage> messagesByIdent = deferredMessageRepository.getDeferredMessagesByChannelNameAndRecipientIdentAndSentOrderByDtCreated(channelName, ident, false);
|
||||
return Stream.concat(messagesByNickname.stream(), messagesByIdent.stream()).collect(Collectors.toList());
|
||||
}
|
||||
|
||||
public void saveDeferredMessage(String channelName, String sender, String recipient, String message) {
|
||||
|
@ -39,9 +44,9 @@ public class DeferredMessageService {
|
|||
}
|
||||
|
||||
@Transactional
|
||||
public int forgetAllMessages(String channelName, String recipient) {
|
||||
public int forgetAllMessages(String channelName, String recipient, String ident) {
|
||||
AtomicInteger count = new AtomicInteger(0);
|
||||
List<DeferredMessage> messages = getDeferredMessagesForUser(channelName, recipient);
|
||||
List<DeferredMessage> messages = getDeferredMessagesForUser(channelName, recipient, ident);
|
||||
messages.forEach(msg -> {
|
||||
count.set(count.get()+1);
|
||||
msg.setSent(true);
|
||||
|
|
|
@ -47,6 +47,7 @@ public class DeferredMessagesListener extends ImprovedListenerAdapter {
|
|||
|
||||
String userName = event.getUser().getNick();
|
||||
String channelName = this.getChannelName(event);
|
||||
String userIdent = event.getUser().getIdent();
|
||||
|
||||
if (event.getMessage().startsWith(COMMAND)) {
|
||||
String message = event.getMessage().replace(COMMAND, "").trim();
|
||||
|
@ -71,10 +72,10 @@ public class DeferredMessagesListener extends ImprovedListenerAdapter {
|
|||
}
|
||||
}
|
||||
} else if (event.getMessage().startsWith(COMMAND_FORGET)) {
|
||||
int count = deferredMessageService.forgetAllMessages(channelName, userName);
|
||||
int count = deferredMessageService.forgetAllMessages(channelName, userName, userIdent);
|
||||
this.sendNotice(event, "All "+count+" messages to "+userName+" were deleted");
|
||||
} else if (event.getMessage().startsWith(COMMAND_READ)) {
|
||||
List<DeferredMessage> deferredMessages = deferredMessageService.getDeferredMessagesForUser(channelName, userName);
|
||||
List<DeferredMessage> deferredMessages = deferredMessageService.getDeferredMessagesForUser(channelName, userName, userIdent);
|
||||
deferredMessages.forEach(msg -> {
|
||||
event.respondPrivateMessage("User "+msg.getSender()+" at "+dt.format(msg.getDtCreated())+" told you: "+msg.getMessage());
|
||||
deferredMessageService.markMessageWasSent(msg);
|
||||
|
@ -88,7 +89,7 @@ public class DeferredMessagesListener extends ImprovedListenerAdapter {
|
|||
|
||||
private void sendDeferredMessage(final MessageEvent event) {
|
||||
|
||||
List<DeferredMessage> deferredMessages = deferredMessageService.getDeferredMessagesForUser(this.getChannelName(event), event.getUser().getNick().toLowerCase());
|
||||
List<DeferredMessage> deferredMessages = deferredMessageService.getDeferredMessagesForUser(this.getChannelName(event), event.getUser().getNick().toLowerCase(), event.getUser().getIdent());
|
||||
if (deferredMessages != null && deferredMessages.size() > 0) {
|
||||
DeferredMessage msg = deferredMessages.get(0);
|
||||
String more = "" + (deferredMessages.size() > 1 ? " ("+(deferredMessages.size()-1)+" message/-s more)" : "");
|
||||
|
@ -105,7 +106,7 @@ public class DeferredMessagesListener extends ImprovedListenerAdapter {
|
|||
return;
|
||||
}
|
||||
|
||||
List<DeferredMessage> deferredMessages = deferredMessageService.getDeferredMessagesForUser(this.getChannelName(event), event.getUser().getNick().toLowerCase());
|
||||
List<DeferredMessage> deferredMessages = deferredMessageService.getDeferredMessagesForUser(this.getChannelName(event), event.getUser().getNick().toLowerCase(), event.getUser().getIdent());
|
||||
if (deferredMessages != null && deferredMessages.size() > 0) {
|
||||
event.respond("You have "+deferredMessages.size()+" unread message(-s)");
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue