Skip to content
目录

插件开发技巧

下面均为部分代码!

判断首字符

typescript
if (e.raw_message.startsWith("点歌")) {
  // 执行代码
}

发送图文

typescript
import { definePlugin, segment } from "kivibot";

export default definePlugin({
  name: "demo",
  version: "1.0.0",
  async setup(ctx) {
    ctx.handle("message", async (e) => {
      const img = segment.image("https://example.com/image.jpg");
      const msg = "Hello World";
      e.reply([img, msg]);
    });
  },
});

数据存储

临时存储(重载丢失)

typescript
// 在插件作用域内使用 Map 存储临时数据
const tempData = new Map<string, any>();

export default definePlugin({
  name: "demo",
  version: "1.0.0",
  async setup(ctx) {
    tempData.set("key", "value");
    console.log(tempData.get("key")); // 输出: value
  },
});

持久存储(ai 生成)

typescript
import { definePlugin } from "kivibot";
import { join } from "path";
import { readFileSync, writeFileSync, existsSync } from "fs";

export default definePlugin({
  name: "demo",
  version: "1.0.0",
  async setup(ctx) {
    // 数据文件路径
    const dataPath = join(__dirname, "config.json");

    // 默认配置
    const defaultConfig = {
      name: "kivibot",
      enabled: true,
    };

    // 读取数据
    function loadData() {
      try {
        if (existsSync(dataPath)) {
          const data = readFileSync(dataPath, "utf8");
          return JSON.parse(data);
        }
        // 首次运行时创建默认配置
        saveData(defaultConfig);
        return defaultConfig;
      } catch (err) {
        console.error("读取配置文件失败:", err);
        return defaultConfig;
      }
    }

    // 保存数据
    function saveData(data: any) {
      try {
        writeFileSync(dataPath, JSON.stringify(data, null, 2));
        return true;
      } catch (err) {
        console.error("保存配置文件失败:", err);
        return false;
      }
    }

    // 使用示例
    const config = loadData();
    config.lastUpdate = Date.now();
    saveData(config);
  },
});

网络请求

KiviBot 内置了 axios,可直接使用:

typescript
import { definePlugin, axios } from "kivibot";

export default definePlugin({
  name: "demo",
  version: "1.0.0",
  async setup(ctx) {
    ctx.handle("message", async (e) => {
      try {
        const res = await axios.get("https://api.example.com");
        e.reply(res.data);
      } catch (err) {
        console.error("请求失败:", err);
      }
    });
  },
});

待更新补充

如果您有好的技巧,欢迎在群内分享或提交 PR,感谢您的贡献!

KiviBot 使用 MIT 协议开放源代码 | 基于 icqq 实现