qq.js 3.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", { value: true });
  3. const CQWebsocket = require("cq-websocket");
  4. const log4js = require("log4js");
  5. const command_1 = require("./command");
  6. const logger = log4js.getLogger('cq-websocket');
  7. logger.level = 'info';
  8. class default_1 {
  9. constructor(opt) {
  10. this.retryInterval = 1000;
  11. this.connect = () => {
  12. logger.warn('connecting to websocket...');
  13. this.bot.connect();
  14. };
  15. this.reconnect = () => {
  16. this.retryInterval *= 2;
  17. if (this.retryInterval > 300000)
  18. this.retryInterval = 300000;
  19. logger.info(`retrying in ${this.retryInterval / 1000}s...`);
  20. setTimeout(() => {
  21. logger.warn('reconnecting to websocket...');
  22. this.connect();
  23. }, this.retryInterval);
  24. };
  25. logger.info(`init cqwebsocket for ${opt.host}:${opt.port}, with access_token ${opt.access_token}`);
  26. this.bot = new CQWebsocket({
  27. access_token: opt.access_token,
  28. enableAPI: true,
  29. enableEvent: true,
  30. host: opt.host,
  31. port: opt.port,
  32. });
  33. this.bot.on('socket.connect', () => {
  34. logger.info('websocket connected');
  35. this.retryInterval = 1000;
  36. });
  37. this.bot.on('socket.close', () => {
  38. logger.error('websocket closed');
  39. this.reconnect();
  40. });
  41. this.bot.on('socket.error', () => {
  42. logger.error('websocket connect error');
  43. this.reconnect();
  44. });
  45. this.bot.on('message', (e, context) => {
  46. e.cancel();
  47. const chat = {
  48. chatType: context.message_type,
  49. chatID: 0,
  50. };
  51. switch (context.message_type) {
  52. case ChatType.Private:
  53. chat.chatID = context.user_id;
  54. break;
  55. case ChatType.Group:
  56. chat.chatID = context.group_id;
  57. break;
  58. case ChatType.Discuss:
  59. chat.chatID = context.discuss_id;
  60. break;
  61. }
  62. let cmdObj = command_1.default(context.raw_message);
  63. switch (cmdObj.cmd) {
  64. case 'twitter_sub':
  65. case 'twitter_subscribe':
  66. opt.sub(chat, cmdObj.args, this.bot);
  67. return;
  68. case 'twitter_unsub':
  69. case 'twitter_unsubscribe':
  70. opt.unsub(chat, cmdObj.args, this.bot);
  71. return;
  72. case 'ping':
  73. case 'twitter':
  74. opt.list(chat, cmdObj.args, this.bot);
  75. return;
  76. case 'help':
  77. return `推特搬运机器人:
  78. /twitter - 查询当前聊天中的订阅
  79. /twitter_subscribe [链接] - 订阅 Twitter 搬运
  80. /twitter_unsubscribe [链接] - 退订 Twitter 搬运`;
  81. }
  82. });
  83. }
  84. }
  85. exports.default = default_1;
  86. ;