title: “基于wechaty的定时消息推送(可以哄女朋友)、智能聊天和私人助理”
author: jasonlovesharon
email: 54027901@163.com
tags:
- nodejs
- wechaty
- wechaty-puppet-padplus
前言
- 自从2017年微信web端API限制以后,itchat等一大批bot歇菜了,一直都在找一款合适的替品
- 目前来看,大部分都是针对windows微信客户端,基于HOOK的dll注入实现对微信的操控,有一定的封号风险,只能用固定的版本,部署在linux服务器端比较困难,意味着只能一直开着电- -wechaty,支持IPAD,MAC等多种协议,不用去调用WEB网页API,并且可以布署在服务器,满足我所有需求。项目地址
- 看完官方文档后(token官方介绍), 发现需要申请Token,并且python版本的Token是要付费的,但没有学过typescript,有点想放弃,浏览了一下ding-dong-bot的Example,似乎可以看懂,那就边学习边摸索吧。(ps:后来偶然见发现了另一篇可以使用将token转变一下实现python版wechaty,但此时已经基本用TS写完了,如果想用Python等其他语言可以参考官方文档。)
具备功能
1. 关键词触发功能
1.1 关键词"介绍一下自己"、 “自我介绍一下”、 "你是谁"触发自我介绍
1.2 地名+天气 触发天气查询
2. 智能聊天功能
2.1群外直接聊天
2.2群内成员皆有聊天权限“@bot” 聊天
2.3不会回复 @其他群成员 的消息
实现过程
Talk is cheap,show your code
1. 主程序
import {
Wechaty, Message, UrlLink,log,} from 'wechaty'
import {
PuppetPadplus } from 'wechaty-puppet-padplus'
import {
EventLogger, QRCodeTerminal } from 'wechaty-plugin-contrib'
import {
WechatyWeixinOpenAI, } from 'wechaty-weixin-openai'
import {
setSchedule, } from './schedule/index'
import {
getDay, formatDate,} from './utils/index'
import {
getOne, getTXweather, getSweetWord,} from './superagent/index'
// 创建微信每日说定时任务
async function initDay() {
console.log(`已经设定每日说任务`);
setSchedule('0 40 0 * * *', async () => {
console.log('你的贴心小助理开始工作啦!')
let logMsg
let contact =
(await bot.Contact.find({
name: 'Jason' })) ||
(await bot.Contact.find({
alias: 'boss' })) // 获取你要发送的联系人
let one = await getOne() //获取每日一句
let weather = await getTXweather() //获取天气信息
let today = await formatDate(new Date()) //获取今天的日期
let memorialDay = getDay('2009/08/07') //获取纪念日天数
let sweetWord = await getSweetWord()
let str = `${
today}\n我们相爱的第${
memorialDay}天\n\n元气满满的一天开始啦,要开心噢^_^\n\n今日天气\n${
weather.weatherTips}\n${
weather.todayWeather
}\n每日一句:<br>${
one}<br><br>每日土味情话:<br>${
sweetWord}<br><br>————————最爱你的我`
try {
logMsg = str
await delay(2000)
await contact.say(str) // 发送消息
} catch (e) {
logMsg = e.message
}
console.log(logMsg)
})
}
const padplusToken = '你自己的TOKEN'
const puppet = new PuppetPadplus({
token: padplusToken,
})
const bot = new Wechaty({
name: 'jason-assistant',
puppet