sun2ot / wechat-bot-padlocal

Personal wechat robot based on node.js and wechaty.基于Node.js和wechaty的个人微信机器人。

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Powered by Wechaty Wechaty Contributor Program

如果您是在gitee看到这个repo,README.md中的图片看不了是因为甜蜜的gitee不支持外链图片。可前往github仓库查看。

Please note that

有问题请提交issue,我会及时回复的。

如果有使用上的问题,见wiki


一、关于iPad协议token的问题

  1. 🚨目前web协议的wechaty通常情况下已经无法使用(可自行百度网页版微信登陆尝试,能登上就可以用)
  2. 基于UOS操作系统修改请求头的方式登录网页微信https://wx.qq.com/的手段已经失效(腾讯已经给UOS上架全新的微信桌面端。。。)
  3. 可通过http://pad-local.com/获取pad-local协议。新人可免费使用7天,之后是200元一个月。。。
  4. 可通过成为Wechaty Contributor的方式,获取长达>=1年的免费token,见《如何向wechaty投稿blog获取免费token【保姆级教程】》

教程撰写不易,如果对您有帮助还请动动小手点个赞:bulb:

二、功能包括:

2.1 私聊消息处理:关键词回复,包括

image.png

  • 在线实时数据获取服务由API服务商提供

    • 毒鸡汤

      IMG_20220115_210015.jpg

    • 神回复

      image.png

    • 每日英语

      IMG_20220115_205958.jpg

    • 全网热点

      image.png

    • 城市天气

      IMG_20220115_210107.jpg

    • 客服

      image.png

  • 文本处理功能由本地编写算法处理

    • 英文字符串转大/小写

      image.png

      image.png

    • rgb<=>hex

      image.png

      image.png

2.2 群管理

  • 自动拉人入群
    • 通过私聊的快捷指令
  • 快捷指令踢人 踢@用户名可快速踢出群聊
    image.png
  • 检测群内非法url@提醒对方 image.png

2.3 自动处理好友请求

  • 自动通过好友请求
  • 可限制通过填写指定验证消息的好友
    • 避免陌生人添加好友

2.4 智能对话(接入微信对话开放平台)

  • 未被关键词捕获的消息将由**训练好的 AI **智能回复

2.5 设置定时任务(可循环、可单次)

  • 定时发送群消息

    • 登录时创建任务
    • 暂不支持指令设置任务,只可通过修改源码
  • 定时给个人发送消息

    image.png

    2022年1月14日4点0分0秒向备注为樊庆元的联系人发送“我刚学完,早安”

  • 群发功能(可适用于多种节日)

    greeting.png

    加上备注作为称谓,就不会被看出是群发的啦~:sparkles:诚意MAX:sparkles:

  • 定时消息销毁

    cancel

    定时任务设置成功后会返回任务id,凭此可销毁任务

  • ✨休息提醒

    rest

    在机器人正常运行时,每天上午9点启动,晚上7关闭(自动)。每隔半小时会提醒master休息一下,近视眼福音有木有:tada:

2.6 密码簿

该功能可用于记录常用的冗长文本,例如身份证号、银行卡号、购物时的好评模板等等。

  • 通过指令map key value可记录标签为key,内容为value的密码(在password目录下生成文件)

    image.png

  • 通过指令get key可以获取标签为key的密码

    image.png

  • 文件加密

    • 文件名通过md5算法比对

    • 文件内容通过aes-128-cbc算法加密

      image.png

      image.png

2.7 屏蔽指定联系人

  • 可通过屏蔽/解除屏蔽 联系人备注的方式,在加载于内存中的屏蔽列表中进行增加/删除联系人【机器人重启后失效】

    屏蔽

2.8 监听群成员加入/退出

  • 加入群聊,机器人会在群聊内公布加入者和邀请人的名称 入群

  • 退出群聊,机器人会向机器人master发送消息,说明何人退出了何群 退群

2.9 图床

  • 向机器人发送图片时,将触发图床功能,由机器人接收图片后将其上传至图床服务器 图床 图片可在浏览器进行访问,也可以插入markdown文档

2.10 ✨✨✨翻译

  • 机器人已介入百度翻译平台,自行注册开发者并认证,可以获得每月200万字符量翻译,QPS能达到10。 翻译

三、目录结构

  • config/文件夹存放公共配置
  • imgs/存放相关图片
  • password/ 存放密码簿生成文件
  • listeners/存放机器人初始化后一系列事件处理(分模块)
    • on-friendship.js 处理好友请求
    • on-login.js 处理登录
    • on-message.js 处理用户消息、群消息
    • on-scan.js 处理登录二维码
    • on-room-join/leave 处理用户加入/退出群聊
  • schedule/ 对定时任务node-schedule库进行了封装
  • superagent/ 存放所有的数据请求、接口封装都在此
  • utils/ 公用方法的封装
  • bot.js 机器人实例文件
  • start.js 入口文件

四、clone后请按照如下操作修改

需修改config配置,将里面的配置改为自己的。打开config/目录并新建index.js 文件, 文件内容如下:

/*
 * @author Hilbert Yi
 * @digst:  全局配置config
 * @time: 2022-01-03 12:36
 */
