300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > 女朋友竟然让我10秒内必须回复她的微信消息 看我如何用nodejs实现微信信息1s内自动回复

女朋友竟然让我10秒内必须回复她的微信消息 看我如何用nodejs实现微信信息1s内自动回复

时间:2022-02-08 08:47:49

相关推荐

女朋友竟然让我10秒内必须回复她的微信消息 看我如何用nodejs实现微信信息1s内自动回复

大家好,我是来富。

前几天刚听说小舅子谈恋爱了,这不才一个月就听说两人因为小舅子没在10秒内回复女朋友微信信息导致吵架,正在闹分手,我当时听到信息都惊呆了! 什么 ,10秒?怕不是在逗我,作为程序员的我们怎么能接受这种无理要求?怎么样也得在1秒内回复女朋友信息吧,哈哈。

下面开始本文正题

本文主要讲解如何利用e小天工具来实现微信群信息接管,如何利用工具解放双手,以及如何使用nodejs与微信建立连接,让我们熟悉的nodejs发挥它本身的工具效果。

先看效果再讲内容

什么是e小天?

pc微信小助手,软件本地运行,不联网,安全可靠

本机进程管理工具,方便管理本机微信

旨在提高生产生活效率,禁止骚扰营销

这是e小天官网的介绍,针对电脑端微信辅助工具,可以通过任意程序与e小天建立websocket连接,发送相应指令即可操作微信。

访问网址/wxext/wxext下方即可看到下载地址。点击下载安装之后运行(如下图)

有两种方式选择,一种是不以服务形式运行,一种是以服务形式运行,以服务形式运行可以做到软件退出系统照常运行,强烈建议配置方式二(启动服务 + 开机自启)

当运行状态显示:程序运行中时,说明e小天已经启动成功。

点击下面“管理面板”按钮,进入管理面板首页。首次运行需要一点时间,请耐心等待。

进入后会显示“个人中心”界面,点击“页面展示”按钮,进行微信授权连接

