feat: Complete API function implementation

This commit is contained in:
wzp 2024-08-25 00:07:03 +08:00
parent a1d18b1277
commit 57b980fdae
50 changed files with 1758 additions and 25 deletions

View File

@ -1 +1 @@
0.0.5-dev 1.0.0

View File

@ -4,7 +4,7 @@ import com.github.jengelman.gradle.plugins.shadow.transformers.Log4j2PluginsCach
val projectName = rootProject.name val projectName = rootProject.name
val groupName by extra("cn.wzpmc") val groupName by extra("cn.wzpmc")
val projectArtifactId by extra("my-bot") val projectArtifactId by extra("my-bot")
val projectVersion by extra("0.0.5-dev") val projectVersion by extra("1.0.0")
plugins { plugins {
id("java") id("java")

View File

@ -1,5 +1,7 @@
package cn.wzpmc; 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.group.GroupMessageEvent;
import cn.wzpmc.api.events.message.priv.PrivateMessageEvent; import cn.wzpmc.api.events.message.priv.PrivateMessageEvent;
import cn.wzpmc.api.message.StringMessage; import cn.wzpmc.api.message.StringMessage;
@ -142,6 +144,10 @@ public class Main {
loadPlugins(myBot); loadPlugins(myBot);
WebSocketConnectionHandler webSocketConnectionHandler = createConnection(myBot, uri); WebSocketConnectionHandler webSocketConnectionHandler = createConnection(myBot, uri);
myBot.setConnectionHandler(webSocketConnectionHandler); 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); startConsole(myBot, webSocketConnectionHandler);
} }
} }

View File

@ -1,7 +1,9 @@
package cn.wzpmc.api.api; package cn.wzpmc.api.api;
import cn.wzpmc.api.api.actions.message.send.SendMessageActionResponseData; 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 * @since 2024/8/23 21:07 v0.0.5-dev
*/ */
DELETE_MSG(), DELETE_MSG,
/** /**
* 获取消息 * 获取消息
* @since 2024/8/23 21:07 v0.0.5-dev * @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 * @since 2024/8/23 21:08 v0.0.5-dev
*/ */
SEND_LIKE(), SEND_LIKE,
/** /**
* 群组踢人 * 群组踢人
* @since 2024/8/23 21:08 v0.0.5-dev * @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 * @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 * @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 * @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 * @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 * @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 * @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; public final Class<?> responseClass;
Actions(Class<?> responseClass) { public final boolean array;
Actions(Class<?> responseClass, boolean array) {
this.responseClass = responseClass; this.responseClass = responseClass;
this.array = array;
}
Actions(Class<?> responseClass) {
this(responseClass, false);
} }
Actions(){ Actions(){
this(Void.class); this(Void.class);

View File

@ -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<Void, Void> {
/**
* 清理缓存
* @author wzp
* @since 2024/8/24 23:59 v0.0.6-dev
*/
public CleanCacheAction() {
super.setAction(Actions.CLEAN_CACHE);
}
}

View File

@ -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<Void, YesNo> {
/**
* 检查是否可以发送图片
* @author wzp
* @since 2024/8/24 23:51 v0.0.6-dev
*/
public CanSendImageAction(){
super.setAction(Actions.CAN_SEND_IMAGE);
}
}

View File

@ -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<Void, YesNo> {
/**
* 检查是否可以发送语音
* @author wzp
* @since 2024/8/24 23:51 v0.0.6-dev
*/
public CanSendRecordAction(){
super.setAction(Actions.CAN_SEND_RECORD);
}
}

View File

@ -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<GetCookiesAction.Params, CookiesInformation> {
/**
* 获取 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;
}
}

View File

@ -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<GetCredentialsAction.Params, CredentialsInformation> {
/**
* 获取 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;
}
}

View File

@ -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<Void, CsrfTokenInformation> {
/**
* 获取 CSRF Token
* @author wzp
* @since 2024/8/24 23:52 v0.0.6-dev
*/
public GetCsrfTokenAction(){
super.setAction(Actions.GET_CSRF_TOKEN);
}
}

View File

@ -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<Void, List<MessageInformation>> {
/**
* 获取好友列表
* @author wzp
* @since 2024/8/24 23:52 v0.0.6-dev
*/
public GetFriendListAction(){
super.setAction(Actions.GET_FRIEND_LIST);
}
}

