@tsuk1ko/cq-websocket
Version:
A Node SDK for developing QQ chatbots based on WebSocket, which is depending on CoolQ and CQHTTP API plugin.
59 lines (55 loc) • 1.53 kB
JavaScript
/**
* 转义
* @template T
* @param {T} str 欲转义的字符串
* @param {boolean} [insideCQ] 是否在CQ码内
* @return {T}
*/
const escapeStrMsg = (str, insideCQ = false) => {
if (typeof str !== 'string') return str;
const result = str.replace(/&/g, '&').replace(/\[/g, '[').replace(/\]/g, ']');
return insideCQ ? result.replace(/,/g, ',') : result;
};
/**
* 反转义
* @template T
* @param {T} str 欲反转义的字符串
* @return {T}
*/
const unescapeStrMsg = str => {
if (typeof str !== 'string') return str;
return str.replace(/,/g, ',').replace(/[/g, '[').replace(/]/g, ']').replace(/&/g, '&');
};
/**
*
* @param {Array<{ type: string; data: Record<string, string>}>} msgs
* @returns {string}
*/
const convertArrayMsgToStringMsg = msgs => {
if (!Array.isArray(msgs)) return '';
let msg = '';
msgs.forEach(obj => {
if (typeof obj !== 'object' || typeof obj.type !== 'string' || typeof obj.data !== 'object') {
return;
}
// 文本
if (obj.type === 'text' && typeof obj.data.text === 'string') {
msg += escapeStrMsg(obj.data.text);
return;
}
// 其他
const data = Object.entries(obj.data);
if (!data.length) {
msg += `[CQ:${obj.type}]`;
return;
}
const dataStr = data.map(([k, v]) => `${k}=${escapeStrMsg(v, true)}`).join(',');
msg += `[CQ:${obj.type},${dataStr}]`;
});
return msg;
};
module.exports = {
escapeStrMsg,
unescapeStrMsg,
convertArrayMsgToStringMsg,
};