欢迎点击领取 -《前端开发面试题进阶秘籍》:前端登顶之巅-最全面的前端知识点梳理总结
*分享一个使用比较久的🪜
大家好,我是SunnyRun
微信 AI 机器人-人工智能技术,为用户提供服务的自动化系统:具备自然语言处理能力、理解用户的文本或语音输入,并给出相应的回复或执行特定的任务的能力。
AI 机器人能够提供 24 小时的实时服务,无论何时何地,用户都能获得即时的信息反馈和帮助。节省了用户搜索信息的时间,提高了效率,并且还可以帮助管理社群,提高社群的活跃度。
一、需求背景&想法
- 实时获取快讯如:近期新闻、热点、某位博主论坛、大盘信息
- 第一时间拿到最新资讯,进行分析,算法,判断,结合,实操
- 技术方案的实现:选型、框架、完善,前端也可以玩转自动化AI
- 技术:nodejs、wechaty、qrcode-termina、axios等
- 想法:通过axios请求拿取想要的数据层,进行自我算法分析,数据目录化,模块化、统一主入口,进行类型的拆分,分别处理不同的类型数据,以达到自己想要的数据。
- 可能存在封号问题:加间隔异步发送、检测频率、检测微信心跳、重启、敏感词等主要避违规问题优化,这个视自己情况。
- 代码精简与释放,监视器占用最高0.6,最低释放0
二、显示效果图
三、主要核心代码分享(不全仅供参考):
1) 主入口包含:bot机器人的注册与监听、类型处理函数、异步调用间隔
import { initBot } from './bot.mjs'
import { fetchNewsList } from './news.mjs'
import { fetchBtcPrice } from './ws.mjs'
import { fetchTwitterAllUsers } from './twitter.mjs';
import { checkAndCreateFile } from '../utils/fs.mjs'
import { colorMap, timeoutMap } from '../utils/constant.mjs'
import { isWithinTimeRange, isBtcWithinTimeRange } from '../utils/utilsTool.mjs'let updateTimeout;// 初始化机器人
await initBot(checkForUpdates)await checkAndCreateFile()// 爬虫调用函数
async function checkForUpdates() {if (updateTimeout) {clearTimeout(updateTimeout);updateTimeout = null;}if (isBtcWithinTimeRange()) { // 自定义时间段await fetchBtcPrice() // ws建立实时获取await fetchTwitterAllUsers() // axios获取tw博主分享资源}if (!isWithinTimeRange()) {updateTimeout = setTimeout(() => checkForUpdates(), timeoutMap.newTimeout);return;};console.log(`${colorMap.success}开始发送最新信息!${colorMap.reset}`);await fetchNewsList(); // 获取第一手资讯新闻updateTimeout = setTimeout(() => checkForUpdates(), timeoutMap.newTimeout);
}
2) bot机器人注册&主进程的监听报错处理
import fs from 'fs';
import path from 'path';
import { WechatyBuilder } from 'wechaty';
import qrcodeTerminal from 'qrcode-terminal';
import { PuppetWechat4u } from 'wechaty-puppet-wechat4u';
import { colorMap, groupName } from '../utils/constant.mjs';
import { sleep, formatDateTime } from '../utils/utilsTool.mjs';const timeoutDuration = 15 * 60000; // 15 minutesconst pingWxTimeout = 35 * 60000let timeoutId, scanTimeout, sessionTimeout,isQrcodeRegistered = false, isLoggedIn = false;const flagLoginName = 'xxxxx';// 初始化机器人
const bot = WechatyBuilder.build({name: flagLoginName,puppet: new PuppetWechat4u()
});const initBot = (checkFetchFn) => {bot.on('scan', (qrcode) => {if (isLoggedIn || isQrcodeRegistered) return; // 如果已经登录或者已注册二维码,跳过扫码console.log('二维码链接:', `https://wechaty.js.org/qrcode/${encodeURIComponent(qrcode)}`);qrcodeTerminal.generate(qrcode, { small: true });isQrcodeRegistered = true;scanTimeout = setTimeout(async () => {console.log('五分钟内未扫码,结束进程。');await isCheckWechatOnline()await sleep(3000)process.exit(1);}, 5 * 60000);});// 监听登录事件bot.on('login', async user => {isLoggedIn = true;clearTimeout(scanTimeout);console.log(`${colorMap.error}用户 ${user} 已登录${colorMap.reset}`);await checkFetchFn();sessionTimeout = setTimeout(() => keepSessionAlive(), pingWxTimeout);});// 监听登出事件,重置登录状态bot.on('logout', user => {isLoggedIn = false;isQrcodeRegistered = false;console.log(`${colorMap.warn}用户 ${user} 已登出${colorMap.reset}`);});// 启动机器人bot.start().then(async () => {console.log(`${colorMap.warn}Wechaty 已启动${colorMap.reset}`);}).catch(e => console.error(`机器人启动失败:${e}`));
}// 查找群聊
const findGroup = async () => {// ....省略
}// 捕获主进程异常
process.on('uncaughtException', async (err) => {// 视自己的报错情况做特殊处理....await sleep(1800000) // 30分钟后结束进程process.exit(1);
});// 定义重启逻辑
function resetTimeout() {if (timeoutId) clearTimeout(timeoutId);const resetLogin = async () => {try {await bot.stop();console.log('Bot 已停止,准备重启...');isLoggedIn = false;await bot.start()} catch (e) {console.error('重启时发生错误:', e);}}resetLogin()timeoutId = setTimeout(() => resetLogin(), timeoutDuration);
}// 登录失效检测心跳停止
const isCheckWechatOnline = async () => {// 视自己情况而定
}// 保持wx心跳检测
const keepSessionAlive = async () => {// 视自己情况而定
};export { initBot, findGroup };export default bot;
四、科技改变生活(不全仅供参考):
- 本篇文章仅供技术学习分享,具体思路已在本文展现,核心代码不做分享
- 如有想法也可跟博主私聊分享具体经验,一起共进学习
- 技术是前沿发展的,我们是需要一步步探索学习的,抓取你想要的信息,为自己想要的生活做出一分的小努力!