View File

@ -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<GetGroupHonorInfoAction.Params, HonorInformation> {
/**
* 获取群荣誉信息
* @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;
}
}

View File

@ -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<GetGroupInfoAction.Params, GroupInformation> {
/**
* 获取群信息
* @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;
}
}

View File

@ -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<Void, List<GroupInformation>> {
/**
* 获取群列表
* @author wzp
* @since 2024/8/24 23:54 v0.0.6-dev
*/
public GetGroupListAction(){
super.setAction(Actions.GET_GROUP_LIST);
}
}

View File

@ -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<GetGroupMemberInfoAction.Params, GroupMemberInformation> {
/**
* 获取群成员信息
* @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;
}
}

View File

@ -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<GetGroupMemberListAction.Params, List<GroupMemberInformation>> {
/**
* 获取群成员列表
* @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;
}
}

View File

@ -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<GetImageAction.Params, FilePathInformation> {
/**
* 获取图片
* @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;
}
}

View File

@ -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<Void, IBot> {
/**
* 获取登录号信息
* @author wzp
* @since 2024/8/24 23:55 v0.0.6-dev
*/
public GetLoginInfoAction() {
super.setAction(Actions.GET_LOGIN_INFO);
}
}

View File

@ -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<GetRecordAction.Params, FilePathInformation> {
/**
* 获取语音
* @author wzp
* @since 2024/8/24 23:55 v0.0.6-dev
* @param file 收到的语音文件名消息段的 file 参数 0B38145AA44505000B38145AA4450500.silk
* @param outFormat 要转换到的格式目前支持 mp3amrwmam4aspxoggwavflac
*/
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;
/**
* 要转换到的格式目前支持 mp3amrwmam4aspxoggwavflac
* @since 2024/8/24 23:35 v0.0.6-dev
*/
@JSONField(name = "out_format")
private String outFormat;
}
}

View File

@ -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<Void, BotStatus> {
/**
* 获取运行状态
* @author wzp
* @since 2024/8/24 23:55 v0.0.6-dev
*/
public GetStatusAction(){
super.setAction(Actions.GET_STATUS);
}
}

View File

@ -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<GetStrangerInfoAction.Params, IUser> {
/**
* 获取陌生人信息
* @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;
}
}

View File

@ -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<Void, VersionInformation> {
/**
* 获取版本信息
* @author wzp
* @since 2024/8/24 23:55 v0.0.6-dev
*/
public GetVersionInfoAction(){
super.setAction(Actions.GET_VERSION_INFO);
}
}

View File

