请分析以下代码并注释每一行import createReadStream from nodefs;import Readable from nodestream;import FormData from form-data;import axios from axios; 非依赖引用import BotConfigType from typesjs; 环境配置 const Acf =
这段代码主要是一个发送图片的功能。下面是对每一行代码的注释:
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);
}
``
原文地址: https://www.cveoy.top/t/topic/hECF 著作权归作者所有。请勿转载和采集!