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()
主要功能类
- Contact - 封装微信联系人
- ContactSelf - 机器人自身账号(继承自 Contact)
- Room - 微信群组
- Message - 微信消息
- Friendship - 好友请求处理
- 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}查看这个问题`
最佳实践
- 错误处理:始终处理可能出现的异常
- 消息去重:处理消息时注意避免重复处理
- 性能优化:避免在消息处理中进行耗时操作
- 状态管理:合理管理机器人状态,避免频繁登录登出
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 都能提供良好的支持。