feat(sdk): add new admin APIs to Java SDK

- queryUserState
- kickUsers
- batchSendMessage
- adminSetMsgRead
- importMessages
- checkFriends
- modifyGroupMemberInfo

Also add FriendCheckResult and ImportMessageRequest models.
这个提交包含在:
XuqmGroup 2026-05-01 23:25:57 +08:00
父节点 3f4d78f175
当前提交 edd2adc5aa

查看文件

@ -1030,6 +1030,93 @@ public final class XuqmImServerSdk {
return response.data();
}
public Map<String, Boolean> queryUserState(List<String> userIds) {
Map<String, String> query = new LinkedHashMap<>();
query.put("userIds", String.join(",", userIds));
ApiResponse<Map<String, Boolean>> response = request(
"GET",
buildUri("/api/im/admin/users/state", query),
null,
authorizedHeaders(),
new TypeReference<>() {}
);
return response.data();
}
public void kickUsers(String appId, List<String> userIds) {
Map<String, String> query = new LinkedHashMap<>();
query.put("appId", appId);
request(
"POST",
buildUri("/api/im/admin/users/kick", query),
Map.of("userIds", userIds),
authorizedHeaders(),
new TypeReference<ApiResponse<Void>>() {}
);
}
public List<ImMessage> batchSendMessage(String appId, List<String> toIds, String msgType, String content) {
Map<String, String> query = new LinkedHashMap<>();
query.put("appId", appId);
ApiResponse<List<ImMessage>> response = request(
"POST",
buildUri("/api/im/admin/messages/batch-send", query),
Map.of("toIds", toIds, "msgType", msgType, "content", content),
authorizedHeaders(),
new TypeReference<>() {}
);
return response.data();
}
public void adminSetMsgRead(String appId, String userId) {
Map<String, String> query = new LinkedHashMap<>();
query.put("appId", appId);
request(
"POST",
buildUri("/api/im/admin/messages/read", query),
Map.of("userId", userId),
authorizedHeaders(),
new TypeReference<ApiResponse<Void>>() {}
);
}
public List<ImMessage> importMessages(String appId, List<ImportMessageRequest> requests) {
Map<String, String> query = new LinkedHashMap<>();
query.put("appId", appId);
ApiResponse<List<ImMessage>> response = request(
"POST",
buildUri("/api/im/admin/messages/import", query),
requests,
authorizedHeaders(),
new TypeReference<>() {}
);
return response.data();
}
public List<FriendCheckResult> checkFriends(String appId, List<String> friendIds) {
Map<String, String> query = new LinkedHashMap<>();
query.put("appId", appId);
ApiResponse<List<FriendCheckResult>> response = request(
"POST",
buildUri("/api/im/friends/check", query),
Map.of("friendIds", friendIds),
authorizedHeaders(),
new TypeReference<>() {}
);
return response.data();
}
public GroupView modifyGroupMemberInfo(String groupId, String userId, String nickName) {
ApiResponse<GroupView> response = request(
"PUT",
buildUri("/api/im/groups/" + encode(groupId) + "/members/" + encode(userId) + "/info", appQuery()),
Map.of("nickName", nickName),
authorizedHeaders(),
new TypeReference<>() {}
);
return response.data();
}
public void setConversationPinned(String targetId, String chatType, boolean pinned) {
Map<String, String> query = appQuery();
query.put("chatType", chatType);
@ -1816,6 +1903,19 @@ public final class XuqmImServerSdk {
public record RequestBatch(List<String> requestIds) {}
public record FriendCheckResult(String userId, boolean isFriend) {}
public record ImportMessageRequest(
String messageId,
String fromUserId,
String toId,
String chatType,
String msgType,
String content,
String status,
String createdAt
) {}
public static final class ImSdkException extends RuntimeException {
public ImSdkException(String message) {
super(message);