Локальные переменные для доступа к данным вк
* Что это значит? Теперь разработчику не нужно самому лесть в 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.exceptions.ClientException;
|
||||||
import com.vk.api.sdk.objects.users.UserMin;
|
import com.vk.api.sdk.objects.users.UserMin;
|
||||||
import com.vk.api.sdk.objects.users.UserXtrCounters;
|
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;
|
import java.util.List;
|
||||||
|
|
||||||
public class VkApi {
|
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 VkApiClient vk;
|
||||||
private GroupActor actor;
|
private GroupActor actor;
|
||||||
@ -40,4 +42,13 @@ public class VkApi {
|
|||||||
return userMin;
|
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 com.vk.api.sdk.queries.messages.MessagesSendQuery;
|
||||||
import org.apache.log4j.Logger;
|
import org.apache.log4j.Logger;
|
||||||
import org.sadtech.vkbot.core.VkConnect;
|
import org.sadtech.vkbot.core.VkConnect;
|
||||||
|
import org.sadtech.vkbot.core.VkInsertData;
|
||||||
import org.sadtech.vkbot.core.entity.MailSend;
|
import org.sadtech.vkbot.core.entity.MailSend;
|
||||||
|
|
||||||
|
import java.util.regex.Matcher;
|
||||||
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
public class MailSanderVk implements MailSandler {
|
public class MailSanderVk implements MailSandler {
|
||||||
|
|
||||||
public static final Logger log = Logger.getLogger(MailSanderVk.class);
|
public static final Logger log = Logger.getLogger(MailSanderVk.class);
|
||||||
@ -16,16 +20,19 @@ public class MailSanderVk implements MailSandler {
|
|||||||
private VkApiClient vkApiClient;
|
private VkApiClient vkApiClient;
|
||||||
private GroupActor groupActor;
|
private GroupActor groupActor;
|
||||||
|
|
||||||
|
private VkInsertData vkInsertData;
|
||||||
|
|
||||||
public MailSanderVk(VkConnect vkConnect) {
|
public MailSanderVk(VkConnect vkConnect) {
|
||||||
this.vkApiClient = vkConnect.getVkApiClient();
|
this.vkApiClient = vkConnect.getVkApiClient();
|
||||||
this.groupActor = vkConnect.getGroupActor();
|
this.groupActor = vkConnect.getGroupActor();
|
||||||
|
this.vkInsertData = new VkInsertData(vkConnect);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void send(MailSend mailSend) {
|
public void send(MailSend mailSend) {
|
||||||
MessagesSendQuery messages = vkApiClient.messages().send(groupActor).peerId(mailSend.getIdRecipient());
|
MessagesSendQuery messages = vkApiClient.messages().send(groupActor).peerId(mailSend.getIdRecipient());
|
||||||
if (mailSend.getMessage() != null) {
|
if (mailSend.getMessage() != null) {
|
||||||
messages.message(mailSend.getMessage());
|
messages.message(insertWords(mailSend));
|
||||||
}
|
}
|
||||||
if (mailSend.getKeyboard() != null) {
|
if (mailSend.getKeyboard() != null) {
|
||||||
messages.keyboard(mailSend.getKeyboard());
|
messages.keyboard(mailSend.getKeyboard());
|
||||||
@ -50,4 +57,17 @@ public class MailSanderVk implements MailSandler {
|
|||||||
e.printStackTrace();
|
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