微信接入ChatGPT,使用Node+ChatGPT+Wechaty做一个微信机器人

简介: 微信接入ChatGPT,使用Node+ChatGPT+Wechaty做一个微信机器人

前言

接上篇文章:站在巨人的肩膀上,用Node+ChatGPT模块实现一个接口_DieHunter1024的博客-CSDN博客


我将ChatGPT模块的使用介绍了一下,使用自己的session发送请求达到调用ChatGPT进行聊天的目的,这篇文章会结合Wechaty去实现一个微信机器人


在开始编码之前,我们先了解一下wechaty


Wechaty是一个支持接入微信的聊天机器人,只需6行代码即可实现一个机器人,其跨平台性,多编程语言支持,使其在众多开源的bot项目中大放光彩。


关于它的使用,官方给的文档已经非常详细了,这里就不做描述


准备工作

node环境(v16+)

wechaty

qrcode-terminal(在控制台显示二维码)

起步

首先使用pnpm/npm/yarn安装以上依赖


创建一个wechaty server

const { WechatyBuilder } = require("wechaty");
const wechaty = WechatyBuilder.build();
wechaty
  .on("scan", (c, status) => {
    // status: 2代表链接等待调用,3代表链接已打开,这个链接实际上是提供一个登录的二维码供扫描
    if (status===2) {
      console.log(c)
    }
  })
  .on("login", (user) => console.log(`用户 ${user} 登录成功`))
  .on("message", (message) => console.log(`收到消息: ${message}`));
wechaty.start();

注意:在使用wechaty时一定要在node v16+环境下运行,我的电脑是win7,不支node13+的,所以我使用强制使用高版本node的方式在win7中运行了node18,这样做的话会导致下面这个报错

1.png

这是由于高版本(14.6版本后才增加这个函数)的node取os.hostname()时找不到当前计算机的用户名


1.png

1.png

突然给电脑换系统又不太现实,所以我的快速的解决方式是增加以下代码(有其他补充,还请大佬指教)


Object.defineProperty(require("os"), "hostname", {
  value: () => {
    // 防止win7环境下,高版本node取不到os模块的hostname函数结果
    return "my-pc-host-name";
  },
});
const os = require("os");
console.log(os.hostname());

到这一步,我们还需要一个二维码的工具qrcode-terminal,将url转换为二维码,提供给手机微信扫描,代码如下:

Object.defineProperty(require("os"), "hostname", {
  value: () => {
    // 防止win7环境下,高版本node取不到os模块的hostname函数结果
    return "my-pc-host-name";
  },
});
const qrcode = require("qrcode-terminal");
const { WechatyBuilder } = require("wechaty");
const wechaty = WechatyBuilder.build();
wechaty
  .on("scan", (c, status) => {
    // status: 2代表等待,3代表扫码完成
    status === 2 && qrcode.generate(c, { small: true }, console.log);
  })
  .on("login", (user) => console.log(`用户 ${user} 登录成功`))
  .on("message", (message) => console.log(`收到消息: ${message}`));
wechaty.start();

效果:


确认登录

1.png1.png


发送消息


1.png


接收消息

1.png


实践

大家如果使用过socket的话,应该比较容易理解,这个模块消息的传递是基于发布订阅的


接下来,我们把这个机器人完善一下,配合这篇文章实现的接口,将机器人完整的功能实现一下

Object.defineProperty(require("os"), "hostname", {
  value: () => {
    // 防止win7环境下,高版本node取不到os模块的hostname函数结果
    return "my-pc-host-name";
  },
});
const qrcode = require("qrcode-terminal");
const { WechatyBuilder, ScanStatus } = require("wechaty");
const { sessionToken } = require("./session");
const request = require("request");
const wechaty = WechatyBuilder.build();
const url = "http://127.0.0.1:1024/sendMsg";
const sendChatGPT = (msg) => {
  const { promise, reject, resolve } = defer();
  request.post(
    url,
    {
      json: {
        msg,
        sessionToken,
      },
    },
    (error, res, body) => {
      if (error) return reject(error);
      console.log(body.msg);
      resolve(body.msg);
    }
  );
  return promise;
};
/**
 * @name:
 * @description: promise扁平处理
 * @return {*}
 */
const defer = () => {
  let resolve, reject;
  return {
    promise: new Promise((_resolve, _reject) => {
      resolve = _resolve;
      reject = _reject;
    }),
    resolve,
    reject,
  };
};
const onMessage = async (msg) => {
  // console.log(`收到消息: ${msg.toString()}`);
  const msgText = await msg.text();
  if (msgText) {
    try {
      const gptMsg = await sendChatGPT(msgText);
      msg.say(gptMsg);
    } catch (error) {
      msg.say(error);
    }
  }
};
const onLogout = (user) => {
  console.log(`用户 ${user} 退出成功`);
};
const onLogin = (user) => {
  console.log(`用户 ${user} 登录成功`);
};
const onError = console.error;
const onScan = (code, status) => {
  // status: 2代表等待,3代表扫码完成
  status === ScanStatus.Waiting &&
    qrcode.generate(code, { small: true }, console.log);
};
wechaty
  .on("scan", onScan)
  .on("login", onLogin)
  .on("logout", onLogout)
  .on("error", onError)
  .on("message", onMessage);
