qq.js 2.6 KB

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