微信 AI 机器人-人工智能技术,为用户提供服务的自动化系统:具备自然语言处理能力、理解用户的文本或语音输入,并给出相应的回复或执行特定的任务的能力。
AI 机器人能够提供 24 小时的实时服务,无论何时何地,用户都能获得即时的信息反馈和帮助。节省了用户搜索信息的时间,提高了效率,并且还可以帮助管理社群,提高社群的活跃度。
一、需求背景&想法
- 实时获取快讯如:近期新闻、热点、某位🍠博主论坛、大盘信息
- 第一时间拿到最新资讯,进行分析,算法,判断,结合,实操
- 技术方案的实现:选型、框架、完善,前端也可以玩转自动化AI
- 技术:nodejs、wechaty、qrcode-termina、axios等
- 想法:通过axios请求拿取想要的数据层,进行自我算法分析,数据目录化,模块化、统一主入口,进行类型的拆分,分别处理不同的类型数据,以达到自己想要的数据。
- 将所爬取的信息分别写入本地,上限200超出删掉首元素,定期对比防止重复发送
- 可能存在封号问题:加间隔异步发送、检测频率、检测微信心跳、重启、敏感词等主要避违规问题优化,这个视自己情况。
- 代码精简与释放,监视器占用最高0.6,最低释放0
二、显示效果图
三、主要核心代码分享(不全仅供参考):
1) 主入口包含:bot机器人的注册与监听、类型处理函数、异步调用间隔
import { initBot } from './bot.mjs'
import { fetchBtcPrice } from './coin/ws.mjs'
import { checkAndCreateFile } from '../utils/fs.mjs'
import { fetchUsSharesNum } from './news/UsShares.mjs'
import { fetchNewsList } from './news/coinShot.mjs'
import { fetchRunRedbook } from './chat/redbook.mjs';
import { fetchUsNewsList } from './news/usNewsShot.mjs'
import { fetchTwitterAllUsers } from './chat/twitter.mjs';
import { colorMap, timeoutMap, JSONPathFile } from '../utils/constant.mjs'
import { isWithinTimeRange, isBtcWithinTimeRange } from '../utils/timeRule.mjs'
let updateTimeout;
for (const path of JSONPathFile) {
const asObject = path === './sentRemind.json';
await checkAndCreateFile(path, asObject);
}
// 初始化机器人
await initBot(checkForUpdates);
// 爬虫调用函数
async function checkForUpdates() {
if (updateTimeout) {
clearTimeout(updateTimeout);
}
try {
if (isBtcWithinTimeRange()) {
await fetchBtcPrice();
await fetchTwitterAllUsers();
}
if (isWithinTimeRange(1)) {
console.log(`${colorMap.success}开始发送币圈News!${colorMap.reset}`);
await fetchNewsList();
}
if (isWithinTimeRange(2)) {
console.log(`${colorMap.success}开始发送美股News!${colorMap.reset}`);
await fetchUsNewsList();
}
if (isWithinTimeRange(4)) {
console.log(`${colorMap.success}开始发送小红书Notes!${colorMap.reset}`);
await fetchRunRedbook();
}
if (isWithinTimeRange(3)) {
console.log(`${colorMap.success}开始发送美股指数!${colorMap.reset}`);
await fetchUsSharesNum();
}
} finally {
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 minutes
const pingWxTimeout = 35 * 60000
let 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;
四、科技改变生活(不全仅供参考):
- 本篇文章仅供技术学习分享,具体思路已在本文展现,核心代码不做分享
- 技术是前沿发展的,我们是需要一步步探索学习的,抓取你想要的信息,为自己想要的生活做出一分的小努力!
- 如有想法也可跟博主私聊分享想法,也可进群共享体验💐💐💐