微信接入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实现的一个对话机器人


相关文章
|
6月前
|
安全 机器人 测试技术
ChatGPT机器人怎么用?10秒搞定
ChatGPT机器人怎么用?10秒搞定
ChatGPT机器人怎么用?10秒搞定
|
3月前
|
监控 机器人 Shell
Nightingale——夜莺监控系统部署企业微信机器人告警系【四】
Nightingale——夜莺监控系统部署企业微信机器人告警系【四】
142 1
Nightingale——夜莺监控系统部署企业微信机器人告警系【四】
|
6月前
|
自然语言处理 机器人 Go
【飞书ChatGPT机器人】飞书接入ChatGPT,打造智能问答助手
【飞书ChatGPT机器人】飞书接入ChatGPT,打造智能问答助手
359 0
|
3月前
|
人工智能 搜索推荐 安全
从零到一:微信机器人开发的实战心得
从零到一:微信机器人开发的实战心得
235 2
|
4月前
|
资源调度 机器人
使用Node+Wechaty做一个机器人
使用Node+Wechaty做一个机器人
142 0
|
5月前
|
JavaScript 前端开发 NoSQL
技术心得:微信小助手之wechaty模块(个人笔记,于人无用)
技术心得:微信小助手之wechaty模块(个人笔记,于人无用)
52 0
|
6月前
|
人工智能 自然语言处理 搜索推荐
Mistral推出聊天机器人 Le Chat 挑战 ChatGPT
【2月更文挑战第8天】Mistral推出聊天机器人 Le Chat 挑战 ChatGPT
93 6
Mistral推出聊天机器人 Le Chat 挑战 ChatGPT
|
6月前
|
自然语言处理 机器人 API
手把手做一个公众号GPT智能客服(七)GPT 接入微信机器人
手把手做一个公众号GPT智能客服(七)GPT 接入微信机器人
196 1
|
6月前
|
人工智能 JavaScript 前端开发
使用 Node.js、Socket.IO 和 GPT-4 构建 AI 聊天机器人
使用 Node.js、Socket.IO 和 GPT-4 构建 AI 聊天机器人
253 0
|
传感器 人工智能 自然语言处理
ChatGPT与特斯拉机器人:人形机器人的新时代
在人工智能和机器人技术的交汇点上,ChatGPT和特斯拉机器人共同开启了人形机器人的新时代。这种结合(假设)不仅展示了人工智能的强大能力,也展示了机器人技术的前沿进展。
176 0
ChatGPT与特斯拉机器人:人形机器人的新时代