使用Node+Wechaty做一个机器人

简介: 使用Node+Wechaty做一个机器人

前言

这篇文章将结合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,这样做的话会导致下面这个报错

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

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

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();

效果:

确认登录

发送消息

接收消息

实践

大家如果使用过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();

效果:

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

写在最后

本文介绍了如何使用wechaty接入node,实现机器人的功能

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

相关文章
|
人工智能 JavaScript 前端开发
使用 Node.js、Socket.IO 和 GPT-4 构建 AI 聊天机器人
使用 Node.js、Socket.IO 和 GPT-4 构建 AI 聊天机器人
601 0
|
资源调度 机器人
微信接入ChatGPT,使用Node+ChatGPT+Wechaty做一个微信机器人
微信接入ChatGPT,使用Node+ChatGPT+Wechaty做一个微信机器人
4171 4
微信接入ChatGPT,使用Node+ChatGPT+Wechaty做一个微信机器人
|
机器人 中间件 Linux
一步一步教你用wechaty+百度云主机打造一个带你穿越星际的微信机器人
一步一步教你用wechaty+百度云主机打造一个带你穿越星际的微信机器人
734 0
一步一步教你用wechaty+百度云主机打造一个带你穿越星际的微信机器人
|
弹性计算 机器人 关系型数据库
基于chatterbot与wechaty的微信聊天机器人
该项目实现了一款可以自学习的中文聊天机器人,并通过微信提供聊天服务 项目内容: 1、在ECS中部署wechaty微信代理服务 2、在ECS中部署基于chatterbot聊天机器人框架的服务 3、爬取B站up主最新动态
547 0
|
自然语言处理 机器人 机器学习/深度学习
带你读《实用Bot开发指南:基于Node.js与Bot框架设计并构建聊天机器人》之二:聊天机器人与自然语言理解
本书讲述机器人设计和实现背后的基本概念。每一章都建立在前面的主题之上,并且在适当的地方显示了实现这些概念的实际工作代码。通过选择一个代码编辑器,你可以开始体验创建智能、迷人和有用的机器人。本书将教你如何在Facebook Messenger和Slack等平台上创建自己的机器人,整合扩展API,并在云中应用人工智能和机器学习算法。在本书的最后,你将会有足够的信息通过你创建的机器人来接触成千上万的新用户。
|
机器人 自然语言处理 开发者
带你读《实用Bot开发指南:基于Node.js与Bot框架设计并构建聊天机器人》之一:聊天机器人概述
本书讲述机器人设计和实现背后的基本概念。每一章都建立在前面的主题之上,并且在适当的地方显示了实现这些概念的实际工作代码。通过选择一个代码编辑器,你可以开始体验创建智能、迷人和有用的机器人。本书将教你如何在Facebook Messenger和Slack等平台上创建自己的机器人,整合扩展API,并在云中应用人工智能和机器学习算法。在本书的最后,你将会有足够的信息通过你创建的机器人来接触成千上万的新用户。
|
JavaScript 机器人 自然语言处理
|
3月前
|
JavaScript Unix Linux
nvm与node.js的安装指南
通过以上步骤,你可以在各种操作系统上成功安装NVM和Node.js,从而在不同的项目中灵活切换Node.js版本。这种灵活性对于管理不同项目的环境依赖而言是非常重要的。
815 11
|
8月前
|
弹性计算 JavaScript 前端开发
一键安装!阿里云新功能部署Nodejs环境到ECS竟然如此简单!
Node.js 是一种高效的 JavaScript 运行环境,基于 Chrome V8 引擎,支持在服务器端运行 JavaScript 代码。本文介绍如何在阿里云上一键部署 Node.js 环境,无需繁琐配置,轻松上手。前提条件包括 ECS 实例运行中且操作系统为 CentOS、Ubuntu 等。功能特点为一键安装和稳定性好,支持常用 LTS 版本。安装步骤简单:登录阿里云控制台,选择扩展程序管理页面,安装 Node.js 扩展,选择实例和版本,等待创建完成并验证安装成功。通过阿里云的公共扩展,初学者和经验丰富的开发者都能快速进入开发状态,开启高效开发之旅。
|
7月前
|
资源调度 JavaScript 前端开发
前端开发必备!Node.js 18.x LTS保姆级安装教程(附国内镜像源配置)
本文详细介绍了Node.js的安装与配置流程,涵盖环境准备、版本选择(推荐LTS版v18.x)、安装步骤(路径设置、组件选择)、环境验证(命令测试、镜像加速)及常见问题解决方法。同时推荐开发工具链,如VS Code、Yarn等,并提供常用全局包安装指南,帮助开发者快速搭建高效稳定的JavaScript开发环境。内容基于官方正版软件,确保合规性与安全性。
5924 24

热门文章

最新文章