请确保你的电脑上已经登录了微信,点击“连接”按钮,将微信与e小天进行连接,提示连接成功后,页面不会显示微信号、昵称、授权到期等信息(目测是系统的bug),此时刷新页面就可以看到页面上有显示您的微信号、昵称及相应的授权信息。首次连接用户需要点击去授权按钮,获得免费的开发者体验授权,目前来说e小天作者做了限制,普通用户一次只能获得一天的授权,贡献插件可以获得500积分换取一个永久额度,或者有钱的话直接500购买一个永久额度(别走,别走,兄弟,看到只能体验一天就要划走了?肯定是白嫖香啊,关注我,下期带你用白嫖

针对首次连接的用户授权路径:

个人中心 -> 授权中心 -> 临时授权 -> 授权

当在个人中心看到有到期时间时说明已成功授权。

接下来还有最后一步,添加应用

1、在应用中心搜索www

2、输入密钥:123按回车添加应用

3、到个人中心启动应用

如下图所示

添加成功之后就可以在个人中心首页看到有个应用的图标,如下图所示:

我这里是已经启动过了,默认是未启用的,需要点击启动。

自此,e小天的配置全部完成。

大家可以点击“个人中心->开发文档”连接更多关于e小天的内容,包括指令及配置,文档中有对e小天的所有功能进行讲解,如何连接。大家可以自行去查找api。

说明:如果有遇到需要登录的提示,大家就正常输入账号密码注册登录即可!

利用nodejs连接e小天

e小天是通过websocket进行连接通信的,所以需要依赖websocket包,这里采用的是ws npm包,具体项目目录如下截图

nodejs项目下载链接(我用阿里云盘分享了「robotWx」,你可以不限速下载复制这段内容打开「阿里云盘」App 即可获取链接:/s/CUNGKP6vV1b)

首先下载项目之后需要在config.js中配置相关信息,(前提:e小天配置成功,功能测试可以正常运行!

配置文件config.js

//config.jsconst WxHandler = require('./wx/dao/wxHandler');//默认提示信息const groupSuggestMsg1=`干啥嘞,大帅哥!`;module.exports = {wxRobot:{/*** * 如果需要使用他人微信,需要先获取wxid,修改robotWxId,* 机器人的微信id,在微信中可以直接看到*/robotWxId:" TODO 您的微信id",/*** 自定义群聊配置信息* groupId 群id,通过e小天(管理面板->功能测试)可以获取群列表,找到指定群的编号即可* id 自定义自增编号,方便其他系统发送信息至指定群聊(这里主要是为了后面与puppeteer结合使用!)* groupNickName 机器人在当前群的昵称,用于 用户直接@* autoAnswer 是否自动回复@本人的,默认为true即可,针对某些场景仅仅只是发送通知信息,不对用户信息进行回复的,可以设置成false* groupSuggestMsg autoAnswer为true时并且有其他群成员@了你 默认返回的提示信息* getResultFun @并回复了指定内容,执行操作函数*/groupList:[{groupId:" TODO 微信群的id",id:0,groupNickName:" TODO 本人微信群昵称",groupName:" TODO 微信群名称(方便记忆)",autoAnswer:true,groupSuggestMsg:groupSuggestMsg1,/**** @param WebSocketClient ws客户端信息* @param logger* @param acceptMsg 接受到的微信信息* @returns {Promise<*>}*/getResultFun:async function(WebSocketClient,logger,acceptMsg){return new WxHandler(WebSocketClient,logger,acceptMsg,this).init();}}]}}

config.js主要是针对全局的一些配置,及多个微信群的逻辑区分。

入口文件index.js

入口文件index.js是项目的启动文件,包含了websocket连接及对接收到的群信息进行逻辑处理。

重点:打开浏览器访问 http://127.0.0.1:8203/ext/www/key.ini,看是否能正常获取到key值,如果有数据返回,则表示e小天配置正确,否则,请按照上面教程,正确配置e小天!

const WebSocket = require("ws");const axios = require("axios");const {wxRobot:{robotWxId,groupList}} = require("../config");const {log4js} = require("../log4");(async () => {const log4 = await log4js.getLogger("wxLog");//配置好e小天之后测试一下 http://127.0.0.1:8203/ext/www/key.ini 能不能拿到name 与key值const {data} = await axios.get("http://127.0.0.1:8203/ext/www/key.ini");const {name, key} = data;const WebSocketClient = new WebSocket(`ws://127.0.0.1:8202/wx?name=${name}&key=${key}`);WebSocketClient.on("open", function () {log4.info("与e小天服务端连接成功");//保持websocket连接,不写应该也不会自动断开setInterval(()=>{WebSocketClient.send("")},1000)})WebSocketClient.on("error", function (err) {log4.error("与e小天服务端连接错误: ", err);});WebSocketClient.on("close", function () {log4.warn("与e小天服务端连接断开");});WebSocketClient.on("message", async function (data) {// log4.info("接收到的信息:" + data)data = JSON.parse(data);if (["newmsg", "xmlinfo"].indexOf(data.method) > -1) {let sendMsg = "";console.log(data);/*** fromid 来自于谁发送的信息,微信群里 自己发送的信息fromid就是自己的微信id,如果是其他群成员fromid则是群的id* memreMark 成员配置信息* memid 发送信息用户微信id* msg 微信内容* id* toid 接受信息用户的微信id* pid 与e小天连接的ID,单个微信可不指定,多个微信登录需要指定pid* source 带xml格式的信息格式* memname 发送信息的用户微信名称*/const {fromid, memreMark, memid, msg, id, toid, pid,source,memname} = data.data;//只监听指定群聊信息 判断是否是指定群聊的信息const targetGroup = groupList.filter(item=>item.groupId === fromid);if (targetGroup.length > 0) {//是否为指定群聊if (data.method === "newmsg") {const {groupNickName,groupName,groupId,autoAnswer} = targetGroup[0];const reg = /(?<=atuserlist).*?(?=atuserlist)/; //正则匹配是否有@机器人的信息const _data = source.match(reg);/*** 1、微信信息中是否有@我的* 2、对于用户仅仅只复制之前@过的微信信息,无法通过正则匹配,需要根据用户昵称来判断是@本人的内容。* 3、针对配置了autoAnswer字段的群聊才做回复。*/if(((Array.isArray(_data) && _data[0] && _data[0].indexOf(robotWxId) > -1) || msg.indexOf(`@${groupNickName}`) > -1) && autoAnswer) {//将@本人的 几个文字替换掉,找到真正发送内容const realMsg = msg.replace(`@${groupNickName}`, "").trim(); //发送的实际内容sendMsg = await targetGroup[0].getResultFun(WebSocketClient,log4,realMsg); //接受发送的真实内容log4.warn(`(${groupName})回复内容:(${sendMsg.replace(/\n/g,"| ")}),回复人(${memname}),群备注昵称(${memreMark})`);WebSocketClient.send(JSON.stringify({"method": "sendText","wxid": fromid,"msg": sendMsg,"atid": memid,"pid": pid}))}}} else {//不可在pc端发送,只能在移动端才会触发log4.info("非监听群信息,不处理") //自己发送的信息method 为sendText_recv}}});})()

逻辑处理文件wxHandler.js

此份文件非必须,多个微信群建议创建多个逻辑文件。

class WxHandler {constructor(WebSocketClient,logger, acceptMsg, groupObj) {this.WebSocketClient = WebSocketClient;this.logger = logger;this.acceptMsg = acceptMsg;this.groupObj = groupObj;//当前群组的配置信息}async init() {//初始化执行方法let sendMsg = this.groupObj.groupSuggestMsg; //默认发送信息提示信息/*** try catch(示例代码,可不添加try/catch)* 为了捕获整体的错误,下面只是一个简单的例子,具体的话需要根据自己的业务场景来制定指定描述,进而实现不同的业务*/try {switch (this.acceptMsg) {case "亲一个":sendMsg = "(*  ̄3)(ε ̄ *)"break;case "亲两个":sendMsg = "(*  ̄3)(ε ̄ *)(*  ̄3)(ε ̄ *)"break;default:sendMsg = "what a fuck!"break;}} catch (err) {this.logger.error(err);sendMsg = "服务开小差了,请重试!"}return sendMsg;}}module.exports = WxHandler;

核心文件就只有上面三个,其他都是log4js的配置及相关e小天口令的封装配置。

有了这个工具,小舅子再也不会跟女朋友吵架了!!!

nodejs只是工具,这里只是做一个简单的例子,大家可以根据自己的能力做出更加符合自己或公司业务的功能,减轻劳动力。

下一期,带你们利用puppeteer白嫖e小天临时授权,用魔法战胜魔法。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。