Локальные переменные для доступа к данным вк

* Что это значит? Теперь разработчику не нужно самому лесть в vk api. для того, чтобы допустим получить имя пользователя и вставить его в сообщение. Достаточно в теле сообщения указать %firstname%
* Новый юнит, который позволяет получить какие-то данные за пользователя. Например это позволяет пользователю не ввыодить город, а запрашивать его у вк и уточнять у пользователя актуальность.
This commit is contained in:
Mark Struchkov 2019-01-31 15:06:54 +03:00
parent a92d71ef3e
commit 3027f7d5cf
3 changed files with 64 additions and 2 deletions

View File

@ -9,12 +9,14 @@ import com.vk.api.sdk.exceptions.ApiException;
import com.vk.api.sdk.exceptions.ClientException;
import com.vk.api.sdk.objects.users.UserMin;
import com.vk.api.sdk.objects.users.UserXtrCounters;
import com.vk.api.sdk.queries.users.UserField;
import org.apache.log4j.Logger;
import java.util.List;
public class VkApi {
// public static final Logger log = Logger.getLogger(String.valueOf(VkApi.class));
public static final Logger log = Logger.getLogger(String.valueOf(VkApi.class));
private VkApiClient vk;
private GroupActor actor;
@ -40,4 +42,13 @@ public class VkApi {
return userMin;
}
public String getUserUniver(Integer id) {
List<UserXtrCounters> temp = null;
try {
temp = vk.users().get(actor).userIds(String.valueOf(id)).fields(UserField.UNIVERSITIES).execute();
} catch (ApiException | ClientException e) {
e.printStackTrace();
}
return temp != null ? temp.get(0).getUniversities().get(0).getName() : null;
}
}

View File

@ -0,0 +1,31 @@
package org.sadtech.vkbot.core;
public class VkInsertData {
private VkApi vkApi;
private Integer userId;
public VkInsertData(VkConnect vkConnect) {
this.vkApi = new VkApi(vkConnect);
}
public Integer getUserId() {
return userId;
}
public void setUserId(Integer userId) {
this.userId = userId;
}
public String insert(String key) {
String string = "";
if (key.toLowerCase().equals("%firstname%")) {
string = vkApi.getUserMini(userId).getFirstName();
}
if (key.toLowerCase().equals("%lastname%")) {
string = vkApi.getUserMini(userId).getLastName();
}
return string;
}
}

View File

@ -7,8 +7,12 @@ 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.VkInsertData;
import org.sadtech.vkbot.core.entity.MailSend;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class MailSanderVk implements MailSandler {
public static final Logger log = Logger.getLogger(MailSanderVk.class);
@ -16,16 +20,19 @@ public class MailSanderVk implements MailSandler {
private VkApiClient vkApiClient;
private GroupActor groupActor;
private VkInsertData vkInsertData;
public MailSanderVk(VkConnect vkConnect) {
this.vkApiClient = vkConnect.getVkApiClient();
this.groupActor = vkConnect.getGroupActor();
this.vkInsertData = new VkInsertData(vkConnect);
}
@Override
public void send(MailSend mailSend) {
MessagesSendQuery messages = vkApiClient.messages().send(groupActor).peerId(mailSend.getIdRecipient());
if (mailSend.getMessage() != null) {
messages.message(mailSend.getMessage());
messages.message(insertWords(mailSend));
}
if (mailSend.getKeyboard() != null) {
messages.keyboard(mailSend.getKeyboard());
@ -50,4 +57,17 @@ public class MailSanderVk implements MailSandler {
e.printStackTrace();
}
}
private String insertWords(MailSend mailSend) {
vkInsertData.setUserId(mailSend.getIdRecipient());
Pattern pattern = Pattern.compile("\\%(\\w+)%");
Matcher m = pattern.matcher(mailSend.getMessage());
StringBuffer result = new StringBuffer();
while (m.find()) {
m.appendReplacement(result, vkInsertData.insert(m.group(0)));
}
m.appendTail(result);
return result.toString();
}
}