Skip to content
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -48,4 +48,5 @@ yarn.lock
### Cloudflare ###
.wrangler/
.dev.vars
wrangler.toml.local
wrangler.toml.local
/src/test/resources/app.properties
80 changes: 80 additions & 0 deletions docs/guide/sns.md
Original file line number Diff line number Diff line change
Expand Up @@ -283,3 +283,83 @@ GroupGetRequest request = GroupGetRequest.builder()

GroupGetResult result = client.sns.groupGet(request);
```

## 关注用户

关注用户,支持批量关注用户。

使用示例:

```java
FollowRequestItem followRequestItem = FollowRequestItem.builder().toAccount("test2").build();
List<FollowRequestItem> followRequestItemList = Collections.singletonList(followRequestItem);
FollowAddRequest request = FollowAddRequest.builder()
.fromAccount("test1")
.followItemList(followRequestItemList)
.build();

FollowAddResult result = client.sns.followAdd(request);
```

## 取消关注用户

取消关注用户,支持批量取关。

使用示例:

```java
List<String> toAccount = Collections.singletonList("test2");
FollowDeleteRequest request = FollowDeleteRequest.builder()
.fromAccount("test1")
.toAccount(toAccount)
.build();

FollowDeleteResult result = client.sns.followDelete(request);
```

## 拉取关注、粉丝与互关列表

分页拉取指定用户的粉丝/关注/互关列表。

使用示例:

```java
FollowGetRequest request = FollowGetRequest.builder()
.fromAccount("test2")
.followType(1)
.build();

FollowGetResult result = client.sns.followGet(request);
```

## 检查关注关系

支持批量检查关注关系。

使用示例:

```java
List<String> toAccount = Collections.singletonList("test2");
FollowCheckRequest request = FollowCheckRequest.builder()
.fromAccount("test1")
.toAccount(toAccount)
.build();

FollowCheckResult result = client.sns.followCheck(request);
```

## 获取用户的关注、粉丝与互关数

批量查询指定用户的粉丝/关注/互关数。

使用示例:

```java
List<String> toAccount = Collections.singletonList("test2");
FollowGetInfoRequest request = FollowGetInfoRequest.builder()
.fromAccount("test1")
.toAccount(toAccount)
.build();

