Skip to content

mrrhq/nuxt-wcferry

Repository files navigation

Nuxt Wcferry

npm version npm downloads bundle JSDocs License

适用于 Nuxt 的微信机器人框架,使用如下开源项目强力驱动:

Features

  • ⛰ 享用 Nuxt 的所有特性
  • 🛠️ 全自动导入机器人技能
  • 🔓 技能中间件和全局中间件
  • 🌲 可编程的 Nitro Corn Task
  • 🦾 内置 DLL,无需关心回调
  • 💻 基于 wcferry 的 PC Hook
  • 🔍 Wechaty API 可用

Quick Setup

Install:

pnpx nuxi module add nuxt-wcferry

Skills:

// server/wcferry/skills/*.ts
/**
 * 在群里说:@机器人 ping
 * 机器人回复:pong
 */
export default defineBotCommandHandler({
  command: "ping",
  handler({ message, _command, _args }) {
    message.say("pong");
  },
});

Middleware:

// server/wcferry/middleware/*.ts
export default defineBotMiddleware({
  // 仅在 message 类事件中
  hook: "message",
  handler(message) {
    console.log(message.talker().name());
  },
});

然后在技能定义中使用 middleware: '<小驼峰中间件文件名>'即可应用。不要返回任何值,返回任何值即意味着技能被拦截,将立即中断剩余中间件和技能的执行。

还可以使用 *.global.ts 定义全局中间件,在所有技能执行前都会执行。

Tasks:

export default defineCronTask({
  pattern: "* * * * *",
  async run() {
    const bot = useBot();
    console.log(`Hi, I am ${bot.currentUser.name()}, now is ${new Date()}`);
    return {
      result: true,
    };
  },
});

Nitro 内置了 Task 功能,但不能在运行时编写定时任务,考虑到大多数机器人都会有定时任务,这个函数应该会有帮助。

Wechaty 和 Wcferry:

const bot = useBot(); // Wechaty 实例
const puppet = useBotPuppet(); // puppetWcferry 实例
const agent = useBotAgent(); // WcferryAgent 实例

That's it! You can now use Nuxt Ferry in your Nuxt app ✨

Funding

Contribution

Local development
# Install dependencies
npm install

# Generate type stubs
npm run dev:prepare

# Develop with the playground
npm run dev

# Build the playground
npm run dev:build

# Run ESLint
npm run lint

# Run Vitest
npm run test
npm run test:watch

# Release new version
npm run release

License

MIT License © 2024-PRESENT mrrhq