2024保姆级微信 AI 机器人教程:如何打造私人和群聊助手

欢迎点击领取 -《前端开发面试题进阶秘籍》:前端登顶之巅-最全面的前端知识点梳理总结

*分享一个使用比较久的🪜
在这里插入图片描述
大家好,我是SunnyRun

微信 AI 机器人-人工智能技术,为用户提供服务的自动化系统:具备自然语言处理能力、理解用户的文本或语音输入,并给出相应的回复或执行特定的任务的能力。

AI 机器人能够提供 24 小时的实时服务,无论何时何地,用户都能获得即时的信息反馈和帮助。节省了用户搜索信息的时间,提高了效率,并且还可以帮助管理社群,提高社群的活跃度。

一、需求背景&想法
  1. 实时获取快讯如:近期新闻、热点、某位博主论坛、大盘信息
  2. 第一时间拿到最新资讯,进行分析,算法,判断,结合,实操
  3. 技术方案的实现:选型、框架、完善,前端也可以玩转自动化AI
  4. 技术:nodejs、wechaty、qrcode-termina、axios等
  5. 想法:通过axios请求拿取想要的数据层,进行自我算法分析,数据目录化,模块化、统一主入口,进行类型的拆分,分别处理不同的类型数据,以达到自己想要的数据。
  6. 可能存在封号问题:加间隔异步发送、检测频率、检测微信心跳、重启、敏感词等主要避违规问题优化,这个视自己情况。
  7. 代码精简与释放,监视器占用最高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;
四、科技改变生活(不全仅供参考):
  1. 本篇文章仅供技术学习分享,具体思路已在本文展现,核心代码不做分享
  2. 如有想法也可跟博主私聊分享具体经验,一起共进学习
  3. 技术是前沿发展的,我们是需要一步步探索学习的,抓取你想要的信息,为自己想要的生活做出一分的小努力!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/59252.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HyperWorks进阶教程:Altair及其软件介绍

1.1 Altair 简介 Allair是一家全球技术公司,在产品开发、高性能计算和数据智能领域提供软件和云解决方案自1985年成立以来一直致力于为企业的决策者和技术的执行者开发用于仿真分析、优化、信息可视化、流程自动化和云计算的高端技术。Altair 公司的总部位于美国密…

Halcon3D image_points_to_world_plane详解

