如何从命令行下载 XDCC 包(来自 IRC 机器人)?
How to download XDCC packs (from IRC bots) from the command-line?
假设我们在 irc.server.com
有一个 IRC #ChannelName
,人们可以通过 /msg BotName xdcc send #123
等命令从机器人免费下载文件,我们想下载一个这样的文件进入我们的 /download/dir
。 如何使用简单的 wget/curl-like 命令来完成?
它可能不止一个命令或一个脚本,但请记住,我想将其封装到一个脚本中,这样我就可以按照
的方式输入一些内容
irc-download.sh irc.server.com ChannelName BotName 123 /download/dir
然后稍等片刻,下载文件,好像是wget下载的。
解决方案中的优点:
- 是跨平台的(即 Windows 二进制文件或可以编译到其中的源代码,或脚本)。
- 有某种进度指示。
- 可以同时下载两个文件(即,两次连接到同一服务器没有问题)。
- 防止恶意机器人在同一会话中发送其他未经请求的文件。
- 大部分是独立的(即,任何需要的二进制文件都可以 运行 自己)。
我一直在寻找一个不是超级麻烦的解决方案(比如在 Windows 上安装 Cygwin,来吧,there are IRC clients coded in ~250 lines of C,你甚至可以远程登录这个 ****) .
虽然没有人简单地编写一个程序来执行比你祖母的泳衣更古老的协议的基本任务,但事实证明我们生活在一个 NodeJS 存在的世界中。
是的,这个很简单。
首先,安装这些 NPM 包(如果需要,可以全局安装 -g
):
npm install irc xdcc progress
然后,将此代码放入 irc-download.js
:
var irc = require('xdcc').irc, ProgressBar = require('progress'), progress, arg = process.argv;
var user = 'user_' + Math.random().toString(36).substr(2), bar = 'Downloading... [:bar] :percent, :etas remaining';
var client = new irc.Client(arg[2], user, { channels: [ '#' + arg[3] ], userName: user, realName: user });
var last = 0, handle = received => { progress.tick(received - last); last = received; };
client.on('join', (channel, nick) => nick == user && client.getXdcc(arg[4], 'xdcc send #' + arg[5], arg[6]));
client.on('xdcc-connect', meta => progress = new ProgressBar(bar, {incomplete: ' ', total: meta.length, width: 40}));
client.on('xdcc-data', handle).on('xdcc-end', r => { handle(r); process.exit(); } ).on('error', m => console.error(m));
然后你可以使用我在问题中使用的基本相同的命令行:
node irc-download.js irc.server.com ChannelName BotName 123 /download/dir
Javascript 就像编程界的 Christopher Hitchens 之类的。
您也可以尝试 https://github.com/namboy94/xdcc-dl,如果您更喜欢使用 Python。
假设我们在 irc.server.com
有一个 IRC #ChannelName
,人们可以通过 /msg BotName xdcc send #123
等命令从机器人免费下载文件,我们想下载一个这样的文件进入我们的 /download/dir
。 如何使用简单的 wget/curl-like 命令来完成?
它可能不止一个命令或一个脚本,但请记住,我想将其封装到一个脚本中,这样我就可以按照
的方式输入一些内容irc-download.sh irc.server.com ChannelName BotName 123 /download/dir
然后稍等片刻,下载文件,好像是wget下载的。
解决方案中的优点:
- 是跨平台的(即 Windows 二进制文件或可以编译到其中的源代码,或脚本)。
- 有某种进度指示。
- 可以同时下载两个文件(即,两次连接到同一服务器没有问题)。
- 防止恶意机器人在同一会话中发送其他未经请求的文件。
- 大部分是独立的(即,任何需要的二进制文件都可以 运行 自己)。
我一直在寻找一个不是超级麻烦的解决方案(比如在 Windows 上安装 Cygwin,来吧,there are IRC clients coded in ~250 lines of C,你甚至可以远程登录这个 ****) .
虽然没有人简单地编写一个程序来执行比你祖母的泳衣更古老的协议的基本任务,但事实证明我们生活在一个 NodeJS 存在的世界中。
是的,这个很简单。
首先,安装这些 NPM 包(如果需要,可以全局安装 -g
):
npm install irc xdcc progress
然后,将此代码放入 irc-download.js
:
var irc = require('xdcc').irc, ProgressBar = require('progress'), progress, arg = process.argv;
var user = 'user_' + Math.random().toString(36).substr(2), bar = 'Downloading... [:bar] :percent, :etas remaining';
var client = new irc.Client(arg[2], user, { channels: [ '#' + arg[3] ], userName: user, realName: user });
var last = 0, handle = received => { progress.tick(received - last); last = received; };
client.on('join', (channel, nick) => nick == user && client.getXdcc(arg[4], 'xdcc send #' + arg[5], arg[6]));
client.on('xdcc-connect', meta => progress = new ProgressBar(bar, {incomplete: ' ', total: meta.length, width: 40}));
client.on('xdcc-data', handle).on('xdcc-end', r => { handle(r); process.exit(); } ).on('error', m => console.error(m));
然后你可以使用我在问题中使用的基本相同的命令行:
node irc-download.js irc.server.com ChannelName BotName 123 /download/dir
Javascript 就像编程界的 Christopher Hitchens 之类的。
您也可以尝试 https://github.com/namboy94/xdcc-dl,如果您更喜欢使用 Python。