diff --git a/pom.xml b/pom.xml index b8866a5..621fbc2 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ org.sadtech.vkbot vkbot-core - 0.2.1-SNAPSHOT + 0.2.1-RELEASE jar @@ -23,9 +23,9 @@ - 0.6.2-SNAPSHOT + 0.6.2-RELEASE - 0.5.13-SNAPSHOT + 0.5.13-FORK 1.2.17 diff --git a/src/main/java/org/sadtech/vkbot/core/VkConfig.java b/src/main/java/org/sadtech/vkbot/core/VkConfig.java deleted file mode 100644 index 3b0bd52..0000000 --- a/src/main/java/org/sadtech/vkbot/core/VkConfig.java +++ /dev/null @@ -1,39 +0,0 @@ -package org.sadtech.vkbot.core; - -import java.util.Objects; - -public class VkConfig { - - private VkConfigGroup configGroup; - private VkConfigUser configUser; - - public VkConfigGroup getConfigGroup() { - return configGroup; - } - - public void setConfigGroup(VkConfigGroup configGroup) { - this.configGroup = configGroup; - } - - public VkConfigUser getConfigUser() { - return configUser; - } - - public void setConfigUser(VkConfigUser configUser) { - this.configUser = configUser; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (!(o instanceof VkConfig)) return false; - VkConfig vkConfig = (VkConfig) o; - return Objects.equals(configGroup, vkConfig.configGroup) && - Objects.equals(configUser, vkConfig.configUser); - } - - @Override - public int hashCode() { - return Objects.hash(configGroup, configUser); - } -} diff --git a/src/main/java/org/sadtech/vkbot/core/VkConfigGroup.java b/src/main/java/org/sadtech/vkbot/core/VkConfigGroup.java deleted file mode 100644 index 083d914..0000000 --- a/src/main/java/org/sadtech/vkbot/core/VkConfigGroup.java +++ /dev/null @@ -1,79 +0,0 @@ -package org.sadtech.vkbot.core; - -import java.util.Objects; - -public class VkConfigGroup { - - private String groupToken; - private Integer groupId; - private String serviceToken; - private Integer appId; - private String groupSecretKey; - private String groupPublicKey; - - public String getGroupToken() { - return groupToken; - } - - public void setGroupToken(String groupToken) { - this.groupToken = groupToken; - } - - public Integer getGroupId() { - return groupId; - } - - public void setGroupId(Integer groupId) { - this.groupId = groupId; - } - - public String getServiceToken() { - return serviceToken; - } - - public void setServiceToken(String serviceToken) { - this.serviceToken = serviceToken; - } - - public Integer getAppId() { - return appId; - } - - public void setAppId(Integer appId) { - this.appId = appId; - } - - public String getGroupSecretKey() { - return groupSecretKey; - } - - public void setGroupSecretKey(String groupSecretKey) { - this.groupSecretKey = groupSecretKey; - } - - public String getGroupPublicKey() { - return groupPublicKey; - } - - public void setGroupPublicKey(String groupPublicKey) { - this.groupPublicKey = groupPublicKey; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (!(o instanceof VkConfigGroup)) return false; - VkConfigGroup that = (VkConfigGroup) o; - return Objects.equals(groupToken, that.groupToken) && - Objects.equals(groupId, that.groupId) && - Objects.equals(serviceToken, that.serviceToken) && - Objects.equals(appId, that.appId) && - Objects.equals(groupSecretKey, that.groupSecretKey) && - Objects.equals(groupPublicKey, that.groupPublicKey); - } - - @Override - public int hashCode() { - return Objects.hash(groupToken, groupId, serviceToken, appId, groupSecretKey, groupPublicKey); - } -} diff --git a/src/main/java/org/sadtech/vkbot/core/config/VkConfig.java b/src/main/java/org/sadtech/vkbot/core/config/VkConfig.java new file mode 100644 index 0000000..bc2e6f5 --- /dev/null +++ b/src/main/java/org/sadtech/vkbot/core/config/VkConfig.java @@ -0,0 +1,75 @@ +package org.sadtech.vkbot.core.config; + +import org.sadtech.vkbot.core.exception.ConfigException; + +import java.util.Objects; +import java.util.Optional; + +public class VkConfig { + + private VkConfigGroup configGroup; + private VkConfigUser configUser; + private VkConfigService configService; + + public VkConfigGroup getConfigGroup() { + return Optional.ofNullable(configGroup) + .orElseThrow(() -> new ConfigException("Конфигурация сервиса для группы найдена")); + + } + + public VkConfigUser getConfigUser() { + return Optional.ofNullable(configUser) + .orElseThrow(() -> new ConfigException("Конфигурация для пользователя не найдена")); + + } + + public VkConfigService getConfigService() { + return Optional.ofNullable(configService) + .orElseThrow(() -> new ConfigException("Конфигурация сервиса не найдена")); + } + + public static Builder builder() { + return new VkConfig().new Builder(); + } + + public class Builder { + private Builder() { + + } + + public Builder configGroup(VkConfigGroup configGroup) { + VkConfig.this.configGroup = configGroup; + return this; + } + + public Builder configUser(VkConfigUser configUser) { + VkConfig.this.configUser = configUser; + return this; + } + + public Builder configService(VkConfigService configService) { + VkConfig.this.configService = configService; + return this; + } + + public VkConfig build() { + return VkConfig.this; + } + + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (!(o instanceof VkConfig)) return false; + VkConfig vkConfig = (VkConfig) o; + return Objects.equals(configGroup, vkConfig.configGroup) && + Objects.equals(configUser, vkConfig.configUser) && + Objects.equals(configService, vkConfig.configService); + } + + @Override + public int hashCode() { + return Objects.hash(configGroup, configUser, configService); + } +} diff --git a/src/main/java/org/sadtech/vkbot/core/config/VkConfigGroup.java b/src/main/java/org/sadtech/vkbot/core/config/VkConfigGroup.java new file mode 100644 index 0000000..1fa72f9 --- /dev/null +++ b/src/main/java/org/sadtech/vkbot/core/config/VkConfigGroup.java @@ -0,0 +1,56 @@ +package org.sadtech.vkbot.core.config; + +import java.util.Objects; + +public class VkConfigGroup { + + private String groupToken; + private Integer groupId; + + public String getGroupToken() { + return groupToken; + } + + public Integer getGroupId() { + return groupId; + } + + public static Builder builder() { + return new VkConfigGroup().new Builder(); + } + + public class Builder { + private Builder() { + + } + + public Builder groupId(Integer groupId) { + VkConfigGroup.this.groupId = groupId; + return this; + } + + public Builder groupToken(String groupToken) { + VkConfigGroup.this.groupToken = groupToken; + return this; + } + + public VkConfigGroup build() { + return VkConfigGroup.this; + } + + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (!(o instanceof VkConfigGroup)) return false; + VkConfigGroup that = (VkConfigGroup) o; + return Objects.equals(groupToken, that.groupToken) && + Objects.equals(groupId, that.groupId); + } + + @Override + public int hashCode() { + return Objects.hash(groupToken, groupId); + } +} diff --git a/src/main/java/org/sadtech/vkbot/core/config/VkConfigService.java b/src/main/java/org/sadtech/vkbot/core/config/VkConfigService.java new file mode 100644 index 0000000..f8015cd --- /dev/null +++ b/src/main/java/org/sadtech/vkbot/core/config/VkConfigService.java @@ -0,0 +1,56 @@ +package org.sadtech.vkbot.core.config; + +import java.util.Objects; + +public class VkConfigService { + + private String serviceToken; + private Integer appId; + + public String getServiceToken() { + return serviceToken; + } + + public Integer getAppId() { + return appId; + } + + public static Builder builder() { + return new VkConfigService().new Builder(); + } + + public class Builder { + private Builder() { + + } + + public Builder serviceToken(String serviceToken) { + VkConfigService.this.serviceToken = serviceToken; + return this; + } + + public Builder appId(Integer appId) { + VkConfigService.this.appId = appId; + return this; + } + + public VkConfigService build() { + return VkConfigService.this; + } + + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (!(o instanceof VkConfigService)) return false; + VkConfigService that = (VkConfigService) o; + return Objects.equals(serviceToken, that.serviceToken) && + Objects.equals(appId, that.appId); + } + + @Override + public int hashCode() { + return Objects.hash(serviceToken, appId); + } +} diff --git a/src/main/java/org/sadtech/vkbot/core/VkConfigUser.java b/src/main/java/org/sadtech/vkbot/core/config/VkConfigUser.java similarity index 52% rename from src/main/java/org/sadtech/vkbot/core/VkConfigUser.java rename to src/main/java/org/sadtech/vkbot/core/config/VkConfigUser.java index 7912c09..e952dad 100644 --- a/src/main/java/org/sadtech/vkbot/core/VkConfigUser.java +++ b/src/main/java/org/sadtech/vkbot/core/config/VkConfigUser.java @@ -1,4 +1,4 @@ -package org.sadtech.vkbot.core; +package org.sadtech.vkbot.core.config; import java.util.Objects; @@ -7,22 +7,44 @@ public class VkConfigUser { private Integer userId; private String token; - public Integer getUserId() { - return userId; + private VkConfigUser() { + } - public void setUserId(Integer userId) { - this.userId = userId; + public Integer getUserId() { + return userId; } public String getToken() { return token; } - public void setToken(String token) { - this.token = token; + public static Builder builder() { + return new VkConfigUser().new Builder(); } + public class Builder { + private Builder() { + + } + + public Builder userId(Integer userId) { + VkConfigUser.this.userId = userId; + return this; + } + + public Builder token(String token) { + VkConfigUser.this.token = token; + return this; + } + + public VkConfigUser build() { + return VkConfigUser.this; + } + + } + + @Override public boolean equals(Object o) { if (this == o) return true; diff --git a/src/main/java/org/sadtech/vkbot/core/VkConnect.java b/src/main/java/org/sadtech/vkbot/core/config/VkConnect.java similarity index 91% rename from src/main/java/org/sadtech/vkbot/core/VkConnect.java rename to src/main/java/org/sadtech/vkbot/core/config/VkConnect.java index 12e0579..3d32c51 100644 --- a/src/main/java/org/sadtech/vkbot/core/VkConnect.java +++ b/src/main/java/org/sadtech/vkbot/core/config/VkConnect.java @@ -1,4 +1,4 @@ -package org.sadtech.vkbot.core; +package org.sadtech.vkbot.core.config; import com.vk.api.sdk.client.VkApiClient; import com.vk.api.sdk.client.actors.GroupActor; @@ -68,6 +68,6 @@ public class VkConnect { } private void initServiceActor() { - serviceActor = new ServiceActor(vkConfig.getConfigGroup().getAppId(), vkConfig.getConfigGroup().getServiceToken()); + serviceActor = new ServiceActor(vkConfig.getConfigService().getAppId(), vkConfig.getConfigService().getServiceToken()); } } diff --git a/src/main/java/org/sadtech/vkbot/core/convert/Convert.java b/src/main/java/org/sadtech/vkbot/core/convert/Convert.java index 792bd25..6b0c915 100644 --- a/src/main/java/org/sadtech/vkbot/core/convert/Convert.java +++ b/src/main/java/org/sadtech/vkbot/core/convert/Convert.java @@ -1,5 +1,6 @@ package org.sadtech.vkbot.core.convert; +@FunctionalInterface public interface Convert { C converting(T target); diff --git a/src/main/java/org/sadtech/vkbot/core/convert/KeyBoardConvert.java b/src/main/java/org/sadtech/vkbot/core/convert/KeyBoardConvert.java index 69a9677..0b4c60a 100644 --- a/src/main/java/org/sadtech/vkbot/core/convert/KeyBoardConvert.java +++ b/src/main/java/org/sadtech/vkbot/core/convert/KeyBoardConvert.java @@ -5,17 +5,23 @@ import org.sadtech.bot.core.domain.keyboard.ButtonColor; import org.sadtech.bot.core.domain.keyboard.KeyBoard; import org.sadtech.bot.core.domain.keyboard.KeyBoardButton; import org.sadtech.bot.core.domain.keyboard.KeyBoardLine; +import org.sadtech.bot.core.domain.keyboard.button.KeyBoardButtonAccount; +import org.sadtech.bot.core.domain.keyboard.button.KeyBoardButtonText; +import org.sadtech.vkbot.core.config.VkConnect; import java.util.ArrayList; import java.util.List; -public final class KeyBoardConvert { +public class KeyBoardConvert { - private KeyBoardConvert() { + private final VkConnect vkConnect; + public KeyBoardConvert(VkConnect vkConnect) { + this.vkConnect = vkConnect; } - public static Keyboard convertKeyboard(KeyBoard keyboard) { + + public Keyboard convertKeyboard(KeyBoard keyboard) { Keyboard keyboardVk = new Keyboard(); keyboardVk.setOneTime(keyboard.isOneTime()); @@ -32,20 +38,58 @@ public final class KeyBoardConvert { return keyboardVk; } - private static KeyboardButton convertButton(KeyBoardButton button) { + private KeyboardButton convertButton(KeyBoardButton button) { KeyboardButton buttonVk = new KeyboardButton(); - buttonVk.setColor(convertColor(button.getColor())); - KeyboardButtonAction buttonActionVk = new KeyboardButtonAction(); - buttonActionVk.setLabel(button.getLabel()); - buttonActionVk.setType(KeyboardButtonActionType.TEXT); - buttonActionVk.setPayload(button.getPayload()); + switch (button.getType()) { + case TEXT: + KeyBoardButtonText buttonText = (KeyBoardButtonText) button; + buttonVk.setColor(convertColor(buttonText.getColor())); + break; + } + KeyboardButtonAction buttonActionVk = createActionButton(button); buttonVk.setAction(buttonActionVk); return buttonVk; } + private KeyboardButtonAction createActionButton(KeyBoardButton button) { + KeyboardButtonAction keyboardButtonAction = new KeyboardButtonAction(); + switch (button.getType()) { + case TEXT: + KeyBoardButtonText buttonText = (KeyBoardButtonText) button; + keyboardButtonAction.setType(KeyboardButtonActionType.TEXT); + keyboardButtonAction.setLabel(buttonText.getLabel()); + break; + case ACCOUNT: + KeyBoardButtonAccount buttonAccount = (KeyBoardButtonAccount) button; + keyboardButtonAction.setType(KeyboardButtonActionType.VKPAY); + keyboardButtonAction.setHash(createHash(buttonAccount)); + break; + } + return keyboardButtonAction; + } + + private String createHash(KeyBoardButtonAccount button) { + StringBuilder stringBuilder = new StringBuilder(); + if (button.getAmount()!=null) { + stringBuilder + .append("action=pay-to-group&amount=") + .append(button.getAmount()).append("&group_id=") + .append(vkConnect.getGroupActor().getGroupId()); + } else { + stringBuilder + .append("action=transfer-to-group") + .append(button.getAmount()).append("&group_id=") + .append(vkConnect.getGroupActor().getGroupId()); + } + if (button.getAccountId()!=null) { + stringBuilder.append("&description=").append(button.getAccountId()); + } + return stringBuilder.append("&aid=").append(vkConnect.getServiceActor().getId()).toString(); + } + private static KeyboardButtonColor convertColor(ButtonColor color) { KeyboardButtonColor buttonColorVk; switch (color) { diff --git a/src/main/java/org/sadtech/vkbot/core/convert/MessageMailConvert.java b/src/main/java/org/sadtech/vkbot/core/convert/MessageMailConvert.java index 5ef5511..19555cf 100644 --- a/src/main/java/org/sadtech/vkbot/core/convert/MessageMailConvert.java +++ b/src/main/java/org/sadtech/vkbot/core/convert/MessageMailConvert.java @@ -35,6 +35,7 @@ public class MessageMailConvert implements Convert { return Geo.builder() .coordinate(geoVk.getCoordinates().getLatitude(), geoVk.getCoordinates().getLongitude()) + .city(geoVk.getPlace().getCity()) .build(); } diff --git a/src/main/java/org/sadtech/vkbot/core/convert/TopicCommentToBoardComment.java b/src/main/java/org/sadtech/vkbot/core/convert/TopicCommentToBoardComment.java index f3a9d3e..c3d1187 100644 --- a/src/main/java/org/sadtech/vkbot/core/convert/TopicCommentToBoardComment.java +++ b/src/main/java/org/sadtech/vkbot/core/convert/TopicCommentToBoardComment.java @@ -11,7 +11,7 @@ public class TopicCommentToBoardComment implements Convert { @@ -14,6 +15,33 @@ public abstract class AbstractBasketSubscribe { convert = (object) -> (C) object; } + protected abstract boolean check(S object); + + public void update(S object) { + C newObject = convert.converting(object); + if (!goNextSubscribe(newObject)) { + processing(newObject); + } + } + + private boolean goNextSubscribe(C object) { + AtomicBoolean flag = new AtomicBoolean(false); + if (prioritySubscribe != null && prioritySubscribe.check(object)) { + prioritySubscribe.update(object); + flag.set(true); + } else if (basketSubscribes != null) { + basketSubscribes.stream() + .filter(basketSubscribe -> basketSubscribe.check(object)) + .forEach(basketSubscribe -> { + basketSubscribe.update(object); + flag.set(true); + }); + } + return flag.get(); + } + + public abstract void processing(C object); + public Set getBasketSubscribes() { return basketSubscribes; } @@ -38,30 +66,4 @@ public abstract class AbstractBasketSubscribe { this.convert = convert; } - protected abstract boolean check(S object); - - private boolean goNextSubscribe(C object) { - boolean flag = false; - if (prioritySubscribe != null && prioritySubscribe.check(object)) { - prioritySubscribe.update(object); - flag = true; - } else if (basketSubscribes != null) { - for (AbstractBasketSubscribe basketSubscribe : basketSubscribes) { - if (basketSubscribe.check(object)) { - basketSubscribe.update(object); - flag = true; - } - } - } - return flag; - } - - public void update(S object) { - C newObject = convert.converting(object); - if (!goNextSubscribe(newObject)) { - processing(newObject); - } - } - - public abstract void processing(C object); } diff --git a/src/main/java/org/sadtech/vkbot/core/distribution/AccountSubscribe.java b/src/main/java/org/sadtech/vkbot/core/distribution/AccountSubscribe.java index d65c753..9f7fe3b 100644 --- a/src/main/java/org/sadtech/vkbot/core/distribution/AccountSubscribe.java +++ b/src/main/java/org/sadtech/vkbot/core/distribution/AccountSubscribe.java @@ -1,6 +1,7 @@ package org.sadtech.vkbot.core.distribution; import com.vk.api.sdk.objects.messages.Message; +import com.vk.api.sdk.objects.messages.MessageAttachmentType; import org.sadtech.bot.core.domain.BoxAnswer; import org.sadtech.bot.core.exception.PaymentException; import org.sadtech.bot.core.service.AccountService; @@ -21,24 +22,18 @@ public class AccountSubscribe extends AbstractBasketSubscribe this.sent = sent; } - public BoxAnswer getAnswerSuccessfulPayment() { - return answerSuccessfulPayment; - } - - public void setAnswerSuccessfulPayment(BoxAnswer answerSuccessfulPayment) { - this.answerSuccessfulPayment = answerSuccessfulPayment; - } - @Override protected boolean check(Message userMessage) { - return userMessage.getAttachments().size() > 0 && "Денежный перевод".equals(userMessage.getAttachments().get(0).getLink().getCaption()); + return userMessage.getAttachments().size() > 0 + && MessageAttachmentType.LINK.equals(userMessage.getAttachments().get(0).getType()) + && "Payment awaiting acceptance".equals(userMessage.getAttachments().get(0).getLink().getCaption()); } @Override public void processing(Message message) { if (message.getText() != null) { try { - Double valueSum = Double.valueOf(message.getAttachments().get(0).getLink().getTitle().split(" ")[0]); + Integer valueSum = Integer.valueOf(message.getAttachments().get(0).getLink().getTitle().split(" ")[0]); if (accountService.pay(Integer.valueOf(message.getText()), message.getPeerId(), valueSum) && answerSuccessfulPayment != null) { sent.send(message.getPeerId(), answerSuccessfulPayment); } @@ -48,4 +43,12 @@ public class AccountSubscribe extends AbstractBasketSubscribe } } } + + public BoxAnswer getAnswerSuccessfulPayment() { + return answerSuccessfulPayment; + } + + public void setAnswerSuccessfulPayment(BoxAnswer answerSuccessfulPayment) { + this.answerSuccessfulPayment = answerSuccessfulPayment; + } } diff --git a/src/main/java/org/sadtech/vkbot/core/distribution/BoardCommentSubscribe.java b/src/main/java/org/sadtech/vkbot/core/distribution/BoardCommentSubscribe.java index 6b918b8..363473c 100644 --- a/src/main/java/org/sadtech/vkbot/core/distribution/BoardCommentSubscribe.java +++ b/src/main/java/org/sadtech/vkbot/core/distribution/BoardCommentSubscribe.java @@ -55,9 +55,16 @@ public class BoardCommentSubscribe extends AbstractBasketSubscribe { + log.info("Новое событие от LongPoll\n" + object); + rawEventService.add(object); + }); lastTimeStamp = eventsResponse.getTs(); } catch (LongPollServerKeyExpiredException e) { - log.error(e.getStackTrace()); + log.error(e.getMessage()); longPollServer = getLongPollServer(); } catch (Exception e) { - log.error(e.getStackTrace()); + log.error(e.getMessage()); break; } } @@ -76,8 +72,12 @@ public class EventListenerVk implements Runnable { try { listen(); } catch (ClientException | ApiException e) { - log.error(e); + log.error(e.getMessage()); } } + public RawEventService getRawEventService() { + return rawEventService; + } + } diff --git a/src/main/java/org/sadtech/vkbot/core/sender/BoardCommentSenderVk.java b/src/main/java/org/sadtech/vkbot/core/sender/BoardCommentSenderVk.java index 133f10f..076e3e6 100644 --- a/src/main/java/org/sadtech/vkbot/core/sender/BoardCommentSenderVk.java +++ b/src/main/java/org/sadtech/vkbot/core/sender/BoardCommentSenderVk.java @@ -6,10 +6,13 @@ import com.vk.api.sdk.client.actors.UserActor; import com.vk.api.sdk.exceptions.ApiException; import com.vk.api.sdk.exceptions.ClientException; import org.sadtech.bot.core.domain.BoxAnswer; +import org.sadtech.bot.core.domain.keyboard.KeyBoardButton; +import org.sadtech.bot.core.domain.keyboard.KeyBoardLine; +import org.sadtech.bot.core.domain.keyboard.button.KeyBoardButtonText; import org.sadtech.bot.core.exception.MailSendException; import org.sadtech.bot.core.service.sender.Sent; -import org.sadtech.vkbot.core.VkConnect; -import org.sadtech.vkbot.core.VkInsertData; +import org.sadtech.vkbot.core.config.VkConnect; +import org.sadtech.vkbot.core.utils.VkInsertData; public class BoardCommentSenderVk implements Sent { @@ -33,7 +36,22 @@ public class BoardCommentSenderVk implements Sent { @Override public void send(Integer contentId, Integer personId, BoxAnswer boxAnswer) { try { - vkApiClient.board().createComment(userActor, groupActor.getGroupId(), contentId).message(vkInsertData.insertWords(boxAnswer.getMessage(), personId)).fromGroup(true).execute(); + StringBuilder insertAnswer = new StringBuilder(vkInsertData.insertWords(boxAnswer.getMessage(), personId)); + if (boxAnswer.getKeyboard() != null) { + insertAnswer.append("\n\nМеню:\n"); + for (KeyBoardLine keyBoardLine : boxAnswer.getKeyboard().getKeyBoardLines()) { + for (KeyBoardButton keyBoardButton : keyBoardLine.getKeyBoardButtons()) { + switch (keyBoardButton.getType()) { + case TEXT: + insertAnswer.append("- ").append(((KeyBoardButtonText)keyBoardButton).getLabel()).append("\n"); + } + + } + } + } + + vkApiClient.board().createComment(userActor, groupActor.getGroupId(), contentId) + .message(insertAnswer.toString()).fromGroup(true).execute(); } catch (ApiException | ClientException e) { e.printStackTrace(); } 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 07e6c80..556ba28 100644 --- a/src/main/java/org/sadtech/vkbot/core/sender/MailSenderVk.java +++ b/src/main/java/org/sadtech/vkbot/core/sender/MailSenderVk.java @@ -1,6 +1,5 @@ package org.sadtech.vkbot.core.sender; -import com.google.gson.Gson; import com.vk.api.sdk.client.VkApiClient; import com.vk.api.sdk.client.actors.GroupActor; import com.vk.api.sdk.exceptions.ApiException; @@ -9,10 +8,11 @@ import com.vk.api.sdk.objects.messages.Keyboard; import com.vk.api.sdk.queries.messages.MessagesSendQuery; import org.apache.log4j.Logger; import org.sadtech.bot.core.domain.BoxAnswer; +import org.sadtech.bot.core.domain.keyboard.KeyBoard; import org.sadtech.bot.core.service.sender.Sent; -import org.sadtech.vkbot.core.VkConnect; -import org.sadtech.vkbot.core.VkInsertData; +import org.sadtech.vkbot.core.config.VkConnect; import org.sadtech.vkbot.core.convert.KeyBoardConvert; +import org.sadtech.vkbot.core.utils.VkInsertData; import java.util.Collections; import java.util.concurrent.ThreadLocalRandom; @@ -23,14 +23,14 @@ public class MailSenderVk implements Sent { private final VkApiClient vkApiClient; private final GroupActor groupActor; - private final VkInsertData vkInsertData; - private final Gson gson = new Gson(); + private final KeyBoardConvert keyBoardConvert; public MailSenderVk(VkConnect vkConnect) { this.vkApiClient = vkConnect.getVkApiClient(); this.groupActor = vkConnect.getGroupActor(); this.vkInsertData = new VkInsertData(vkConnect); + keyBoardConvert = new KeyBoardConvert(vkConnect); } @Override @@ -39,34 +39,37 @@ public class MailSenderVk implements Sent { sendMessage(messagesSendQuery); } - @Override - public void send(Integer integer, Integer integer1, BoxAnswer boxAnswer) { - - } - private MessagesSendQuery createMessage(BoxAnswer boxAnswer, Integer peerId) { - MessagesSendQuery messages = vkApiClient.messages().send(groupActor).peerId(peerId).message(vkInsertData.insertWords(boxAnswer.getMessage(), peerId)).randomId(ThreadLocalRandom.current().nextInt(0, Integer.MAX_VALUE)); - if (boxAnswer.getKeyboard() != null) { - messages.keyboard(KeyBoardConvert.convertKeyboard(boxAnswer.getKeyboard())); - } else { - Keyboard keyboard = new Keyboard(); - keyboard.setOneTime(true); - keyboard.setButtons(Collections.EMPTY_LIST); - messages.keyboard(keyboard); - } + MessagesSendQuery messages = vkApiClient.messages().send(groupActor).peerId(peerId) + .message(vkInsertData.insertWords(boxAnswer.getMessage(), peerId)) + .randomId(ThreadLocalRandom.current().nextInt(0, Integer.MAX_VALUE)); + messages.keyboard(convertKeyBoard(boxAnswer.getKeyboard())); + if (boxAnswer.getCoordinates() != null) { messages.lat(boxAnswer.getCoordinates().getLatitude()).lng(boxAnswer.getCoordinates().getLongitude()); } if (boxAnswer.getStickerId() != null) { try { - vkApiClient.messages().send(groupActor).peerId(peerId).stickerId(boxAnswer.getStickerId()).execute(); + vkApiClient.messages().send(groupActor).peerId(peerId).stickerId(boxAnswer.getStickerId()) + .randomId(ThreadLocalRandom.current().nextInt(0, Integer.MAX_VALUE)).execute(); } catch (ApiException | ClientException e) { - log.error(e); + log.error(e.getMessage()); } } return messages; } + private Keyboard convertKeyBoard(KeyBoard keyboard) { + if (keyboard != null) { + return keyBoardConvert.convertKeyboard(keyboard); + } else { + Keyboard keyboardVk = new Keyboard(); + keyboardVk.setOneTime(true); + keyboardVk.setButtons(Collections.EMPTY_LIST); + return keyboardVk; + } + } + private void sendMessage(MessagesSendQuery messages) { try { @@ -76,5 +79,9 @@ public class MailSenderVk implements Sent { } } + @Override + public void send(Integer integer, Integer integer1, BoxAnswer boxAnswer) { + + } } diff --git a/src/main/java/org/sadtech/vkbot/core/VkApi.java b/src/main/java/org/sadtech/vkbot/core/utils/VkApi.java similarity index 90% rename from src/main/java/org/sadtech/vkbot/core/VkApi.java rename to src/main/java/org/sadtech/vkbot/core/utils/VkApi.java index eebb050..19a4423 100644 --- a/src/main/java/org/sadtech/vkbot/core/VkApi.java +++ b/src/main/java/org/sadtech/vkbot/core/utils/VkApi.java @@ -1,16 +1,17 @@ -package org.sadtech.vkbot.core; +package org.sadtech.vkbot.core.utils; import com.google.gson.Gson; import com.google.gson.JsonObject; import com.google.gson.JsonParser; import com.vk.api.sdk.client.VkApiClient; -import com.vk.api.sdk.client.actors.GroupActor; +import com.vk.api.sdk.client.actors.ServiceActor; import com.vk.api.sdk.exceptions.ApiException; import com.vk.api.sdk.exceptions.ClientException; import com.vk.api.sdk.objects.users.Fields; import com.vk.api.sdk.objects.users.UserMin; import com.vk.api.sdk.objects.users.UserXtrCounters; import org.apache.log4j.Logger; +import org.sadtech.vkbot.core.config.VkConnect; import java.util.List; @@ -19,11 +20,11 @@ public class VkApi { private static final Logger log = Logger.getLogger(String.valueOf(VkApi.class)); private final VkApiClient vk; - private final GroupActor actor; + private final ServiceActor actor; public VkApi(VkConnect vkConnect) { vk = vkConnect.getVkApiClient(); - actor = vkConnect.getGroupActor(); + actor = vkConnect.getServiceActor(); } public UserMin getUserMini(Integer id) { diff --git a/src/main/java/org/sadtech/vkbot/core/VkInsertData.java b/src/main/java/org/sadtech/vkbot/core/utils/VkInsertData.java similarity index 80% rename from src/main/java/org/sadtech/vkbot/core/VkInsertData.java rename to src/main/java/org/sadtech/vkbot/core/utils/VkInsertData.java index bbaa9bd..0ae7c99 100644 --- a/src/main/java/org/sadtech/vkbot/core/VkInsertData.java +++ b/src/main/java/org/sadtech/vkbot/core/utils/VkInsertData.java @@ -1,4 +1,6 @@ -package org.sadtech.vkbot.core; +package org.sadtech.vkbot.core.utils; + +import org.sadtech.vkbot.core.config.VkConnect; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -11,12 +13,12 @@ public class VkInsertData { this.vkApi = new VkApi(vkConnect); } - public String insertWords(String message, Integer idUser) { + public String insertWords(String message, Integer personId) { Pattern pattern = Pattern.compile("%(\\w+)%"); Matcher m = pattern.matcher(message); StringBuffer result = new StringBuffer(); while (m.find()) { - m.appendReplacement(result, insert(m.group(0), idUser)); + m.appendReplacement(result, insert(m.group(0), personId)); } m.appendTail(result); return result.toString();