# 模块类修饰注解

模块类修饰注解是指对你编写的模块的 class 进行“打标签”,也就是添加注解,从而实现一些特殊的功能。

# Closed()

这个注解类是用于停止解析此类中的所有方法的注解用的,对模块的类添加了此注解后,此类下的所有函数的所有注解和事件均不解析。当有模块或功能需要暂时关闭时会用到此注解。

  • 名称:@Closed
  • 命名空间:ZM\Annotation\Module\Closed
use ZM\Annotation\Module\Closed;
/**
 * @Closed()
 */
class ModuleA {
  /**
   * @CQCommand("你好")
   */
  public function hello() { return "你好啊!我是可爱的机器人"; }
}
1
2
3
4
5
6
7
8
9
10

上面的例子中,在以上对类 ModuleA 进行修饰后,向机器人发送 你好,机器人不会回复。

# SaveBuffer()

  • 名称:@SaveBuffer
  • 命名空间:ZM\Annotation\Module\SaveBuffer
  • 参数:buf_namesub_folder
  • 作用:添加一个自动保存的缓存变量,供模块内各个功能使用,在框架启动后触发。关于缓存类,见 缓存类

此注解是用于简化对内存缓存的持久化储存,本质就是调用组件中的 ZMBuf 缓存类进行存取,每隔 15 分钟将内存中的数据保存成文本文件到硬盘。

声明:

<?php
namespace Module\Example;

use ZM\Annotation\Module\SaveBuffer;
/**
 * @SaveBuffer(buf_name="test_list",sub_folder="Test")
 */
class Test { }
1
2
3
4
5
6
7
8

使用:发送 你好,并记录调用此功能的人的时间并统计次数

/**
 * @CQCommand("你好")
 */
public function hello() {
  $list = ZMBuf::get("test_list");
  $list[]=["user_id" => ctx()->getUserId(), "time" => time()];
  ZMBuf::set("test_list", $list);
  return "成功调用!";
}
/**
 * @CQCommand("调用次数")
 */
public function times() {
  $cnt = 0;
  foreach(ZMBuf::get("test_list") as $k => $v) {
    if($v["user_id"] == ctx()->getUserId()) {
      ++$cnt;
    }
  }
  ctx()->reply("调用次数:" . $cnt);
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

使用了 SaveBuffer 后,与直接使用 ZMBuf 类不同的是,框架会自动把此变量保存到硬盘,即使框架退出,计算机关闭或内存炸掉了,只要重启,就会自动往 ZMBuf 中加载之前保存的缓存变量。而直接使用 ZMBuf 没有声明 SaveBuffer 时,框架停止运行后数据即丢失。

# LoadBuffer()

在 1.4 版本起可用。

与上方 SaveBuffer 类似,但 LoadBuffer 不会将更改保存回文件,仅仅是加载到内存中,通过 ZMBuf 调用使用。如果原本文件不存在,则初始化为空数组。

<?php
namespace Module\Example;

use ZM\Annotation\Module\SaveBuffer;
/**
 * @LoadBuffer(buf_name="test_list",sub_foler="Test")
 */
class Test{}
1
2
3
4
5
6
7
8
上次更新: 5/23/2020, 5:30:02 PM