"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const CQWebsocket = require("cq-websocket"); const log4js = require("log4js"); const helper_1 = require("./helper"); const logger = log4js.getLogger('cq-websocket'); logger.level = 'info'; class default_1 { constructor(opt) { this.retryInterval = 1000; this.initWebsocket = () => { this.bot = new CQWebsocket({ access_token: this.botInfo.access_token, enableAPI: true, enableEvent: true, host: this.botInfo.host, port: this.botInfo.port, }); this.bot.on('socket.connect', () => { logger.info('websocket connected'); this.retryInterval = 1000; }); this.bot.on('socket.close', () => { logger.error('websocket closed'); this.reconnect(); }); this.bot.on('socket.error', () => { logger.error('websocket connect error'); this.reconnect(); }); this.bot.on('message', (e, context) => { e.cancel(); const chat = { chatType: context.message_type, chatID: 0, }; switch (context.message_type) { case "private" /* Private */: chat.chatID = context.user_id; break; case "group" /* Group */: chat.chatID = context.group_id; break; case "discuss" /* Discuss */: chat.chatID = context.discuss_id; } const cmdObj = helper_1.default(context.raw_message); switch (cmdObj.cmd) { case 'twitter_sub': case 'twitter_subscribe': return this.botInfo.sub(chat, cmdObj.args); case 'twitter_unsub': case 'twitter_unsubscribe': return this.botInfo.unsub(chat, cmdObj.args); case 'ping': case 'twitter': return this.botInfo.list(chat, cmdObj.args); case 'help': return `推特搬运机器人: /twitter - 查询当前聊天中的订阅 /twitter_subscribe [链接] - 订阅 Twitter 搬运 /twitter_unsubscribe [链接] - 退订 Twitter 搬运`; } }); }; this.connect = () => { this.initWebsocket(); logger.warn('connecting to websocket...'); this.bot.connect(); }; this.reconnect = () => { this.retryInterval *= 2; if (this.retryInterval > 300000) this.retryInterval = 300000; logger.info(`retrying in ${this.retryInterval / 1000}s...`); setTimeout(() => { logger.warn('reconnecting to websocket...'); this.connect(); }, this.retryInterval); }; logger.info(`init cqwebsocket for ${opt.host}:${opt.port}, with access_token ${opt.access_token}`); this.botInfo = opt; } } exports.default = default_1;