This commit is contained in:
Flummi
2025-03-24 11:13:27 +01:00
parent 30ac7ef6be
commit 728f044066
5 changed files with 220 additions and 21 deletions

View File

@@ -1,6 +1,13 @@
import fetch from 'flumm-fetch';
import fetch from 'node-fetch';
import cfg from './config.mjs';
const parseOutput = text => {
text = text.trim().toLowerCase();
return text.includes(', ')
? text.split(', ')
: text.replace(/\d\. /g, '').split('\n');
};
export default new class autotagger {
async isNSFW(filename, filesize) {
let opts = {
@@ -29,4 +36,34 @@ export default new class autotagger {
else
return res.unsafe;
};
async getTags(id) {
if(!id)
return;
try {
const f0ck = `${cfg.main.url.full}/t/${id}.webp`;
const blob = await (await fetch(f0ck)).arrayBuffer();
const res = await fetch(`${cfg.apis.cf.url}/${cfg.apis.cf.id}/ai/run/${cfg.apis.cf.model}`, {
method: "POST",
headers: {
"Content-Type": "application/json",
"Authorization": `Bearer ${cfg.apis.cf.key}`
},
body: JSON.stringify({
image: [ ...new Uint8Array(blob) ],
prompt: "Generate eight comma separated tags without colors for this image.",
max_tokens: 128
})
});
const json = await res.json();
console.log(json.result.description);
return parseOutput(json.result.description);
} catch(err) {
return {
error: err.message || "unknown error"
};
}
};
};

View File

@@ -98,6 +98,7 @@ export default async bot => {
}
if(!Object.values(cfg.mimes).includes(ext?.toLowerCase())) {
await e.reply("mime schmime");
return console.log('mime schmime ' + ext);
}
@@ -254,29 +255,12 @@ export default async bot => {
let speed = lib.calcSpeed(size, end);
speed = !Number.isFinite(speed) ? "yes" : `${speed.toFixed(2)} Mbit/s`;
// autotagger
let tags = [];
/*if(cfg.apis?.nsfw1 && mime.startsWith('image')) {
const nsfw = await autotagger.isNSFW(filename, size);
tags.push(nsfw ? 'nsfw' : 'sfw');
if(nsfw)
await queue.tagNSFW(itemid);
else
await queue.tagSFW(itemid);
}*/
let outputmsgirc = `[f0cked] link: ${cfg.main.url.full}/${itemid} | size: ${lib.formatSize(size)} | speed: ${speed}`;
let outputmsgtg = `[f0cked] size: ${lib.formatSize(size)} | speed: ${speed}`;
if(tags?.length > 0) {
const tagstr = tags.join(', ');
outputmsgirc += ` | tags: ${tagstr}`;
outputmsgtg += ` | tags: ${tagstr}`;
}
if(e.type == 'tg') {
await e.deleteMessage(msg.result.chat.id, msg.result.message_id);
await e.reply(outputmsgtg, {
/*await e.reply(outputmsgtg, {
reply_markup: JSON.stringify({
inline_keyboard: [[
{ text: (await lib.hasTag(itemid, 1) ? '✓ ' : '') + 'sfw', callback_data: `b_sfw:${itemid}` },
@@ -287,6 +271,42 @@ export default async bot => {
{ text: `open f0ck #${itemid}`, url: `${cfg.main.url.full}/${itemid}` }
]]
})
});*/
let tags;
try {
tags = (await autotagger.getTags(itemid))
.map(t => ({ text: t, callback_data: 'nope' }));
await e.reply(outputmsgtg, {
reply_markup: JSON.stringify({
inline_keyboard: [[
{ text: (await lib.hasTag(itemid, 1) ? '✓ ' : '') + 'sfw', callback_data: `b_sfw:${itemid}` },
{ text: (await lib.hasTag(itemid, 2) ? '✓ ' : '') + 'nsfw', callback_data: `b_nsfw:${itemid}` },
],
[ ...tags.splice(0, 4) ],
[ ...tags.splice(0, 4) ],
[
{ text: `open f0ck #${itemid}`, url: `${cfg.main.url.full}/${itemid}` },
{ text: '❌ delete', callback_data: `b_delete:${itemid}` }
]]
})
});
return;
} catch(err) {
console.error(err);
}
await e.reply(outputmsgtg, {
reply_markup: JSON.stringify({
inline_keyboard: [[
{ text: (await lib.hasTag(itemid, 1) ? '✓ ' : '') + 'sfw', callback_data: `b_sfw:${itemid}` },
{ text: (await lib.hasTag(itemid, 2) ? '✓ ' : '') + 'nsfw', callback_data: `b_nsfw:${itemid}` },
], [
{ text: `open f0ck #${itemid}`, url: `${cfg.main.url.full}/${itemid}` },
{ text: '❌ delete', callback_data: `b_delete:${itemid}` }
]]
})
});
}
else {