qq.js 3.2 KB

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