From 4e0fd28c46a953bbdc7cdd17ac632edcbadbba16 Mon Sep 17 00:00:00 2001 From: cnlimiter Date: Sat, 17 Aug 2024 15:40:20 +0800 Subject: [PATCH] ```refactor(mcbot): rename UserBind to UserInfo and update related APIs Rename UserBind to UserInfo to better reflect its purpose. Synchronize updates across related APIs and data handling classes. Improve data folder path consistency by using Constants.DATA_FOLDER. Enhance Cmd class with Lombok annotations for better boilerplate code reduction. Ensure CmdUtils returns null for empty commands. BREAKING CHANGE: The class UserBind has been renamed to UserInfo. Any code utilizingUserBindApi, UserBind, or related data handling methods must now refer to UserInfoApi and UserInfo respectively. Additionally, constructor and method calls on Cmd class have been modified to be more concise with Lombok annotations. ``` --- .../java/cn/evole/mods/mcbot/Constants.java | 2 +- .../java/cn/evole/mods/mcbot/api/cmd/Cmd.java | 4 ++ .../cn/evole/mods/mcbot/api/cmd/CmdApi.java | 8 ++- .../mods/mcbot/api/data/ChatRecordApi.java | 2 +- .../mods/mcbot/api/data/UserBindApi.java | 47 ---------------- .../mods/mcbot/api/data/UserInfoApi.java | 55 +++++++++++++++++++ .../mcbot/common/config/CommonConfig.java | 3 +- .../mods/mcbot/plugins/data/DataHandler.java | 14 ++--- .../data/{UserBind.java => UserInfo.java} | 13 ++++- .../cn/evole/mods/mcbot/util/CmdUtils.java | 36 ++++++------ 10 files changed, 107 insertions(+), 77 deletions(-) delete mode 100644 common/src/main/java/cn/evole/mods/mcbot/api/data/UserBindApi.java create mode 100644 common/src/main/java/cn/evole/mods/mcbot/api/data/UserInfoApi.java rename common/src/main/java/cn/evole/mods/mcbot/plugins/data/{UserBind.java => UserInfo.java} (66%) diff --git a/common/src/main/java/cn/evole/mods/mcbot/Constants.java b/common/src/main/java/cn/evole/mods/mcbot/Constants.java index 056718e..8274684 100644 --- a/common/src/main/java/cn/evole/mods/mcbot/Constants.java +++ b/common/src/main/java/cn/evole/mods/mcbot/Constants.java @@ -23,7 +23,7 @@ public class Constants { public static final ExecutorService commonExecutor = Executors.newSingleThreadExecutor(); public static final Gson GSON = GsonUtils.getNullGson(); public static final Path CONFIG_FOLDER = Services.PLATFORM.getGamePath().resolve("mcbot"); - public static Path dataFolder = FileUtils.checkFolder(CONFIG_FOLDER.resolve("data")); + public static Path DATA_FOLDER = FileUtils.checkFolder(CONFIG_FOLDER.resolve("data")); public static boolean isShutdown = false; public static boolean connected = false; diff --git a/common/src/main/java/cn/evole/mods/mcbot/api/cmd/Cmd.java b/common/src/main/java/cn/evole/mods/mcbot/api/cmd/Cmd.java index e96ac1d..66f1215 100644 --- a/common/src/main/java/cn/evole/mods/mcbot/api/cmd/Cmd.java +++ b/common/src/main/java/cn/evole/mods/mcbot/api/cmd/Cmd.java @@ -1,7 +1,9 @@ package cn.evole.mods.mcbot.api.cmd; import com.google.gson.annotations.Expose; +import lombok.AllArgsConstructor; import lombok.Getter; +import lombok.Setter; import java.util.List; @@ -12,6 +14,8 @@ * @Description: */ @Getter +@Setter +@AllArgsConstructor public class Cmd { @Expose private String id; @Expose private String cmd; diff --git a/common/src/main/java/cn/evole/mods/mcbot/api/cmd/CmdApi.java b/common/src/main/java/cn/evole/mods/mcbot/api/cmd/CmdApi.java index 79a3399..fd39abb 100644 --- a/common/src/main/java/cn/evole/mods/mcbot/api/cmd/CmdApi.java +++ b/common/src/main/java/cn/evole/mods/mcbot/api/cmd/CmdApi.java @@ -1,5 +1,6 @@ package cn.evole.mods.mcbot.api.cmd; +import cn.evole.mods.mcbot.api.data.UserInfoApi; import cn.evole.mods.mcbot.util.CmdUtils; import cn.evole.onebot.sdk.event.message.GroupMessageEvent; import lombok.val; @@ -16,11 +17,16 @@ public class CmdApi { public static void invokeCommandGroup(GroupMessageEvent event, String msg) { String originCmd = msg.substring(1);//去除前缀 - val user_id = event.getUserId(); + val user_id = String.valueOf(event.getUserId()); + val group_id = String.valueOf(event.getGroupId()); val cmd = CmdUtils.varParse(event, originCmd); + if (UserInfoApi.groupHas(group_id, user_id)){ + + } + diff --git a/common/src/main/java/cn/evole/mods/mcbot/api/data/ChatRecordApi.java b/common/src/main/java/cn/evole/mods/mcbot/api/data/ChatRecordApi.java index c9fba5d..8c9e246 100644 --- a/common/src/main/java/cn/evole/mods/mcbot/api/data/ChatRecordApi.java +++ b/common/src/main/java/cn/evole/mods/mcbot/api/data/ChatRecordApi.java @@ -15,7 +15,7 @@ */ public class ChatRecordApi { public static Map chatRecords; - public static Path chatRecordFile = FileUtils.checkFile(Constants.dataFolder.resolve("chatRecord.csv")); + public static Path chatRecordFile = FileUtils.checkFile(Constants.DATA_FOLDER.resolve("chatRecord.csv")); public static boolean has(String message_id){ return chatRecords.containsKey(message_id); diff --git a/common/src/main/java/cn/evole/mods/mcbot/api/data/UserBindApi.java b/common/src/main/java/cn/evole/mods/mcbot/api/data/UserBindApi.java deleted file mode 100644 index fbaeb1c..0000000 --- a/common/src/main/java/cn/evole/mods/mcbot/api/data/UserBindApi.java +++ /dev/null @@ -1,47 +0,0 @@ -package cn.evole.mods.mcbot.api.data; - -import cn.evole.mods.mcbot.Constants; -import cn.evole.mods.mcbot.plugins.data.UserBind; -import cn.evole.mods.mcbot.util.FileUtils; - -import java.nio.file.Path; -import java.util.List; - -/** - * @Project: McBot - * @Author: cnlimiter - * @CreateTime: 2024/8/17 14:02 - * @Description: - */ -public class UserBindApi { - public static List userBinds; - public static Path userBindFile = FileUtils.checkFile(Constants.dataFolder.resolve("userBind.csv")); - - public static boolean groupHas(String group_id, String user_id){ - for (UserBind userBind : userBinds){ - if (userBind.getGroupId().equals(group_id)){ - return userBind.getQqId().equals(user_id); - } - } - return false; - } - - public static boolean isInGame(String group_id, String user_id){ - for (UserBind userBind : userBinds){ - if (userBind.getGroupId().equals(group_id)){ - return userBind.getGameName().equals(user_id); - } - } - return false; - } - - public static void add(String group_id, String qq_id, String game_name){ - if (!groupHas(group_id, qq_id)) userBinds.add(new UserBind(System.currentTimeMillis(), qq_id, group_id, game_name)); - } - - public static void del(String group_id, String qq_id){ - if (groupHas(group_id, qq_id)) { - userBinds.removeIf(userBind -> userBind.getGroupId().equals(group_id) && userBind.getQqId().equals(qq_id)); - } - } -} diff --git a/common/src/main/java/cn/evole/mods/mcbot/api/data/UserInfoApi.java b/common/src/main/java/cn/evole/mods/mcbot/api/data/UserInfoApi.java new file mode 100644 index 0000000..a1cf6ce --- /dev/null +++ b/common/src/main/java/cn/evole/mods/mcbot/api/data/UserInfoApi.java @@ -0,0 +1,55 @@ +package cn.evole.mods.mcbot.api.data; + +import cn.evole.mods.mcbot.Constants; +import cn.evole.mods.mcbot.plugins.data.UserInfo; +import cn.evole.mods.mcbot.util.FileUtils; + +import java.nio.file.Path; +import java.util.List; + +/** + * @Project: McBot + * @Author: cnlimiter + * @CreateTime: 2024/8/17 14:02 + * @Description: + */ +public class UserInfoApi { + public static List userInfos; + public static Path userBindFile = FileUtils.checkFile(Constants.DATA_FOLDER.resolve("userBind.csv")); + + public static boolean groupHas(String group_id, String user_id){ + for (UserInfo userInfo : userInfos){ + if (userInfo.getGroupId().equals(group_id)){ + return userInfo.getQqId().equals(user_id); + } + } + return false; + } + + public static boolean isInGame(String group_id, String user_id){ + for (UserInfo userInfo : userInfos){ + if (userInfo.getGroupId().equals(group_id)){ + return userInfo.getGameName().equals(user_id); + } + } + return false; + } + + public static void add(String group_id, String qq_id, String game_name){ + if (!groupHas(group_id, qq_id)) { + UserInfo userInfo = new UserInfo(); + userInfo.setCreateTime(System.currentTimeMillis()); + userInfo.setQqId(qq_id); + userInfo.setGroupId(group_id); + userInfo.setGameName(game_name); + userInfo.setCoin(5); + userInfos.add(userInfo); + } + } + + public static void del(String group_id, String qq_id){ + if (groupHas(group_id, qq_id)) { + userInfos.removeIf(userInfo -> userInfo.getGroupId().equals(group_id) && userInfo.getQqId().equals(qq_id)); + } + } +} diff --git a/common/src/main/java/cn/evole/mods/mcbot/common/config/CommonConfig.java b/common/src/main/java/cn/evole/mods/mcbot/common/config/CommonConfig.java index 8b3cd70..ce52e16 100644 --- a/common/src/main/java/cn/evole/mods/mcbot/common/config/CommonConfig.java +++ b/common/src/main/java/cn/evole/mods/mcbot/common/config/CommonConfig.java @@ -22,8 +22,7 @@ public class CommonConfig { @Comment("开启q群功能") private boolean groupOn = true; @Comment("支持多个q群") - private List groupIdList = new ArrayList() { - };//支持多个q群 + private List groupIdList = new ArrayList<>();//支持多个q群 @Comment("是否启用") private boolean enable = true;//是否启用 @Comment("是否开发模式,将显示事件信息操作") diff --git a/common/src/main/java/cn/evole/mods/mcbot/plugins/data/DataHandler.java b/common/src/main/java/cn/evole/mods/mcbot/plugins/data/DataHandler.java index 510e78d..a636b1b 100644 --- a/common/src/main/java/cn/evole/mods/mcbot/plugins/data/DataHandler.java +++ b/common/src/main/java/cn/evole/mods/mcbot/plugins/data/DataHandler.java @@ -2,7 +2,7 @@ import cn.evole.mods.mcbot.Constants; import cn.evole.mods.mcbot.api.data.ChatRecordApi; -import cn.evole.mods.mcbot.api.data.UserBindApi; +import cn.evole.mods.mcbot.api.data.UserInfoApi; import com.github.houbb.csv.util.CsvHelper; import com.google.common.collect.Maps; @@ -18,27 +18,27 @@ public class DataHandler { public static void load(){ ChatRecordApi.chatRecords = Maps.newConcurrentMap(); - UserBindApi.userBinds = new ArrayList<>(); + UserInfoApi.userInfos = new ArrayList<>(); if (ChatRecordApi.chatRecordFile.toFile().exists()) { - CsvHelper.read(Constants.dataFolder.toFile(), ChatRecord.class).forEach(chatRecord -> ChatRecordApi.chatRecords.putIfAbsent(chatRecord.getMessageId(), chatRecord)); + CsvHelper.read(Constants.DATA_FOLDER.toFile(), ChatRecord.class).forEach(chatRecord -> ChatRecordApi.chatRecords.putIfAbsent(chatRecord.getMessageId(), chatRecord)); } - if (UserBindApi.userBindFile.toFile().exists()){ - UserBindApi.userBinds.addAll(CsvHelper.read(Constants.dataFolder.toFile(), UserBind.class)); + if (UserInfoApi.userBindFile.toFile().exists()){ + UserInfoApi.userInfos.addAll(CsvHelper.read(Constants.DATA_FOLDER.toFile(), UserInfo.class)); } } public static void save(){ CsvHelper.write(ChatRecordApi.chatRecords.values().stream().toList(), ChatRecordApi.chatRecordFile.toString()); - CsvHelper.write(UserBindApi.userBinds, UserBindApi.userBindFile.toString()); + CsvHelper.write(UserInfoApi.userInfos, UserInfoApi.userBindFile.toString()); clear(); } public static void clear(){ ChatRecordApi.chatRecords.clear(); - UserBindApi.userBinds.clear(); + UserInfoApi.userInfos.clear(); } public static void reload(){ diff --git a/common/src/main/java/cn/evole/mods/mcbot/plugins/data/UserBind.java b/common/src/main/java/cn/evole/mods/mcbot/plugins/data/UserInfo.java similarity index 66% rename from common/src/main/java/cn/evole/mods/mcbot/plugins/data/UserBind.java rename to common/src/main/java/cn/evole/mods/mcbot/plugins/data/UserInfo.java index c632b9d..1b00cf2 100644 --- a/common/src/main/java/cn/evole/mods/mcbot/plugins/data/UserBind.java +++ b/common/src/main/java/cn/evole/mods/mcbot/plugins/data/UserInfo.java @@ -6,6 +6,9 @@ import lombok.NoArgsConstructor; import lombok.Setter; +import java.util.Arrays; +import java.util.List; + /** * @Project: McBot-fabric * @Author: cnlimiter @@ -17,7 +20,7 @@ @Setter @AllArgsConstructor @NoArgsConstructor -public class UserBind { +public class UserInfo { @Csv(label = "添加日期") private long createTime = 0L; @Csv(label = "qq") @@ -26,4 +29,12 @@ public class UserBind { private String groupId = ""; @Csv(label = "游戏名") private String gameName = ""; + @Csv(label = "金币") + private long coin = 0L; + @Csv(label = "权限") + private List permissions = Arrays + .asList( + "mcbot.cmd.tps", + "mcbot.cmd.list" + ); } diff --git a/common/src/main/java/cn/evole/mods/mcbot/util/CmdUtils.java b/common/src/main/java/cn/evole/mods/mcbot/util/CmdUtils.java index 7c9ce86..d0572ae 100644 --- a/common/src/main/java/cn/evole/mods/mcbot/util/CmdUtils.java +++ b/common/src/main/java/cn/evole/mods/mcbot/util/CmdUtils.java @@ -38,12 +38,14 @@ public static String cmdParse(String command) { * @param cmd q群中指令 * @return 处理完的指令 */ - public static String varParse(GroupMessageEvent event, String cmd) { + public static Cmd varParse(GroupMessageEvent event, String cmd) { VARS.putIfAbsent("user_id", event.getSender().getUserId());//初始化变量列表 - val cmdStart = cmd.split(" ")[0];//部分指令头 + String cmdStart = cmd.split(" ")[0];//部分指令头 + Cmd selectCmd = null; String parseCmd = "";//定义最终命令用以返回 boolean useCmd = false; + StringBuilder endCmd = new StringBuilder(); for (Cmd cmd2 : CmdHandler.cmds.values()){//将含有昵称的指令替换为源命令 if (cmd2.getCmd().contains(cmdStart)) useCmd = true;//如果源命令包含部分指令头,则可以视为使用该源命令 @@ -55,6 +57,7 @@ public static String varParse(GroupMessageEvent event, String cmd) { } } if (useCmd) { + selectCmd = cmd2; parseCmd = cmd2.getCmd(); break;//跳出循环 } @@ -72,23 +75,22 @@ public static String varParse(GroupMessageEvent event, String cmd) { } } - val cmdEndSplits = parseCmd.split(" ");//拆分命令 - val cmdSplits = cmd.split(" "); + if (!parseCmd.isEmpty() && selectCmd != null){ + val cmdEndSplits = parseCmd.split(" ");//拆分命令 + val cmdSplits = cmd.split(" "); - for (int i = 0; i < cmdEndSplits.length; i++){ - if (cmdEndSplits[i].equals("%")){//如果存在变量标志 - cmdEndSplits[i] = cmdSplits[i];//则将指令中的变量对应内容传递到最终命令 + for (int i = 0; i < cmdEndSplits.length; i++){ + if (cmdEndSplits[i].equals("%")){//如果存在变量标志 + cmdEndSplits[i] = cmdSplits[i];//则将指令中的变量对应内容传递到最终命令 + } } - } - - val endCmd = new StringBuilder(); - for (String key : cmdEndSplits) { - endCmd.append(key).append(" "); - }//拼接回命令 - - return endCmd.toString(); - - + for (String key : cmdEndSplits) { + endCmd.append(key).append(" "); + }//拼接回命令 + return new Cmd(selectCmd.getId(), endCmd.toString(), selectCmd.getAlies(), selectCmd.getAllow_members(), selectCmd.getPermission(), selectCmd.getAfter_cmds(), selectCmd.getAnswer(), selectCmd.isEnable()); + } else { + return null;//如果最终命令为空则返回null + } } }