|
@@ -1,81 +1,89 @@
|
|
|
-import { PermissionConfig, saveConfig, savePermission } from "./config.js";
|
|
|
+import { PermissionConfig } from "./config.js";
|
|
|
import botlogger from "./logger.js";
|
|
|
+import { PermissionCommands } from "../interface/Permission.js";
|
|
|
+import { getUserData, saveUserData } from "./economy.js";
|
|
|
export const IsAdmin = async function (id:number){return await PermissionConfig.admins.some((admin: string) => admin === String(id)) }
|
|
|
-export async function IsPermission(id: number, plugin: string, command: string): Promise<boolean> {
|
|
|
- try {
|
|
|
- // 检查用户是否在管理员
|
|
|
- if (await IsAdmin(id)) {
|
|
|
- return true;
|
|
|
- }
|
|
|
- // 获取用户权限配置(带默认回退)
|
|
|
- const userPermission = getUserPermission(id);
|
|
|
-
|
|
|
- // 获取插件配置(带默认回退)
|
|
|
- const pluginConfig = getPluginConfig(userPermission, plugin);
|
|
|
-
|
|
|
- // 检查插件总开关
|
|
|
- if (pluginConfig?.enable === false) return false;
|
|
|
+export const permissionCommands:PermissionCommands[] = [];
|
|
|
|
|
|
- // 获取命令权限配置
|
|
|
- const commandPermission = getCommandPermission(pluginConfig, command);
|
|
|
-
|
|
|
- // 自动保存新配置
|
|
|
- if (commandPermission === undefined) {
|
|
|
- await saveNewCommandConfig(id, plugin, command);
|
|
|
- return true; // 默认允许新命令
|
|
|
- }
|
|
|
-
|
|
|
- return Boolean(commandPermission);
|
|
|
- } catch (error) {
|
|
|
- if (error instanceof Error) {
|
|
|
- botlogger.error(`权限检查失败 [${id}/${plugin}/${command}]:${error.message}`);
|
|
|
- } else {
|
|
|
- botlogger.error(`权限检查失败 [${id}/${plugin}/${command}]:未知错误`);
|
|
|
+export function Permission(type: 'Admin'| 'User' | 'Group'): MethodDecorator {
|
|
|
+ return function (target: any, propertyKey: string | symbol | undefined): void {
|
|
|
+ const actualPropertyKey = propertyKey!;
|
|
|
+ const fnName = `${target.constructor.name}.${actualPropertyKey.toString()}`;
|
|
|
+ const EconomyCommand: PermissionCommands = {
|
|
|
+ name: fnName,
|
|
|
+ type: type,
|
|
|
+ };
|
|
|
+ permissionCommands.push(EconomyCommand)
|
|
|
+ };
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+export async function IsPermission(user_id: number, plugin: string, command: string,IsGroup:boolean): Promise<boolean> {
|
|
|
+ const permission = await permissionCommands.find((permission: PermissionCommands) => permission.name === `${plugin}.${command}`);
|
|
|
+ if (permission) {
|
|
|
+ switch (permission.type) {
|
|
|
+ case 'Admin':
|
|
|
+ return await IsAdmin(user_id);
|
|
|
+ case 'User':
|
|
|
+ return await IsuserPermission(user_id, plugin, command);
|
|
|
+ case 'Group':
|
|
|
+ if(IsGroup){
|
|
|
+ return await IsuserPermission(user_id, plugin, command);
|
|
|
+ }
|
|
|
+ return false
|
|
|
+ default:
|
|
|
+ botlogger.error(`未知权限类型 ${permission.type}`);
|
|
|
+ return false
|
|
|
}
|
|
|
- return false; // 出错时默认拒绝
|
|
|
}
|
|
|
+ return true;
|
|
|
}
|
|
|
-
|
|
|
-// 新增辅助函数
|
|
|
-function getUserPermission(id: number) {
|
|
|
- // 确保默认配置层级存在
|
|
|
- if (!PermissionConfig.users.default) {
|
|
|
- PermissionConfig.users.default = { plugins: {} };
|
|
|
+async function IsuserPermission(user_id: number, plugin: string, command: string): Promise<boolean> {
|
|
|
+ if (await IsAdmin(user_id)) {
|
|
|
+ return true;
|
|
|
}
|
|
|
- if (!PermissionConfig.users.default.plugins) {
|
|
|
- PermissionConfig.users.default.plugins = {};
|
|
|
+ if (!await getUserData(user_id.toString())) {
|
|
|
+ return false;
|
|
|
}
|
|
|
-
|
|
|
- // 深度合并用户配置与默认配置
|
|
|
- return {
|
|
|
- plugins: {
|
|
|
- ...PermissionConfig.users.default.plugins,
|
|
|
- ...(PermissionConfig.users[id]?.plugins || {})
|
|
|
- }
|
|
|
- };
|
|
|
+ const permission = (await getuserPermissions(user_id.toString())).find((permission) => permission === `${plugin}.${command}`);
|
|
|
+ if (permission) {
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ return false;
|
|
|
}
|
|
|
-
|
|
|
-async function saveNewCommandConfig(id: number, plugin: string, command: string) {
|
|
|
- try {
|
|
|
- // 初始化用户配置树
|
|
|
- PermissionConfig.users[id] = PermissionConfig.users[id] || { plugins: {} };
|
|
|
- PermissionConfig.users[id].plugins[plugin] = PermissionConfig.users[id].plugins[plugin] || { commands: {} };
|
|
|
- PermissionConfig.users[id].plugins[plugin].commands = PermissionConfig.users[id].plugins[plugin].commands || {};
|
|
|
-
|
|
|
- // 设置新命令默认权限
|
|
|
- PermissionConfig.users[id].plugins[plugin].commands[command] = true;
|
|
|
-
|
|
|
- savePermission('permission', PermissionConfig);
|
|
|
- botlogger.info(`自动创建 [${id}] 的 ${plugin}.${command} 命令权限`);
|
|
|
- } catch (error) {
|
|
|
- botlogger.error(`配置保存失败:${error instanceof Error ? error.stack : error}`);
|
|
|
+export async function getuserPermissions(userId: string): Promise<string[]> {
|
|
|
+ const userData = await getUserData(userId);
|
|
|
+ if (!userData) {
|
|
|
+ return [];
|
|
|
+ }else{
|
|
|
+ return userData.Permission;
|
|
|
}
|
|
|
}
|
|
|
-function getPluginConfig(userPermission: any, plugin: string) {
|
|
|
- const PluginConfig = userPermission?.plugins[plugin]
|
|
|
- return PluginConfig ?? PermissionConfig.users.default.plugins[plugin];
|
|
|
+export async function addPermission(userId: string, plugin: string, command: string) : Promise<boolean>{
|
|
|
+ const userPermission = await getuserPermissions(userId) || [];
|
|
|
+ const permission = permissionCommands.find((permission) => permission.name === plugin + '.' + command);
|
|
|
+ if (permission && !userPermission.includes(plugin + '.' + command)) {
|
|
|
+ userPermission.push(plugin + '.' + command);
|
|
|
+ }
|
|
|
+ const userData = await getUserData(userId)
|
|
|
+ if (!userData) {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ userData.Permission = userPermission;
|
|
|
+ await saveUserData(userId,userData);
|
|
|
+ return true;
|
|
|
}
|
|
|
-
|
|
|
-function getCommandPermission(pluginConfig: any, command: string) {
|
|
|
- return pluginConfig?.commands[command];
|
|
|
+export async function removePermission(userId: string, plugin: string, command: string) : Promise<boolean>{
|
|
|
+ const userPermission = await getuserPermissions(userId) || [];
|
|
|
+ const permission = permissionCommands.find((permission) => permission.name === plugin + '.' + command);
|
|
|
+ if (permission && userPermission.includes(plugin + '.' + command)) {
|
|
|
+ userPermission.splice(userPermission.indexOf(plugin + '.' + command), 1);
|
|
|
+ }
|
|
|
+ const userData = await getUserData(userId)
|
|
|
+ if (!userData) {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ userData.Permission = userPermission;
|
|
|
+ await saveUserData(userId,userData);
|
|
|
+ return true;
|
|
|
}
|