V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
yanxiyangisme
V2EX  ›  微信

nodejs 探索人类本质-实现微信群聊管理,公众号文章链接转发复读机

  •  1
     
  •   yanxiyangisme · 2020-05-24 11:22:23 +08:00 · 1508 次点击
    这是一个创建于 1651 天前的主题,其中的信息可能已经有所发展或是发生改变。

    用 wxext 工具快速生成一个微信复读机功能

    安装工具

    npm i wxext -g

    初始化 demo

    wxext init

    可复读文字、图片、动态表情、文章链接、小程序,群成员变化通知等

    采用 e 小天 的 nodejs 插件

    几行代码就可以实现复读机功能

    还可以进群群聊管理

    模块源码

    module.exports = {
        OnReq: function (obj, callback) {
            //30 秒内执行 callback 返回是(传入数据)否(传入空)拦截,否则请求返回超时
            //避免超时先回调 callback(),再继续处理
            //OnReq 事件需要在 package.json 中定义 OnReq 字段才会生效
            //如不需要拦截请求消息,需删除 package.json 中的 OnReq 字段
            console.log('收到请求事件', obj)
            if (obj.isLocal) return callback()//如果是本地请求,不拦截
            callback({ msg: '不允许外网访问' })//外网访问拦截
        }
        , OnRes: async function (obj) {
            console.log('收到响应事件', obj)
            if (!obj.data) return console.log('不是消息')
            if (obj.data.fromid == obj.myid) return console.log('收到自己的消息')
            //如果是群聊---只复读这个群的
            if (obj.data.memid && obj.data.fromid != '24218554582@chatroom')
                return console.log('避免打扰其他群的不复读')
            //探索人类的本质---复读机的实现
            let result = await FuDuJi(obj)
            console.log('复读结果', result)
        }
        , OnStart: function () {
            //插件启动
        }
    }
    
    async function FuDuJi(obj) {
        //如果是文本消息,则回复文本
        if (obj.type == 1)
            return await Send({ method: 'sendText', wxid: obj.data.fromid, msg: obj.data.msg })
        //如果是图片消息,则回复图片
        //图片 type=3,但是这里没有图片路径,用 xml 资源事件来实现
        if (obj.type == 708)
            return await Send({ method: 'sendImage', wxid: obj.data.fromid, img: obj.data.path, imgType: 'file' })
        //如果是动态表情,则回复动态表情
        if (obj.type == 47)
            return await Send({ method: 'sendEmojiForward', wxid: obj.data.fromid, xml: obj.data.msg })
        //如果是小程序、文章链接,则回复小程序、文章链接
        if (obj.type == 49)
            return await Send({ method: 'sendAppmsgForward', wxid: obj.data.fromid, xml: obj.data.msg })
        //有人加群,加群 type=702 但是没有邀请人 id,用群成员信息更新来实现
        if (obj.type == 701) {
            for (let user of obj.data.member) {
                if (user.new) {
                    //这是新用户
                    return await Send({ method: 'sendText', wxid: obj.data.fromid, msg: '又增加了新伙伴' })
                }
            }
        }
        //有人退群
        if (obj.type == 703)
            return await Send({ method: 'sendText', wxid: obj.data.fromid, msg: '小伙伴离开了我们' })
    
    }
    

    详细流程可以查看 开发文档

    1 条回复    2020-05-25 21:00:17 +08:00
    yanxiyangisme
        1
    yanxiyangisme  
    OP
       2020-05-25 21:00:17 +08:00
    [新文件]回复关键字加群插件
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2664 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 05:12 · PVG 13:12 · LAX 21:12 · JFK 00:12
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.