wechaty.start();


效果:

1.png

这里由于选择的是text而不是富文本的方式,所以中间的代码块没有显示出来,但是简单的问答还是能够实现的


写在最后

感谢你看到了最后,如果文章对你有帮助的话,还请点赞支持一下博主,非常感谢


源码:ChatGPT-Wechaty-Bot: 使用ChatGPT+Wechaty实现的一个对话机器人


相关文章
|
2月前
|
机器人 数据安全/隐私保护 Python
企业微信自动回复软件,企业微信自动回复机器人,python框架分享
企业微信机器人包含完整的消息处理流程,支持文本消息自动回复、事件处理、消息加密解密等功能
|
3月前
|
数据可视化 机器人 Java
聊天软件自动回复脚本,微信抖音快手小红书,消息自动回复工具机器人【java】
包含4个完整模块:主逻辑模块实现核心回复功能,工具模块封装常用函数,UI模块提供可视化控制界面
|
2月前
|
JSON 机器人 API
微信机器人自动回复插件,vx自动回复机器人脚本助手,python框架分享
这个微信机器人系统包含三个主要模块:主程序基于itchat实现微信消息监听和自动回复功能
|
5月前
|
消息中间件 NoSQL 安全
WePush 一款基于模拟点击实现的微信消息推送机器人,安全稳定不封号
WePush 是一个基于微信 Windows 客户端开发的消息推送系统,采用模拟人工点击技术实现消息发送,具有安全稳定、零封号风险的特点。系统通过 HTTP API 接收消息请求并利用 Redis 消息队列异步处理任务,支持群聊和个人消息推送。依赖 FastAPI、wxauto 和 Redis,适用于系统监控提醒等场景,需使用指定版本微信客户端运行。
462 60
|
2月前
|
JSON 机器人 数据安全/隐私保护
微信自动聊天机器人, 微信自动回复机器人,python框架分享
这个微信机器人实现包含主程序、配置文件、工具函数和测试脚本四个模块。主程序使用itchat库
|
3月前
|
机器人 Java
微信自动回复机器人插件,自动同意回复消息, 微信群管理机器人,JAVA框架
本项目基于开源微信机器人框架开发,提供自动回复私聊消息、自动同意好友请求及微信群管理功能。核心功能包括:自动回复用户消息、处理好友申请(发送欢迎语并备注新好友)、群聊管理(如欢迎新成员、关键词踢人和群内自动回复)。项目依赖 `weixin-java-mp` 和 `weixin-java-cp` 核心库,并结合 Lombok 和 Guava 提升开发效率。代码结构清晰,包含配置类 `WechatBotConfig` 初始化服务实例,以及多个处理器实现具体逻辑。下载地址:https://www.pan38.com/share.php?code=r4HGg,提取码:8888(仅供学习参考)。
|
7月前
|
人工智能 机器人 API
搞定!微信接入DeepSeek打造聊天机器人,1行代码就行!
程序员晚枫分享了一个有趣的Python项目,将DeepSeek大模型接入微信,实现自动聊天。通过PyOfficeRobot库,仅需1行代码即可完成接入,打造AI聊天机器人。该项目基于Windows API操作微信,目前仅支持Windows系统。用户需填写好友名称和API Key,轻松体验AI对话。此外,PyOfficeRobot还支持其他大模型如阿里通义、智谱等。欢迎尝试并参与改进开源项目。
1017 81
搞定!微信接入DeepSeek打造聊天机器人,1行代码就行!
|
4月前
|
JSON 机器人 API
gewe微信机器人搭建教程
GeWe开放平台是基于 微信开放平台的二次封装API服务,开发者可以使用本服务来处理微信中的各种事件,并可以通过后台调用对应的 API 来驱动微信自动执行任务,如自动收发消息、自动化应答、自动群邀请、群管理等,封装了 RPA技术流程,简化开发者二次开发难度,提供了开发者与微信对接的能力,使用简单,操作快捷,支持多种语言接入。
176 17
|
7月前
|
人工智能 安全 机器人
LangBot:无缝集成到QQ、微信等消息平台的AI聊天机器人平台
LangBot 是一个开源的多模态即时聊天机器人平台,支持多种即时通信平台和大语言模型,具备多模态交互、插件扩展和Web管理面板等功能。
1401 14
LangBot:无缝集成到QQ、微信等消息平台的AI聊天机器人平台
|
7月前
|
人工智能 开发框架 机器人
AstrBot:轻松将大模型接入QQ、微信等消息平台,打造多功能AI聊天机器人的开发框架,附详细教程
AstrBot 是一个开源的多平台聊天机器人及开发框架,支持多种大语言模型和消息平台,具备多轮对话、语音转文字等功能。
4327 15
AstrBot:轻松将大模型接入QQ、微信等消息平台,打造多功能AI聊天机器人的开发框架,附详细教程

热门文章

最新文章