分三个部分来聊聊这个算子 一,算子的参数介绍 二,算法的计算过程 三,举例实现 第一部分,算子的介绍 image_points_to_world_plane( : : CameraParam, WorldPose, Rows, Cols, Scale : X, Y) 参数介绍: CameraParam,:相机内参 WorldPose 世界坐标系,也叫物体坐标系(成…

使用GetX实现GetPage中间件

前言 GetX 中间件(Middleware)是 GetX 框架中的一种机制,用于在页面导航时对用户进行权限控制、数据预加载、页面访问条件设置等。通过使用中间件,可以有效地控制用户的访问流程,并在适当条件下引导用户到所需页面。 这…

[java][基础]HTTPTomcatServlet

1,Web概述 1.1 Web和JavaWeb的概念 Web是全球广域网,也称为万维网(www),能够通过浏览器访问的网站。 在我们日常的生活中,经常会使用浏览器去访问百度、京东、传智官网等这些网站,这些网站统称为Web网站。如下就是通…

CUDA环境安装终极指南——Linux(其它系统也一样)

文章目录 前言检查驱动配置nvcc安装cudnn完活 前言 不用看其它文章了,这篇文章保你不踩任何坑,安装方法简单快速 检查驱动 检查驱动是否安装,输入以下命令 nvidia-smi如果驱动已经安装,则可跳过此步,否则&#xff…

基于MATLAB的身份证号码识别系统

课题介绍 本课题为基于连通域分割和模板匹配的二代居民身份证号码识别系统,带有一个GUI人机交互界面。可以识别数十张身份证图片。 首先从身份证图像上获取0~9和X共十一个号码字符的样本图像作为后续识别的字符库样本,其次将待测身份证图像…

OpenCV—calcHist()函数

void calcHist( const Mat* images, int nimages,const int* channels, InputArray mask,SparseMat& hist, int dims,const int* histSize, const float** ranges,bool uniform true, bool accumulate false ); images 输入的数据指针,要具备相同的尺寸和数…

小米内外衣双区洗双洗烘洗衣机:洗出健康,还是洗出“噱头”

大家好,我是小悟。 在我们生活的这个科技飞速发展的时代,没有什么是一成不变的,就连洗衣机都在不断地推陈出新,生怕自己被时代的洪流甩在后面。这不,前不久,小米就又给我们带来了一款“划时代”的产品——…

MATLAB——矩阵操作

内容源于b站清风数学建模 数学建模清风老师《MATLAB教程新手入门篇》https://www.bilibili.com/video/BV1dN4y1Q7Kt/ 目录 1.MATLAB中的向量 1.1向量创建方法 1.2向量元素的引用 1.3向量元素修改和删除 2.MATLAB矩阵操作 2.1矩阵创建方法 2.2矩阵元素的引用 2.3矩阵…

C++STL——list

C教学总目录 list 1、list简介2、构造函数3、迭代器4、访问和容量函数5、修改类函数6、操作类函数 1、list简介 list是带头双向循环链表&#xff0c;也是模板类&#xff0c;使用时要指明类型&#xff0c;包含于头文件<list> 由于list是双向循环链表&#xff0c;在任意位置…

unocss 添加支持使用本地 svg 预设图标,并支持更改大小

安装 pnpm install iconify/utils 在配置文件 unocss.config.ts&#xff1a; presets > presetIcons 选项中 通过 FileSystemIconLoader 加载本地图标&#xff0c;并指定目录。 import presetWeapp from unocss-preset-weapp import { extractorAttributify, transformer…

转换流详解

在Java中&#xff0c;处理文本数据时&#xff0c;我们经常需要将字节流转换为字符流&#xff0c;或者将字符流转换为字节流。这种转换通常用于读取文本文件或将数据从网络传输到应用程序。Java提供了两种主要的转换流&#xff1a;InputStreamReader 和 OutputStreamWriter。 1…

广东网站设计提升你网站在搜索引擎中的排名

在当今网络盛行的时代&#xff0c;拥有一个设计优良的网站&#xff0c;对企业的在线发展至关重要。特别是对于广东地区的企业来说&#xff0c;网站设计不仅仅是美观的问题&#xff0c;更直接影响着搜索引擎中的排名。因此&#xff0c;精心策划和设计的网站&#xff0c;能够显著…

VisualStudio远程编译调试linux_c++程序(二)

前章讲述了gdb相关&#xff0c;这章主要讲述用VisualStudio调试编译linux_c程序 1&#xff1a;环境 win10 VisualStudio 2022 Community ubuntu22.04 2:安装 1>vs安装时&#xff0c;勾选 使用c进行linux 和嵌入式开发 (这里以vs2022为例) OR VS安装好了&#xff0c; 选择工…

Netty 常见组件介绍

Netty 常见组件介绍 上篇文章Netty入门程序echo 基本包含了Netty常见的组件&#xff0c;本文分别介绍各个组件 Bootstrap or ServerBootstrapEventLoopEventLoopGroupChannelPipelineChannelFuture or ChannelFutureChannelInitializerChannelHandler Bootstrap vs ServerBo…

el-talble selection行 初始默认勾选

导言 el-talble selection 行&#xff08;选择列&#xff09;用于显示复选框&#xff0c;让用户可以选择或取消选择某些表格行&#xff0c;常用于批量操作场景。 刚刚试了下&#xff0c;想加深印象记录一下当学习碎片。参考的是表格多选并根据每行值初始化选中状态&#xff08;…

HTML 块级元素和内联(行内)元素详解

在 HTML 中,元素根据它们在页面中的表现方式分为两类:块级元素 和 内联元素(行内元素)。了解块级元素和内联元素的特性与使用方法,是掌握HTML开发的重要基础。本文将深入探讨这两类元素的特点及其在实际开发中的应用。 文章目录 一、块级元素1.1 块级元素是什么?1.2 块级…

使用Docker构建和部署微服务

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 [TOC] Docker 是一个开源的容器化平台&#xff0c;可以帮助开发者轻松构建、打包和部署应用程序。本文将详细介绍如何使用 Dock…

conda下jupyterlab安装问题以及交互绘图问题记录

安装 1. 直接conda install jupyterlab就好&#xff0c;只要在base环境下安装就行&#xff0c;可以在任意环境下执行jupyter lab启动。 2. 打开jupyter lab后显示Could not determine jupyterlab build status without nodejs&#xff0c;可以执行conda install nodejs安装no…

springcloud整合sentinel,限流策略持久化到nacos,详细配置案例

目录 1.组件下载和启动 &#xff08;1&#xff09;sentinel-dashboard下载 &#xff08;2&#xff09;nacos下载 &#xff08;3&#xff09;jmeter下载 &#xff08;4&#xff09;redis下载&#xff08;与流控关系不大&#xff0c;与项目启动有关&#xff09; 2.本微服务项…