微信每日说,每日自动发送微信消息给你心爱的人node
在掘金看到了一篇《用Node + EJS写一个爬虫脚本天天定时女友发一封暖心邮件》后,
在评论区偶然看到一位读者说可不能够用微信实现一下。而后最近恰好在作微信机器人的小项目,那就把这个定时任务放到微信上去作吧,说干就干,撸了一下午终于撸出来了。git
github:https://github.com/gengchen528/wechatBotgithub
node-schedule非你莫属了,
能够定时每月、每一个礼拜、天天具体何时执行什么任务web
因为是微信定时发送消息,较邮件来讲,微信没法把图片和文字放在同一消息框中,因此美观度来讲可能没有邮件好,不过文字进行排版后仍是能够的,因为时间仓促,因此文字比较少,后续会继续增长内容;npm
index.jsapi
关于微信的登陆,定时任务的建立,发送信息的获取都在这个文件里微信
/** * WechatBot * - https://github.com/gengchen528/wechatBot */ const {Wechaty,Friendship} = require('wechaty') const schedule = require('./schedule/index') const config = require('./config/index') const untils = require('./untils/index') const superagent = require('./superagent/index') const {FileBox} = require('file-box') //文件读取模块 // 二维码生成 function onScan (qrcode, status) { require('qrcode-terminal').generate(qrcode) // 在console端显示二维码 const qrcodeImageUrl = [ 'https://api.qrserver.com/v1/create-qr-code/?data=', encodeURIComponent(qrcode), ].join('') console.log(qrcodeImageUrl) } // 登陆 async function onLogin (user) { console.log(`贴心小助理${user}登陆了`) // 登录后建立定时任务 schedule.setSchedule(config.SENDDATE,()=>{ console.log('你的贴心小助理开始工做啦!') main() }) } //登出 function onLogout(user) { console.log(`${user} 登出`) } // 监听对话 根据关键词自动加群 async function onMessage (msg) { const contact = msg.from() // 发消息人 const content = msg.text() //消息内容 const room = msg.room() //是不是群消息 const roomCodeUrl = FileBox.fromUrl(config.ROOMCODEURL) //来自url的文件 const roomCodeLocal = FileBox.fromFile(config.ROOMLOCALPATH) //添加本地文件 if (msg.self()) { return } if(room){ // 若是是群消息 const topic = await room.topic() console.log(`群名: ${topic} 发消息人: ${contact.name()} 内容: ${content}`) }else { // 若是非群消息 console.log(`发消息人: ${contact.name()} 消息内容: ${content}`) let addRoomReg = eval(config.ADDROOMWORD) let roomReg = eval(config.ROOMNAME) if(addRoomReg.test(content)&&!room){ let keyRoom = await this.Room.find({topic: roomReg}) if(keyRoom){ try{ await contact.say(roomCodeLocal||roomCodeUrl) await keyRoom.say('微信每日说:欢迎新朋友', contact) }catch (e) { console.error(e) } } }else { await contact.say('你好,不要轻易调戏我,我只会发群二维码,不会聊天的!') await contact.say('请回复暗号:加群 获取群二维码图片') } } } // 自动加好友功能 async function onFriendShip(friendship) { let logMsg try { logMsg = '添加好友' + friendship.contact().name() console.log(logMsg) switch (friendship.type()) { /** * * 1. New Friend Request * * when request is set, we can get verify message from `request.hello`, * and accept this request by `request.accept()` */ case Friendship.Type.Receive: let addFriendReg = eval(config.ADDFRIENDWORD) if (addFriendReg.test(friendship.hello())) { logMsg = '自动添加好友,由于验证信息中带关键字‘每日说’' await friendship.accept() } else { logMsg = '没有经过验证 ' + friendship.hello() } break /** * * 2. Friend Ship Confirmed * */ case Friendship.Type.Confirm: logMsg = 'friend ship confirmed with ' + friendship.contact().name() break } } catch (e) { logMsg = e.message } console.log(logMsg) } // 自动发消息功能 async function main() { let contact = await bot.Contact.find({name:config.NICKNAME}) || await bot.Contact.find({alias:config.NAME}) // 获取你要发送的联系人 let one = await superagent.getOne() //获取每日一句 let weather = await superagent.getWeather() //获取天气信息 let today = await untils.formatDate(new Date())//获取今天的日期 let memorialDay = untils.getDay(config.MEMORIAL_DAY)//获取记念日天数 let str = today + '<br>' + '今天是咱们在一块儿的第' + memorialDay + '天' + '<br><br>今日天气早知道<br><br>' + weather.weatherTips +'<br><br>' +weather.todayWeather+ '每日一句:<br><br>'+one+'<br><br>'+'------来自最爱你的我' await contact.say(str)//发送消息 } const bot = new Wechaty() bot.on('scan', onScan) bot.on('login', onLogin) bot.on('logout', onLogout) bot.on('message', onMessage) bot.on('friendship', onFriendShip) bot.start() .then(() => console.log('开始登录微信')) .catch(e => console.error(e))
superagent/index.jsasync
const superagent = require('../config/superagent') const config = require('../config/index') const cheerio = require('cheerio') async function getOne() { // 获取每日一句 let res = await superagent.req(config.ONE,'GET') let $ = cheerio.load(res.text) let todayOneList = $('#carousel-one .carousel-inner .item') let todayOne = $(todayOneList[0]).find('.fp-one-cita').text().replace(/(^\s*)|(\s*$)/g, "") return todayOne; } async function getWeather() { //获取墨迹天气 let url = config.MOJI_HOST+config.CITY+'/'+config.LOCATION let res = await superagent.req(url,'GET') let $ = cheerio.load(res.text) let weatherTips = $('.wea_tips em').text() const today = $('.forecast .days').first().find('li'); let todayInfo = { Day:$(today[0]).text().replace(/(^\s*)|(\s*$)/g, ""), WeatherText:$(today[1]).text().replace(/(^\s*)|(\s*$)/g, ""), Temp:$(today[2]).text().replace(/(^\s*)|(\s*$)/g, ""), Wind:$(today[3]).find('em').text().replace(/(^\s*)|(\s*$)/g, ""), WindLevel:$(today[3]).find('b').text().replace(/(^\s*)|(\s*$)/g, ""), PollutionLevel:$(today[4]).find('strong').text().replace(/(^\s*)|(\s*$)/g, "") } let obj = { weatherTips:weatherTips, todayWeather:todayInfo.Day + ':' + todayInfo.WeatherText + '<br>' + '温度:' + todayInfo.Temp + '<br>' + todayInfo.Wind + todayInfo.WindLevel + '<br>' + '空气:' + todayInfo.PollutionLevel + '<br>' } return obj } module.exports ={ getOne,getWeather }
因为须要安装chromium, 因此要先配置一下镜像,注意因为wechaty的限制,最好使用node10以上版本工具
npmpost
npm config set registry https://registry.npm.taobao.org npm config set disturl https://npm.taobao.org/dist npm config set puppeteer_download_host https://npm.taobao.org/mirrors
yarn
yarn config set registry https://registry.npm.taobao.org yarn config set disturl https://npm.taobao.org/dist yarn config set puppeteer_download_host https://npm.taobao.org/mirrors
而后进行项目安装
git clone git@github.com:gengchen528/wechatBot.git cd wechatBot npm install 或 cnpm install
参数配置
wechatBot/config/index.js
// 配置文件 module.exports ={ // 基础定时发送功能配置项(必填项) NAME:'A兔子',//备注姓名 NICKNAME:'嗯哼', //昵称 MEMORIAL_DAY:'2015/04/18', //你和收信者的记念日 CITY:'shanghai',//收信者所在城市 LOCATION:'pudong-new-district',//收信者所在区 (能够访问墨迹天气网站后,查询区的英文拼写) SENDDATE:'0 0 8 * * *',//定时发送时间 天天8点0分0秒发送,规则见 /schedule/index.js ONE:'http://wufazhuce.com/',////ONE的web版网站 MOJI_HOST:'https://tianqi.moji.com/weather/china/', //中国墨迹天气url //高级功能配置项(非必填项) AUTOADDFRIEND:false,//自动加好友功能 默认关闭 AUTOADDROOM:false,//自动拉群功能 默认关闭 AUTOREPLY:false,//自动聊天功能 默认关闭 AIBOTAPI:'http://www.tuling123.com/openapi/api',//图灵机器人API 注册地址http://www.turingapi.com/ APIKEY:'你的图灵机器人apikey',//图灵机器人apikey ROOMNAME:'/^你的群名/i', //群名(请只修改中文,不要删除符号,这是正则) ADDFRIENDWORD:'/你要触发的关键词/i',//自动加好友触发的关键词(请只修改中文,不要删除符号,这是正则) ADDROOMWORD:'/加群/',//自动发送群图片触发关键词(请只修改中文,不要删除符号,这是正则) ROOMCODEURL:'http://image.bloggeng.com/qun.png',//群二维码url连接(与本地群二维码路径选填一个) ROOMLOCALPATH:'./static/qun.png',//本地群二维码图片路径(与群url选填一个) }
开始运行
npm run start 而后掏出你的手机,最好使用小号,扫描控制台的二维码便可
由于给这个微信加了自动加好友和拉群功能,因此有兴趣的小伙伴能够加个人微信进行测试,记得在加好友的时候带上暗号:微信每日说
,加好友后发送加群
,会自动发送群的二维码;
注意 加好友请在验证中填写 微信每日说
才能够自动加好友
赶快亲自试一试吧,相信你会挖掘出更多好玩的功能
github:https://github.com/gengchen528/wechatBot
另外个人公众号已经接入微软小冰,关注后发语音会有小姐姐的声音陪你聊天,也能够和她文字聊天,有兴趣能够试试看,单身的欢迎来撩