const ignoreFile = require('./ignore.json');
module.exports = {
  SERVER: "", //服务器IP/域名

  PUPPET_TOKEN: "", // pad-local

  TXAPI_TOKEN: "", // 天行数据

  JUHEAPI_TOKEN: "", // 聚合数据

  WXAI_TOKEN: "", // 微信对话开放平台

  BAIDU_APPID: "",

  BAIDU_KEY: "",

  IGNORE: ignoreFile, //json文件:不需机器人回复的用户,填写用户备注,非昵称

  WEBROOM: ["test", "test2"], //要管理的群名称

  MYSELF: "mnb", //大号的备注,防止其他人冒充

  BOTNAME: "gjb", // 机器人的昵称

  PROVINCE: [
    "北京",
    "湖北",
    "广东",
    "浙江",
    "河南",
    "湖南",
    "重庆",
    "安徽",
    "四川",
    "山东",
    "吉林",
    "福建",
    "江西",
    "江苏",
    "上海",
    "广西",
    "海南",
    "陕西",
    "河北",
    "黑龙江",
    "辽宁",
    "云南",
    "天津",
    "山西",
    "甘肃",
    "内蒙古",
    "**",
    "澳门",
    "香港",
    "贵州",
    "西藏",
    "青海",
    "**",
    "宁夏",
  ],

  KEYWORDS: function () {
    return `回复序号或关键字获取对应服务
1.回复群名进入群聊:${this.WEBROOM}
2.毒鸡汤
3.神回复
4.每日英语
5.全网热点
6.全国肺炎
7.客服
------------------
翻译(例:翻译 [en] [zh] text)
转小写(例:转小写 YZHYYDS)
转大写(例:转大写 yzhyyds)
转rgb(例:转rgb #cccccc)
转16进制(例:转16进制 rgb(255,255,255))
城市名 天气(例:武汉 天气)
省份/自治区 肺炎(例:湖北 肺炎)
------------------\n`;
  },

  VIP: function() {
    return `密码簿\n(例:map test 123456\nget test)\n` + 
           `定时消息\n(例:定时 M.D.H.m.s 目标 信息)\n` +
           `群发消息\n(例:群发 M.D.H.m.s 目标1[,目标2] 信息)\n` +
           `销毁定时\n(例:销毁 id)\n` +
           `刷新联系人数据(!WARNING!)\n` +
           `[解除]屏蔽\n(例:屏蔽 张三(->备注))` +
           `持久化屏蔽\n(更新本地屏蔽联系人列表)`
  }
};

token/key获取操作如下:

接口申请之后请打开config/index.js,将顶部PUPPET_TOKENTXAPI_TOKENJUHEAPI_TOKENWXAI_TOKEN改为自己的即可。

其他免费接口可随意申请,也可以自行更换API服务商。

五、运行

记得安装依赖

npm install
npm start start.js

非常不建议使用cnpm,请自行百度nrm使用方法或者手动修改国内镜像。当然,执意要用的话请务必这么使用: cnpm i --by=npm

如果部署于服务器,可使用PM2进行管理

[root@xx ~]# pm2 start start.js

启动后,终端会出现一个二维码,扫码登录即可。

控制台也许会打印多个二维码,扫一个耐心等待即可。如果确实没登上去再后面出来的。

退出登录后再重新登录时,你的手机会自动弹出iPad的登录请求,点击后耐心等待即可。如果确实没登上去再扫控制台的二维码登录。

若控制台打印的二维码是支离破碎的,无法扫描,请更换终端。

我在本机用的是Windows Terminal,ECS服务器用tabby连接。


六、更新日志

2022-04-02

  • 上线翻译功能:globe_with_meridians:

2022-03-31

  • 优化AI签名的获取,加入轮询机制
  • 域名备案完成:ok_hand:

2022-03-29

  • 支持将内存中修改过后的屏蔽联系人列表持久化到本地json文件

2022-03-08

  • 🎨优化控制台日志打印格式,带时间戳
  • 修复了离线消息的处理问题(从离线状态恢复登录时,仅响应1分钟内收到的消息事件)

2022-03-04

  • ✨休息提醒功能上线

2022-03-01

  • ✨定时消息v2.1上线,支持创建/销毁定时任务
  • 🎉密码簿现支持自定义密钥与初始化向量(16位utf8字符。需自行保存,丢失后文件将无法解密。)!

2022-02-24

  • 💡现支持在线添加/删除屏蔽联系人列表(加载于内存,机器人重启后失效!如需持久化,请手动修改config.js

2022-02-07

  • 🎉🎉🎉图床功能上线

2022-02-05

  • 联系人刷新(:rotating_light:极度慎用!!!有可能触发微信安全警告)

2022-01-29

  • 添加节日祝福功能

2022-01-28

  • bot实例重构,解决循环依赖的问题
  • 可直接npn i安装依赖,彻底解决依赖版本的困扰

2022-01-25

  • 接入网易疫情数据接口

2022-01-23

  • 接入新浪疫情数据接口

2022-01-20

  • 接入聚合数据API
  • 天气信息

2022-01-18

  • 部署于阿里云ECS服务器环境

2022-01-17

  • 投稿blog,成为Wechaty Contributors

2022-01-15

  • 每日英语

2022-01-12

  • 毒鸡汤

2022-01-11

  • 接入天行数据API
  • 神回复

2022-01-03

  • 更改puppet供应商,由wechaty(web协议)切换为padlocal(iPad协议)

2022-01-02

  • hex转rgb
  • rgb转hex

2022-01-01

  • 英文字符串转大写
  • 英文字符串转小写

2022-12-28

  • 扫码登录

2021-11-23

  • 代码热更新部署

About

Personal wechat robot based on node.js and wechaty.基于Node.js和wechaty的个人微信机器人。

License:MIT License


Languages

Language:JavaScript 99.9%Language:Dockerfile 0.1%