Permission.ts 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. import { GroupMessage, PrivateFriendMessage, PrivateGroupMessage, Receive } from "node-napcat-ts";
  2. import { commandList, param, plugins, runcod } from "../lib/decorators.js";
  3. import { addPermission, getuserPermissions, IsAdmin, removePermission } from "../lib/Permission.js";
  4. @plugins({
  5. easycmd: false,//是否启用简易命令,启用将将命令注册为<命令名称>,不启用将注册为#<插件名称> <命令名称>
  6. name: "权限管理道具", //插件名称,用于显示在菜单中
  7. version: "1.0.0", //插件版本号,用于显示在菜单中
  8. describe: "官方权限插件", //插件描述,用于显示在菜单中
  9. author: "枫叶秋林",//插件作者,用于显示在菜单中
  10. help: { //插件帮助信息,用于显示在菜单中
  11. enabled: true, //是否启用帮助信息
  12. description: "显示道具插件" //帮助信息描述
  13. }
  14. })
  15. export class Permission{
  16. @runcod(["list", "查看权限"],"查看权限" )
  17. async list(
  18. context: PrivateFriendMessage | PrivateGroupMessage | GroupMessage
  19. ){
  20. if(await IsAdmin(context?.sender?.user_id)){
  21. return "你是管理员,拥有所有权限"
  22. }
  23. const Data = await getuserPermissions(context?.sender?.user_id.toString()??"0")
  24. if(Data.length === 0){
  25. return "你没有设置任何权限"
  26. }
  27. let s ='权限列表:\n'
  28. Data.forEach((permission) => {
  29. const parts = permission.split('.');
  30. const pluginName = parts[0];
  31. const commandName = parts[1];
  32. commandList.forEach((command) => {
  33. if(command.id === pluginName){
  34. s += `插件:${command.name}\n`;
  35. command.commands.forEach((cmd) => {
  36. if(cmd.fnName === commandName){
  37. s += `指令:${command.name}【${cmd.cmd}】有权限 \n`;
  38. }else{
  39. s += `指令:${command.name}【${cmd.fnName}】无权限 \n`;
  40. }
  41. })
  42. }else{
  43. s += `插件:${command.name} 无权限 \n`;
  44. }
  45. })
  46. return s;
  47. })
  48. }
  49. @runcod(["add", "添加权限"],"添加权限,指令为空则未拥有该插件下所有命令权限" )
  50. async add(
  51. @param("qq号","at") userid: Receive["at"],
  52. @param("插件名称","text") Userplugin: Receive["text"],
  53. @param("指令名称","text",{type:'text',data:{text:"-1"}},true) Usercommand: Receive["text"],
  54. context: PrivateFriendMessage | PrivateGroupMessage | GroupMessage
  55. ){
  56. if(await IsAdmin(Number(userid?.data?.qq))){
  57. return "你是管理员,拥有所有权限"
  58. }
  59. commandList.forEach((command) => {
  60. if(command.id === Userplugin?.data?.text && Usercommand?.data?.text==="-1"){
  61. command.commands.forEach((cmd) => {
  62. addPermission(Number(userid?.data?.qq).toString(),command.id,cmd.fnName)
  63. })
  64. }
  65. if(command.id === Userplugin?.data?.text && Usercommand?.data?.text!="-1"){
  66. command.commands.forEach((cmd) => {
  67. if(cmd.fnName === Usercommand?.data?.text){
  68. addPermission(Number(userid?.data?.qq).toString(),command.id,cmd.fnName)
  69. }
  70. })
  71. }
  72. })
  73. return "添加权限成功"
  74. }
  75. @runcod(["remove", "移除权限"],"移除权限,指令为空则移除该插件下所有命令权限" )
  76. async remove(
  77. @param("插件名称","at") userid: Receive["at"],
  78. @param("插件名称","text") Userplugin: Receive["text"],
  79. @param("指令名称","text",{type:'text',data:{text:"-1"}},true) Usercommand: Receive["text"],
  80. context: PrivateFriendMessage | PrivateGroupMessage | GroupMessage
  81. ){
  82. if(await IsAdmin(Number(userid?.data?.qq))){
  83. return "你是管理员,拥有所有权限"
  84. }
  85. commandList.forEach((command) => {
  86. if(command.id === Userplugin?.data?.text && Usercommand?.data?.text==="-1"){
  87. command.commands.forEach((cmd) => {
  88. removePermission(Number(userid?.data?.qq).toString(),command.id,cmd.fnName)
  89. })
  90. }
  91. if(command.id === Userplugin?.data?.text && Usercommand?.data?.text!="-1"){
  92. command.commands.forEach((cmd) => {
  93. if(cmd.fnName === Usercommand?.data?.text){
  94. removePermission(Number(userid?.data?.qq).toString(),command.id,cmd.fnName)
  95. }
  96. })
  97. }
  98. })
  99. }
  100. }