diff --git a/package.json b/package.json index 2241e14..a7a80be 100644 --- a/package.json +++ b/package.json @@ -9,10 +9,11 @@ "coffea": "^0.4.24", "fs-extra": "^0.30.0", "mysql": "^2.11.1", + "node-ffprobe": "^1.2.2", "repl": "^0.1.3", "swig": "^1.4.2", "uuid": "^2.0.2", - "node-ffprobe": "^1.2.2" + "ytdl-core": "^0.7.17" }, "repository": { "type": "git", diff --git a/src/trigger/ytdl.js b/src/trigger/ytdl.js new file mode 100644 index 0000000..ce49321 --- /dev/null +++ b/src/trigger/ytdl.js @@ -0,0 +1,80 @@ +var fs = require('fs-extra'); +var ytdl = require('ytdl-core'); +var uuid = require('uuid'); +var probe = require('node-ffprobe'); + +module.exports = (bot, trigger, lib) => { + trigger.add({ + name: 'ytdl', + call: new RegExp('(https?://)?(www\\.)?(yotu\\.be/|youtube\\.com/)?((.+/)?(watch(\\?v=|.+&v=))?(v=)?)([\\w_-]{11})(&.+)?', 'gi'), + level: 0, + func: (e) => { + if(e.channel.getName() == '#kbot-dev') { + if(!e.message.match(/\!ignore$/)) { + var tmp = e.message.match(/https?:\/\/(www\.)?(yotu\.be\/|youtube\.com\/)?((.+\/)?(watch(\?v=|.+&v=))?(v=)?)([\w_-]{11})(&.+)?/gi); // get links + tmp.forEach((entry,i,a) => { + var dl = true; + var tmpdest = uuid.v1().split('-')[0]; + lib.checkRepost(entry, (cbcr) => { + if(cbcr) { + var dat = fs.createWriteStream('./b/'+tmpdest+'.webm'); + ytdl(entry, { filter: (format) => { return format.container === 'webm'; } }) + .on('response', (res) => { + if(res.headers['content-length'] > lib.cfg.maxFileSize) { + res.destroy(); + dl = false; + e.reply('f0ck! your file is too big (~'+lib.formatSize(res.headers['content-length'])+'), max '+lib.formatSize(lib.cfg.maxFileSize)+' allowed'); + } + }) + .pipe( dat ); + dat.on('finish', () => { + if(dl) { + dat.close(); + //probe("./b/"+tmpdest+".webm", (err, probeData) => { + // var size = probeData.size; + var stat = fs.statSync("./b/"+tmpdest+".webm"); + lib.getUser(e, (cbgu) => { + lib.getCheckSum("./b/"+tmpdest+".webm", (cbcs) => { + lib.checkRepostCheckSum(cbcs, (cbcrcs) => { + if(cbcrcs) { + lib.sql.query("insert into `f0ck`.`items` (`src`,`dest`,`mime`,`size`,`checksum`,`username`,`userchannel`,`usernetwork`,`stamp`,`active`) values (?,?,?,?,?,?,?,?,?,?)", [ + entry, + "./b/"+tmpdest+".webm", + "video/webm", + stat.size, + cbcs, + cbgu['nick'], + e.channel.getName(), + e.network, + Math.floor(new Date() / 1000), + 0 + ]).on('result', (result) => { + lib.generateThumbs(); + e.reply("https://f0ck.me/"+result.insertId+" - "+entry+" (video/webm, ~"+lib.formatSize(stat.size)+") from "+cbgu['nick']+" ("+cbgu['username']+"@"+cbgu['hostname']+")"); + }).on('error', (msg) => { + e.reply(msg); + }); + } + else { + fs.unlink("./b/"+tmpdest+".webm"); // delete repost + e.reply("repost motherf0cker"); + } + }); + }); + }); + //}); + } + else + fs.unlink('./b/'+tmpdest+'.webm'); + }); + } + else + e.reply('repost motherf0cker'); + }); + }); + } + } + }, + desc: 'download youtubevideos' + }); +}; \ No newline at end of file