twspace-crawler
Version:
Script to monitor & download Twitter Spaces 24/7
127 lines • 5.79 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const axios_1 = __importDefault(require("axios"));
const commander_1 = require("commander");
const dotenv_1 = __importDefault(require("dotenv"));
require("dotenv/config");
const cc_command_1 = require("./commands/cc.command");
const test_command_1 = require("./commands/test.command");
const logger_1 = require("./logger");
const ConfigManager_1 = require("./modules/ConfigManager");
const MainManager_1 = require("./modules/MainManager");
const SpaceDownloader_1 = require("./modules/SpaceDownloader");
const UserManager_1 = require("./modules/UserManager");
const CommandUtil_1 = require("./utils/CommandUtil");
const TwitterUtil_1 = require("./utils/TwitterUtil");
const Util_1 = require("./utils/Util");
// eslint-disable-next-line @typescript-eslint/no-var-requires
const pkg = require('../package.json');
const checkVersion = async () => {
const url = 'https://registry.npmjs.org/-/package/twspace-crawler/dist-tags';
try {
const { data } = await axios_1.default.get(url);
const latestVersion = data.latest;
if (latestVersion === pkg.version) {
return;
}
logger_1.logger.info(`New version: ${latestVersion}`);
logger_1.logger.info(`To update, run: npm i -g ${pkg.name}@latest`);
}
catch (error) {
// Ignore
}
};
commander_1.program
.version(pkg.version)
.description('CLI app to monitor & download Twitter Spaces.')
.option('-d, --debug', 'Show debug logs')
.option('--env <ENV_PATH>', 'Path to .env file, default to current working folder (See .env.example)')
.option('--config <CONFIG_PATH>', 'Path to config file (See config.example.json)')
.option('--user <USER>', 'Monitor & download live Spaces from users, separate by comma (,)')
.option('--id <SPACE_ID>', 'Monitor & download live Space with its id')
.option('--space-url <SPACE_URL>', 'Monitor & download live Space with its URL')
.option('--force', 'Force download Space when using with --id')
.option('--url <PLAYLIST_ID>', 'Download Space using playlist url')
.option('--skip-download', 'Do not download anything')
.option('--skip-download-audio', 'Do not download audio')
.option('--skip-download-caption', 'Do not download caption')
.option('--notification', 'Show notification about new live Space')
.option('--force-open', 'Force open Space in browser')
.addCommand(cc_command_1.ccCommand)
.addCommand(test_command_1.testCommand);
commander_1.program.action(async (args, cmd) => {
logger_1.logger.info(Array(80).fill('=').join(''));
logger_1.logger.warn(`Version: ${pkg.version}`);
CommandUtil_1.CommandUtil.detectDebugOption(cmd);
await checkVersion();
logger_1.logger.debug('Args', args);
if (args.env) {
dotenv_1.default.config({ path: args.env });
}
const envKeys = [
// 'TWITTER_AUTHORIZATION',
'TWITTER_AUTH_TOKEN',
'TWITTER_CSRF_TOKEN',
];
envKeys.forEach((key) => {
const limit = 4;
let value = (process.env[key] || '').substring(0, limit);
if (value) {
value += '****';
}
logger_1.logger.debug(`env.${key}=${value}`);
});
// config
ConfigManager_1.configManager.load();
ConfigManager_1.configManager.update({
skipDownload: args.skipDownload ?? ConfigManager_1.configManager.config.skipDownload,
skipDownloadAudio: args.skipDownloadAudio ?? ConfigManager_1.configManager.config.skipDownloadAudio,
skipDownloadCaption: args.skipDownloadCaption ?? ConfigManager_1.configManager.config.skipDownloadCaption,
});
const { url, id, spaceUrl, user, } = args;
if (url && !id && !spaceUrl) {
logger_1.logger.info('Starting in playlist url mode', { url });
new SpaceDownloader_1.SpaceDownloader(url, Util_1.Util.getDateTimeString()).download();
return;
}
if (id) {
logger_1.logger.info('Starting in space id mode', { id });
MainManager_1.mainManager.addSpaceWatcher(id);
return;
}
if (spaceUrl) {
logger_1.logger.info('Starting in space url mode', { spaceUrl });
const spaceId = TwitterUtil_1.TwitterUtil.getSpaceId(spaceUrl);
if (!spaceId) {
logger_1.logger.error(`Space URL invalid: ${spaceUrl}`);
return;
}
MainManager_1.mainManager.addSpaceWatcher(spaceId);
return;
}
const usernames = [...new Set((user || '')
.split(',')
.concat((ConfigManager_1.configManager.config.users || []).map((v) => (typeof v === 'string' ? v : v?.username)))
.filter((v) => v))];
if (usernames.length) {
logger_1.logger.info('Starting in user mode', { userCount: usernames.length, users: usernames });
UserManager_1.userManager.once('list_ready', () => {
logger_1.logger.warn('user_list_ready');
MainManager_1.mainManager.runUserListWatcher();
});
await UserManager_1.userManager.add(usernames);
logger_1.logger.warn('user_list_init_completed');
if (Util_1.Util.getTwitterAuthorization() || Util_1.Util.getTwitterAuthToken()) {
MainManager_1.mainManager.runUserListWatcher();
}
else {
usernames.forEach((username) => MainManager_1.mainManager.addUserWatcher(username));
}
}
});
commander_1.program.parse();
//# sourceMappingURL=index.js.map