首页
/ Wechaty 微信机器人开发框架全面解析

Wechaty 微信机器人开发框架全面解析

2025-07-05 06:37:03作者:董灵辛Dennis

Wechaty 是一个开源的微信个人号机器人开发框架,支持多种微信协议实现,可以帮助开发者快速构建微信聊天机器人。本文将全面解析 Wechaty 框架的核心功能和使用方法。

核心概念

Wechaty 类

Wechaty 类是框架的核心,代表一个微信机器人实例。根据使用的 Puppet(协议实现)不同,机器人可以对应不同版本的微信客户端:

  • web-WeChat:使用 puppet-puppeteer 或 puppet-wechat4u
  • ipad-WeChat:使用 puppet-padchat
  • ios-WeChat:使用 puppet-ioscat

创建机器人实例的基本代码:

import { Wechaty } from 'wechaty'

const bot = new Wechaty()
bot.on('scan', (qrCode, status) => console.log('扫码登录二维码:', qrCode))
bot.on('login', user => console.log(`用户 ${user} 已登录`))
bot.on('message', message => console.log(`收到消息: ${message}`))
bot.start()

主要功能类

  1. Contact - 封装微信联系人
  2. ContactSelf - 机器人自身账号(继承自 Contact)
  3. Room - 微信群组
  4. Message - 微信消息
  5. Friendship - 好友请求处理
  6. RoomInvitation - 群邀请处理

基础功能使用

机器人登录与状态管理

// 启动机器人
await bot.start()

// 检查登录状态
if (bot.logonoff()) {
  console.log('机器人已登录')
}

// 登出
await bot.logout()

// 停止机器人
await bot.stop()

发送消息

机器人可以发送多种类型的消息:

// 发送文本消息
await bot.say('Hello!')

// 发送联系人名片
const contact = await bot.Contact.find({name: '张三'})
await bot.say(contact)

// 发送文件
import { FileBox } from 'wechaty'
const fileBox = FileBox.fromUrl('https://example.com/image.jpg')
await bot.say(fileBox)

// 发送链接
const linkPayload = new UrlLink({
  title: 'Wechaty官网',
  url: 'https://wechaty.js.org'
})
await bot.say(linkPayload)

群组管理

创建和查找群组

// 创建群组
const contactList = [contact1, contact2, contact3]
const room = await Room.create(contactList, '新群组名称')

// 查找所有群组
const roomList = await Room.findAll()

// 按名称查找群组
const room = await Room.find({topic: '技术交流群'})

群组操作

// 发送群消息
await room.say('大家好!')

// 添加成员
await room.add(contact)

// 移除成员
await room.remove(contact)

// 退出群聊
await room.quit()

// 修改群名称
await room.topic('新群名')

// 获取群公告
const announcement = await room.announce()

// 获取群二维码
const qrCode = await room.qrCode()

联系人管理

查找联系人

// 查找所有联系人
const contactList = await bot.Contact.findAll()

// 按名称查找联系人
const contact = await bot.Contact.find({name: '李四'})

// 获取机器人自身账号
const self = bot.userSelf()

好友请求处理

bot.on('friendship', async friendship => {
  if (friendship.type() === Friendship.Type.Receive) {
    // 收到好友请求
    await friendship.accept()
  }
})

消息处理

接收消息

bot.on('message', async message => {
  // 过滤掉自己发送的消息
  if (message.self()) return
  
  // 回复文本消息
  if (message.type() === Message.Type.Text) {
    if (message.text().includes('你好')) {
      await message.say('你好啊!')
    }
  }
  
  // 处理图片消息
  if (message.type() === Message.Type.Image) {
    const fileBox = await message.toFileBox()
    // 处理图片...
  }
})

高级功能

使用插件

Wechaty 支持使用插件扩展功能:

function DingDongPlugin() {
  return function(bot) {
    bot.on('message', async message => {
      if (message.text() === 'ding') {
        await message.say('dong')
      }
    })
  }
}

bot.use(DingDongPlugin())

消息提及功能

在群聊中可以提及特定成员:

// 在群聊中提及某人
const contact = await bot.Contact.find({name: '王五'})
await room.say('请注意这个问题', contact)

// 使用模板语法提及多人
await room.say`请${contact1}${contact2}查看这个问题`

最佳实践

  1. 错误处理:始终处理可能出现的异常
  2. 消息去重:处理消息时注意避免重复处理
  3. 性能优化:避免在消息处理中进行耗时操作
  4. 状态管理:合理管理机器人状态,避免频繁登录登出
bot.on('error', error => {
  console.error('机器人出错:', error)
})

// 使用消息ID去重
const processedMessages = new Set()
bot.on('message', async message => {
  if (processedMessages.has(message.id)) return
  processedMessages.add(message.id)
  
  // 处理消息...
})

总结

Wechaty 提供了强大而灵活的微信机器人开发能力,通过本文的介绍,开发者可以快速掌握框架的核心功能和使用方法。无论是简单的自动回复机器人,还是复杂的群管理工具,Wechaty 都能提供良好的支持。