如何从命令行下载XDCC包(来自IRC机器人)?

时间:2016-02-25 03:51:48

标签: bash download bots irc

我们假设我们在#ChannelName有一个IRC irc.server.com,人们可以通过/msg BotName xdcc send #123等命令从机器人中自由下载文件,我们想下载一个这样的文件进入我们的/download/dir如何在简单的wget / curl-like命令中执行此操作?

它可能不止一个命令或脚本,但请记住,我想将其封装到脚本中,以便我可以按照

的方式键入内容。
irc-download.sh irc.server.com ChannelName BotName 123 /download/dir

然后等一会儿,拿出文件,就好像是wget下载一样。

解决方案中有好处:

  • 是跨平台的(即Windows二进制文件或可以编译到其中的源代码或脚本)。
  • 有某种进展指示。
  • 可以同时下载两个文件(即连接两次到同一台服务器没有问题)。
  • 针对在同一会话中发送其他未请求文件的坏机器人进行保护。
  • 主要是自包含的(即,任何需要的二进制文件都可以自行运行)。

2 个答案:

答案 0 :(得分:7)

我看起来高低不是一个非常繁琐的解决方案(比如在Windows上安装Cygwin,来吧,there are IRC clients coded in ~250 lines of C,你甚至可以telnet这个****)。

虽然没有人简单地制作一个程序来执行比你祖母泳衣更早的协议的基本任务,但事实证明我们生活在一个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就像克里斯托弗·希钦斯的编程之类的东西。

答案 1 :(得分:0)

如果您喜欢使用Python,也可以尝试https://github.com/namboy94/xdcc-dl