Локальные переменные для доступа к данным вк
* Что это значит? Теперь разработчику не нужно самому лесть в vk api. для того, чтобы допустим получить имя пользователя и вставить его в сообщение. Достаточно в теле сообщения указать %firstname% * Новый юнит, который позволяет получить какие-то данные за пользователя. Например это позволяет пользователю не ввыодить город, а запрашивать его у вк и уточнять у пользователя актуальность.
This commit is contained in:
parent
a92d71ef3e
commit
3027f7d5cf
@ -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;
|
||||
}
|
||||
}
|
||||
|
31
src/main/java/org/sadtech/vkbot/core/VkInsertData.java
Normal file
31
src/main/java/org/sadtech/vkbot/core/VkInsertData.java
Normal 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;
|
||||
}
|
||||
|
||||
}
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user