From edd2adc5aa6b19155d27892c0242cc2b67db7b1d Mon Sep 17 00:00:00 2001 From: XuqmGroup Date: Fri, 1 May 2026 23:25:57 +0800 Subject: [PATCH] feat(sdk): add new admin APIs to Java SDK - queryUserState - kickUsers - batchSendMessage - adminSetMsgRead - importMessages - checkFriends - modifyGroupMemberInfo Also add FriendCheckResult and ImportMessageRequest models. --- .../java/com/xuqm/im/sdk/XuqmImServerSdk.java | 100 ++++++++++++++++++ 1 file changed, 100 insertions(+) diff --git a/im-sdk/src/main/java/com/xuqm/im/sdk/XuqmImServerSdk.java b/im-sdk/src/main/java/com/xuqm/im/sdk/XuqmImServerSdk.java index 1ef80e4..38ca922 100644 --- a/im-sdk/src/main/java/com/xuqm/im/sdk/XuqmImServerSdk.java +++ b/im-sdk/src/main/java/com/xuqm/im/sdk/XuqmImServerSdk.java @@ -1030,6 +1030,93 @@ public final class XuqmImServerSdk { return response.data(); } + public Map queryUserState(List userIds) { + Map query = new LinkedHashMap<>(); + query.put("userIds", String.join(",", userIds)); + ApiResponse> response = request( + "GET", + buildUri("/api/im/admin/users/state", query), + null, + authorizedHeaders(), + new TypeReference<>() {} + ); + return response.data(); + } + + public void kickUsers(String appId, List userIds) { + Map query = new LinkedHashMap<>(); + query.put("appId", appId); + request( + "POST", + buildUri("/api/im/admin/users/kick", query), + Map.of("userIds", userIds), + authorizedHeaders(), + new TypeReference>() {} + ); + } + + public List batchSendMessage(String appId, List toIds, String msgType, String content) { + Map query = new LinkedHashMap<>(); + query.put("appId", appId); + ApiResponse> 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 query = new LinkedHashMap<>(); + query.put("appId", appId); + request( + "POST", + buildUri("/api/im/admin/messages/read", query), + Map.of("userId", userId), + authorizedHeaders(), + new TypeReference>() {} + ); + } + + public List importMessages(String appId, List requests) { + Map query = new LinkedHashMap<>(); + query.put("appId", appId); + ApiResponse> response = request( + "POST", + buildUri("/api/im/admin/messages/import", query), + requests, + authorizedHeaders(), + new TypeReference<>() {} + ); + return response.data(); + } + + public List checkFriends(String appId, List friendIds) { + Map query = new LinkedHashMap<>(); + query.put("appId", appId); + ApiResponse> 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 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 query = appQuery(); query.put("chatType", chatType); @@ -1816,6 +1903,19 @@ public final class XuqmImServerSdk { public record RequestBatch(List 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);