@ -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<SetFriendAddRequestAction.Params, Void> {
/**
* 处理加好友请求
* @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;
}
}

View File

@ -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<SetGroupAddRequestAction.Params, Void> {
/**
* 处理加群请求邀请
* @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;
}
}

View File

@ -12,7 +12,7 @@ import lombok.Data;
* @version 0.0.5-dev * @version 0.0.5-dev
* @since 2024/8/23 20:55 * @since 2024/8/23 20:55
*/ */
public class SetGroupAnonymous extends Action<SetGroupAnonymous.Params, Void> { public class SetGroupAnonymousAction extends Action<SetGroupAnonymousAction.Params, Void> {
/** /**
* 群组匿名 * 群组匿名
* @author wzp * @author wzp
@ -20,7 +20,7 @@ public class SetGroupAnonymous extends Action<SetGroupAnonymous.Params, Void> {
* @param groupId 群号 * @param groupId 群号
* @param enable 是否允许匿名聊天 * @param enable 是否允许匿名聊天
*/ */
public SetGroupAnonymous(Long groupId, Boolean enable) { public SetGroupAnonymousAction(Long groupId, Boolean enable) {
super.setAction(Actions.SET_GROUP_ANONYMOUS); super.setAction(Actions.SET_GROUP_ANONYMOUS);
super.setParams(new Params(groupId, enable)); super.setParams(new Params(groupId, enable));
} }
@ -31,7 +31,7 @@ public class SetGroupAnonymous extends Action<SetGroupAnonymous.Params, Void> {
* @since 2024/8/23 21:16 v0.0.5-dev * @since 2024/8/23 21:16 v0.0.5-dev
* @param groupId 群号 * @param groupId 群号
*/ */
public SetGroupAnonymous(Long groupId) { public SetGroupAnonymousAction(Long groupId) {
this(groupId, true); this(groupId, true);
} }
@Data @Data

View File

@ -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<SetGroupLeaveAction.Params, Void> {
/**
* 退出群组
* @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;
}
}

View File

@ -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<SetGroupNameAction.Params, Void> {
/**
* 设置群名
* @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;
}
}

View File

@ -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<SetGroupSpecialTitleAction.Params, Void> {
/**
* 设置群组专属头衔
* @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;
}
}

View File

@ -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<SetRestartAction.Params, Void> {
/**
* 重启 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;
}
}

View File

@ -11,12 +11,12 @@ import lombok.Data;
@Data @Data
public class BotStatus { public class BotStatus {
/** /**
* bot是否在线 * 当前 QQ 在线null 表示无法查询到在线状态
* @since 2024/8/23 21:33 v0.0.5-dev * @since 2024/8/23 21:33 v0.0.5-dev
*/ */
private boolean online; private boolean online;
/** /**
* bot健康程度 * 状态符合预期意味着各模块正常运行功能正常 QQ 在线
* @since 2024/8/23 21:34 v0.0.5-dev * @since 2024/8/23 21:34 v0.0.5-dev
*/ */
private boolean good; private boolean good;

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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<GroupHonorUser> talkativeList;
/**
* 群聊之火 type performer all 时有数据
* @since 2024/8/24 23:18 v0.0.6-dev
*/
@JSONField(name = "performer_list")
private List<GroupHonorUser> performerList;
/**
* 群聊炽焰 type legend all 时有数据
* @since 2024/8/24 23:18 v0.0.6-dev
*/
@JSONField(name = "legend_list")
private List<GroupHonorUser> legendList;
/**
* 冒尖小春笋 type strong_newbie all 时有数据
* @since 2024/8/24 23:18 v0.0.6-dev
*/
@JSONField(name = "strong_newbie_list")
private List<GroupHonorUser> strongNewbieList;
/**
* 快乐之源 type emotion all 时有数据
* @since 2024/8/24 23:18 v0.0.6-dev
*/
@JSONField(name = "emotion_list")
private List<GroupHonorUser> emotionList;
}

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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;
}

View File

@ -72,6 +72,6 @@ public interface CommandSender {
* @return 是否为管理员 * @return 是否为管理员
*/ */
default boolean isAdmin(){ default boolean isAdmin(){
return Permissions.ADMIN.equals(this.getPermissions()); return this.getPermissions().isAdmin();
} }
} }

View File

@ -4,6 +4,7 @@ import cn.wzpmc.api.api.IMainApi;
import cn.wzpmc.api.events.Event; import cn.wzpmc.api.events.Event;
import cn.wzpmc.api.plugins.ICommandManager; import cn.wzpmc.api.plugins.ICommandManager;
import cn.wzpmc.api.plugins.configuration.IConfiguration; import cn.wzpmc.api.plugins.configuration.IConfiguration;
import lombok.Getter;
import java.io.File; import java.io.File;
import java.lang.reflect.InvocationTargetException; import java.lang.reflect.InvocationTargetException;
@ -14,8 +15,10 @@ import java.lang.reflect.InvocationTargetException;
* @version 0.0.1-dev * @version 0.0.1-dev
* @since 2024/7/31 上午2:31 * @since 2024/7/31 上午2:31
*/ */
@Getter
public abstract class IBot extends MessageSender implements CommandSender { public abstract class IBot extends MessageSender implements CommandSender {
private static IBot instance = null; private static IBot instance = null;
private String nickname;
protected IBot(){ protected IBot(){
if (IBot.instance == null){ if (IBot.instance == null){
IBot.instance = this; IBot.instance = this;
@ -87,4 +90,19 @@ public abstract class IBot extends MessageSender implements CommandSender {
public static IBot getInstance(){ public static IBot getInstance(){
return IBot.instance; 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"));
}
} }

View File

@ -11,10 +11,22 @@ public enum Permissions {
* 普通用户 * 普通用户
* @since 2024/8/1 下午4:49 v0.0.2-dev * @since 2024/8/1 下午4:49 v0.0.2-dev
*/ */
USER, MEMBER(0),
/** /**
* 管理员 * 管理员
* @since 2024/8/1 下午4:49 v0.0.2-dev * @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;
}
} }

View File

@ -2,6 +2,7 @@ package cn.wzpmc.utils;
import cn.wzpmc.api.api.ActionResponse; import cn.wzpmc.api.api.ActionResponse;
import cn.wzpmc.api.api.Actions; import cn.wzpmc.api.api.Actions;
import cn.wzpmc.api.entities.HonorType;
import cn.wzpmc.api.events.Event; import cn.wzpmc.api.events.Event;
import cn.wzpmc.api.events.message.MessageEvent; import cn.wzpmc.api.events.message.MessageEvent;
import cn.wzpmc.api.events.meta.MetaEvent; 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.events.request.RequestEvent;
import cn.wzpmc.api.message.StringMessage; import cn.wzpmc.api.message.StringMessage;
import cn.wzpmc.api.message.json.JsonMessage; import cn.wzpmc.api.message.json.JsonMessage;
import cn.wzpmc.api.user.IBot;
import cn.wzpmc.api.user.IUser; import cn.wzpmc.api.user.IUser;
import cn.wzpmc.utils.json.action.ActionReader; import cn.wzpmc.utils.json.action.ActionReader;
import cn.wzpmc.utils.json.action.ActionWriter; import cn.wzpmc.utils.json.action.ActionWriter;
import cn.wzpmc.utils.json.event.*; 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.JsonMessageReader;
import cn.wzpmc.utils.json.message.JsonMessageWriter; import cn.wzpmc.utils.json.message.JsonMessageWriter;
import cn.wzpmc.utils.json.message.StringMessageReader; import cn.wzpmc.utils.json.message.StringMessageReader;
import cn.wzpmc.utils.json.user.IBotReader;
import cn.wzpmc.utils.json.user.IUserReader; import cn.wzpmc.utils.json.user.IUserReader;
import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSON;
@ -35,6 +39,7 @@ public class JsonUtils {
public static void initWriter() { public static void initWriter() {
JSON.register(JsonMessage.class, new JsonMessageWriter()); JSON.register(JsonMessage.class, new JsonMessageWriter());
JSON.register(Actions.class, new ActionWriter()); 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(StringMessage.class, new StringMessageReader());
JSON.register(ActionResponse.class, new ActionReader()); JSON.register(ActionResponse.class, new ActionReader());
JSON.register(IUser.class, new IUserReader()); JSON.register(IUser.class, new IUserReader());
JSON.register(IBot.class, new IBotReader());
} }
} }

View File

@ -4,6 +4,7 @@ import cn.wzpmc.api.api.Action;
import cn.wzpmc.api.api.ActionResponse; import cn.wzpmc.api.api.ActionResponse;
import cn.wzpmc.api.api.Actions; import cn.wzpmc.api.api.Actions;
import cn.wzpmc.entities.api.ApiResponseRequired; import cn.wzpmc.entities.api.ApiResponseRequired;
import com.alibaba.fastjson2.JSONArray;
import com.alibaba.fastjson2.JSONObject; import com.alibaba.fastjson2.JSONObject;
import com.alibaba.fastjson2.JSONReader; import com.alibaba.fastjson2.JSONReader;
import com.alibaba.fastjson2.reader.ObjectReader; import com.alibaba.fastjson2.reader.ObjectReader;
@ -28,11 +29,15 @@ public class ActionReader implements ObjectReader<ActionResponse<?>> {
Actions action = request.getAction(); Actions action = request.getAction();
String status = jsonObject.getString("status"); String status = jsonObject.getString("status");
short retcode = jsonObject.getShort("retcode"); short retcode = jsonObject.getShort("retcode");
JSONObject data = jsonObject.getJSONObject("data");
Object dataObj = null; Object dataObj = null;
if (action.array){
JSONArray data = jsonObject.getJSONArray("data");
dataObj = data.toJavaList(action.responseClass);
} else {
JSONObject data = jsonObject.getJSONObject("data");
if (data != null){ if (data != null){
dataObj = data.to(action.responseClass); dataObj = data.to(action.responseClass);
}
} }
return new ActionResponse<>(status, retcode, dataObj, echo); return new ActionResponse<>(status, retcode, dataObj, echo);
} }

View File

@ -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<HonorType> {
@Override
public void write(JSONWriter jsonWriter, Object o, Object o1, Type type, long l) {
jsonWriter.writeString(((HonorType) o).name());
}
}

View File

@ -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<IBot> {
@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;
}
}