|
@@ -9,94 +9,94 @@ interface IQQProps {
|
|
|
access_token: string;
|
|
|
host: string;
|
|
|
port: number;
|
|
|
- list: (chat: IChat, args: string[]) => void;
|
|
|
- sub: (chat: IChat, args: string[]) => void;
|
|
|
- unsub: (chat: IChat, args: string[]) => void;
|
|
|
+ list: (chat: IChat, args: string[], bot: CQWebsocket) => void;
|
|
|
+ sub: (chat: IChat, args: string[], bot: CQWebsocket) => void;
|
|
|
+ unsub: (chat: IChat, args: string[], bot: CQWebsocket) => void;
|
|
|
}
|
|
|
|
|
|
-interface IQQ {
|
|
|
- bot: CQWebsocket;
|
|
|
-}
|
|
|
-
|
|
|
-export default function (opt: IQQProps): IQQ {
|
|
|
- this.bot = new CQWebsocket({
|
|
|
- access_token: opt.access_token,
|
|
|
- enableAPI: true,
|
|
|
- enableEvent: true,
|
|
|
- host: opt.host,
|
|
|
- port: opt.port,
|
|
|
- });
|
|
|
-
|
|
|
- let retryInterval = 1000;
|
|
|
-
|
|
|
- this.bot.on('socket.connect', () => {
|
|
|
- logger.info('websocket connected');
|
|
|
- retryInterval = 1000;
|
|
|
- });
|
|
|
+export default class {
|
|
|
|
|
|
- const connect = () => {
|
|
|
+ public bot: CQWebsocket;
|
|
|
+ private retryInterval = 1000;
|
|
|
+ private connect = () => {
|
|
|
logger.warn('connecting to websocket...');
|
|
|
this.bot.connect();
|
|
|
};
|
|
|
|
|
|
- const reconnect = () => {
|
|
|
- retryInterval *= 2;
|
|
|
- if (retryInterval > 300000) retryInterval = 300000;
|
|
|
- logger.info(`retrying in ${retryInterval / 1000}s...`);
|
|
|
+ private 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...');
|
|
|
- connect();
|
|
|
- }, retryInterval);
|
|
|
+ this.connect();
|
|
|
+ }, this.retryInterval);
|
|
|
};
|
|
|
|
|
|
- this.bot.on('socket.close', () => {
|
|
|
- logger.error('websocket closed');
|
|
|
- reconnect();
|
|
|
- });
|
|
|
+ constructor(opt: IQQProps) {
|
|
|
+ logger.info(`init cqwebsocket for ${opt.host}:${opt.port}, with access_token ${opt.access_token}`);
|
|
|
+
|
|
|
+ this.bot = new CQWebsocket({
|
|
|
+ access_token: opt.access_token,
|
|
|
+ enableAPI: true,
|
|
|
+ enableEvent: true,
|
|
|
+ host: opt.host,
|
|
|
+ port: opt.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');
|
|
|
- reconnect();
|
|
|
- });
|
|
|
+ this.bot.on('socket.error', () => {
|
|
|
+ logger.error('websocket connect error');
|
|
|
+ this.reconnect();
|
|
|
+ });
|
|
|
|
|
|
- this.bot.on('message', (e, context) => {
|
|
|
- e.cancel();
|
|
|
- const chat: IChat = {
|
|
|
- chatType: context.message_type,
|
|
|
- chatID: 0,
|
|
|
- };
|
|
|
- switch (context.message_type) {
|
|
|
- case ChatType.Private:
|
|
|
- chat.chatID = context.user_id;
|
|
|
- break;
|
|
|
- case ChatType.Group:
|
|
|
- chat.chatID = context.group_id;
|
|
|
- break;
|
|
|
- case ChatType.Discuss:
|
|
|
- chat.chatID = context.discuss_id;
|
|
|
- break;
|
|
|
- }
|
|
|
- let cmdObj = command(context.raw_message);
|
|
|
- switch (cmdObj.cmd) {
|
|
|
- case 'twitter_sub':
|
|
|
- case 'twitter_subscribe':
|
|
|
- opt.sub(chat, cmdObj.args);
|
|
|
- return;
|
|
|
- case 'twitter_unsub':
|
|
|
- case 'twitter_unsubscribe':
|
|
|
- opt.unsub(chat, cmdObj.args);
|
|
|
- return;
|
|
|
- case 'ping':
|
|
|
- case 'twitter':
|
|
|
- opt.list(chat, cmdObj.args);
|
|
|
- return;
|
|
|
- case 'help':
|
|
|
- return `推特搬运机器人:
|
|
|
+ this.bot.on('message', (e, context) => {
|
|
|
+ e.cancel();
|
|
|
+ const chat: IChat = {
|
|
|
+ chatType: context.message_type,
|
|
|
+ chatID: 0,
|
|
|
+ };
|
|
|
+ switch (context.message_type) {
|
|
|
+ case ChatType.Private:
|
|
|
+ chat.chatID = context.user_id;
|
|
|
+ break;
|
|
|
+ case ChatType.Group:
|
|
|
+ chat.chatID = context.group_id;
|
|
|
+ break;
|
|
|
+ case ChatType.Discuss:
|
|
|
+ chat.chatID = context.discuss_id;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ let cmdObj = command(context.raw_message);
|
|
|
+ switch (cmdObj.cmd) {
|
|
|
+ case 'twitter_sub':
|
|
|
+ case 'twitter_subscribe':
|
|
|
+ opt.sub(chat, cmdObj.args, this.bot);
|
|
|
+ return;
|
|
|
+ case 'twitter_unsub':
|
|
|
+ case 'twitter_unsubscribe':
|
|
|
+ opt.unsub(chat, cmdObj.args, this.bot);
|
|
|
+ return;
|
|
|
+ case 'ping':
|
|
|
+ case 'twitter':
|
|
|
+ opt.list(chat, cmdObj.args, this.bot);
|
|
|
+ return;
|
|
|
+ case 'help':
|
|
|
+ return `推特搬运机器人:
|
|
|
/twitter - 查询当前聊天中的订阅
|
|
|
/twitter_subscribe [链接] - 订阅 Twitter 搬运
|
|
|
/twitter_unsubscribe [链接] - 退订 Twitter 搬运`;
|
|
|
- }
|
|
|
- });
|
|
|
+ }
|
|
|
+ });
|
|
|
|
|
|
- return this;
|
|
|
+ }
|
|
|
};
|