一个简单的开源机器人, 支持接口推送到个人微信和群聊。

3,512 阅读2分钟

先上项目地址 github.com/tans/push-b…

源代码仅百余行,各位开发大佬喜欢记得github上点个小星星支持一下

机器人使用场景

  1. 加机器人获得个人消息推送接口, 可用于推送服务器报警,交易提醒等实时关注事件.

  2. 邀请机器人入群,即可获得推送到该群的接口.

代码实现

机器人基于wechaty, 代码使用node.js的sdk.

bot = new Wechaty(
  puppet: "wechaty-puppet-service"
  puppetOptions:
    token: process.env.WECHATY_TOEKN
)

机器人核心代码很简单

  1. 加好友立即生成回复推送地址
  2. 入群自动回复群推送地址
bot.on "friendship", (friendship) ->
    # 自动通过好友, 并发送拉入群提醒
    contact = friendship.contact()
    await sendWebhook contact
  .on "room-join", (room, inviteeList, inviter) ->
    for invitee in inviteeList
      if invitee.self()
        await room.say "大家好,我是推送精灵, 通过接口可以控制我发送消息到群上."
        await sendRoomWebHook inviter, room
        
  .on "room-invite", (roomInvitation) ->
    await roomInvitation.accept()
    
  .on "message", (message) ->
    text = message.text()
    if text is "webhook" or text is "推送地址"
      await sendWebhook message.talker()

推送核心代码

  1. 利用fastify的rate-limit中间件, 根据token限制接口调用频率
  2. 根据机器人根据token找到私聊对象发送消息
fastify.get(
  "/send/:token"
,
  config:
    rateLimit:
      max: 10
      keyGenerator: (req) ->
        return req.params.token
,
  (request, reply) ->
    { msg } = request.query
    { token } = request.params
    user = await UserDB.findOne token: token
    return status: false, msg: "token not exists" unless user

    contact = bot.Contact.load user.contactid
    await contact.say msg
    return
      status: true
)

机器人目前是免费开放使用, 由于只对开发者开放, 一般是用作报警或者关键信息实时提醒, 相信大家不会用来干些坏事吧.

感谢wechaty, 把机器人的开发封装如此简单, 机器人是云托管, 无需电脑挂机,企业微信目前还是很稳定, 加好友和消息发送都几乎没有限制, 只要大家合规使用机器人还是很安全.

个人微信扫码机器人体验
如果有其他使用场景或者改进想法,欢迎和我交流,支持定制开发.WechatIMG1.jpegimage.png