main.js 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. #!/usr/bin/env node
  2. "use strict";
  3. Object.defineProperty(exports, "__esModule", { value: true });
  4. const commandLineUsage = require("command-line-usage");
  5. const fs = require("fs");
  6. const log4js = require("log4js");
  7. const path = require("path");
  8. const command_1 = require("./command");
  9. const qq_1 = require("./qq");
  10. const twitter_1 = require("./twitter");
  11. const logger = log4js.getLogger();
  12. logger.level = 'info';
  13. const sections = [
  14. {
  15. header: 'CQHTTP Twitter Bot',
  16. content: 'The QQ Bot that forwards twitters.',
  17. },
  18. {
  19. header: 'Synopsis',
  20. content: [
  21. '$ cqhttp-twitter-bot {underline config.json}',
  22. '$ cqhttp-twitter-bot {bold --help}',
  23. ],
  24. },
  25. {
  26. header: 'Documentation',
  27. content: [
  28. 'Project home: {underline https://github.com/rikakomoe/cqhttp-twitter-bot}',
  29. 'Example config: {underline https://qwqq.pw/b96yt}',
  30. ],
  31. },
  32. ];
  33. const usage = commandLineUsage(sections);
  34. const args = process.argv.slice(2);
  35. if (args.length === 0 || args[0] === 'help' || args[0] === '-h' || args[0] === '--help') {
  36. console.log(usage);
  37. process.exit(0);
  38. }
  39. const configPath = args[0];
  40. let config;
  41. try {
  42. config = require(path.resolve(configPath));
  43. }
  44. catch (e) {
  45. console.log('Failed to parse config file: ', configPath);
  46. console.log(usage);
  47. process.exit(1);
  48. }
  49. if (config.cq_ws_host === undefined) {
  50. config.cq_ws_host = '127.0.0.1';
  51. logger.warn('cq_ws_host is undefined, use 127.0.0.1 as default');
  52. }
  53. if (config.cq_ws_port === undefined) {
  54. config.cq_ws_port = 6700;
  55. logger.warn('cq_ws_port is undefined, use 6700 as default');
  56. }
  57. if (config.cq_access_token === undefined) {
  58. config.cq_access_token = '';
  59. logger.warn('cq_access_token is undefined, use empty string as default');
  60. }
  61. if (config.lockfile === undefined) {
  62. config.lockfile = 'subscriber.lock';
  63. }
  64. let lock;
  65. if (fs.existsSync(path.resolve(config.lockfile))) {
  66. try {
  67. lock = JSON.parse(fs.readFileSync(path.resolve(config.lockfile), 'utf8'));
  68. }
  69. catch (err) {
  70. logger.error(`Failed to parse lockfile ${config.lockfile}: `, err);
  71. lock = {
  72. workon: 0,
  73. feed: [],
  74. threads: {},
  75. };
  76. }
  77. fs.access(path.resolve(config.lockfile), fs.constants.W_OK, err => {
  78. if (err) {
  79. logger.fatal(`cannot write lockfile ${path.resolve(config.lockfile)}, permission denied`);
  80. process.exit(1);
  81. }
  82. });
  83. }
  84. else {
  85. lock = {
  86. workon: 0,
  87. feed: [],
  88. threads: {},
  89. };
  90. try {
  91. fs.writeFileSync(path.resolve(config.lockfile), JSON.stringify(lock));
  92. }
  93. catch (err) {
  94. logger.fatal(`cannot write lockfile ${path.resolve(config.lockfile)}, permission denied`);
  95. process.exit(1);
  96. }
  97. }
  98. const qq = new qq_1.default({
  99. access_token: config.cq_access_token,
  100. host: config.cq_ws_host,
  101. port: config.cq_ws_port,
  102. list: (c, a) => command_1.list(c, a, lock),
  103. sub: (c, a) => command_1.sub(c, a, lock, config.lockfile),
  104. unsub: (c, a) => command_1.unsub(c, a, lock, config.lockfile),
  105. });
  106. setTimeout(() => {
  107. twitter_1.default(lock, config.lockfile);
  108. }, 60000);
  109. qq.connect();