diff --git a/pom.xml b/pom.xml index d43159e..d871895 100644 --- a/pom.xml +++ b/pom.xml @@ -50,6 +50,23 @@ log4j ${log4j.ver} + + + org.apache.logging.log4j + log4j-slf4j-impl + 2.7 + + + + org.apache.logging.log4j + log4j-api + 2.7 + + + org.apache.logging.log4j + log4j-core + 2.7 + junit junit diff --git a/src/main/java/org/sadtech/vkbot/core/entity/BoxAnswer.java b/src/main/java/org/sadtech/vkbot/core/entity/BoxAnswer.java new file mode 100644 index 0000000..56f6121 --- /dev/null +++ b/src/main/java/org/sadtech/vkbot/core/entity/BoxAnswer.java @@ -0,0 +1,69 @@ +package org.sadtech.vkbot.core.entity; + +import java.util.Objects; + +public class BoxAnswer { + + private String message; + private String keyboard; + private Float lat; + private Float aLong; + private Integer stickerId; + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public String getKeyboard() { + return keyboard; + } + + public void setKeyboard(String keyboard) { + this.keyboard = keyboard; + } + + public Float getLat() { + return lat; + } + + public void setLat(Float lat) { + this.lat = lat; + } + + public Float getaLong() { + return aLong; + } + + public void setaLong(Float aLong) { + this.aLong = aLong; + } + + public Integer getStickerId() { + return stickerId; + } + + public void setStickerId(Integer stickerId) { + this.stickerId = stickerId; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + BoxAnswer boxAnswer = (BoxAnswer) o; + return Objects.equals(message, boxAnswer.message) && + Objects.equals(keyboard, boxAnswer.keyboard) && + Objects.equals(lat, boxAnswer.lat) && + Objects.equals(aLong, boxAnswer.aLong) && + Objects.equals(stickerId, boxAnswer.stickerId); + } + + @Override + public int hashCode() { + return Objects.hash(message, keyboard, lat, aLong, stickerId); + } +} diff --git a/src/main/java/org/sadtech/vkbot/core/insert/VkInsertData.java b/src/main/java/org/sadtech/vkbot/core/insert/VkInsertData.java index c641171..da628a5 100644 --- a/src/main/java/org/sadtech/vkbot/core/insert/VkInsertData.java +++ b/src/main/java/org/sadtech/vkbot/core/insert/VkInsertData.java @@ -2,7 +2,6 @@ package org.sadtech.vkbot.core.insert; import org.sadtech.vkbot.core.VkApi; import org.sadtech.vkbot.core.VkConnect; -import org.sadtech.vkbot.core.entity.MailSend; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -15,9 +14,9 @@ public class VkInsertData { this.vkApi = new VkApi(vkConnect); } - public String insertWords(MailSend mailSend, Integer idUser) { + public String insertWords(String message, Integer idUser) { Pattern pattern = Pattern.compile("%(\\w+)%"); - Matcher m = pattern.matcher(mailSend.getMessage()); + Matcher m = pattern.matcher(message); StringBuffer result = new StringBuffer(); while (m.find()) { m.appendReplacement(result, insert(m.group(0), idUser)); diff --git a/src/main/java/org/sadtech/vkbot/core/listener/EventListenerVk.java b/src/main/java/org/sadtech/vkbot/core/listener/EventListenerVk.java index 13528a3..8502663 100644 --- a/src/main/java/org/sadtech/vkbot/core/listener/EventListenerVk.java +++ b/src/main/java/org/sadtech/vkbot/core/listener/EventListenerVk.java @@ -21,6 +21,8 @@ public class EventListenerVk implements EventListener, Runnable { private VkApiClient vk; private GroupActor actor; + private static Integer DEFAULT_WAIT_TIME = 10; + private RawEventService rawEventService; public EventListenerVk(VkConnect vkConnect) { @@ -44,7 +46,7 @@ public class EventListenerVk implements EventListener, Runnable { int lastTimeStamp = longPollServer.getTs(); while (true) { try { - GetLongPollEventsResponse eventsResponse = vk.longPoll().getEvents(longPollServer.getServer(), longPollServer.getKey(), lastTimeStamp).waitTime(25).execute(); + GetLongPollEventsResponse eventsResponse = vk.longPoll().getEvents(longPollServer.getServer(), longPollServer.getKey(), lastTimeStamp).waitTime(DEFAULT_WAIT_TIME).execute(); for (JsonObject jsonObject: eventsResponse.getUpdates()) { log.info("Новое событие от LongPoll\n" + jsonObject); rawEventService.add(jsonObject); @@ -52,6 +54,7 @@ public class EventListenerVk implements EventListener, Runnable { lastTimeStamp = eventsResponse.getTs(); } catch (LongPollServerKeyExpiredException e) { longPollServer = getLongPollServer(); + lastTimeStamp = longPollServer.getTs(); } } diff --git a/src/main/java/org/sadtech/vkbot/core/sender/MailSenderVk.java b/src/main/java/org/sadtech/vkbot/core/sender/MailSenderVk.java index a88ded9..b84c07b 100644 --- a/src/main/java/org/sadtech/vkbot/core/sender/MailSenderVk.java +++ b/src/main/java/org/sadtech/vkbot/core/sender/MailSenderVk.java @@ -7,13 +7,10 @@ import com.vk.api.sdk.exceptions.ClientException; import com.vk.api.sdk.queries.messages.MessagesSendQuery; import org.apache.log4j.Logger; import org.sadtech.vkbot.core.VkConnect; +import org.sadtech.vkbot.core.entity.BoxAnswer; import org.sadtech.vkbot.core.insert.VkInsertData; -import org.sadtech.vkbot.core.entity.MailSend; -import org.sadtech.vkbot.core.insert.InsertWords; -import java.util.List; - -public class MailSenderVk implements MailSent { +public class MailSenderVk implements Sent { public static final Logger log = Logger.getLogger(MailSenderVk.class); @@ -28,19 +25,30 @@ public class MailSenderVk implements MailSent { this.vkInsertData = new VkInsertData(vkConnect); } - private MessagesSendQuery createMessage(MailSend mailSend, Integer peerId) { - MessagesSendQuery messages = vkApiClient.messages().send(groupActor).peerId(peerId); - if (mailSend.getKeyboard() != null) { - messages.keyboard(mailSend.getKeyboard()); + @Override + public void send(Integer idPerson, String message) { + sendMessage(vkApiClient.messages().send(groupActor).peerId(idPerson).message(message)); + } + + @Override + public void send(Integer idPerson, BoxAnswer boxAnswer) { + MessagesSendQuery messagesSendQuery = createMessage(boxAnswer, idPerson); + sendMessage(messagesSendQuery); + } + + private MessagesSendQuery createMessage(BoxAnswer boxAnswer, Integer peerId) { + MessagesSendQuery messages = vkApiClient.messages().send(groupActor).peerId(peerId).message(vkInsertData.insertWords(boxAnswer.getMessage(), peerId)); + if (boxAnswer.getKeyboard() != null) { + messages.keyboard(boxAnswer.getKeyboard()); } else { messages.keyboard("{\"buttons\":[],\"one_time\":true}"); } - if (mailSend.getLat() != null && mailSend.getaLong() != null) { - messages.lat(mailSend.getLat()).lng(mailSend.getaLong()); + if (boxAnswer.getLat() != null && boxAnswer.getaLong() != null) { + messages.lat(boxAnswer.getLat()).lng(boxAnswer.getaLong()); } - if (mailSend.getStickerId() != null) { + if (boxAnswer.getStickerId() != null) { try { - vkApiClient.messages().send(groupActor).peerId(peerId).stickerId(mailSend.getStickerId()).execute(); + vkApiClient.messages().send(groupActor).peerId(peerId).stickerId(boxAnswer.getStickerId()).execute(); } catch (ApiException | ClientException e) { e.printStackTrace(); } @@ -48,27 +56,6 @@ public class MailSenderVk implements MailSent { return messages; } - @Override - public void send(MailSend mailSend, Integer peerId, Integer userId) { - MessagesSendQuery messages = createMessage(mailSend, peerId); - if (mailSend.getMessage() != null) { - messages.message(vkInsertData.insertWords(mailSend, userId)); - } - sendMessage(messages); - } - - @Override - public void send(MailSend mailSend, Integer peerId, Integer userId, List insertWords) { - MessagesSendQuery messages = createMessage(mailSend, peerId); - if (mailSend.getMessage() != null) { - InsertWords insert = new InsertWords(); - insert.setInText(vkInsertData.insertWords(mailSend, peerId)); - insert.insert(insertWords); - messages.message(insert.getOutText()); - } - sendMessage(messages); - } - private void sendMessage(MessagesSendQuery messages) { try { messages.execute(); @@ -76,5 +63,4 @@ public class MailSenderVk implements MailSent { e.printStackTrace(); } } - } diff --git a/src/main/java/org/sadtech/vkbot/core/sender/MailSent.java b/src/main/java/org/sadtech/vkbot/core/sender/MailSent.java deleted file mode 100644 index 19bab9f..0000000 --- a/src/main/java/org/sadtech/vkbot/core/sender/MailSent.java +++ /dev/null @@ -1,13 +0,0 @@ -package org.sadtech.vkbot.core.sender; - -import org.sadtech.vkbot.core.entity.MailSend; - -import java.util.List; - -public interface MailSent { - - void send(MailSend mailSend, Integer peerId, Integer userId); - - void send(MailSend mailSend, Integer peerId, Integer userId, List insertWords); - -} diff --git a/src/main/java/org/sadtech/vkbot/core/sender/Sent.java b/src/main/java/org/sadtech/vkbot/core/sender/Sent.java new file mode 100644 index 0000000..6ccdd09 --- /dev/null +++ b/src/main/java/org/sadtech/vkbot/core/sender/Sent.java @@ -0,0 +1,11 @@ +package org.sadtech.vkbot.core.sender; + +import org.sadtech.vkbot.core.entity.BoxAnswer; + +public interface Sent { + + void send(Integer idPerson, String message); + + void send(Integer idPerson, BoxAnswer boxAnswer); + +} diff --git a/src/main/java/org/sadtech/vkbot/core/service/distribution/impl/MailServiceImpl.java b/src/main/java/org/sadtech/vkbot/core/service/distribution/impl/MailServiceImpl.java index e589207..7a6560f 100644 --- a/src/main/java/org/sadtech/vkbot/core/service/distribution/impl/MailServiceImpl.java +++ b/src/main/java/org/sadtech/vkbot/core/service/distribution/impl/MailServiceImpl.java @@ -62,7 +62,6 @@ public class MailServiceImpl implements MailService { @Override public List getFirstMailByTime(Integer timeFrom, Integer timeTo) { - log.info("Запрошены сообщения от " + timeFrom + " до " + timeTo); List mails = mailRepository.getMailByTime(timeFrom, timeTo); Set people = new HashSet<>(); List returnMails = new ArrayList<>();