From 57b980fdae35f53cdbad7c5ce535c78c33b4335c Mon Sep 17 00:00:00 2001 From: wzp Date: Sun, 25 Aug 2024 00:07:03 +0800 Subject: [PATCH] feat: Complete API function implementation --- .idea/fileTemplates/includes/Version.txt | 2 +- build.gradle.kts | 2 +- src/main/java/cn/wzpmc/Main.java | 6 + src/main/java/cn/wzpmc/api/api/Actions.java | 149 ++++++++++++++++-- .../api/actions/message/CleanCacheAction.java | 21 +++ .../message/can/CanSendImageAction.java | 22 +++ .../message/can/CanSendRecordAction.java | 22 +++ .../actions/message/get/GetCookiesAction.java | 44 ++++++ .../message/get/GetCredentialsAction.java | 44 ++++++ .../message/get/GetCsrfTokenAction.java | 22 +++ .../message/get/GetFriendListAction.java | 24 +++ .../message/get/GetGroupHonorInfoAction.java | 54 +++++++ .../message/get/GetGroupInfoAction.java | 54 +++++++ .../message/get/GetGroupListAction.java | 24 +++ .../message/get/GetGroupMemberInfoAction.java | 62 ++++++++ .../message/get/GetGroupMemberListAction.java | 39 +++++ .../actions/message/get/GetImageAction.java | 35 ++++ .../message/get/GetLoginInfoAction.java | 22 +++ .../actions/message/get/GetRecordAction.java | 43 +++++ .../actions/message/get/GetStatusAction.java | 22 +++ .../message/get/GetStrangerInfoAction.java | 54 +++++++ .../message/get/GetVersionInfoAction.java | 23 +++ .../set/SetFriendAddRequestAction.java | 80 ++++++++++ .../message/set/SetGroupAddRequestAction.java | 78 +++++++++ ...mous.java => SetGroupAnonymousAction.java} | 6 +- .../message/set/SetGroupLeaveAction.java | 53 +++++++ .../message/set/SetGroupNameAction.java | 43 +++++ .../set/SetGroupSpecialTitleAction.java | 92 +++++++++++ .../actions/message/set/SetRestartAction.java | 45 ++++++ .../java/cn/wzpmc/api/entities/BotStatus.java | 4 +- .../api/entities/CookiesInformation.java | 20 +++ .../api/entities/CredentialsInformation.java | 27 ++++ .../api/entities/CsrfTokenInformation.java | 20 +++ .../api/entities/FilePathInformation.java | 19 +++ .../wzpmc/api/entities/FriendInformation.java | 23 +++ .../cn/wzpmc/api/entities/GroupHonorUser.java | 37 +++++ .../wzpmc/api/entities/GroupInformation.java | 40 +++++ .../api/entities/GroupMemberInformation.java | 101 ++++++++++++ .../wzpmc/api/entities/HonorInformation.java | 60 +++++++ .../cn/wzpmc/api/entities/HonorTalkative.java | 38 +++++ .../java/cn/wzpmc/api/entities/HonorType.java | 40 +++++ .../api/entities/VersionInformation.java | 34 ++++ .../java/cn/wzpmc/api/entities/YesNo.java | 20 +++ .../java/cn/wzpmc/api/user/CommandSender.java | 2 +- src/main/java/cn/wzpmc/api/user/IBot.java | 18 +++ .../api/user/permission/Permissions.java | 16 +- src/main/java/cn/wzpmc/utils/JsonUtils.java | 6 + .../wzpmc/utils/json/action/ActionReader.java | 13 +- .../wzpmc/utils/json/honor/HonorWriter.java | 19 +++ .../cn/wzpmc/utils/json/user/IBotReader.java | 39 +++++ 50 files changed, 1758 insertions(+), 25 deletions(-) create mode 100644 src/main/java/cn/wzpmc/api/api/actions/message/CleanCacheAction.java create mode 100644 src/main/java/cn/wzpmc/api/api/actions/message/can/CanSendImageAction.java create mode 100644 src/main/java/cn/wzpmc/api/api/actions/message/can/CanSendRecordAction.java create mode 100644 src/main/java/cn/wzpmc/api/api/actions/message/get/GetCookiesAction.java create mode 100644 src/main/java/cn/wzpmc/api/api/actions/message/get/GetCredentialsAction.java create mode 100644 src/main/java/cn/wzpmc/api/api/actions/message/get/GetCsrfTokenAction.java create mode 100644 src/main/java/cn/wzpmc/api/api/actions/message/get/GetFriendListAction.java create mode 100644 src/main/java/cn/wzpmc/api/api/actions/message/get/GetGroupHonorInfoAction.java create mode 100644 src/main/java/cn/wzpmc/api/api/actions/message/get/GetGroupInfoAction.java create mode 100644 src/main/java/cn/wzpmc/api/api/actions/message/get/GetGroupListAction.java create mode 100644 src/main/java/cn/wzpmc/api/api/actions/message/get/GetGroupMemberInfoAction.java create mode 100644 src/main/java/cn/wzpmc/api/api/actions/message/get/GetGroupMemberListAction.java create mode 100644 src/main/java/cn/wzpmc/api/api/actions/message/get/GetImageAction.java create mode 100644 src/main/java/cn/wzpmc/api/api/actions/message/get/GetLoginInfoAction.java create mode 100644 src/main/java/cn/wzpmc/api/api/actions/message/get/GetRecordAction.java create mode 100644 src/main/java/cn/wzpmc/api/api/actions/message/get/GetStatusAction.java create mode 100644 src/main/java/cn/wzpmc/api/api/actions/message/get/GetStrangerInfoAction.java create mode 100644 src/main/java/cn/wzpmc/api/api/actions/message/get/GetVersionInfoAction.java create mode 100644 src/main/java/cn/wzpmc/api/api/actions/message/set/SetFriendAddRequestAction.java create mode 100644 src/main/java/cn/wzpmc/api/api/actions/message/set/SetGroupAddRequestAction.java rename src/main/java/cn/wzpmc/api/api/actions/message/set/{SetGroupAnonymous.java => SetGroupAnonymousAction.java} (84%) create mode 100644 src/main/java/cn/wzpmc/api/api/actions/message/set/SetGroupLeaveAction.java create mode 100644 src/main/java/cn/wzpmc/api/api/actions/message/set/SetGroupNameAction.java create mode 100644 src/main/java/cn/wzpmc/api/api/actions/message/set/SetGroupSpecialTitleAction.java create mode 100644 src/main/java/cn/wzpmc/api/api/actions/message/set/SetRestartAction.java create mode 100644 src/main/java/cn/wzpmc/api/entities/CookiesInformation.java create mode 100644 src/main/java/cn/wzpmc/api/entities/CredentialsInformation.java create mode 100644 src/main/java/cn/wzpmc/api/entities/CsrfTokenInformation.java create mode 100644 src/main/java/cn/wzpmc/api/entities/FilePathInformation.java create mode 100644 src/main/java/cn/wzpmc/api/entities/FriendInformation.java create mode 100644 src/main/java/cn/wzpmc/api/entities/GroupHonorUser.java create mode 100644 src/main/java/cn/wzpmc/api/entities/GroupInformation.java create mode 100644 src/main/java/cn/wzpmc/api/entities/GroupMemberInformation.java create mode 100644 src/main/java/cn/wzpmc/api/entities/HonorInformation.java create mode 100644 src/main/java/cn/wzpmc/api/entities/HonorTalkative.java create mode 100644 src/main/java/cn/wzpmc/api/entities/HonorType.java create mode 100644 src/main/java/cn/wzpmc/api/entities/VersionInformation.java create mode 100644 src/main/java/cn/wzpmc/api/entities/YesNo.java create mode 100644 src/main/java/cn/wzpmc/utils/json/honor/HonorWriter.java create mode 100644 src/main/java/cn/wzpmc/utils/json/user/IBotReader.java diff --git a/.idea/fileTemplates/includes/Version.txt b/.idea/fileTemplates/includes/Version.txt index d12225c..afaf360 100644 --- a/.idea/fileTemplates/includes/Version.txt +++ b/.idea/fileTemplates/includes/Version.txt @@ -1 +1 @@ -0.0.5-dev \ No newline at end of file +1.0.0 \ No newline at end of file diff --git a/build.gradle.kts b/build.gradle.kts index 1112841..8048d28 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -4,7 +4,7 @@ import com.github.jengelman.gradle.plugins.shadow.transformers.Log4j2PluginsCach val projectName = rootProject.name val groupName by extra("cn.wzpmc") val projectArtifactId by extra("my-bot") -val projectVersion by extra("0.0.5-dev") +val projectVersion by extra("1.0.0") plugins { id("java") diff --git a/src/main/java/cn/wzpmc/Main.java b/src/main/java/cn/wzpmc/Main.java index 37e0426..49bb4b6 100644 --- a/src/main/java/cn/wzpmc/Main.java +++ b/src/main/java/cn/wzpmc/Main.java @@ -1,5 +1,7 @@ package cn.wzpmc; +import cn.wzpmc.api.api.IMainApi; +import cn.wzpmc.api.api.actions.message.get.GetLoginInfoAction; import cn.wzpmc.api.events.message.group.GroupMessageEvent; import cn.wzpmc.api.events.message.priv.PrivateMessageEvent; import cn.wzpmc.api.message.StringMessage; @@ -142,6 +144,10 @@ public class Main { loadPlugins(myBot); WebSocketConnectionHandler webSocketConnectionHandler = createConnection(myBot, uri); myBot.setConnectionHandler(webSocketConnectionHandler); + IMainApi mainApi = myBot.getMainApi(); + System.out.println(mainApi.doApiCall(new GetLoginInfoAction())); + System.out.println(mainApi.doApiCall(new GetLoginInfoAction())); + System.out.println(mainApi.doApiCall(new GetLoginInfoAction())); startConsole(myBot, webSocketConnectionHandler); } } \ No newline at end of file diff --git a/src/main/java/cn/wzpmc/api/api/Actions.java b/src/main/java/cn/wzpmc/api/api/Actions.java index 5781b67..83e781c 100644 --- a/src/main/java/cn/wzpmc/api/api/Actions.java +++ b/src/main/java/cn/wzpmc/api/api/Actions.java @@ -1,7 +1,9 @@ package cn.wzpmc.api.api; import cn.wzpmc.api.api.actions.message.send.SendMessageActionResponseData; -import cn.wzpmc.api.entities.MessageInformation; +import cn.wzpmc.api.entities.*; +import cn.wzpmc.api.user.IBot; +import cn.wzpmc.api.user.IUser; /** * 操作类型 @@ -24,7 +26,7 @@ public enum Actions { * 撤回消息 * @since 2024/8/23 21:07 v0.0.5-dev */ - DELETE_MSG(), + DELETE_MSG, /** * 获取消息 * @since 2024/8/23 21:07 v0.0.5-dev @@ -39,45 +41,170 @@ public enum Actions { * 发送好友赞 * @since 2024/8/23 21:08 v0.0.5-dev */ - SEND_LIKE(), + SEND_LIKE, /** * 群组踢人 * @since 2024/8/23 21:08 v0.0.5-dev */ - SET_GROUP_KICK(), + SET_GROUP_KICK, /** * 群组单人禁言 * @since 2024/8/23 21:08 v0.0.5-dev */ - SET_GROUP_BAN(), + SET_GROUP_BAN, /** * 群组匿名用户禁言 * @since 2024/8/23 21:08 v0.0.5-dev */ - SET_GROUP_ANONYMOUS_BAN(), + SET_GROUP_ANONYMOUS_BAN, /** * 群组全员禁言 * @since 2024/8/23 21:09 v0.0.5-dev */ - SET_GROUP_WHOLE_BAN(), + SET_GROUP_WHOLE_BAN, /** * 群组设置管理员 * @since 2024/8/23 21:09 v0.0.5-dev */ - SET_GROUP_ADMIN(), + SET_GROUP_ADMIN, /** * 群组匿名 * @since 2024/8/23 21:09 v0.0.5-dev */ - SET_GROUP_ANONYMOUS(), + SET_GROUP_ANONYMOUS, /** * 设置群名片(群备注) * @since 2024/8/23 21:09 v0.0.5-dev */ - SET_GROUP_CARD(); + SET_GROUP_CARD, + /** + * 设置群名 + * @since 2024/8/24 19:04 v0.0.6-dev + */ + SET_GROUP_NAME, + /** + * 退出群组 + * @since 2024/8/24 20:01 v0.0.6-dev + */ + SET_GROUP_LEAVE, + /** + * 设置群组专属头衔 + * @since 2024/8/24 20:01 v0.0.6-dev + */ + SET_GROUP_SPECIAL_TITLE, + /** + * 处理加好友请求 + * @since 2024/8/24 20:01 v0.0.6-dev + */ + SET_FRIEND_ADD_REQUEST, + /** + * 处理加群请求/邀请 + * @since 2024/8/24 20:02 v0.0.6-dev + */ + SET_GROUP_ADD_REQUEST, + /** + * 获取登录号信息 + * @since 2024/8/24 20:02 v0.0.6-dev + */ + GET_LOGIN_INFO(IBot.class), + /** + * 获取陌生人信息 + * @since 2024/8/24 20:02 v0.0.6-dev + */ + GET_STRANGER_INFO(IUser.class), + /** + * 获取好友列表 + * @since 2024/8/24 20:02 v0.0.6-dev + */ + GET_FRIEND_LIST(MessageInformation.class, true), + /** + * 获取群信息 + * @since 2024/8/24 20:02 v0.0.6-dev + */ + GET_GROUP_INFO(GroupInformation.class), + /** + * 获取群列表 + * @since 2024/8/24 20:02 v0.0.6-dev + */ + GET_GROUP_LIST(GroupInformation.class, true), + /** + * 获取群成员信息 + * @since 2024/8/24 20:02 v0.0.6-dev + */ + GET_GROUP_MEMBER_INFO(GroupMemberInformation.class), + /** + * 获取群成员列表 + * @since 2024/8/24 20:03 v0.0.6-dev + */ + GET_GROUP_MEMBER_LIST(GroupMemberInformation.class, true), + /** + * 获取群荣誉信息 + * @since 2024/8/24 20:03 v0.0.6-dev + */ + GET_GROUP_HONOR_INFO(HonorInformation.class), + /** + * 获取 Cookies + * @since 2024/8/24 20:03 v0.0.6-dev + */ + GET_COOKIES(CookiesInformation.class), + /** + * 获取 CSRF Token + * @since 2024/8/24 20:04 v0.0.6-dev + */ + GET_CSRF_TOKEN(CsrfTokenInformation.class), + /** + * 获取 QQ 相关接口凭证 + * @since 2024/8/24 20:04 v0.0.6-dev + */ + GET_CREDENTIALS(CredentialsInformation.class), + /** + * 获取语音 + * @since 2024/8/24 20:04 v0.0.6-dev + */ + GET_RECORD(FilePathInformation.class), + /** + * 获取图片 + * @since 2024/8/24 20:04 v0.0.6-dev + */ + GET_IMAGE(FilePathInformation.class), + /** + * 检查是否可以发送图片 + * @since 2024/8/24 20:04 v0.0.6-dev + */ + CAN_SEND_IMAGE(YesNo.class), + /** + * 检查是否可以发送语音 + * @since 2024/8/24 20:04 v0.0.6-dev + */ + CAN_SEND_RECORD(YesNo.class), + /** + * 获取运行状态 + * @since 2024/8/24 20:04 v0.0.6-dev + */ + GET_STATUS(BotStatus.class), + /** + * 获取版本信息 + * @since 2024/8/24 20:04 v0.0.6-dev + */ + GET_VERSION_INFO(VersionInformation.class), + /** + * 重启 OneBot 实现 + * @since 2024/8/24 20:05 v0.0.6-dev + */ + SET_RESTART, + /** + * 清理缓存 + * @since 2024/8/24 20:05 v0.0.6-dev + */ + CLEAN_CACHE; public final Class responseClass; - Actions(Class responseClass) { + public final boolean array; + Actions(Class responseClass, boolean array) { this.responseClass = responseClass; + this.array = array; + } + Actions(Class responseClass) { + this(responseClass, false); } Actions(){ this(Void.class); diff --git a/src/main/java/cn/wzpmc/api/api/actions/message/CleanCacheAction.java b/src/main/java/cn/wzpmc/api/api/actions/message/CleanCacheAction.java new file mode 100644 index 0000000..0ec2406 --- /dev/null +++ b/src/main/java/cn/wzpmc/api/api/actions/message/CleanCacheAction.java @@ -0,0 +1,21 @@ +package cn.wzpmc.api.api.actions.message; + +import cn.wzpmc.api.api.Action; +import cn.wzpmc.api.api.Actions; + +/** + * 清理缓存 + * @author wzp + * @version 0.0.6-dev + * @since 2024/8/24 20:46 + */ +public class CleanCacheAction extends Action { + /** + * 清理缓存 + * @author wzp + * @since 2024/8/24 23:59 v0.0.6-dev + */ + public CleanCacheAction() { + super.setAction(Actions.CLEAN_CACHE); + } +} diff --git a/src/main/java/cn/wzpmc/api/api/actions/message/can/CanSendImageAction.java b/src/main/java/cn/wzpmc/api/api/actions/message/can/CanSendImageAction.java new file mode 100644 index 0000000..10c8a35 --- /dev/null +++ b/src/main/java/cn/wzpmc/api/api/actions/message/can/CanSendImageAction.java @@ -0,0 +1,22 @@ +package cn.wzpmc.api.api.actions.message.can; + +import cn.wzpmc.api.api.Action; +import cn.wzpmc.api.api.Actions; +import cn.wzpmc.api.entities.YesNo; + +/** + * 检查是否可以发送图片 + * @author wzp + * @version 0.0.6-dev + * @since 2024/8/24 20:45 + */ +public class CanSendImageAction extends Action { + /** + * 检查是否可以发送图片 + * @author wzp + * @since 2024/8/24 23:51 v0.0.6-dev + */ + public CanSendImageAction(){ + super.setAction(Actions.CAN_SEND_IMAGE); + } +} diff --git a/src/main/java/cn/wzpmc/api/api/actions/message/can/CanSendRecordAction.java b/src/main/java/cn/wzpmc/api/api/actions/message/can/CanSendRecordAction.java new file mode 100644 index 0000000..c30184a --- /dev/null +++ b/src/main/java/cn/wzpmc/api/api/actions/message/can/CanSendRecordAction.java @@ -0,0 +1,22 @@ +package cn.wzpmc.api.api.actions.message.can; + +import cn.wzpmc.api.api.Action; +import cn.wzpmc.api.api.Actions; +import cn.wzpmc.api.entities.YesNo; + +/** + * 检查是否可以发送语音 + * @author wzp + * @version 0.0.6-dev + * @since 2024/8/24 20:45 + */ +public class CanSendRecordAction extends Action { + /** + * 检查是否可以发送语音 + * @author wzp + * @since 2024/8/24 23:51 v0.0.6-dev + */ + public CanSendRecordAction(){ + super.setAction(Actions.CAN_SEND_RECORD); + } +} diff --git a/src/main/java/cn/wzpmc/api/api/actions/message/get/GetCookiesAction.java b/src/main/java/cn/wzpmc/api/api/actions/message/get/GetCookiesAction.java new file mode 100644 index 0000000..c994aea --- /dev/null +++ b/src/main/java/cn/wzpmc/api/api/actions/message/get/GetCookiesAction.java @@ -0,0 +1,44 @@ +package cn.wzpmc.api.api.actions.message.get; + +import cn.wzpmc.api.api.Action; +import cn.wzpmc.api.api.Actions; +import cn.wzpmc.api.entities.CookiesInformation; +import lombok.AllArgsConstructor; +import lombok.Data; + +/** + * 获取 Cookies + * @author wzp + * @version 0.0.6-dev + * @since 2024/8/24 20:43 + */ +public class GetCookiesAction extends Action { + /** + * 获取 Cookies + * @author wzp + * @since 2024/8/24 23:51 v0.0.6-dev + * @param domain 需要获取 cookies 的域名 + */ + public GetCookiesAction(String domain) { + super.setAction(Actions.GET_COOKIES); + super.setParams(new Params(domain)); + } + + /** + * 获取 Cookies + * @author wzp + * @since 2024/8/24 23:51 v0.0.6-dev + */ + public GetCookiesAction() { + this(""); + } + @Data + @AllArgsConstructor + public static final class Params { + /** + * 需要获取 cookies 的域名 + * @since 2024/8/24 23:32 v0.0.6-dev + */ + private String domain; + } +} diff --git a/src/main/java/cn/wzpmc/api/api/actions/message/get/GetCredentialsAction.java b/src/main/java/cn/wzpmc/api/api/actions/message/get/GetCredentialsAction.java new file mode 100644 index 0000000..279e1ac --- /dev/null +++ b/src/main/java/cn/wzpmc/api/api/actions/message/get/GetCredentialsAction.java @@ -0,0 +1,44 @@ +package cn.wzpmc.api.api.actions.message.get; + +import cn.wzpmc.api.api.Action; +import cn.wzpmc.api.api.Actions; +import cn.wzpmc.api.entities.CredentialsInformation; +import lombok.AllArgsConstructor; +import lombok.Data; + +/** + * 获取 QQ 相关接口凭证 + * @author wzp + * @version 0.0.6-dev + * @since 2024/8/24 20:44 + */ +public class GetCredentialsAction extends Action { + /** + * 获取 QQ 相关接口凭证 + * @author wzp + * @since 2024/8/24 23:51 v0.0.6-dev + * @param domain 需要获取 cookies 的域名 + */ + public GetCredentialsAction(String domain) { + super.setAction(Actions.GET_COOKIES); + super.setParams(new Params(domain)); + } + + /** + * 获取 QQ 相关接口凭证 + * @author wzp + * @since 2024/8/24 23:52 v0.0.6-dev + */ + public GetCredentialsAction() { + this(""); + } + @Data + @AllArgsConstructor + public static final class Params { + /** + * 需要获取 cookies 的域名 + * @since 2024/8/24 23:32 v0.0.6-dev + */ + private String domain; + } +} diff --git a/src/main/java/cn/wzpmc/api/api/actions/message/get/GetCsrfTokenAction.java b/src/main/java/cn/wzpmc/api/api/actions/message/get/GetCsrfTokenAction.java new file mode 100644 index 0000000..594f8c3 --- /dev/null +++ b/src/main/java/cn/wzpmc/api/api/actions/message/get/GetCsrfTokenAction.java @@ -0,0 +1,22 @@ +package cn.wzpmc.api.api.actions.message.get; + +import cn.wzpmc.api.api.Action; +import cn.wzpmc.api.api.Actions; +import cn.wzpmc.api.entities.CsrfTokenInformation; + +/** + * 获取 CSRF Token + * @author wzp + * @version 0.0.6-dev + * @since 2024/8/24 20:44 + */ +public class GetCsrfTokenAction extends Action { + /** + * 获取 CSRF Token + * @author wzp + * @since 2024/8/24 23:52 v0.0.6-dev + */ + public GetCsrfTokenAction(){ + super.setAction(Actions.GET_CSRF_TOKEN); + } +} diff --git a/src/main/java/cn/wzpmc/api/api/actions/message/get/GetFriendListAction.java b/src/main/java/cn/wzpmc/api/api/actions/message/get/GetFriendListAction.java new file mode 100644 index 0000000..ba12a10 --- /dev/null +++ b/src/main/java/cn/wzpmc/api/api/actions/message/get/GetFriendListAction.java @@ -0,0 +1,24 @@ +package cn.wzpmc.api.api.actions.message.get; + +import cn.wzpmc.api.api.Action; +import cn.wzpmc.api.api.Actions; +import cn.wzpmc.api.entities.MessageInformation; + +import java.util.List; + +/** + * 获取好友列表 + * @author wzp + * @version 0.0.6-dev + * @since 2024/8/24 20:41 + */ +public class GetFriendListAction extends Action> { + /** + * 获取好友列表 + * @author wzp + * @since 2024/8/24 23:52 v0.0.6-dev + */ + public GetFriendListAction(){ + super.setAction(Actions.GET_FRIEND_LIST); + } +} diff --git a/src/main/java/cn/wzpmc/api/api/actions/message/get/GetGroupHonorInfoAction.java b/src/main/java/cn/wzpmc/api/api/actions/message/get/GetGroupHonorInfoAction.java new file mode 100644 index 0000000..97e0ae4 --- /dev/null +++ b/src/main/java/cn/wzpmc/api/api/actions/message/get/GetGroupHonorInfoAction.java @@ -0,0 +1,54 @@ +package cn.wzpmc.api.api.actions.message.get; + +import cn.wzpmc.api.api.Action; +import cn.wzpmc.api.api.Actions; +import cn.wzpmc.api.entities.HonorInformation; +import cn.wzpmc.api.entities.HonorType; +import com.alibaba.fastjson2.annotation.JSONField; +import lombok.AllArgsConstructor; +import lombok.Data; + +/** + * 获取群荣誉信息 + * @author wzp + * @version 0.0.6-dev + * @since 2024/8/24 20:43 + */ +public class GetGroupHonorInfoAction extends Action { + /** + * 获取群荣誉信息 + * @author wzp + * @since 2024/8/24 23:52 v0.0.6-dev + * @param groupId 群号 + * @param type 要获取的群荣誉类型,可传入 talkative performer legend strong_newbie emotion 以分别获取单个类型的群荣誉数据,或传入 all 获取所有数据 + */ + public GetGroupHonorInfoAction(Long groupId, HonorType type) { + this.setAction(Actions.GET_GROUP_HONOR_INFO); + this.setParams(new Params(groupId, type)); + } + + /** + * 获取群荣誉信息 + * @author wzp + * @since 2024/8/24 23:53 v0.0.6-dev + * @param groupId 群号 + */ + public GetGroupHonorInfoAction(Long groupId) { + this(groupId, HonorType.ALL); + } + @Data + @AllArgsConstructor + public static final class Params { + /** + * 群号 + * @since 2024/8/24 23:52 v0.0.6-dev + */ + @JSONField(name = "group_id") + private Long groupId; + /** + * 要获取的群荣誉类型,可传入 talkative performer legend strong_newbie emotion 以分别获取单个类型的群荣誉数据,或传入 all 获取所有数据 + * @since 2024/8/24 23:52 v0.0.6-dev + */ + private HonorType type; + } +} diff --git a/src/main/java/cn/wzpmc/api/api/actions/message/get/GetGroupInfoAction.java b/src/main/java/cn/wzpmc/api/api/actions/message/get/GetGroupInfoAction.java new file mode 100644 index 0000000..2c2cf26 --- /dev/null +++ b/src/main/java/cn/wzpmc/api/api/actions/message/get/GetGroupInfoAction.java @@ -0,0 +1,54 @@ +package cn.wzpmc.api.api.actions.message.get; + +import cn.wzpmc.api.api.Action; +import cn.wzpmc.api.api.Actions; +import cn.wzpmc.api.entities.GroupInformation; +import com.alibaba.fastjson2.annotation.JSONField; +import lombok.AllArgsConstructor; +import lombok.Data; + +/** + * 获取群信息 + * @author wzp + * @version 0.0.6-dev + * @since 2024/8/24 20:41 + */ +public class GetGroupInfoAction extends Action { + /** + * 获取群信息 + * @author wzp + * @since 2024/8/24 23:53 v0.0.6-dev + * @param groupId 群号 + * @param noCache 是否不使用缓存(使用缓存可能更新不及时,但响应更快) + */ + public GetGroupInfoAction(Long groupId, Boolean noCache){ + super.setAction(Actions.GET_GROUP_INFO); + super.setParams(new Params(groupId, noCache)); + } + + /** + * 获取群信息 + * @author wzp + * @since 2024/8/24 23:53 v0.0.6-dev + * @param groupId 群号 + */ + public GetGroupInfoAction(Long groupId){ + this(groupId, false); + } + @Data + @AllArgsConstructor + public static final class Params { + /** + * 群号 + * @since 2024/8/24 22:58 v0.0.6-dev + */ + @JSONField(name = "group_id") + private Long groupId; + /** + * 是否不使用缓存(使用缓存可能更新不及时,但响应更快) + * @since 2024/8/24 22:58 v0.0.6-dev + */ + @JSONField(name = "no_cache", defaultValue = "false") + private Boolean noCache; + } +} diff --git a/src/main/java/cn/wzpmc/api/api/actions/message/get/GetGroupListAction.java b/src/main/java/cn/wzpmc/api/api/actions/message/get/GetGroupListAction.java new file mode 100644 index 0000000..561acc7 --- /dev/null +++ b/src/main/java/cn/wzpmc/api/api/actions/message/get/GetGroupListAction.java @@ -0,0 +1,24 @@ +package cn.wzpmc.api.api.actions.message.get; + +import cn.wzpmc.api.api.Action; +import cn.wzpmc.api.api.Actions; +import cn.wzpmc.api.entities.GroupInformation; + +import java.util.List; + +/** + * 获取群列表 + * @author wzp + * @version 0.0.6-dev + * @since 2024/8/24 20:42 + */ +public class GetGroupListAction extends Action> { + /** + * 获取群列表 + * @author wzp + * @since 2024/8/24 23:54 v0.0.6-dev + */ + public GetGroupListAction(){ + super.setAction(Actions.GET_GROUP_LIST); + } +} diff --git a/src/main/java/cn/wzpmc/api/api/actions/message/get/GetGroupMemberInfoAction.java b/src/main/java/cn/wzpmc/api/api/actions/message/get/GetGroupMemberInfoAction.java new file mode 100644 index 0000000..c453923 --- /dev/null +++ b/src/main/java/cn/wzpmc/api/api/actions/message/get/GetGroupMemberInfoAction.java @@ -0,0 +1,62 @@ +package cn.wzpmc.api.api.actions.message.get; + +import cn.wzpmc.api.api.Action; +import cn.wzpmc.api.api.Actions; +import cn.wzpmc.api.entities.GroupMemberInformation; +import com.alibaba.fastjson2.annotation.JSONField; +import lombok.AllArgsConstructor; +import lombok.Data; + +/** + * 获取群成员信息 + * @author wzp + * @version 0.0.6-dev + * @since 2024/8/24 20:42 + */ +public class GetGroupMemberInfoAction extends Action { + /** + * 获取群成员信息 + * @author wzp + * @since 2024/8/24 23:54 v0.0.6-dev + * @param groupId 群号 + * @param userId QQ 号 + * @param noCache 是否不使用缓存 + */ + public GetGroupMemberInfoAction(Long groupId, Long userId, Boolean noCache){ + super.setAction(Actions.GET_GROUP_MEMBER_INFO); + super.setParams(new Params(groupId, userId, noCache)); + } + + /** + * 获取群成员信息 + * @author wzp + * @since 2024/8/24 23:54 v0.0.6-dev + * @param groupId 群号 + * @param userId QQ 号 + */ + public GetGroupMemberInfoAction(Long groupId, Long userId) { + this(groupId, userId, false); + } + @Data + @AllArgsConstructor + public static final class Params { + /** + * 群号 + * @since 2024/8/24 23:02 v0.0.6-dev + */ + @JSONField(name = "group_id") + private Long groupId; + /** + * QQ 号 + * @since 2024/8/24 23:02 v0.0.6-dev + */ + @JSONField(name = "user_id") + private Long userId; + /** + * 是否不使用缓存 + * @since 2024/8/24 23:02 v0.0.6-dev + */ + @JSONField(name = "no_cache", defaultValue = "false") + private Boolean noCache; + } +} diff --git a/src/main/java/cn/wzpmc/api/api/actions/message/get/GetGroupMemberListAction.java b/src/main/java/cn/wzpmc/api/api/actions/message/get/GetGroupMemberListAction.java new file mode 100644 index 0000000..3f5a1d1 --- /dev/null +++ b/src/main/java/cn/wzpmc/api/api/actions/message/get/GetGroupMemberListAction.java @@ -0,0 +1,39 @@ +package cn.wzpmc.api.api.actions.message.get; + +import cn.wzpmc.api.api.Action; +import cn.wzpmc.api.api.Actions; +import cn.wzpmc.api.entities.GroupMemberInformation; +import com.alibaba.fastjson2.annotation.JSONField; +import lombok.AllArgsConstructor; +import lombok.Data; + +import java.util.List; + +/** + * 获取群成员列表 + * @author wzp + * @version 0.0.6-dev + * @since 2024/8/24 20:42 + */ +public class GetGroupMemberListAction extends Action> { + /** + * 获取群成员列表 + * @author wzp + * @since 2024/8/24 23:54 v0.0.6-dev + * @param groupId 群号 + */ + public GetGroupMemberListAction(Long groupId) { + super.setAction(Actions.GET_GROUP_MEMBER_LIST); + super.setParams(new Params(groupId)); + } + @Data + @AllArgsConstructor + public static final class Params { + /** + * 群号 + * @since 2024/8/24 23:08 v0.0.6-dev + */ + @JSONField(name = "group_id") + private Long groupId; + } +} diff --git a/src/main/java/cn/wzpmc/api/api/actions/message/get/GetImageAction.java b/src/main/java/cn/wzpmc/api/api/actions/message/get/GetImageAction.java new file mode 100644 index 0000000..6273806 --- /dev/null +++ b/src/main/java/cn/wzpmc/api/api/actions/message/get/GetImageAction.java @@ -0,0 +1,35 @@ +package cn.wzpmc.api.api.actions.message.get; + +import cn.wzpmc.api.api.Action; +import cn.wzpmc.api.api.Actions; +import cn.wzpmc.api.entities.FilePathInformation; +import lombok.AllArgsConstructor; +import lombok.Data; + +/** + * 获取图片 + * @author wzp + * @version 0.0.6-dev + * @since 2024/8/24 20:44 + */ +public class GetImageAction extends Action { + /** + * 获取图片 + * @author wzp + * @since 2024/8/24 23:55 v0.0.6-dev + * @param file 收到的图片文件名(消息段的 file 参数),如 6B4DE3DFD1BD271E3297859D41C530F5.jpg + */ + public GetImageAction(String file) { + super.setAction(Actions.GET_IMAGE); + super.setParams(new Params(file)); + } + @Data + @AllArgsConstructor + public static final class Params { + /** + * 收到的图片文件名(消息段的 file 参数),如 6B4DE3DFD1BD271E3297859D41C530F5.jpg + * @since 2024/8/24 23:41 v0.0.6-dev + */ + private String file; + } +} diff --git a/src/main/java/cn/wzpmc/api/api/actions/message/get/GetLoginInfoAction.java b/src/main/java/cn/wzpmc/api/api/actions/message/get/GetLoginInfoAction.java new file mode 100644 index 0000000..b18650f --- /dev/null +++ b/src/main/java/cn/wzpmc/api/api/actions/message/get/GetLoginInfoAction.java @@ -0,0 +1,22 @@ +package cn.wzpmc.api.api.actions.message.get; + +import cn.wzpmc.api.api.Action; +import cn.wzpmc.api.api.Actions; +import cn.wzpmc.api.user.IBot; + +/** + * 获取登录号信息 + * @author wzp + * @version 0.0.6-dev + * @since 2024/8/24 20:18 + */ +public class GetLoginInfoAction extends Action { + /** + * 获取登录号信息 + * @author wzp + * @since 2024/8/24 23:55 v0.0.6-dev + */ + public GetLoginInfoAction() { + super.setAction(Actions.GET_LOGIN_INFO); + } +} diff --git a/src/main/java/cn/wzpmc/api/api/actions/message/get/GetRecordAction.java b/src/main/java/cn/wzpmc/api/api/actions/message/get/GetRecordAction.java new file mode 100644 index 0000000..bbb0ea2 --- /dev/null +++ b/src/main/java/cn/wzpmc/api/api/actions/message/get/GetRecordAction.java @@ -0,0 +1,43 @@ +package cn.wzpmc.api.api.actions.message.get; + +import cn.wzpmc.api.api.Action; +import cn.wzpmc.api.api.Actions; +import cn.wzpmc.api.entities.FilePathInformation; +import com.alibaba.fastjson2.annotation.JSONField; +import lombok.AllArgsConstructor; +import lombok.Data; + +/** + * 获取语音 + * @author wzp + * @version 0.0.6-dev + * @since 2024/8/24 20:44 + */ +public class GetRecordAction extends Action { + /** + * 获取语音 + * @author wzp + * @since 2024/8/24 23:55 v0.0.6-dev + * @param file 收到的语音文件名(消息段的 file 参数),如 0B38145AA44505000B38145AA4450500.silk + * @param outFormat 要转换到的格式,目前支持 mp3、amr、wma、m4a、spx、ogg、wav、flac + */ + public GetRecordAction(String file, String outFormat){ + super.setAction(Actions.GET_RECORD); + super.setParams(new Params(file, outFormat)); + } + @Data + @AllArgsConstructor + public static final class Params { + /** + * 收到的语音文件名(消息段的 file 参数),如 0B38145AA44505000B38145AA4450500.silk + * @since 2024/8/24 23:35 v0.0.6-dev + */ + private String file; + /** + * 要转换到的格式,目前支持 mp3、amr、wma、m4a、spx、ogg、wav、flac + * @since 2024/8/24 23:35 v0.0.6-dev + */ + @JSONField(name = "out_format") + private String outFormat; + } +} diff --git a/src/main/java/cn/wzpmc/api/api/actions/message/get/GetStatusAction.java b/src/main/java/cn/wzpmc/api/api/actions/message/get/GetStatusAction.java new file mode 100644 index 0000000..1d8dda7 --- /dev/null +++ b/src/main/java/cn/wzpmc/api/api/actions/message/get/GetStatusAction.java @@ -0,0 +1,22 @@ +package cn.wzpmc.api.api.actions.message.get; + +import cn.wzpmc.api.api.Action; +import cn.wzpmc.api.api.Actions; +import cn.wzpmc.api.entities.BotStatus; + +/** + * 获取运行状态 + * @author wzp + * @version 0.0.6-dev + * @since 2024/8/24 20:45 + */ +public class GetStatusAction extends Action { + /** + * 获取运行状态 + * @author wzp + * @since 2024/8/24 23:55 v0.0.6-dev + */ + public GetStatusAction(){ + super.setAction(Actions.GET_STATUS); + } +} diff --git a/src/main/java/cn/wzpmc/api/api/actions/message/get/GetStrangerInfoAction.java b/src/main/java/cn/wzpmc/api/api/actions/message/get/GetStrangerInfoAction.java new file mode 100644 index 0000000..e66c922 --- /dev/null +++ b/src/main/java/cn/wzpmc/api/api/actions/message/get/GetStrangerInfoAction.java @@ -0,0 +1,54 @@ +package cn.wzpmc.api.api.actions.message.get; + +import cn.wzpmc.api.api.Action; +import cn.wzpmc.api.api.Actions; +import cn.wzpmc.api.user.IUser; +import com.alibaba.fastjson2.annotation.JSONField; +import lombok.AllArgsConstructor; +import lombok.Data; + +/** + * 获取陌生人信息 + * @author wzp + * @version 0.0.6-dev + * @since 2024/8/24 20:41 + */ +public class GetStrangerInfoAction extends Action { + /** + * 获取陌生人信息 + * @author wzp + * @since 2024/8/24 23:55 v0.0.6-dev + * @param userId QQ 号 + * @param noCache 是否不使用缓存(使用缓存可能更新不及时,但响应更快) + */ + public GetStrangerInfoAction(Long userId, boolean noCache){ + super.setAction(Actions.GET_STRANGER_INFO); + super.setParams(new GetStrangerInfoAction.Params(userId, noCache)); + } + + /** + * 获取陌生人信息 + * @author wzp + * @since 2024/8/24 23:55 v0.0.6-dev + * @param userId QQ 号 + */ + public GetStrangerInfoAction(Long userId){ + this(userId, false); + } + @Data + @AllArgsConstructor + public static final class Params { + /** + * QQ 号 + * @since 2024/8/24 22:52 v0.0.6-dev + */ + @JSONField(name = "user_id") + private Long userId; + /** + * 是否不使用缓存(使用缓存可能更新不及时,但响应更快) + * @since 2024/8/24 22:52 v0.0.6-dev + */ + @JSONField(name = "no_cache", defaultValue = "false") + private boolean noCache; + } +} diff --git a/src/main/java/cn/wzpmc/api/api/actions/message/get/GetVersionInfoAction.java b/src/main/java/cn/wzpmc/api/api/actions/message/get/GetVersionInfoAction.java new file mode 100644 index 0000000..7c97fe8 --- /dev/null +++ b/src/main/java/cn/wzpmc/api/api/actions/message/get/GetVersionInfoAction.java @@ -0,0 +1,23 @@ +package cn.wzpmc.api.api.actions.message.get; + +import cn.wzpmc.api.api.Action; +import cn.wzpmc.api.api.Actions; +import cn.wzpmc.api.entities.VersionInformation; + +/** + * 获取版本信息 + * @author wzp + * @version 0.0.6-dev + * @since 2024/8/24 20:45 + */ +public class GetVersionInfoAction extends Action { + /** + * 获取版本信息 + * @author wzp + * @since 2024/8/24 23:55 v0.0.6-dev + */ + public GetVersionInfoAction(){ + super.setAction(Actions.GET_VERSION_INFO); + + } +} diff --git a/src/main/java/cn/wzpmc/api/api/actions/message/set/SetFriendAddRequestAction.java b/src/main/java/cn/wzpmc/api/api/actions/message/set/SetFriendAddRequestAction.java new file mode 100644 index 0000000..2dcb824 --- /dev/null +++ b/src/main/java/cn/wzpmc/api/api/actions/message/set/SetFriendAddRequestAction.java @@ -0,0 +1,80 @@ +package cn.wzpmc.api.api.actions.message.set; + +import cn.wzpmc.api.api.Action; +import cn.wzpmc.api.api.Actions; +import com.alibaba.fastjson2.annotation.JSONField; +import lombok.AllArgsConstructor; +import lombok.Data; + +/** + * 处理加好友请求 + * @author wzp + * @version 0.0.6-dev + * @since 2024/8/24 20:08 + */ +public class SetFriendAddRequestAction extends Action { + /** + * 处理加好友请求 + * @author wzp + * @since 2024/8/24 23:56 v0.0.6-dev + * @param flag 加好友请求的 flag(需从上报的数据中获得) + * @param approve 是否同意请求 + * @param remark 添加后的好友备注(仅在同意时有效) + */ + public SetFriendAddRequestAction(String flag, boolean approve, String remark){ + super.setAction(Actions.SET_FRIEND_ADD_REQUEST); + super.setParams(new Params(flag, approve, remark)); + } + + /** + * 处理加好友请求 + * @author wzp + * @since 2024/8/24 23:56 v0.0.6-dev + * @param flag 加好友请求的 flag(需从上报的数据中获得) + * @param approve 是否同意请求 + */ + public SetFriendAddRequestAction(String flag, boolean approve) { + this(flag, approve, ""); + } + + /** + * 处理加好友请求 + * @author wzp + * @since 2024/8/24 23:56 v0.0.6-dev + * @param flag 加好友请求的 flag(需从上报的数据中获得) + * @param remark 添加后的好友备注(仅在同意时有效) + */ + public SetFriendAddRequestAction(String flag, String remark) { + this(flag, true, remark); + } + + /** + * 处理加好友请求 + * @author wzp + * @since 2024/8/24 23:56 v0.0.6-dev + * @param flag 加好友请求的 flag(需从上报的数据中获得) + */ + public SetFriendAddRequestAction(String flag) { + this(flag, true); + } + @Data + @AllArgsConstructor + public static final class Params { + /** + * 加好友请求的 flag(需从上报的数据中获得) + * @since 2024/8/24 21:09 v0.0.6-dev + */ + private String flag; + /** + * 是否同意请求 + * @since 2024/8/24 21:09 v0.0.6-dev + */ + @JSONField(defaultValue = "true") + private boolean approve; + /** + * 添加后的好友备注(仅在同意时有效) + * @since 2024/8/24 21:09 v0.0.6-dev + */ + private String remark; + } +} diff --git a/src/main/java/cn/wzpmc/api/api/actions/message/set/SetGroupAddRequestAction.java b/src/main/java/cn/wzpmc/api/api/actions/message/set/SetGroupAddRequestAction.java new file mode 100644 index 0000000..4765143 --- /dev/null +++ b/src/main/java/cn/wzpmc/api/api/actions/message/set/SetGroupAddRequestAction.java @@ -0,0 +1,78 @@ +package cn.wzpmc.api.api.actions.message.set; + +import cn.wzpmc.api.api.Action; +import cn.wzpmc.api.api.Actions; +import cn.wzpmc.api.events.request.group.GroupJoinRequestEventSubType; +import com.alibaba.fastjson2.annotation.JSONField; +import lombok.AllArgsConstructor; +import lombok.Data; + +/** + * 处理加群请求/邀请 + * @author wzp + * @version 0.0.6-dev + * @since 2024/8/24 20:18 + */ +public class SetGroupAddRequestAction extends Action { + /** + * 处理加群请求/邀请 + * @author wzp + * @since 2024/8/24 23:56 v0.0.6-dev + * @param flag 加群请求的 flag(需从上报的数据中获得) + * @param type 请求类型 + * @param approve 是否同意请求/邀请 + * @param reason 拒绝理由(仅在拒绝时有效) + */ + public SetGroupAddRequestAction(String flag, GroupJoinRequestEventSubType type, boolean approve, String reason) { + super.setAction(Actions.SET_GROUP_ADD_REQUEST); + super.setParams(new Params(flag, type, approve, reason)); + } + + /** + * 处理加群请求/邀请 + * @author wzp + * @since 2024/8/24 23:56 v0.0.6-dev + * @param flag 加群请求的 flag(需从上报的数据中获得) + * @param type 请求类型 + * @param reason 拒绝理由(仅在拒绝时有效) + */ + public SetGroupAddRequestAction(String flag, GroupJoinRequestEventSubType type, String reason) { + this(flag, type, false, reason); + } + + /** + * 处理加群请求/邀请 + * @author wzp + * @since 2024/8/24 23:56 v0.0.6-dev + * @param flag 加群请求的 flag(需从上报的数据中获得) + * @param type 请求类型 + */ + public SetGroupAddRequestAction(String flag, GroupJoinRequestEventSubType type) { + this(flag, type, true, ""); + } + @Data + @AllArgsConstructor + public static final class Params { + /** + * 加群请求的 flag(需从上报的数据中获得) + * @since 2024/8/24 21:14 v0.0.6-dev + */ + private String flag; + /** + * 请求类型 + * @since 2024/8/24 21:14 v0.0.6-dev + */ + private GroupJoinRequestEventSubType type; + /** + * 是否同意请求/邀请 + * @since 2024/8/24 21:14 v0.0.6-dev + */ + @JSONField(defaultValue = "true") + private boolean approve; + /** + * 拒绝理由(仅在拒绝时有效) + * @since 2024/8/24 21:14 v0.0.6-dev + */ + private String reason; + } +} diff --git a/src/main/java/cn/wzpmc/api/api/actions/message/set/SetGroupAnonymous.java b/src/main/java/cn/wzpmc/api/api/actions/message/set/SetGroupAnonymousAction.java similarity index 84% rename from src/main/java/cn/wzpmc/api/api/actions/message/set/SetGroupAnonymous.java rename to src/main/java/cn/wzpmc/api/api/actions/message/set/SetGroupAnonymousAction.java index d76b7c7..63e46d4 100644 --- a/src/main/java/cn/wzpmc/api/api/actions/message/set/SetGroupAnonymous.java +++ b/src/main/java/cn/wzpmc/api/api/actions/message/set/SetGroupAnonymousAction.java @@ -12,7 +12,7 @@ import lombok.Data; * @version 0.0.5-dev * @since 2024/8/23 20:55 */ -public class SetGroupAnonymous extends Action { +public class SetGroupAnonymousAction extends Action { /** * 群组匿名 * @author wzp @@ -20,7 +20,7 @@ public class SetGroupAnonymous extends Action { * @param groupId 群号 * @param enable 是否允许匿名聊天 */ - public SetGroupAnonymous(Long groupId, Boolean enable) { + public SetGroupAnonymousAction(Long groupId, Boolean enable) { super.setAction(Actions.SET_GROUP_ANONYMOUS); super.setParams(new Params(groupId, enable)); } @@ -31,7 +31,7 @@ public class SetGroupAnonymous extends Action { * @since 2024/8/23 21:16 v0.0.5-dev * @param groupId 群号 */ - public SetGroupAnonymous(Long groupId) { + public SetGroupAnonymousAction(Long groupId) { this(groupId, true); } @Data diff --git a/src/main/java/cn/wzpmc/api/api/actions/message/set/SetGroupLeaveAction.java b/src/main/java/cn/wzpmc/api/api/actions/message/set/SetGroupLeaveAction.java new file mode 100644 index 0000000..8d0b12e --- /dev/null +++ b/src/main/java/cn/wzpmc/api/api/actions/message/set/SetGroupLeaveAction.java @@ -0,0 +1,53 @@ +package cn.wzpmc.api.api.actions.message.set; + +import cn.wzpmc.api.api.Action; +import cn.wzpmc.api.api.Actions; +import com.alibaba.fastjson2.annotation.JSONField; +import lombok.AllArgsConstructor; +import lombok.Data; + +/** + * 退出群组 + * @author wzp + * @version 0.0.6-dev + * @since 2024/8/24 20:07 + */ +public class SetGroupLeaveAction extends Action { + /** + * 退出群组 + * @author wzp + * @since 2024/8/24 23:57 v0.0.6-dev + * @param groupId 群号 + * @param isDismiss 是否解散,如果登录号是群主,则仅在此项为 true 时能够解散 + */ + public SetGroupLeaveAction(Long groupId, boolean isDismiss){ + super.setAction(Actions.SET_GROUP_LEAVE); + super.setParams(new Params(groupId, isDismiss)); + } + + /** + * 退出群组 + * @author wzp + * @since 2024/8/24 23:57 v0.0.6-dev + * @param groupId 群号 + */ + public SetGroupLeaveAction(Long groupId){ + this(groupId, false); + } + @Data + @AllArgsConstructor + public static final class Params { + /** + * 群号 + * @since 2024/8/24 21:02 v0.0.6-dev + */ + @JSONField(name = "group_id") + private Long groupId; + /** + * 是否解散,如果登录号是群主,则仅在此项为 true 时能够解散 + * @since 2024/8/24 21:02 v0.0.6-dev + */ + @JSONField(name = "is_dismiss", defaultValue = "false") + private boolean isDismiss; + } +} diff --git a/src/main/java/cn/wzpmc/api/api/actions/message/set/SetGroupNameAction.java b/src/main/java/cn/wzpmc/api/api/actions/message/set/SetGroupNameAction.java new file mode 100644 index 0000000..9db7a20 --- /dev/null +++ b/src/main/java/cn/wzpmc/api/api/actions/message/set/SetGroupNameAction.java @@ -0,0 +1,43 @@ +package cn.wzpmc.api.api.actions.message.set; + +import cn.wzpmc.api.api.Action; +import cn.wzpmc.api.api.Actions; +import com.alibaba.fastjson2.annotation.JSONField; +import lombok.AllArgsConstructor; +import lombok.Data; + +/** + * 设置群名 + * @author wzp + * @version 0.0.6-dev + * @since 2024/8/24 20:07 + */ +public class SetGroupNameAction extends Action { + /** + * 设置群名 + * @author wzp + * @since 2024/8/24 23:57 v0.0.6-dev + * @param groupId 群号 + * @param groupName 新群名 + */ + public SetGroupNameAction(Long groupId, String groupName){ + super.setAction(Actions.SET_GROUP_NAME); + super.setParams(new Params(groupId, groupName)); + } + @Data + @AllArgsConstructor + public static final class Params { + /** + * 群号 + * @since 2024/8/24 20:59 v0.0.6-dev + */ + @JSONField(name = "group_id") + private Long groupId; + /** + * 新群名 + * @since 2024/8/24 21:00 v0.0.6-dev + */ + @JSONField(name = "group_name") + private String groupName; + } +} diff --git a/src/main/java/cn/wzpmc/api/api/actions/message/set/SetGroupSpecialTitleAction.java b/src/main/java/cn/wzpmc/api/api/actions/message/set/SetGroupSpecialTitleAction.java new file mode 100644 index 0000000..91934bd --- /dev/null +++ b/src/main/java/cn/wzpmc/api/api/actions/message/set/SetGroupSpecialTitleAction.java @@ -0,0 +1,92 @@ +package cn.wzpmc.api.api.actions.message.set; + +import cn.wzpmc.api.api.Action; +import cn.wzpmc.api.api.Actions; +import com.alibaba.fastjson2.annotation.JSONField; +import lombok.AllArgsConstructor; +import lombok.Data; + +/** + * 设置群组专属头衔 + * @author wzp + * @version 0.0.6-dev + * @since 2024/8/24 20:08 + */ +public class SetGroupSpecialTitleAction extends Action { + /** + * 设置群组专属头衔 + * @author wzp + * @since 2024/8/24 23:58 v0.0.6-dev + * @param groupId 群号 + * @param userId 要设置的 QQ 号 + * @param specialTitle 专属头衔,不填或空字符串表示删除专属头衔 + * @param duration 专属头衔有效期,单位秒,-1 表示永久,不过此项似乎没有效果,可能是只有某些特殊的时间长度有效,有待测试 + */ + public SetGroupSpecialTitleAction(Long groupId, Long userId, String specialTitle, Long duration){ + super.setAction(Actions.SET_GROUP_SPECIAL_TITLE); + super.setParams(new Params(groupId, userId, specialTitle, duration)); + } + + /** + * 设置群组专属头衔 + * @author wzp + * @since 2024/8/24 23:58 v0.0.6-dev + * @param groupId 群号 + * @param userId 要设置的 QQ 号 + * @param specialTitle 专属头衔,不填或空字符串表示删除专属头衔 + */ + public SetGroupSpecialTitleAction(Long groupId, Long userId, String specialTitle){ + this(groupId, userId, specialTitle, -1L); + } + + /** + * 设置群组专属头衔 + * @author wzp + * @since 2024/8/24 23:58 v0.0.6-dev + * @param groupId 群号 + * @param userId 要设置的 QQ 号 + */ + public SetGroupSpecialTitleAction(Long groupId, Long userId){ + this(groupId, userId, ""); + } + + /** + * 设置群组专属头衔 + * @author wzp + * @since 2024/8/24 23:58 v0.0.6-dev + * @param groupId 群号 + * @param userId 要设置的 QQ 号 + * @param duration 专属头衔有效期,单位秒,-1 表示永久,不过此项似乎没有效果,可能是只有某些特殊的时间长度有效,有待测试 + */ + public SetGroupSpecialTitleAction(Long groupId, Long userId, Long duration){ + this(groupId, userId, "", duration); + } + @Data + @AllArgsConstructor + public static final class Params { + /** + * 群号 + * @since 2024/8/24 21:04 v0.0.6-dev + */ + @JSONField(name = "group_id") + private Long groupId; + /** + * 要设置的 QQ 号 + * @since 2024/8/24 21:04 v0.0.6-dev + */ + @JSONField(name = "user_id") + private Long userId; + /** + * 专属头衔,不填或空字符串表示删除专属头衔 + * @since 2024/8/24 21:04 v0.0.6-dev + */ + @JSONField(name = "special_title") + private String specialTitle; + /** + * 专属头衔有效期,单位秒,-1 表示永久,不过此项似乎没有效果,可能是只有某些特殊的时间长度有效,有待测试 + * @since 2024/8/24 21:04 v0.0.6-dev + */ + @JSONField(defaultValue = "-1") + private Long duration; + } +} diff --git a/src/main/java/cn/wzpmc/api/api/actions/message/set/SetRestartAction.java b/src/main/java/cn/wzpmc/api/api/actions/message/set/SetRestartAction.java new file mode 100644 index 0000000..8088c21 --- /dev/null +++ b/src/main/java/cn/wzpmc/api/api/actions/message/set/SetRestartAction.java @@ -0,0 +1,45 @@ +package cn.wzpmc.api.api.actions.message.set; + +import cn.wzpmc.api.api.Action; +import cn.wzpmc.api.api.Actions; +import com.alibaba.fastjson2.annotation.JSONField; +import lombok.AllArgsConstructor; +import lombok.Data; + +/** + * 重启 OneBot 实现 + * @author wzp + * @version 0.0.6-dev + * @since 2024/8/24 20:46 + */ +public class SetRestartAction extends Action { + /** + * 重启 OneBot 实现 + * @author wzp + * @since 2024/8/24 23:59 v0.0.6-dev + * @param delay 要延迟的毫秒数,如果默认情况下无法重启,可以尝试设置延迟为 2000 左右 + */ + public SetRestartAction(Integer delay) { + super.setAction(Actions.SET_RESTART); + super.setParams(new Params(delay)); + } + + /** + * 立即重启 OneBot 实现 + * @author wzp + * @since 2024/8/24 23:58 v0.0.6-dev + */ + public SetRestartAction() { + this(0); + } + @Data + @AllArgsConstructor + public static final class Params { + /** + * 要延迟的毫秒数,如果默认情况下无法重启,可以尝试设置延迟为 2000 左右 + * @since 2024/8/24 23:49 v0.0.6-dev + */ + @JSONField(defaultValue = "0") + private Integer delay; + } +} diff --git a/src/main/java/cn/wzpmc/api/entities/BotStatus.java b/src/main/java/cn/wzpmc/api/entities/BotStatus.java index 121752f..84a09fd 100644 --- a/src/main/java/cn/wzpmc/api/entities/BotStatus.java +++ b/src/main/java/cn/wzpmc/api/entities/BotStatus.java @@ -11,12 +11,12 @@ import lombok.Data; @Data public class BotStatus { /** - * bot是否在线 + * 当前 QQ 在线,null 表示无法查询到在线状态 * @since 2024/8/23 21:33 v0.0.5-dev */ private boolean online; /** - * bot健康程度 + * 状态符合预期,意味着各模块正常运行、功能正常,且 QQ 在线 * @since 2024/8/23 21:34 v0.0.5-dev */ private boolean good; diff --git a/src/main/java/cn/wzpmc/api/entities/CookiesInformation.java b/src/main/java/cn/wzpmc/api/entities/CookiesInformation.java new file mode 100644 index 0000000..2350d84 --- /dev/null +++ b/src/main/java/cn/wzpmc/api/entities/CookiesInformation.java @@ -0,0 +1,20 @@ +package cn.wzpmc.api.entities; + +import lombok.AllArgsConstructor; +import lombok.Data; + +/** + * Cookie信息 + * @author wzp + * @version 0.0.6-dev + * @since 2024/8/24 19:45 + */ +@Data +@AllArgsConstructor +public class CookiesInformation { + /** + * Cookies + * @since 2024/8/24 23:59 v0.0.6-dev + */ + private String cookies; +} diff --git a/src/main/java/cn/wzpmc/api/entities/CredentialsInformation.java b/src/main/java/cn/wzpmc/api/entities/CredentialsInformation.java new file mode 100644 index 0000000..17b3f8f --- /dev/null +++ b/src/main/java/cn/wzpmc/api/entities/CredentialsInformation.java @@ -0,0 +1,27 @@ +package cn.wzpmc.api.entities; + +import com.alibaba.fastjson2.annotation.JSONField; +import lombok.AllArgsConstructor; +import lombok.Data; + +/** + * QQ认证信息 + * @author wzp + * @version 0.0.6-dev + * @since 2024/8/24 19:46 + */ +@Data +@AllArgsConstructor +public class CredentialsInformation { + /** + * Cookies + * @since 2024/8/24 23:59 v0.0.6-dev + */ + private String cookies; + /** + * CSRF Token + * @since 2024/8/24 23:59 v0.0.6-dev + */ + @JSONField(name = "csrf_token") + private Integer csrfToken; +} diff --git a/src/main/java/cn/wzpmc/api/entities/CsrfTokenInformation.java b/src/main/java/cn/wzpmc/api/entities/CsrfTokenInformation.java new file mode 100644 index 0000000..e2c546a --- /dev/null +++ b/src/main/java/cn/wzpmc/api/entities/CsrfTokenInformation.java @@ -0,0 +1,20 @@ +package cn.wzpmc.api.entities; + +import lombok.AllArgsConstructor; +import lombok.Data; + +/** + * CSRF信息 + * @author wzp + * @version 0.0.6-dev + * @since 2024/8/24 19:45 + */ +@Data +@AllArgsConstructor +public class CsrfTokenInformation { + /** + * CSRF Token + * @since 2024/8/24 23:59 v0.0.6-dev + */ + private Integer token; +} diff --git a/src/main/java/cn/wzpmc/api/entities/FilePathInformation.java b/src/main/java/cn/wzpmc/api/entities/FilePathInformation.java new file mode 100644 index 0000000..292da1b --- /dev/null +++ b/src/main/java/cn/wzpmc/api/entities/FilePathInformation.java @@ -0,0 +1,19 @@ +package cn.wzpmc.api.entities; + +import lombok.AllArgsConstructor; +import lombok.Data; + +/** + * @author wzp + * @version 0.0.6-dev + * @since 2024/8/24 19:50 + */ +@Data +@AllArgsConstructor +public class FilePathInformation { + /** + * 转换后的语音文件路径,如 /home/somebody/cqhttp/data/record/0B38145AA44505000B38145AA4450500.mp3 + * @since 2024/8/24 23:35 v0.0.6-dev + */ + private String file; +} diff --git a/src/main/java/cn/wzpmc/api/entities/FriendInformation.java b/src/main/java/cn/wzpmc/api/entities/FriendInformation.java new file mode 100644 index 0000000..b29ce17 --- /dev/null +++ b/src/main/java/cn/wzpmc/api/entities/FriendInformation.java @@ -0,0 +1,23 @@ +package cn.wzpmc.api.entities; + +import cn.wzpmc.api.user.IUser; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * 简略好友信息 + * @author wzp + * @version 0.0.6-dev + * @since 2024/8/24 19:13 + */ +@EqualsAndHashCode(callSuper = true) +@Data +@AllArgsConstructor +public class FriendInformation extends IUser { + /** + * 添加后的好友备注(仅在同意时有效) + * @since 2024/8/24 23:59 v0.0.6-dev + */ + private String remark; +} diff --git a/src/main/java/cn/wzpmc/api/entities/GroupHonorUser.java b/src/main/java/cn/wzpmc/api/entities/GroupHonorUser.java new file mode 100644 index 0000000..b55f634 --- /dev/null +++ b/src/main/java/cn/wzpmc/api/entities/GroupHonorUser.java @@ -0,0 +1,37 @@ +package cn.wzpmc.api.entities; + +import com.alibaba.fastjson2.annotation.JSONField; +import lombok.AllArgsConstructor; +import lombok.Data; + +/** + * 群成员荣耀信息 + * @author wzp + * @version 0.0.6-dev + * @since 2024/8/24 19:39 + */ +@Data +@AllArgsConstructor +public class GroupHonorUser { + /** + * QQ 号 + * @since 2024/8/25 00:00 v0.0.6-dev + */ + @JSONField(name = "user_id") + private Long userId; + /** + * 昵称 + * @since 2024/8/25 00:00 v0.0.6-dev + */ + private String nickname; + /** + * 头像 URL + * @since 2024/8/25 00:00 v0.0.6-dev + */ + private String avatar; + /** + * 荣誉描述 + * @since 2024/8/25 00:00 v0.0.6-dev + */ + private String description; +} diff --git a/src/main/java/cn/wzpmc/api/entities/GroupInformation.java b/src/main/java/cn/wzpmc/api/entities/GroupInformation.java new file mode 100644 index 0000000..c362900 --- /dev/null +++ b/src/main/java/cn/wzpmc/api/entities/GroupInformation.java @@ -0,0 +1,40 @@ +package cn.wzpmc.api.entities; + +import com.alibaba.fastjson2.annotation.JSONField; +import lombok.AllArgsConstructor; +import lombok.Data; + +/** + * 群信息 + * @author wzp + * @version 0.0.6-dev + * @since 2024/8/24 19:15 + */ +@Data +@AllArgsConstructor +public class GroupInformation { + /** + * 群号 + * @since 2024/8/25 00:00 v0.0.6-dev + */ + @JSONField(name = "group_id") + private Long groupId; + /** + * 群名称 + * @since 2024/8/25 00:00 v0.0.6-dev + */ + @JSONField(name = "group_name") + private String groupName; + /** + * 成员数 + * @since 2024/8/25 00:00 v0.0.6-dev + */ + @JSONField(name = "member_count") + private Integer memberCount; + /** + * 最大成员数(群容量) + * @since 2024/8/25 00:00 v0.0.6-dev + */ + @JSONField(name = "max_member_count") + private Integer maxMemberCount; +} diff --git a/src/main/java/cn/wzpmc/api/entities/GroupMemberInformation.java b/src/main/java/cn/wzpmc/api/entities/GroupMemberInformation.java new file mode 100644 index 0000000..1c14b5f --- /dev/null +++ b/src/main/java/cn/wzpmc/api/entities/GroupMemberInformation.java @@ -0,0 +1,101 @@ +package cn.wzpmc.api.entities; + +import cn.wzpmc.api.user.Sex; +import cn.wzpmc.api.user.permission.Permissions; +import com.alibaba.fastjson2.annotation.JSONField; +import lombok.AllArgsConstructor; +import lombok.Data; + +import java.util.Date; + +/** + * 群成员信息 + * @author wzp + * @version 0.0.6-dev + * @since 2024/8/24 19:22 + */ +@Data +@AllArgsConstructor +public class GroupMemberInformation { + /** + * 群号 + * @since 2024/8/24 19:29 v0.0.6-dev + */ + @JSONField(name = "group_id") + private Long groupId; + /** + * QQ 号 + * @since 2024/8/24 19:29 v0.0.6-dev + */ + @JSONField(name = "user_id") + private Long userId; + /** + * 昵称 + * @since 2024/8/24 19:29 v0.0.6-dev + */ + private String nickname; + /** + * 群名片/备注 + * @since 2024/8/24 19:29 v0.0.6-dev + */ + private String card; + /** + * 性别 + * @since 2024/8/24 19:29 v0.0.6-dev + */ + private Sex sex; + /** + * 年龄 + * @since 2024/8/24 19:29 v0.0.6-dev + */ + private Integer age; + /** + * 地区 + * @since 2024/8/24 19:30 v0.0.6-dev + */ + private String area; + /** + * 加群时间 + * @since 2024/8/24 19:30 v0.0.6-dev + */ + @JSONField(name = "join_time") + private Date joinTime; + /** + * 最后发言时间 + * @since 2024/8/24 19:30 v0.0.6-dev + */ + @JSONField(name = "last_sent_time") + private Date lastSentTime; + /** + * 成员等级 + * @since 2024/8/24 19:30 v0.0.6-dev + */ + private String level; + /** + * 角色 + * @since 2024/8/24 19:30 v0.0.6-dev + */ + private Permissions role; + /** + * 是否不良记录成员 + * @since 2024/8/24 19:30 v0.0.6-dev + */ + private boolean unfriendly; + /** + * 专属头衔 + * @since 2024/8/24 19:30 v0.0.6-dev + */ + private String title; + /** + * 专属头衔过期时间 + * @since 2024/8/24 19:30 v0.0.6-dev + */ + @JSONField(name = "title_expire_time") + private Date titleExpireTime; + /** + * 是否允许修改群名片 + * @since 2024/8/24 19:30 v0.0.6-dev + */ + @JSONField(name = "card_changeable") + private boolean cardChangeable; +} diff --git a/src/main/java/cn/wzpmc/api/entities/HonorInformation.java b/src/main/java/cn/wzpmc/api/entities/HonorInformation.java new file mode 100644 index 0000000..615c31f --- /dev/null +++ b/src/main/java/cn/wzpmc/api/entities/HonorInformation.java @@ -0,0 +1,60 @@ +package cn.wzpmc.api.entities; + +import com.alibaba.fastjson2.annotation.JSONField; +import lombok.AllArgsConstructor; +import lombok.Data; + +import java.util.List; + +/** + * 群荣耀信息 + * @author wzp + * @version 0.0.6-dev + * @since 2024/8/24 19:36 + */ +@Data +@AllArgsConstructor +public class HonorInformation { + /** + * 群号 + * @since 2024/8/24 23:17 v0.0.6-dev + */ + @JSONField(name = "group_id") + private Long groupId; + /** + * 当前龙王,仅 type 为 talkative 或 all 时有数据 + * @since 2024/8/24 23:17 v0.0.6-dev + */ + @JSONField(name = "current_talkative") + private HonorTalkative currentTalkative; + /** + * 历史龙王,仅 type 为 talkative 或 all 时有数据 + * @since 2024/8/24 23:17 v0.0.6-dev + */ + @JSONField(name = "talkative_list") + private List talkativeList; + /** + * 群聊之火,仅 type 为 performer 或 all 时有数据 + * @since 2024/8/24 23:18 v0.0.6-dev + */ + @JSONField(name = "performer_list") + private List performerList; + /** + * 群聊炽焰,仅 type 为 legend 或 all 时有数据 + * @since 2024/8/24 23:18 v0.0.6-dev + */ + @JSONField(name = "legend_list") + private List legendList; + /** + * 冒尖小春笋,仅 type 为 strong_newbie 或 all 时有数据 + * @since 2024/8/24 23:18 v0.0.6-dev + */ + @JSONField(name = "strong_newbie_list") + private List strongNewbieList; + /** + * 快乐之源,仅 type 为 emotion 或 all 时有数据 + * @since 2024/8/24 23:18 v0.0.6-dev + */ + @JSONField(name = "emotion_list") + private List emotionList; +} diff --git a/src/main/java/cn/wzpmc/api/entities/HonorTalkative.java b/src/main/java/cn/wzpmc/api/entities/HonorTalkative.java new file mode 100644 index 0000000..97495d8 --- /dev/null +++ b/src/main/java/cn/wzpmc/api/entities/HonorTalkative.java @@ -0,0 +1,38 @@ +package cn.wzpmc.api.entities; + +import com.alibaba.fastjson2.annotation.JSONField; +import lombok.AllArgsConstructor; +import lombok.Data; + +/** + * 龙王信息 + * @author wzp + * @version 0.0.6-dev + * @since 2024/8/24 19:38 + */ +@Data +@AllArgsConstructor +public class HonorTalkative { + /** + * QQ 号 + * @since 2024/8/25 00:01 v0.0.6-dev + */ + @JSONField(name = "user_id") + private Long userId; + /** + * 昵称 + * @since 2024/8/25 00:01 v0.0.6-dev + */ + private String nickname; + /** + * 头像 URL + * @since 2024/8/25 00:01 v0.0.6-dev + */ + private String avatar; + /** + * 持续天数 + * @since 2024/8/25 00:01 v0.0.6-dev + */ + @JSONField(name = "day_count") + private Integer dayCount; +} diff --git a/src/main/java/cn/wzpmc/api/entities/HonorType.java b/src/main/java/cn/wzpmc/api/entities/HonorType.java new file mode 100644 index 0000000..296eef8 --- /dev/null +++ b/src/main/java/cn/wzpmc/api/entities/HonorType.java @@ -0,0 +1,40 @@ +package cn.wzpmc.api.entities; + +/** + * 荣耀类型 + * @author wzp + * @version 0.0.6-dev + * @since 2024/8/24 23:11 + */ +public enum HonorType { + /** + * 龙王 + * @since 2024/8/24 23:12 v0.0.6-dev + */ + TALKATIVE, + /** + * 群聊之火 + * @since 2024/8/24 23:12 v0.0.6-dev + */ + PERFORMER, + /** + * 群聊炽焰 + * @since 2024/8/24 23:12 v0.0.6-dev + */ + LEGEND, + /** + * 冒尖小春笋 + * @since 2024/8/24 23:13 v0.0.6-dev + */ + STRONG_NEWBIE, + /** + * 快乐之源 + * @since 2024/8/24 23:13 v0.0.6-dev + */ + EMOTION, + /** + * 全部 + * @since 2024/8/24 23:13 v0.0.6-dev + */ + ALL; +} diff --git a/src/main/java/cn/wzpmc/api/entities/VersionInformation.java b/src/main/java/cn/wzpmc/api/entities/VersionInformation.java new file mode 100644 index 0000000..87d5d8d --- /dev/null +++ b/src/main/java/cn/wzpmc/api/entities/VersionInformation.java @@ -0,0 +1,34 @@ +package cn.wzpmc.api.entities; + +import com.alibaba.fastjson2.annotation.JSONField; +import lombok.AllArgsConstructor; +import lombok.Data; + +/** + * CQ服务端版本信息 + * @author wzp + * @version 0.0.6-dev + * @since 2024/8/24 19:54 + */ +@Data +@AllArgsConstructor +public class VersionInformation { + /** + * 应用标识,如 mirai-native + * @since 2024/8/25 00:02 v0.0.6-dev + */ + @JSONField(name = "app_name") + private String appName; + /** + * 应用版本,如 1.2.3 + * @since 2024/8/25 00:02 v0.0.6-dev + */ + @JSONField(name = "app_version") + private String appVersion; + /** + * OneBot 标准版本,如 v11 + * @since 2024/8/25 00:02 v0.0.6-dev + */ + @JSONField(name = "protocol_version") + private String protocolVersion; +} diff --git a/src/main/java/cn/wzpmc/api/entities/YesNo.java b/src/main/java/cn/wzpmc/api/entities/YesNo.java new file mode 100644 index 0000000..58c63fc --- /dev/null +++ b/src/main/java/cn/wzpmc/api/entities/YesNo.java @@ -0,0 +1,20 @@ +package cn.wzpmc.api.entities; + +import lombok.AllArgsConstructor; +import lombok.Data; + +/** + * 是或否 + * @author wzp + * @version 0.0.6-dev + * @since 2024/8/24 19:53 + */ +@Data +@AllArgsConstructor +public class YesNo { + /** + * 是或否 + * @since 2024/8/25 00:02 v0.0.6-dev + */ + private boolean yes; +} diff --git a/src/main/java/cn/wzpmc/api/user/CommandSender.java b/src/main/java/cn/wzpmc/api/user/CommandSender.java index 734c0b1..0805744 100644 --- a/src/main/java/cn/wzpmc/api/user/CommandSender.java +++ b/src/main/java/cn/wzpmc/api/user/CommandSender.java @@ -72,6 +72,6 @@ public interface CommandSender { * @return 是否为管理员 */ default boolean isAdmin(){ - return Permissions.ADMIN.equals(this.getPermissions()); + return this.getPermissions().isAdmin(); } } diff --git a/src/main/java/cn/wzpmc/api/user/IBot.java b/src/main/java/cn/wzpmc/api/user/IBot.java index d50ef6c..2bca0d1 100644 --- a/src/main/java/cn/wzpmc/api/user/IBot.java +++ b/src/main/java/cn/wzpmc/api/user/IBot.java @@ -4,6 +4,7 @@ import cn.wzpmc.api.api.IMainApi; import cn.wzpmc.api.events.Event; import cn.wzpmc.api.plugins.ICommandManager; import cn.wzpmc.api.plugins.configuration.IConfiguration; +import lombok.Getter; import java.io.File; import java.lang.reflect.InvocationTargetException; @@ -14,8 +15,10 @@ import java.lang.reflect.InvocationTargetException; * @version 0.0.1-dev * @since 2024/7/31 上午2:31 */ +@Getter public abstract class IBot extends MessageSender implements CommandSender { private static IBot instance = null; + private String nickname; protected IBot(){ if (IBot.instance == null){ IBot.instance = this; @@ -87,4 +90,19 @@ public abstract class IBot extends MessageSender implements CommandSender { public static IBot getInstance(){ return IBot.instance; } + public void setNickname(String nickname){ + if (this.nickname == null){ + this.nickname = nickname; + return; + } + throw new RuntimeException(new IllegalAccessException("Shouldn't set nickname after initialized")); + } + @Override + public void setId(Long id){ + if (this.id == null){ + this.id = id; + return; + } + throw new RuntimeException(new IllegalAccessException("Shouldn't set id after initialized")); + } } diff --git a/src/main/java/cn/wzpmc/api/user/permission/Permissions.java b/src/main/java/cn/wzpmc/api/user/permission/Permissions.java index 189b867..b1ad3ec 100644 --- a/src/main/java/cn/wzpmc/api/user/permission/Permissions.java +++ b/src/main/java/cn/wzpmc/api/user/permission/Permissions.java @@ -11,10 +11,22 @@ public enum Permissions { * 普通用户 * @since 2024/8/1 下午4:49 v0.0.2-dev */ - USER, + MEMBER(0), /** * 管理员 * @since 2024/8/1 下午4:49 v0.0.2-dev */ - ADMIN + ADMIN(1), + /** + * 群主 + * @since 2024/8/24 19:25 v0.0.6-dev + */ + OWNER(2); + final int level; + Permissions(int level){ + this.level = level; + } + public boolean isAdmin(){ + return this.level > 0; + } } diff --git a/src/main/java/cn/wzpmc/utils/JsonUtils.java b/src/main/java/cn/wzpmc/utils/JsonUtils.java index ab39a93..2343a57 100644 --- a/src/main/java/cn/wzpmc/utils/JsonUtils.java +++ b/src/main/java/cn/wzpmc/utils/JsonUtils.java @@ -2,6 +2,7 @@ package cn.wzpmc.utils; import cn.wzpmc.api.api.ActionResponse; import cn.wzpmc.api.api.Actions; +import cn.wzpmc.api.entities.HonorType; import cn.wzpmc.api.events.Event; import cn.wzpmc.api.events.message.MessageEvent; import cn.wzpmc.api.events.meta.MetaEvent; @@ -10,13 +11,16 @@ import cn.wzpmc.api.events.notice.notify.NotifyEvent; import cn.wzpmc.api.events.request.RequestEvent; import cn.wzpmc.api.message.StringMessage; import cn.wzpmc.api.message.json.JsonMessage; +import cn.wzpmc.api.user.IBot; import cn.wzpmc.api.user.IUser; import cn.wzpmc.utils.json.action.ActionReader; import cn.wzpmc.utils.json.action.ActionWriter; import cn.wzpmc.utils.json.event.*; +import cn.wzpmc.utils.json.honor.HonorWriter; import cn.wzpmc.utils.json.message.JsonMessageReader; import cn.wzpmc.utils.json.message.JsonMessageWriter; import cn.wzpmc.utils.json.message.StringMessageReader; +import cn.wzpmc.utils.json.user.IBotReader; import cn.wzpmc.utils.json.user.IUserReader; import com.alibaba.fastjson2.JSON; @@ -35,6 +39,7 @@ public class JsonUtils { public static void initWriter() { JSON.register(JsonMessage.class, new JsonMessageWriter()); JSON.register(Actions.class, new ActionWriter()); + JSON.register(HonorType.class, new HonorWriter()); } /** @@ -53,6 +58,7 @@ public class JsonUtils { JSON.register(StringMessage.class, new StringMessageReader()); JSON.register(ActionResponse.class, new ActionReader()); JSON.register(IUser.class, new IUserReader()); + JSON.register(IBot.class, new IBotReader()); } } diff --git a/src/main/java/cn/wzpmc/utils/json/action/ActionReader.java b/src/main/java/cn/wzpmc/utils/json/action/ActionReader.java index c27594b..0a9cf73 100644 --- a/src/main/java/cn/wzpmc/utils/json/action/ActionReader.java +++ b/src/main/java/cn/wzpmc/utils/json/action/ActionReader.java @@ -4,6 +4,7 @@ import cn.wzpmc.api.api.Action; import cn.wzpmc.api.api.ActionResponse; import cn.wzpmc.api.api.Actions; import cn.wzpmc.entities.api.ApiResponseRequired; +import com.alibaba.fastjson2.JSONArray; import com.alibaba.fastjson2.JSONObject; import com.alibaba.fastjson2.JSONReader; import com.alibaba.fastjson2.reader.ObjectReader; @@ -28,11 +29,15 @@ public class ActionReader implements ObjectReader> { Actions action = request.getAction(); String status = jsonObject.getString("status"); short retcode = jsonObject.getShort("retcode"); - JSONObject data = jsonObject.getJSONObject("data"); Object dataObj = null; - if (data != null){ - dataObj = data.to(action.responseClass); - + if (action.array){ + JSONArray data = jsonObject.getJSONArray("data"); + dataObj = data.toJavaList(action.responseClass); + } else { + JSONObject data = jsonObject.getJSONObject("data"); + if (data != null){ + dataObj = data.to(action.responseClass); + } } return new ActionResponse<>(status, retcode, dataObj, echo); } diff --git a/src/main/java/cn/wzpmc/utils/json/honor/HonorWriter.java b/src/main/java/cn/wzpmc/utils/json/honor/HonorWriter.java new file mode 100644 index 0000000..6966545 --- /dev/null +++ b/src/main/java/cn/wzpmc/utils/json/honor/HonorWriter.java @@ -0,0 +1,19 @@ +package cn.wzpmc.utils.json.honor; + +import cn.wzpmc.api.entities.HonorType; +import com.alibaba.fastjson2.JSONWriter; +import com.alibaba.fastjson2.writer.ObjectWriter; + +import java.lang.reflect.Type; + +/** + * @author wzp + * @version 0.0.6-dev + * @since 2024/8/24 23:23 + */ +public class HonorWriter implements ObjectWriter { + @Override + public void write(JSONWriter jsonWriter, Object o, Object o1, Type type, long l) { + jsonWriter.writeString(((HonorType) o).name()); + } +} diff --git a/src/main/java/cn/wzpmc/utils/json/user/IBotReader.java b/src/main/java/cn/wzpmc/utils/json/user/IBotReader.java new file mode 100644 index 0000000..b0e37c1 --- /dev/null +++ b/src/main/java/cn/wzpmc/utils/json/user/IBotReader.java @@ -0,0 +1,39 @@ +package cn.wzpmc.utils.json.user; + +import cn.wzpmc.api.user.IBot; +import com.alibaba.fastjson2.JSONObject; +import com.alibaba.fastjson2.JSONReader; +import com.alibaba.fastjson2.reader.ObjectReader; + +import java.lang.reflect.Type; +import java.util.Map; + +/** + * @author wzp + * @version 0.0.6-dev + * @since 2024/8/24 21:27 + */ +public class IBotReader implements ObjectReader { + @Override + public IBot createInstance(Map map, long features) { + Long userId = Long.parseLong(map.get("user_id").toString()); + String nickname = (String) map.get("nickname"); + IBot instance = IBot.getInstance(); + if (instance.getNickname() == null && instance.getId() == null){ + instance.setId(userId); + instance.setName(nickname); + } + return instance; + } + + @Override + public IBot readObject(JSONReader jsonReader, Type type, Object o, long l) { + JSONObject jsonObject = jsonReader.readJSONObject(); + IBot instance = IBot.getInstance(); + if (instance.getNickname() == null && instance.getId() == null){ + instance.setId(jsonObject.getLong("user_id")); + instance.setName(jsonObject.getString("nickname")); + } + return instance; + } +}