FollowGetInfoResult result = client.sns.followGetInfo(request);
```
2 changes: 2 additions & 0 deletions src/main/java/io/github/doocs/im/ImClient.java
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@ public class ImClient {
public final Robot robot;
public final Audit audit;
public final OfficialAccount officialAccount;
public final CloudSearch cloudSearch;

public static ImClient getInstance(long sdkAppId, String userId, String key) {
return new ImClient(sdkAppId, userId, key);
Expand Down Expand Up @@ -97,6 +98,7 @@ public ImClient(long sdkAppId, String userId, String key, String domain, ClientC
robot = new Robot(this);
audit = new Audit(this);
officialAccount = new OfficialAccount(this);
cloudSearch = new CloudSearch(this);
}

/**
Expand Down
125 changes: 125 additions & 0 deletions src/main/java/io/github/doocs/im/core/CloudSearch.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,125 @@
package io.github.doocs.im.core;

import io.github.doocs.im.ImClient;
import io.github.doocs.im.model.request.*;
import io.github.doocs.im.model.response.*;
import io.github.doocs.im.util.HttpUtil;

import java.io.IOException;

/**
* <p>
* 云端搜索
* </p>
*
* @author MC.Yang
* @version V1.0
**/
public class CloudSearch {
/**
* 云端搜索服务名
*/
public static final String SERVICE_NAME_USER = "user_search";
public static final String SERVICE_NAME_GROUP = "group_search";
public static final String SERVICE_NAME_GROUP_MEMBER = "group_member_search";
public static final String SERVICE_NAME_IM_OPEN = "im_open_search";

/**
* 云端搜索相关命令字
*/
public static final String SEARCH_COMMAND = "search";
public static final String SET_VISIBILITY_COMMAND = "set_visibility";
public static final String GET_NO_VISIBILITY_COMMAND = "get_no_visibility";

private final ImClient imClient;

public CloudSearch(ImClient imClient) {
this.imClient = imClient;
}

/**
* 用户搜索
*
* @param userSearchRequest 用户搜索请求参数
* @return 用户搜索结果
* @throws IOException 用户搜索异常
*/
public UserSearchResult userSearch(UserSearchRequest userSearchRequest) throws IOException {
String url = imClient.getUrl(SERVICE_NAME_USER, SEARCH_COMMAND);
return HttpUtil.post(url, userSearchRequest, UserSearchResult.class, imClient.getConfig());
}

public UserSearchResult userSearch(UserSearchRequest userSearchRequest, long random) throws IOException {
String url = imClient.getUrl(SERVICE_NAME_USER, SEARCH_COMMAND, random);
return HttpUtil.post(url, userSearchRequest, UserSearchResult.class, imClient.getConfig());
}

/**
* 群组搜索
*
* @param groupSearchRequest 群组搜索请求参数
* @return 群组搜索结果
* @throws IOException 群组搜索异常
*/
public GroupSearchResult groupSearch(GroupSearchRequest groupSearchRequest) throws IOException {
String url = imClient.getUrl(SERVICE_NAME_GROUP, SEARCH_COMMAND);
return HttpUtil.post(url, groupSearchRequest, GroupSearchResult.class, imClient.getConfig());
}

public GroupSearchResult groupSearch(GroupSearchRequest groupSearchRequest, long random) throws IOException {
String url = imClient.getUrl(SERVICE_NAME_GROUP, SEARCH_COMMAND, random);
return HttpUtil.post(url, groupSearchRequest, GroupSearchResult.class, imClient.getConfig());
}

/**
* 群成员搜索
*
* @param groupMemberSearchRequest 群成员搜索请求参数
* @return 群成员搜索结果
* @throws IOException 群成员搜索异常
*/
public GroupMemberSearchResult groupMemberSearch(GroupMemberSearchRequest groupMemberSearchRequest) throws IOException {
String url = imClient.getUrl(SERVICE_NAME_GROUP_MEMBER, SEARCH_COMMAND);
return HttpUtil.post(url, groupMemberSearchRequest, GroupMemberSearchResult.class, imClient.getConfig());
}

public GroupMemberSearchResult groupMemberSearch(GroupMemberSearchRequest groupMemberSearchRequest, long random) throws IOException {
String url = imClient.getUrl(SERVICE_NAME_GROUP_MEMBER, SEARCH_COMMAND, random);
return HttpUtil.post(url, groupMemberSearchRequest, GroupMemberSearchResult.class, imClient.getConfig());
}

/**
* 隐藏搜索对象
*
* @param setVisibilityRequest 隐藏搜索对象请求参数
* @return 隐藏搜索对象结果
* @throws IOException 隐藏搜索对象异常
*/
public SetVisibilitySearchResult setVisibility(SetVisibilityRequest setVisibilityRequest) throws IOException {
String url = imClient.getUrl(SERVICE_NAME_IM_OPEN, SET_VISIBILITY_COMMAND);
return HttpUtil.post(url, setVisibilityRequest, SetVisibilitySearchResult.class, imClient.getConfig());
}

public SetVisibilitySearchResult setVisibility(SetVisibilityRequest setVisibilityRequest, long random) throws IOException {
String url = imClient.getUrl(SERVICE_NAME_IM_OPEN, SET_VISIBILITY_COMMAND, random);
return HttpUtil.post(url, setVisibilityRequest, SetVisibilitySearchResult.class, imClient.getConfig());
}

/**
* 查询隐藏搜索对象
*
* @param getNoVisibilityRequest 查询隐藏搜索对象请求参数
* @return 查询隐藏搜索对象结果
* @throws IOException 查询隐藏搜索对象异常
*/
public GetNoVisibilitySearchResult getNoVisibility(GetNoVisibilityRequest getNoVisibilityRequest) throws IOException {
String url = imClient.getUrl(SERVICE_NAME_IM_OPEN, GET_NO_VISIBILITY_COMMAND);
return HttpUtil.post(url, getNoVisibilityRequest, GetNoVisibilitySearchResult.class, imClient.getConfig());
}

public GetNoVisibilitySearchResult getNoVisibility(GetNoVisibilityRequest getNoVisibilityRequest, long random) throws IOException {
String url = imClient.getUrl(SERVICE_NAME_IM_OPEN, GET_NO_VISIBILITY_COMMAND, random);
return HttpUtil.post(url, getNoVisibilityRequest, GetNoVisibilitySearchResult.class, imClient.getConfig());
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,115 @@
package io.github.doocs.im.model.request;

import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;

import java.io.Serializable;

/**
* <p>
* 查询隐藏搜索对象-请求参数
* </p>
*
* @author MC.Yang
* @version V1.0
**/
@JsonInclude(JsonInclude.Include.NON_NULL)
public class GetNoVisibilityRequest extends GenericRequest implements Serializable {
private static final long serialVersionUID = 8616458085271489051L;

/**
* 搜索对象类型:
* 1=用户搜索。
* 2=群组搜索。
* 3=群成员搜索。
*/
@JsonProperty("SetType")
private Integer setType;

/**
* 当次查询搜索对象的数量。
*/
@JsonProperty("Count")
private Integer count;

/**
* 续拉参数,上个请求的 Response 中带回,首次请求为空。
*/
@JsonProperty("Cursor")
private String cursor;

public GetNoVisibilityRequest() {
}

public GetNoVisibilityRequest(Integer setType) {
this.setType = setType;
}

public GetNoVisibilityRequest(Integer setType, Integer count, String cursor) {
this.setType = setType;
this.count = count;
this.cursor = cursor;
}

private GetNoVisibilityRequest(Builder builder) {
this.setType = builder.setType;
this.count = builder.count;
this.cursor = builder.cursor;
}

public static Builder builder() {
return new Builder();
}

public Integer getSetType() {
return setType;
}

public void setSetType(Integer setType) {
this.setType = setType;
}

public Integer getCount() {
return count;
}

public void setCount(Integer count) {
this.count = count;
}

public String getCursor() {
return cursor;
}

public void setCursor(String cursor) {
this.cursor = cursor;
}

public static final class Builder {
private Integer setType;
private Integer count;
private String cursor;

private Builder() {
}

public GetNoVisibilityRequest build() {
return new GetNoVisibilityRequest(this);
}

public Builder setType(Integer setType) {
this.setType = setType;
return this;
}

public Builder count(Integer count) {
this.count = count;
return this;
}

public Builder cursor(String cursor) {
this.cursor = cursor;
return this;
}
}
}
Loading