UNPKG

@xud6/cq-websocket

Version:

A Node SDK for developing QQ chatbots based on WebSocket, which is depending on CoolQ and CQHTTP API plugin.

97 lines (81 loc) 1.79 kB
const deepEqual = require('deep-equal') module.exports = class CQTag { /** * @param {string} type * @param {object} data */ constructor (type, data = null) { this.data = data this._type = type this._modifier = null } get tagName () { return this._type } get modifier () { return this._modifier || new Proxy({}, { set: (t, prop, value) => { // lazy init this._modifier = { [prop]: value } return true } }) } set modifier (val) { this._modifier = val } /** * @param {CQTag} another */ equals (another) { if (!(another instanceof CQTag)) return false if (this._type !== another._type) return false return deepEqual(this.data, another.data, { strict: true }) } toJSON () { const data = {} for (let k of Object.keys(this.data || {})) { if (this.data[k] !== undefined) { data[k] = String(this.data[k]) } } for (let k of Object.keys(this._modifier || {})) { if (this._modifier[k] !== undefined) { data[k] = String(this._modifier[k]) } } return { type: this._type, data: Object.keys(data).length > 0 ? data : null } } valueOf () { return this.toString() } toString () { let ret = `[CQ:${this._type}` for (let k of Object.keys(this.data || {})) { if (this.data[k] !== undefined) { ret += `,${k}=${this.data[k]}` } } for (let k of Object.keys(this._modifier || {})) { if (this._modifier[k] !== undefined) { ret += `,${k}=${this._modifier[k]}` } } ret += ']' return ret } /** * @abstract * Force data to cast into proper types */ coerce () { return this } }