|
|
|
@@ -23,35 +23,35 @@ export default async bot => {
|
|
|
|
name: "parser",
|
|
|
|
name: "parser",
|
|
|
|
call: regex.all,
|
|
|
|
call: regex.all,
|
|
|
|
active: true,
|
|
|
|
active: true,
|
|
|
|
f: async e => {
|
|
|
|
f: e => {
|
|
|
|
const links = e.message.match(regex.all)?.filter(link => !link.includes(cfg.main.url.domain)) || [];
|
|
|
|
const links = e.message.match(regex.all)?.filter(link => !link.includes(cfg.main.url.domain)) || [];
|
|
|
|
let repost;
|
|
|
|
let repost;
|
|
|
|
if (e.media)
|
|
|
|
if(e.media)
|
|
|
|
links.push(e.media);
|
|
|
|
links.push(e.media);
|
|
|
|
|
|
|
|
|
|
|
|
if (links.length === 0)
|
|
|
|
if(links.length === 0)
|
|
|
|
return false;
|
|
|
|
return false;
|
|
|
|
|
|
|
|
|
|
|
|
if (e.message.match(/\!i(gnore)?\b/))
|
|
|
|
if(e.message.match(/\!i(gnore)?\b/))
|
|
|
|
return false;
|
|
|
|
return false;
|
|
|
|
|
|
|
|
|
|
|
|
if (!e.channel.includes("w0bm") && (!e.message.match(/\!w(0bm)?\b/i) && (typeof e.raw.forward_from == 'undefined')))
|
|
|
|
if(!e.channel.includes("w0bm") && (!e.message.match(/\!w(0bm)?\b/i) && (typeof e.raw.forward_from == 'undefined')))
|
|
|
|
return false;
|
|
|
|
return false;
|
|
|
|
|
|
|
|
|
|
|
|
if (e.type === 'tg' && // proto: tg
|
|
|
|
if(e.type === 'tg' && // proto: tg
|
|
|
|
!e.message.match(/\!w(0bm)?\b/i) && // !w / !w0bm
|
|
|
|
!e.message.match(/\!w(0bm)?\b/i) && // !w / !w0bm
|
|
|
|
!e.raw.forward_date && // is forwarded?
|
|
|
|
!e.raw.forward_date && // is forwarded?
|
|
|
|
!mediagroupids.has(e.raw.media_group_id) // prepared mediagroup?
|
|
|
|
!mediagroupids.has(e.raw.media_group_id) // prepared mediagroup?
|
|
|
|
) {
|
|
|
|
) {
|
|
|
|
return false;
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else if (e.raw.media_group_id && e.message.match(/\!w(0bm)?\b/i)) {
|
|
|
|
else if(e.raw.media_group_id && e.message.match(/\!w(0bm)?\b/i)) {
|
|
|
|
mediagroupids.add(e.raw.media_group_id);
|
|
|
|
mediagroupids.add(e.raw.media_group_id);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
console.log(`parsing ${links.length} link${links.length > 1 ? "s" : ""}...`);
|
|
|
|
console.log(`parsing ${links.length} link${links.length > 1 ? "s" : ""}...`);
|
|
|
|
|
|
|
|
|
|
|
|
for (const link of links) {
|
|
|
|
links.forEach(async link => {
|
|
|
|
//if(regex.imgur.test(link))
|
|
|
|
//if(regex.imgur.test(link))
|
|
|
|
// return await e.reply(`fuck imgur... seriously`);
|
|
|
|
// return await e.reply(`fuck imgur... seriously`);
|
|
|
|
|
|
|
|
|
|
|
|
@@ -63,7 +63,7 @@ export default async bot => {
|
|
|
|
|
|
|
|
|
|
|
|
// check repost (link)
|
|
|
|
// check repost (link)
|
|
|
|
repost = await queue.checkrepostlink(link);
|
|
|
|
repost = await queue.checkrepostlink(link);
|
|
|
|
if (repost)
|
|
|
|
if(repost)
|
|
|
|
return await e.reply(`repost motherf0cker (link): ${cfg.main.url.full}/${repost}`);
|
|
|
|
return await e.reply(`repost motherf0cker (link): ${cfg.main.url.full}/${repost}`);
|
|
|
|
|
|
|
|
|
|
|
|
// generate uuid
|
|
|
|
// generate uuid
|
|
|
|
@@ -73,41 +73,39 @@ export default async bot => {
|
|
|
|
|
|
|
|
|
|
|
|
// read metadata
|
|
|
|
// read metadata
|
|
|
|
let ext;
|
|
|
|
let ext;
|
|
|
|
const proxyArgs = cfg.main.socks ? `--proxy ${cfg.main.socks}` : '';
|
|
|
|
if(link.match(regex.instagram)) {
|
|
|
|
if (link.match(regex.instagram)) {
|
|
|
|
|
|
|
|
// is instagram
|
|
|
|
// is instagram
|
|
|
|
try {
|
|
|
|
try {
|
|
|
|
// @flummi -> is there a variable for the actual work directory so it doesn't have to be hardcoded?
|
|
|
|
// @flummi -> is there a variable for the actual work directory so it doesn't have to be hardcoded?
|
|
|
|
const meta = JSON.parse((await queue.exec(`yt-dlp ${proxyArgs} -f 'bv*[height<=720]+ba/b[height<=720] / wv*+ba/w' --skip-download --dump-json "${link}"`)).stdout);
|
|
|
|
const meta = JSON.parse((await queue.exec(`yt-dlp --proxy ${cfg.main.socks} -f 'bv*[height<=720]+ba/b[height<=720] / wv*+ba/w' --skip-download --dump-json "${link}"`)).stdout);
|
|
|
|
ext = meta.ext;
|
|
|
|
ext = meta.ext;
|
|
|
|
} catch (err) {
|
|
|
|
} catch(err) {
|
|
|
|
const tmphead = (await fetch(link, { method: "HEAD" })).headers["content-type"];
|
|
|
|
const tmphead = (await fetch(link, { method: "HEAD" })).headers["content-type"];
|
|
|
|
// this can be undefined for unsupported mime types, but will be caught in the general mime check below
|
|
|
|
// this can be undefined for unsupported mime types, but will be caught in the general mime check below
|
|
|
|
ext = cfg.mimes[tmphead];
|
|
|
|
ext = cfg.mimes[tmphead];
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else if (link.match(regex.imgur)) {
|
|
|
|
else if(link.match(regex.imgur)) {
|
|
|
|
// imghure
|
|
|
|
// imghure
|
|
|
|
ext = link.split('.').pop();
|
|
|
|
ext = link.split('.').pop();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else if (link.match(regex.yt)) {
|
|
|
|
else if(link.match(regex.yt)) {
|
|
|
|
//yt - fuck anti bot protection
|
|
|
|
//yt - fuck anti bot protection
|
|
|
|
try {
|
|
|
|
try {
|
|
|
|
const meta = JSON.parse((await queue.exec(`yt-dlp ${proxyArgs} -f 'bv*[height<=720]+ba/b[height<=720] / wv*+ba/w' -I 1 --skip-download --dump-json "${link}"`)).stdout);
|
|
|
|
const meta = JSON.parse((await queue.exec(`yt-dlp --proxy ${cfg.main.socks} -f 'bv*[height<=720]+ba/b[height<=720] / wv*+ba/w' -I 1 --skip-download --dump-json "${link}"`)).stdout);
|
|
|
|
ext = meta.ext;
|
|
|
|
ext = meta.ext;
|
|
|
|
} catch (err) {
|
|
|
|
} catch(err) {
|
|
|
|
console.error("YT-DLP Error:", err);
|
|
|
|
|
|
|
|
const tmphead = (await fetch(link, { method: "HEAD" })).headers["content-type"];
|
|
|
|
const tmphead = (await fetch(link, { method: "HEAD" })).headers["content-type"];
|
|
|
|
// this can be undefined for unsupported mime types, but will be caught in the general mime check below
|
|
|
|
// this can be undefined for unsupported mime types, but will be caught in the general mime check below
|
|
|
|
ext = cfg.mimes[tmphead];
|
|
|
|
ext = cfg.mimes[tmphead];
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else if (link.match(regex.fourchan)) {
|
|
|
|
else if(link.match(regex.fourchan)) {
|
|
|
|
//4chan - fuck cloudflare :)
|
|
|
|
//4chan - fuck cloudflare :)
|
|
|
|
try {
|
|
|
|
try {
|
|
|
|
const meta = JSON.parse((await queue.exec(`yt-dlp ${proxyArgs} -f 'bv*[height<=720]+ba/b[height<=720] / wv*+ba/w' --skip-download --dump-json "${link}"`)).stdout);
|
|
|
|
const meta = JSON.parse((await queue.exec(`yt-dlp --proxy ${cfg.main.socks} -f 'bv*[height<=720]+ba/b[height<=720] / wv*+ba/w' --skip-download --dump-json "${link}"`)).stdout);
|
|
|
|
ext = meta.ext;
|
|
|
|
ext = meta.ext;
|
|
|
|
} catch (err) {
|
|
|
|
} catch(err) {
|
|
|
|
const tmphead = (await fetch(link, { method: "HEAD" })).headers["content-type"];
|
|
|
|
const tmphead = (await fetch(link, { method: "HEAD" })).headers["content-type"];
|
|
|
|
// this can be undefined for unsupported mime types, but will be caught in the general mime check below
|
|
|
|
// this can be undefined for unsupported mime types, but will be caught in the general mime check below
|
|
|
|
ext = cfg.mimes[tmphead];
|
|
|
|
ext = cfg.mimes[tmphead];
|
|
|
|
@@ -119,15 +117,14 @@ export default async bot => {
|
|
|
|
try {
|
|
|
|
try {
|
|
|
|
const meta = JSON.parse((await queue.exec(`yt-dlp -f 'bv*[height<=720]+ba/b[height<=720] / wv*+ba/w' --skip-download --dump-json "${link}"`)).stdout);
|
|
|
|
const meta = JSON.parse((await queue.exec(`yt-dlp -f 'bv*[height<=720]+ba/b[height<=720] / wv*+ba/w' --skip-download --dump-json "${link}"`)).stdout);
|
|
|
|
ext = meta.ext;
|
|
|
|
ext = meta.ext;
|
|
|
|
} catch (err) {
|
|
|
|
} catch(err) {
|
|
|
|
console.error('err:', err);
|
|
|
|
const tmphead = (await fetch(link, { method: "HEAD" })).headers["content-type"];
|
|
|
|
if (e.type == 'tg')
|
|
|
|
// this can be undefined for unsupported mime types, but will be caught in the general mime check below
|
|
|
|
return await e.editMessageText(msg.result.chat.id, msg.result.message_id, err);
|
|
|
|
ext = cfg.mimes[tmphead];
|
|
|
|
return await e.reply('something went wrong lol / check maxfilesize?');
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (!Object.values(cfg.mimes).includes(ext?.toLowerCase())) {
|
|
|
|
if(!Object.values(cfg.mimes).includes(ext?.toLowerCase())) {
|
|
|
|
return console.log('mime schmime ' + ext);
|
|
|
|
return console.log('mime schmime ' + ext);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@@ -139,44 +136,44 @@ export default async bot => {
|
|
|
|
const start = new Date();
|
|
|
|
const start = new Date();
|
|
|
|
let source;
|
|
|
|
let source;
|
|
|
|
|
|
|
|
|
|
|
|
if (link.match(regex.instagram)) {
|
|
|
|
if(link.match(regex.instagram)) {
|
|
|
|
try {
|
|
|
|
try {
|
|
|
|
// add --cookies <path-to-cookies-file> on local instance if you want to avoid getting rate limited or optionally use a socks proxy from a network that is not being detected as a public network
|
|
|
|
// add --cookies <path-to-cookies-file> on local instance if you want to avoid getting rate limited or optionally use a socks proxy from a network that is not being detected as a public network
|
|
|
|
source = (await queue.exec(`yt-dlp ${proxyArgs} -f 'bv*[height<=1080]+ba/b[height<=1080] / wv*+ba/w' "${link}" --max-filesize ${maxfilesize / 1024}k --postprocessor-args "ffmpeg:-bitexact" -o "./tmp/${uuid}.%(ext)s" --print after_move:filepath --merge-output-format "mp4"`)).stdout.trim();
|
|
|
|
source = (await queue.exec(`yt-dlp --proxy ${cfg.main.socks} -f 'bv*[height<=1080]+ba/b[height<=1080] / wv*+ba/w' "${link}" --max-filesize ${maxfilesize / 1024}k --postprocessor-args "ffmpeg:-bitexact" -o "./tmp/${uuid}.%(ext)s" --print after_move:filepath --merge-output-format "mp4"`)).stdout.trim();
|
|
|
|
} catch (err) {
|
|
|
|
} catch(err) {
|
|
|
|
if (e.type == 'tg')
|
|
|
|
if(e.type == 'tg')
|
|
|
|
return await e.editMessageText(msg.result.chat.id, msg.result.message_id, "instagram dl error");
|
|
|
|
return await e.editMessageText(msg.result.chat.id, msg.result.message_id, "instagram dl error");
|
|
|
|
return await e.reply("instagram dl error", err);
|
|
|
|
return await e.reply("instagram dl error", err);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else if (link.match(regex.imgur)) {
|
|
|
|
else if(link.match(regex.imgur)) {
|
|
|
|
// imghure via torsocks // needs torsocks setup so this is optional
|
|
|
|
// imghure via torsocks // needs torsocks setup so this is optional
|
|
|
|
try {
|
|
|
|
try {
|
|
|
|
await queue.exec(`torsocks wget ${link} -O ./tmp/${uuid}.${ext}`);
|
|
|
|
await queue.exec(`torsocks wget ${link} -O ./tmp/${uuid}.${ext}`);
|
|
|
|
source = `./tmp/${uuid}.${ext}`;
|
|
|
|
source = `./tmp/${uuid}.${ext}`;
|
|
|
|
} catch (err) {
|
|
|
|
} catch(err) {
|
|
|
|
console.error('err:', err);
|
|
|
|
console.error('err:', err);
|
|
|
|
if (e.type == 'tg')
|
|
|
|
if(e.type == 'tg')
|
|
|
|
return await e.editMessageText(msg.result.chat.id, msg.result.message_id, err);
|
|
|
|
return await e.editMessageText(msg.result.chat.id, msg.result.message_id, err);
|
|
|
|
return await e.reply('something went wrong lol');
|
|
|
|
return await e.reply('something went wrong lol');
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else if (link.match(regex.yt)) {
|
|
|
|
else if(link.match(regex.yt)) {
|
|
|
|
try {
|
|
|
|
try {
|
|
|
|
// add --cookies <path-to-cookies-file> on local instance if you want to avoid getting rate limited or optionally use a socks proxy from a network that is not being detected as a public network
|
|
|
|
// add --cookies <path-to-cookies-file> on local instance if you want to avoid getting rate limited or optionally use a socks proxy from a network that is not being detected as a public network
|
|
|
|
source = (await queue.exec(`yt-dlp ${proxyArgs} -f 'bv*[height<=720]+ba/b[height<=720] / wv*+ba/w' "${link}" -I 1 --max-filesize ${maxfilesize / 1024}k --postprocessor-args "ffmpeg:-bitexact" -o "./tmp/${uuid}.%(ext)s" --print after_move:filepath --merge-output-format "mp4"`)).stdout.trim();
|
|
|
|
source = (await queue.exec(`yt-dlp --proxy ${cfg.main.socks} -f 'bv*[height<=720]+ba/b[height<=720] / wv*+ba/w' "${link}" -I 1 --max-filesize ${maxfilesize / 1024}k --postprocessor-args "ffmpeg:-bitexact" -o "./tmp/${uuid}.%(ext)s" --print after_move:filepath --merge-output-format "mp4"`)).stdout.trim();
|
|
|
|
} catch (err) {
|
|
|
|
} catch(err) {
|
|
|
|
if (e.type == 'tg')
|
|
|
|
if(e.type == 'tg')
|
|
|
|
return await e.editMessageText(msg.result.chat.id, msg.result.message_id, "yt dl error");
|
|
|
|
return await e.editMessageText(msg.result.chat.id, msg.result.message_id, "yt dl error");
|
|
|
|
return await e.reply("yt dl error", err);
|
|
|
|
return await e.reply("yt dl error", err);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else if (link.match(regex.fourchan)) {
|
|
|
|
else if(link.match(regex.fourchan)) {
|
|
|
|
// 4chan via proxy - fuck cloudflare
|
|
|
|
// 4chan via proxy - fuck cloudflare
|
|
|
|
try {
|
|
|
|
try {
|
|
|
|
source = (await queue.exec(`yt-dlp ${proxyArgs} -f 'bv*[height<=720]+ba/b[height<=720] / wv*+ba/w' "${link}" --max-filesize ${maxfilesize / 1024}k --postprocessor-args "ffmpeg:-bitexact" -o "./tmp/${uuid}.%(ext)s" --print after_move:filepath --merge-output-format "mp4"`)).stdout.trim();
|
|
|
|
source = (await queue.exec(`yt-dlp --proxy ${cfg.main.socks} -f 'bv*[height<=720]+ba/b[height<=720] / wv*+ba/w' "${link}" --max-filesize ${maxfilesize / 1024}k --postprocessor-args "ffmpeg:-bitexact" -o "./tmp/${uuid}.%(ext)s" --print after_move:filepath --merge-output-format "mp4"`)).stdout.trim();
|
|
|
|
} catch (err) {
|
|
|
|
} catch(err) {
|
|
|
|
if (e.type == 'tg')
|
|
|
|
if(e.type == 'tg')
|
|
|
|
return await e.editMessageText(msg.result.chat.id, msg.result.message_id, "yt dl error");
|
|
|
|
return await e.editMessageText(msg.result.chat.id, msg.result.message_id, "yt dl error");
|
|
|
|
return await e.reply("yt dl error", err);
|
|
|
|
return await e.reply("yt dl error", err);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
@@ -185,23 +182,23 @@ export default async bot => {
|
|
|
|
// everything except the exceptions
|
|
|
|
// everything except the exceptions
|
|
|
|
try {
|
|
|
|
try {
|
|
|
|
source = (await queue.exec(`yt-dlp -f 'bv*[height<=720]+ba/b[height<=720] / wv*+ba/w' "${link}" --max-filesize ${maxfilesize / 1024}k --postprocessor-args "ffmpeg:-bitexact" -o "./tmp/${uuid}.%(ext)s" --print after_move:filepath --merge-output-format "mp4"`)).stdout.trim();
|
|
|
|
source = (await queue.exec(`yt-dlp -f 'bv*[height<=720]+ba/b[height<=720] / wv*+ba/w' "${link}" --max-filesize ${maxfilesize / 1024}k --postprocessor-args "ffmpeg:-bitexact" -o "./tmp/${uuid}.%(ext)s" --print after_move:filepath --merge-output-format "mp4"`)).stdout.trim();
|
|
|
|
} catch (err) {
|
|
|
|
} catch(err) {
|
|
|
|
console.error('err:', err);
|
|
|
|
console.error('err:', err);
|
|
|
|
if (e.type == 'tg')
|
|
|
|
if(e.type == 'tg')
|
|
|
|
return await e.editMessageText(msg.result.chat.id, msg.result.message_id, err);
|
|
|
|
return await e.editMessageText(msg.result.chat.id, msg.result.message_id, err);
|
|
|
|
return await e.reply('something went wrong lol / check maxfilesize?');
|
|
|
|
return await e.reply('something went wrong lol / check maxfilesize?');
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
// </download data>
|
|
|
|
// </download data>
|
|
|
|
|
|
|
|
|
|
|
|
if (!source) {
|
|
|
|
if(!source) {
|
|
|
|
if (e.type == 'tg')
|
|
|
|
if(e.type == 'tg')
|
|
|
|
return await e.editMessageText(msg.result.chat.id, msg.result.message_id, "something went wrong lol");
|
|
|
|
return await e.editMessageText(msg.result.chat.id, msg.result.message_id, "something went wrong lol");
|
|
|
|
return await e.reply("something went wrong lol");
|
|
|
|
return await e.reply("something went wrong lol");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (source.match(/larger than/)) {
|
|
|
|
if(source.match(/larger than/)) {
|
|
|
|
if (e.type == 'tg')
|
|
|
|
if(e.type == 'tg')
|
|
|
|
return await e.editMessageText(msg.result.chat.id, msg.result.message_id, "too large lol");
|
|
|
|
return await e.editMessageText(msg.result.chat.id, msg.result.message_id, "too large lol");
|
|
|
|
return await e.reply("too large lol");
|
|
|
|
return await e.reply("too large lol");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
@@ -209,9 +206,9 @@ export default async bot => {
|
|
|
|
|
|
|
|
|
|
|
|
// filesize check
|
|
|
|
// filesize check
|
|
|
|
const size = fs.statSync(source).size;
|
|
|
|
const size = fs.statSync(source).size;
|
|
|
|
if (size > maxfilesize) {
|
|
|
|
if(size > maxfilesize) {
|
|
|
|
await fs.promises.unlink(source).catch(_ => { });
|
|
|
|
await fs.promises.unlink(source).catch(_=>{});
|
|
|
|
if (e.type == 'tg')
|
|
|
|
if(e.type == 'tg')
|
|
|
|
return await e.editMessageText(msg.result.chat.id, msg.result.message_id, `too large lol. (${lib.formatSize(size)} / ${lib.formatSize(maxfilesize)})`);
|
|
|
|
return await e.editMessageText(msg.result.chat.id, msg.result.message_id, `too large lol. (${lib.formatSize(size)} / ${lib.formatSize(maxfilesize)})`);
|
|
|
|
return await e.reply(`too large lol. (${lib.formatSize(size)} / ${lib.formatSize(maxfilesize)})`);
|
|
|
|
return await e.reply(`too large lol. (${lib.formatSize(size)} / ${lib.formatSize(maxfilesize)})`);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
@@ -219,28 +216,28 @@ export default async bot => {
|
|
|
|
// mime check
|
|
|
|
// mime check
|
|
|
|
let mime = (await queue.exec(`file --mime-type -b ${source}`)).stdout.trim();
|
|
|
|
let mime = (await queue.exec(`file --mime-type -b ${source}`)).stdout.trim();
|
|
|
|
try {
|
|
|
|
try {
|
|
|
|
if (mime == 'video/x-matroska') { // mkv failsafe
|
|
|
|
if(mime == 'video/x-matroska') { // mkv failsafe
|
|
|
|
await queue.exec(`ffmpeg -i ./tmp/${uuid}.mkv -codec copy ./tmp/${uuid}.mp4`);
|
|
|
|
await queue.exec(`ffmpeg -i ./tmp/${uuid}.mkv -codec copy ./tmp/${uuid}.mp4`);
|
|
|
|
await fs.promises.unlink(source).catch(_ => { });
|
|
|
|
await fs.promises.unlink(source).catch(_=>{});
|
|
|
|
source = source.replace(/\.mkv$/, '.mp4');
|
|
|
|
source = source.replace(/\.mkv$/, '.mp4');
|
|
|
|
mime = 'video/mp4';
|
|
|
|
mime = 'video/mp4';
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (source.match(/\.opus$/)) { // opus failsafe
|
|
|
|
if(source.match(/\.opus$/)) { // opus failsafe
|
|
|
|
await queue.exec(`ffmpeg -i ./tmp/${uuid}.opus -codec copy ./tmp/${uuid}.ogg`);
|
|
|
|
await queue.exec(`ffmpeg -i ./tmp/${uuid}.opus -codec copy ./tmp/${uuid}.ogg`);
|
|
|
|
await fs.promises.unlink(source);
|
|
|
|
await fs.promises.unlink(source);
|
|
|
|
source = source.replace(/\.opus$/, '.ogg');
|
|
|
|
source = source.replace(/\.opus$/, '.ogg');
|
|
|
|
mime = 'audio/ogg';
|
|
|
|
mime = 'audio/ogg';
|
|
|
|
}
|
|
|
|
}
|
|
|
|
} catch (err) {
|
|
|
|
} catch(err) {
|
|
|
|
await fs.promises.unlink(source).catch(_ => { });
|
|
|
|
await fs.promises.unlink(source).catch(_=>{});
|
|
|
|
if (e.type == 'tg')
|
|
|
|
if(e.type == 'tg')
|
|
|
|
return await e.editMessageText(msg.result.chat.id, msg.result.message_id, "something went wrong lol");
|
|
|
|
return await e.editMessageText(msg.result.chat.id, msg.result.message_id, "something went wrong lol");
|
|
|
|
return await e.reply("something went wrong lol");
|
|
|
|
return await e.reply("something went wrong lol");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (!Object.keys(cfg.mimes).includes(mime)) {
|
|
|
|
if(!Object.keys(cfg.mimes).includes(mime)) {
|
|
|
|
await fs.promises.unlink(source).catch(_ => { });
|
|
|
|
await fs.promises.unlink(source).catch(_=>{});
|
|
|
|
if (e.type == 'tg')
|
|
|
|
if(e.type == 'tg')
|
|
|
|
return await e.editMessageText(msg.result.chat.id, msg.result.message_id, `lol, go f0ck yourself (${mime})`);
|
|
|
|
return await e.editMessageText(msg.result.chat.id, msg.result.message_id, `lol, go f0ck yourself (${mime})`);
|
|
|
|
return await e.reply(`lol, go f0ck yourself (${mime})`);
|
|
|
|
return await e.reply(`lol, go f0ck yourself (${mime})`);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
@@ -250,9 +247,9 @@ export default async bot => {
|
|
|
|
|
|
|
|
|
|
|
|
// check repost (checksum)
|
|
|
|
// check repost (checksum)
|
|
|
|
repost = await queue.checkrepostsum(checksum);
|
|
|
|
repost = await queue.checkrepostsum(checksum);
|
|
|
|
if (repost) {
|
|
|
|
if(repost) {
|
|
|
|
await fs.promises.unlink(source).catch(_ => { });
|
|
|
|
await fs.promises.unlink(source).catch(_=>{});
|
|
|
|
if (e.type == 'tg')
|
|
|
|
if(e.type == 'tg')
|
|
|
|
return await e.editMessageText(msg.result.chat.id, msg.result.message_id, `repost motherf0cker (checksum): ${cfg.main.url.full}/${repost}`);
|
|
|
|
return await e.editMessageText(msg.result.chat.id, msg.result.message_id, `repost motherf0cker (checksum): ${cfg.main.url.full}/${repost}`);
|
|
|
|
return await e.reply(`repost motherf0cker (checksum): ${cfg.main.url.full}/${repost}`);
|
|
|
|
return await e.reply(`repost motherf0cker (checksum): ${cfg.main.url.full}/${repost}`);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
@@ -260,7 +257,7 @@ export default async bot => {
|
|
|
|
const filename = path.basename(source);
|
|
|
|
const filename = path.basename(source);
|
|
|
|
|
|
|
|
|
|
|
|
await fs.promises.copyFile(source, `./public/b/${filename}`);
|
|
|
|
await fs.promises.copyFile(source, `./public/b/${filename}`);
|
|
|
|
await fs.promises.unlink(source).catch(_ => { });
|
|
|
|
await fs.promises.unlink(source).catch(_=>{});
|
|
|
|
|
|
|
|
|
|
|
|
// user alias
|
|
|
|
// user alias
|
|
|
|
let username = e.user.nick || e.user.username;
|
|
|
|
let username = e.user.nick || e.user.username;
|
|
|
|
@@ -271,12 +268,13 @@ export default async bot => {
|
|
|
|
where lower(user_alias.alias) ilike ${username}
|
|
|
|
where lower(user_alias.alias) ilike ${username}
|
|
|
|
limit 1
|
|
|
|
limit 1
|
|
|
|
`)?.[0]?.user;
|
|
|
|
`)?.[0]?.user;
|
|
|
|
if (alias) {
|
|
|
|
if(alias) {
|
|
|
|
username = alias;
|
|
|
|
username = alias;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
await db`
|
|
|
|
await db`
|
|
|
|
insert into items ${db({
|
|
|
|
insert into items ${
|
|
|
|
|
|
|
|
db({
|
|
|
|
src: e.media ? "" : link,
|
|
|
|
src: e.media ? "" : link,
|
|
|
|
dest: filename,
|
|
|
|
dest: filename,
|
|
|
|
mime: mime,
|
|
|
|
mime: mime,
|
|
|
|
@@ -293,20 +291,10 @@ export default async bot => {
|
|
|
|
|
|
|
|
|
|
|
|
const itemid = await queue.getItemID(filename);
|
|
|
|
const itemid = await queue.getItemID(filename);
|
|
|
|
|
|
|
|
|
|
|
|
// auto-tag sfw
|
|
|
|
|
|
|
|
await db`
|
|
|
|
|
|
|
|
insert into tags_assign ${db({
|
|
|
|
|
|
|
|
item_id: itemid,
|
|
|
|
|
|
|
|
tag_id: 1, // sfw
|
|
|
|
|
|
|
|
user_id: 2 // f0ck
|
|
|
|
|
|
|
|
}, 'item_id', 'tag_id', 'user_id')
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
`;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// generate thumbnail
|
|
|
|
// generate thumbnail
|
|
|
|
try {
|
|
|
|
try {
|
|
|
|
await queue.genThumbnail(filename, mime, itemid, link);
|
|
|
|
await queue.genThumbnail(filename, mime, itemid, link);
|
|
|
|
} catch (err) {
|
|
|
|
} catch(err) {
|
|
|
|
await queue.exec(`magick ./mugge.png ./public/t/${itemid}.webp`);
|
|
|
|
await queue.exec(`magick ./mugge.png ./public/t/${itemid}.webp`);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@@ -327,13 +315,13 @@ export default async bot => {
|
|
|
|
let outputmsgirc = `[f0cked] link: ${cfg.main.url.full}/${itemid} | size: ${lib.formatSize(size)} | speed: ${speed}`;
|
|
|
|
let outputmsgirc = `[f0cked] link: ${cfg.main.url.full}/${itemid} | size: ${lib.formatSize(size)} | speed: ${speed}`;
|
|
|
|
let outputmsgtg = `[f0cked] size: ${lib.formatSize(size)} | speed: ${speed}`;
|
|
|
|
let outputmsgtg = `[f0cked] size: ${lib.formatSize(size)} | speed: ${speed}`;
|
|
|
|
|
|
|
|
|
|
|
|
if (tags?.length > 0) {
|
|
|
|
if(tags?.length > 0) {
|
|
|
|
const tagstr = tags.join(', ');
|
|
|
|
const tagstr = tags.join(', ');
|
|
|
|
outputmsgirc += ` | tags: ${tagstr}`;
|
|
|
|
outputmsgirc += ` | tags: ${tagstr}`;
|
|
|
|
outputmsgtg += ` | tags: ${tagstr}`;
|
|
|
|
outputmsgtg += ` | tags: ${tagstr}`;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (e.type == 'tg') {
|
|
|
|
if(e.type == 'tg') {
|
|
|
|
await e.deleteMessage(msg.result.chat.id, msg.result.message_id);
|
|
|
|
await e.deleteMessage(msg.result.chat.id, msg.result.message_id);
|
|
|
|
await e.reply(outputmsgtg, {
|
|
|
|
await e.reply(outputmsgtg, {
|
|
|
|
reply_markup: JSON.stringify({
|
|
|
|
reply_markup: JSON.stringify({
|
|
|
|
@@ -351,7 +339,7 @@ export default async bot => {
|
|
|
|
else {
|
|
|
|
else {
|
|
|
|
await e.reply(outputmsgirc);
|
|
|
|
await e.reply(outputmsgirc);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
});
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}];
|
|
|
|
}];
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|