这段代码主要是一个发送图片的功能。下面是对每一行代码的注释:

import { createReadStream } from "node:fs"; // 导入createReadStream方法,用于创建可读流
import { Readable } from "node:stream"; // 导入Readable方法,用于创建可读流
import FormData from "form-data"; // 导入FormData模块,用于构建请求数据包
import axios from "axios"; // 导入axios模块,用于发送HTTP请求

// 非依赖引用
import { BotConfigType } from "./types.js"; // 导入BotConfigType类型

/** 环境配置 */
const Acf = {
  sandbox_api: "https://sandbox.api.sgroup.qq.com", // 沙箱环境的API地址
  api: "https://api.sgroup.qq.com", // 正式环境的API地址
};

let cfg: BotConfigType; // 定义一个变量cfg,类型为BotConfigType

/**
 * 得到环境api
 * @returns
 */
function getUrl(): string {
  //沙箱环境
  if (cfg.sandbox) return Acf.sandbox_api; // 如果cfg的sandbox属性为true,返回沙箱环境的API地址
  //正式环境
  return Acf.api; // 否则返回正式环境的API地址
}

/**
 * 创建api配置
 * @param val
 * @returns
 */
export function createApi(val: BotConfigType): void {
  cfg = val; // 将传入的参数赋值给cfg变量
  return;
}

/**
 * 发送本地路径的图片
 * @param id 私信传频道id,公信传子频道id
 * @param message {消息编号,图片,内容}
 * @param isGroup 是否是群聊
 * @returns
 */
export async function sendImage(
  id: string,
  message: {
    msg_id: string;
    file_image: string | Buffer | URL;
    content?: string;
  },
  isGroup: boolean
): Promise<any> {
  const urlbase = getUrl(); // 获取API地址

  /** 读取本地图片地址 */
  let picData = createReadStream(message.file_image); // 创建可读流对象,读取本地图片地址

  /* 请求数据包 */
  let formdata = new FormData(); // 创建FormData对象
  formdata.append("msg_id", message.msg_id); // 添加消息编号
  if (typeof message.content === "string")
    formdata.append("content", message.content); // 添加消息内容
  formdata.append("file_image", picData); // 添加图片数据

  let url = ``;
  if (!isGroup) {
    url = `${urlbase}/dms/${id}/messages`; // 私信的URL
  } else {
    url = `${urlbase}/channels/${id}/messages`; // 群聊的URL
  }

  /* 采用请求方式发送数据 */
  return await axios({
    method: "post",
    url,
    headers: {
      "Content-Type": formdata.getHeaders()["content-type"], // 设置请求头的Content-Type
      Authorization: `Bot ${cfg.appID}.${cfg.token}`, // 设置请求头的Authorization
    },
    data: formdata, // 请求数据包
  }).catch((err) => err);
}

/**
 * 发送buffer图片
 * @param id 私信传频道id,公信传子频道id
 * @param message {消息编号,图片,内容}
 * @param isGroup 是否是群聊
 * @returns
 */
export async function postImage(
  id: string,
  message: {
    msg_id: string;
    file_image: string | Buffer | URL;
    content?: string;
  },
  isGroup: boolean
): Promise<any> {
  // 得到环境
  const urlbase = getUrl(); // 获取API地址
  /* 创建可读流对象 */
  const picData = new Readable(); // 创建可读流对象
  picData.push(message.file_image); // 将图片数据推入流中
  picData.push(null); // 数据读取完毕时,推入null

  /* 构建请求数据包 */
  const formdata = new FormData(); // 创建FormData对象
  formdata.append("msg_id", message.msg_id); // 添加消息编号
  if (typeof message.content === "string")
    formdata.append("content", message.content); // 添加消息内容
  formdata.append("file_image", picData, {
    filename: "image.jpg", // 为上传的图片指定文件名
    contentType: "image/jpeg", // 指定上传的图片类型
  });

  let url: string = "";
  if (!isGroup) {
    url = `${urlbase}/dms/${id}/messages`; // 私信的URL
  } else {
    url = `${urlbase}/channels/${id}/messages`; // 群聊的URL
  }

  /* 采用请求方式发送数据 */
  return await axios({
    method: "post",
    url,
    headers: {
      "Content-Type": `multipart/form-data; boundary=${formdata.getBoundary()}`, // 设置请求头的Content-Type
      Authorization: `Bot ${cfg.appID}.${cfg.token}`, // 设置请求头的Authorization
    },
    data: formdata, // 请求数据包
  }).catch((err) => err);
}
``
请分析以下代码并注释每一行import createReadStream from nodefs;import Readable from nodestream;import FormData from form-data;import axios from axios; 非依赖引用import BotConfigType from typesjs; 环境配置 const Acf =

原文地址: https://www.cveoy.top/t/topic/hECF 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录