diff --git a/src/inc/events/callback_query.mjs b/src/inc/events/callback_query.mjs
new file mode 100644
index 0000000..4ea3bc8
--- /dev/null
+++ b/src/inc/events/callback_query.mjs
@@ -0,0 +1,265 @@
+import logger from "../log.mjs";
+import { getLevel } from "../../inc/admin.mjs";
+import { promises as fs } from "fs";
+import cfg from "../config.mjs";
+import db from "../sql.mjs";
+import lib from "../lib.mjs";
+
+export default async bot => {
+
+ return [{
+ name: "callback_query",
+ listener: "callback_query",
+ f: async e => {
+ logger.info(`${e.network} -> ${e.channel} -> ${e.user.nick}: ${e.message}`);
+
+ let [ cmd, id ] = e.opt.data.split(':');
+ let f0ck;
+ id = +id;
+
+ switch(cmd) {
+ case "b_tags":
+ if(!id)
+ return;
+
+ const tags = [{
+ tag: 'music',
+ id: 115
+ }, {
+ tag: 'german',
+ id: 329
+ }, {
+ tag: 'cat',
+ id: 217
+ }, {
+ tag: 'doggo',
+ id: 5
+ }];
+ const keyboard = await Promise.all(tags.map(async t => ({ text: `${await lib.hasTag(id, t.id) ? '✓ ' : ''}${t.tag}`, callback_data: `b_${t.tag}:${id}` })));
+
+ await e.editMessageText(e.raw.chat.id, e.raw.message_id, e.message, {
+ reply_markup: JSON.stringify({
+ inline_keyboard: [[
+ ...keyboard
+ ], [
+ { text: 'back', callback_data: `b_back:${id}` }
+ ]]
+ })
+ });
+ break;
+ case "b_back":
+ if(!id)
+ return;
+
+ await e.editMessageText(e.raw.chat.id, e.raw.message_id, e.message, {
+ reply_markup: JSON.stringify({
+ inline_keyboard: [[
+ { text: (await lib.hasTag(id, 1) ? '✓ ' : '') + 'sfw', callback_data: `b_sfw:${id}` },
+ { text: (await lib.hasTag(id, 2) ? '✓ ' : '') + 'nsfw', callback_data: `b_nsfw:${id}` },
+ { text: 'tags', callback_data: `b_tags:${id}` },
+ { text: '❌ delete', callback_data: `b_delete:${id}` }
+ ], [
+ { text: `open f0ck #${id}`, url: `${cfg.main.url.full}/${id}` }
+ ]]
+ })
+ });
+ break;
+ case "b_sfw":
+
+ if(!id)
+ return;
+
+ if(!(await lib.getTags(id)).filter(tag => [1,2].includes(tag.id)).length) {
+ // insert
+ await db`
+ insert into "tags_assign" ${
+ db({
+ item_id: id,
+ tag_id: 1, // sfw
+ user_id: 1
+ })
+ }
+ `;
+ }
+ else {
+ // update
+ await db`
+ update "tags_assign" set tag_id = 1
+ where
+ tag_id = 2 and
+ item_id = ${id}
+ `;
+ }
+
+ await e.editMessageText(e.raw.chat.id, e.raw.message_id, e.message, {
+ reply_markup: JSON.stringify({
+ inline_keyboard: [[
+ { text: '✓ sfw', callback_data: `b_sfw:${id}` },
+ { text: 'nsfw', callback_data: `b_nsfw:${id}` },
+ { text: 'tags', callback_data: `b_tags:${id}` },
+ { text: '❌ delete', callback_data: `b_delete:${id}` }
+ ], [
+ { text: `open f0ck #${id}`, url: `${cfg.main.url.full}/${id}` }
+ ]]
+ })
+ });
+
+ break;
+ case "b_nsfw":
+ if(!id)
+ return;
+
+ if(!(await lib.getTags(id)).filter(tag => [1,2].includes(tag.id)).length) {
+ // insert
+ await db`
+ insert into "tags_assign" ${
+ db({
+ item_id: id,
+ tag_id: 2, // nsfw
+ user_id: 1
+ })
+ }
+ `;
+ }
+ else {
+ // update
+ await db`
+ update "tags_assign" set tag_id = 2
+ where
+ tag_id = 1 and
+ item_id = ${id}
+ `;
+ }
+
+ await e.editMessageText(e.raw.chat.id, e.raw.message_id, e.message, {
+ reply_markup: JSON.stringify({
+ inline_keyboard: [[
+ { text: 'sfw', callback_data: `b_sfw:${id}` },
+ { text: '✓ nsfw', callback_data: `b_nsfw:${id}` },
+ { text: 'tags', callback_data: `b_tags:${id}` },
+ { text: '❌ delete', callback_data: `b_delete:${id}` }
+ ], [
+ { text: `open f0ck #${id}`, url: `${cfg.main.url.full}/${id}` }
+ ]]
+ })
+ });
+ break;
+ case "b_delete":
+ if(id <= 1)
+ return;
+
+ e.user = {
+ prefix: `${e.raw.reply_to_message.from.username}!${e.raw.reply_to_message.from.id}@${e.network}`,
+ nick: e.raw.reply_to_message.from.first_name,
+ username: e.raw.reply_to_message.from.username,
+ account: e.raw.reply_to_message.from.id.toString()
+ };
+
+ f0ck = await db`
+ select dest, mime, username, userchannel, usernetwork
+ from "items"
+ where
+ id = ${id} and
+ active = 'true'
+ limit 1
+ `;
+ const level = getLevel(e.user).level;
+
+ if(f0ck.length === 0) {
+ return await e.reply(`f0ck ${id}: f0ck not found`);
+ }
+
+ if(
+ (f0ck[0].username !== (e.user.nick || e.user.username) ||
+ f0ck[0].userchannel !== e.channel ||
+ f0ck[0].usernetwork !== e.network) &&
+ level < 100
+ ) {
+ return await e.reply(`f0ck ${id}: insufficient permissions`);
+ }
+
+ if(~~(new Date() / 1e3) >= (f0ck[0].stamp + 600) && level < 100) {
+ return await e.reply(`f0ck ${id}: too late lol`);
+ }
+
+ await db`update "items" set active = 'false' where id = ${id}`;
+
+ await fs.copyFile(`./public/b/${f0ck[0].dest}`, `./deleted/b/${f0ck[0].dest}`).catch(_=>{});
+ await fs.copyFile(`./public/t/${id}.webp`, `./deleted/t/${id}.webp`).catch(_=>{});
+ await fs.unlink(`./public/b/${f0ck[0].dest}`).catch(_=>{});
+ await fs.unlink(`./public/t/${id}.webp`).catch(_=>{});
+
+ if(f0ck[0].mime.startsWith('audio')) {
+ await fs.copyFile(`./public/ca/${id}.webp`, `./deleted/ca/${id}.webp`).catch(_=>{});
+ await fs.unlink(`./public/ca/${id}.webp`).catch(_=>{});
+ }
+
+ await e.editMessageText(e.raw.chat.id, e.raw.message_id, e.message, {
+ reply_markup: JSON.stringify({
+ inline_keyboard: [[
+ { text: (await lib.hasTag(id, 1) ? '✓ ' : '') + 'sfw', callback_data: `b_sfw:${id}` },
+ { text: (await lib.hasTag(id, 2) ? '✓ ' : '') + 'nsfw', callback_data: `b_nsfw:${id}` },
+ { text: 'tags', callback_data: `b_tags:${id}` },
+ { text: 'recover', callback_data: `b_recover:${id}` }
+ ], [
+ { text: `open f0ck #${id}`, url: `${cfg.main.url.full}/${id}` }
+ ]]
+ })
+ });
+ break;
+ case "b_recover":
+ if(id <= 1)
+ return;
+
+ e.user = {
+ prefix: `${e.raw.reply_to_message.from.username}!${e.raw.reply_to_message.from.id}@${e.network}`,
+ nick: e.raw.reply_to_message.from.first_name,
+ username: e.raw.reply_to_message.from.username,
+ account: e.raw.reply_to_message.from.id.toString()
+ };
+
+ f0ck = await db`
+ select dest, mime
+ from "items"
+ where
+ id = ${id} and
+ active = 'false'
+ limit 1
+ `;
+
+ if(f0ck.length === 0) {
+ return await e.reply(`f0ck ${id}: f0ck not found`);
+ }
+
+ await fs.copyFile(`./deleted/b/${f0ck[0].dest}`, `./public/b/${f0ck[0].dest}`).catch(_=>{});
+ await fs.copyFile(`./deleted/t/${id}.webp`, `./public/t/${id}.webp`).catch(_=>{});
+ await fs.unlink(`./deleted/b/${f0ck[0].dest}`).catch(_=>{});
+ await fs.unlink(`./deleted/t/${id}.webp`).catch(_=>{});
+
+ if(f0ck[0].mime.startsWith('audio')) {
+ await fs.copyFile(`./deleted/ca/${id}.webp`, `./public/ca/${id}.webp`).catch(_=>{});
+ await fs.unlink(`./deleted/ca/${id}.webp`).catch(_=>{});
+ }
+
+ await db`update "items" set active = 'true' where id = ${id}`;
+
+ await e.editMessageText(e.raw.chat.id, e.raw.message_id, e.message, {
+ reply_markup: JSON.stringify({
+ inline_keyboard: [[
+ { text: (await lib.hasTag(id, 1) ? '✓ ' : '') + 'sfw', callback_data: `b_sfw:${id}` },
+ { text: (await lib.hasTag(id, 2) ? '✓ ' : '') + 'nsfw', callback_data: `b_nsfw:${id}` },
+ { text: 'tags', callback_data: `b_tags:${id}` },
+ { text: '❌ delete', callback_data: `b_delete:${id}` }
+ ], [
+ { text: `open f0ck #${id}`, url: `${cfg.main.url.full}/${id}` }
+ ]]
+ })
+ });
+ break;
+ default:
+ await e.reply('lol');
+ }
+ }
+ }];
+
+};
diff --git a/src/inc/events/message.mjs b/src/inc/events/message.mjs
index ef5fb8f..07af7c7 100644
--- a/src/inc/events/message.mjs
+++ b/src/inc/events/message.mjs
@@ -40,7 +40,7 @@ export default async bot => {
}
catch(err) {
console.error(err);
- e.reply(`${t[0]}: An error occured.`);
+ await e.reply(`${t[0]}: An error occured.`);
logger.error(`${e.network} -> ${e.channel} -> ${e.user.nick}: ${err.toString ? err : JSON.stringify(err)}`);
}
});
diff --git a/src/inc/lib.mjs b/src/inc/lib.mjs
index 4200d7b..3892696 100644
--- a/src/inc/lib.mjs
+++ b/src/inc/lib.mjs
@@ -161,6 +161,17 @@ export default new class {
}
return tags;
};
+ async hasTag(itemid, tagid) {
+ const tag = (await db`
+ select *
+ from "tags_assign"
+ where
+ item_id = ${+itemid} and
+ tag_id = ${+tagid}
+ limit 1
+ `).length;
+ return !!tag;
+ };
async detectNSFW(dest) {
return false;
const { stdout, stderr } = await exec(
diff --git a/src/inc/trigger/debug.mjs b/src/inc/trigger/debug.mjs
index 2798358..7d1c6a6 100644
--- a/src/inc/trigger/debug.mjs
+++ b/src/inc/trigger/debug.mjs
@@ -1,4 +1,5 @@
import { getLevel } from "../admin.mjs";
+import lib from "../lib.mjs";
import fetch from "flumm-fetch";
import vm from "vm";
@@ -19,16 +20,16 @@ export default async bot => {
name: "level",
call: /^!level (.*)/i,
active: true,
- f: e => {
+ f: async e => {
const user = e.message.trim().substring(7);
- e.reply( JSON.stringify( getLevel( e.self.user.get(user) || {} ) ) );
+ await e.reply( JSON.stringify( getLevel( e.self.user.get(user) || {} ) ) );
}
}, {
name: "self",
call: /^!self$/i,
active: true,
- f: e => {
- e.reply( JSON.stringify( e.user ) );
+ f: async e => {
+ await e.reply( JSON.stringify( e.user ) );
}
}, {
name: "sandbox_debug",
@@ -41,6 +42,7 @@ export default async bot => {
context.e = e;
context.bot = bot;
context.level = getLevel;
+ context.hasTag = lib.hasTag;
context.a = null;
await new Promise(resolve => {
@@ -52,9 +54,9 @@ export default async bot => {
let output = JSON.stringify(context.a);
if(output.length > maxoutput)
- return e.reply(`fuggg, Ausgabe wäre viel zu lang! (${output.length} Zeichen :DDDDDD)`);
+ return await e.reply(`fuggg, Ausgabe wäre viel zu lang! (${output.length} Zeichen :DDDDDD)`);
else
- return e.reply(output);
+ return await e.reply(output);
}
}];
};
diff --git a/src/inc/trigger/delete.mjs b/src/inc/trigger/delete.mjs
index a620407..eb22a9e 100644
--- a/src/inc/trigger/delete.mjs
+++ b/src/inc/trigger/delete.mjs
@@ -27,7 +27,7 @@ export default async bot => {
const level = getLevel(e.user).level;
if(f0ck.length === 0) {
- e.reply(`f0ck ${id}: f0ck not found`);
+ await e.reply(`f0ck ${id}: f0ck not found`);
continue;
}
@@ -37,12 +37,12 @@ export default async bot => {
f0ck[0].usernetwork !== e.network) &&
level < 100
) {
- e.reply(`f0ck ${id}: insufficient permissions`);
+ await e.reply(`f0ck ${id}: insufficient permissions`);
continue;
}
if(~~(new Date() / 1e3) >= (f0ck[0].stamp + 600) && level < 100) {
- e.reply(`f0ck ${id}: too late lol`);
+ await e.reply(`f0ck ${id}: too late lol`);
continue;
}
@@ -61,7 +61,7 @@ export default async bot => {
deleted.push(id);
}
- e.reply(`deleted ${deleted.length}/${e.args.length} f0cks (${deleted.join(",")})`);
+ await e.reply(`deleted ${deleted.length}/${e.args.length} f0cks (${deleted.join(",")})`);
}
}, {
name: "recover",
@@ -86,7 +86,7 @@ export default async bot => {
`;
if(f0ck.length === 0) {
- e.reply(`f0ck ${id}: f0ck not found`);
+ await e.reply(`f0ck ${id}: f0ck not found`);
continue;
}
@@ -105,7 +105,7 @@ export default async bot => {
recovered.push(id);
}
- e.reply(`recovered ${recovered.length}/${e.args.length} f0cks (${recovered.join(",")})`);
+ await e.reply(`recovered ${recovered.length}/${e.args.length} f0cks (${recovered.join(",")})`);
}
}]
};
diff --git a/src/inc/trigger/f0ck.mjs b/src/inc/trigger/f0ck.mjs
index 6e5d7ef..1c5b69c 100644
--- a/src/inc/trigger/f0ck.mjs
+++ b/src/inc/trigger/f0ck.mjs
@@ -5,29 +5,6 @@ import cfg from "../config.mjs";
import db from "../sql.mjs";
import lib from "../lib.mjs";
-/*const cleanTags = async () => {
- const tags = await db`
- select *
- from "tags"
- left join "tags_assign" on "tags_assign".tag_id = "tags".id
- where "tags_assign".item_id is null
- `;
-
- if(tags.length === 0)
- return 0;
-
- let deleteTag = sql("tags");
- let dtags = 0;
- tags.forEach(tag => {
- if(["sfw", "nsfw"].includes(tag.tag.toLowerCase()))
- return dtags;
- deleteTag = deleteTag.orWhere("id", tag.id);
- dtags++;
- });
- await deleteTag.del();
- return dtags;
-};*/
-
export default async bot => {
return [{
@@ -48,44 +25,40 @@ export default async bot => {
t: lib.formatSize((await Promise.all(dirs.t.map( async file => (await fs.stat(`./public/t/${file}`)).size)) ).reduce((a, b) => b + a)),
ca: lib.formatSize((await Promise.all(dirs.ca.map(async file => (await fs.stat(`./public/ca/${file}`)).size))).reduce((a, b) => b + a)),
};
- return e.reply(`${dirs.b.length} f0cks: ${sizes.b}, ${dirs.t.length} thumbnails: ${sizes.t}, ${dirs.ca.length} coverarts: ${sizes.ca}`);
+ return await e.reply(`${dirs.b.length} f0cks: ${sizes.b}, ${dirs.t.length} thumbnails: ${sizes.t}, ${dirs.ca.length} coverarts: ${sizes.ca}`);
case "limit":
- return e.reply(`up to ${lib.formatSize(cfg.main.maxfilesize)} (${lib.formatSize(cfg.main.maxfilesize * cfg.main.adminmultiplier)} for admins)`);
+ return await e.reply(`up to ${lib.formatSize(cfg.main.maxfilesize)} (${lib.formatSize(cfg.main.maxfilesize * cfg.main.adminmultiplier)} for admins)`);
case "thumb":
const rows = await db`
select id
from "items"
`;
- const dir = (await fs.readdir("./public/t")).filter(d => d.endsWith(".png")).map(e => +e.split(".")[0]);
+ const dir = (await fs.readdir("./public/t")).filter(d => d.endsWith(".webp")).map(e => +e.split(".")[0]);
const tmp = [];
for(let row of rows)
!dir.includes(row.id) ? tmp.push(row.id) : null;
- e.reply(`${tmp.length}, ${rows.length}, ${dir.length}`);
+ await e.reply(`${tmp.length}, ${rows.length}, ${dir.length}`);
break;
case "cache":
cfg.websrv.cache = !cfg.websrv.cache;
- return e.reply(`Cache is ${cfg.websrv.cache ? "enabled" : "disabled"}`);
+ return await e.reply(`Cache is ${cfg.websrv.cache ? "enabled" : "disabled"}`);
case "uptime":
- exec('sudo systemctl status f0ck', (err, stdout) => {
+ exec('sudo systemctl status f0ck', async (err, stdout) => {
if(!err)
- return e.reply(stdout.split('\n')[2].trim().replace("Active: active (running)", "i'm active"));
+ return await e.reply(stdout.split('\n')[2].trim().replace("Active: active (running)", "i'm active"));
});
break;
case "restart":
- e.reply("hay hay patron, hemen!");
+ await e.reply("hay hay patron, hemen!");
exec("sudo systemctl restart f0ck");
break;
- /*case "cleanTags":
- const tags = await cleanTags();
- e.reply(tags + " tags removed");
- break;*/
case "clearTmp":
await Promise.all((await fs.readdir("./tmp")).filter(d => d !== ".empty").map(async d => fs.unlink(`./tmp/${d}`)));
- e.reply("cleared lol");
+ await e.reply("cleared lol");
break;
case "status":
const tmpc = await lib.countf0cks();
- e.reply(`tagged: ${tmpc.tagged}; untagged: ${tmpc.untagged}; sfw: ${tmpc.sfw}; nsfw: ${tmpc.nsfw}; total: ${tmpc.total}`);
+ await e.reply(`tagged: ${tmpc.tagged}; untagged: ${tmpc.untagged}; sfw: ${tmpc.sfw}; nsfw: ${tmpc.nsfw}; total: ${tmpc.total}`);
break;
case "autotagger":
const body = { headers: { Authorization: `Basic ${cfg.tagger.btoa}` } };
@@ -93,7 +66,7 @@ export default async bot => {
if(res) {
const processed = res.result.monthly_processed;
const limit = res.result.monthly_limit;
- return e.reply(`autotagger: usage/limit: ${processed}/${limit}`);
+ return await e.reply(`autotagger: usage/limit: ${processed}/${limit}`);
}
return;
break;
@@ -101,7 +74,7 @@ export default async bot => {
const origTag = e.args.slice(1).join(' ');
if(origTag.length <= 1)
- return e.reply("absichtliche Provokation!");
+ return await e.reply("absichtliche Provokation!");
const origTagID = (await sql('tags').where('tag', origTag))[0].id;
@@ -116,10 +89,10 @@ export default async bot => {
.del()
);
- e.reply(JSON.stringify({ affected, deleted }));
+ await e.reply(JSON.stringify({ affected, deleted }));
break;*/
case "help":
- e.reply("cmds: stats, limit, thumb, cache, uptime, restart, cleanTags, clearTmp, status");
+ await e.reply("cmds: stats, limit, thumb, cache, uptime, restart, cleanTags, clearTmp, status");
break;
default:
return;
diff --git a/src/inc/trigger/f0ckgag.mjs b/src/inc/trigger/f0ckgag.mjs
index 1eb253a..8265b2b 100644
--- a/src/inc/trigger/f0ckgag.mjs
+++ b/src/inc/trigger/f0ckgag.mjs
@@ -22,9 +22,9 @@ export default async bot => {
`;
if(rows.length === 0)
- return e.reply("no f0cks given! lol D:");
+ return await e.reply("no f0cks given! lol D:");
- e.reply([
+ await e.reply([
`${cfg.main.url.full}/${rows[0].id}`,
`user: ${rows[0].username} @ ${rows[0].usernetwork} ${rows[0].userchannel}`,
`~${lib.formatSize(rows[0].size)}`,
diff --git a/src/inc/trigger/f0ckrand.mjs b/src/inc/trigger/f0ckrand.mjs
index c695e95..2b13da0 100644
--- a/src/inc/trigger/f0ckrand.mjs
+++ b/src/inc/trigger/f0ckrand.mjs
@@ -33,19 +33,10 @@ export default async bot => {
order by random()
`;
- console.log(`select id, mime, username, size
- from "items"
- where
- ${ args.map(a => a.charAt(0) === "!"
- ? `username not ilike ${a.slice(1)}`
- : `username ilike ${a}`
- ).join(' and ')}
- order by random()`);
-
if(rows.length === 0)
- return e.reply("nothing found, f0cker");
+ return await e.reply("nothing found, f0cker");
- return e.reply(`f0ckrnd: ${cfg.main.url.full}/${rows[0].id} by: ${rows[0].username} (${rows[0].mime}, ~${lib.formatSize(rows[0].size)})`);
+ return await e.reply(`f0ckrnd: ${cfg.main.url.full}/${rows[0].id} by: ${rows[0].username} (${rows[0].mime}, ~${lib.formatSize(rows[0].size)})`);
}
}];
};
diff --git a/src/inc/trigger/parser.mjs b/src/inc/trigger/parser.mjs
index 5a164a1..03d9170 100644
--- a/src/inc/trigger/parser.mjs
+++ b/src/inc/trigger/parser.mjs
@@ -51,7 +51,7 @@ export default async bot => {
where src = ${link}
`;
if(q_repost.length > 0)
- return e.reply(`repost motherf0cker (link): ${cfg.main.url.full}/${q_repost[0].id}`);
+ return await e.reply(`repost motherf0cker (link): ${cfg.main.url.full}/${q_repost[0].id}`);
// generate uuid
const uuid = (await db`
@@ -80,7 +80,9 @@ export default async bot => {
let filename = `${uuid}.${meta.ext}`;
- e.reply(`[charging the f0cker] downloading: ${uuid}`);
+ const msg = await e.reply(`[charging the f0cker] downloading: ${uuid}`, {
+ disable_notification: true
+ });
// download data
const start = new Date();
@@ -94,8 +96,11 @@ export default async bot => {
//change 720 to any other available resolution, higher = better quality but bigger filesize
}
- if(source.match(/larger than/))
- return e.reply("too large lol");
+ if(source.match(/larger than/)) {
+ if(e.type == 'tg')
+ return await e.editMessageText(msg.result.chat.id, msg.result.message_id, "too large lol");
+ return await e.reply("too large lol");
+ }
const end = ~~((new Date() - start) / 1e3);
// generate checksum
@@ -104,8 +109,11 @@ export default async bot => {
// mime check
const mime = (await exec(`file --mime-type -b ./tmp/${filename}`)).stdout.trim();
- if(!Object.keys(cfg.mimes).includes(mime))
- return e.reply(`lol, go f0ck yourself (${mime})`);
+ if(!Object.keys(cfg.mimes).includes(mime)) {
+ if(e.type == 'tg')
+ return e.editMessageText(msg.result.chat.id, msg.result.message_id, `lol, go f0ck yourself (${mime})`);
+ return await e.reply(`lol, go f0ck yourself (${mime})`);
+ }
if(!Object.values(cfg.mimes).includes(meta.ext.toLowerCase())) {
let tmpext = cfg.mimes[meta.ext.toLowerCase()];
@@ -119,8 +127,11 @@ export default async bot => {
from "items"
where checksum = ${checksum}
`;
- if(q_repostc.length > 0)
- return e.reply(`repost motherf0cker (checksum): ${cfg.main.url.full}/${q_repostc[0].id}`);
+ if(q_repostc.length > 0) {
+ if(e.type == 'tg')
+ return e.editMessageText(msg.result.chat.id, msg.result.message_id, `repost motherf0cker (checksum): ${cfg.main.url.full}/${q_repostc[0].id}`);
+ return await e.reply(`repost motherf0cker (checksum): ${cfg.main.url.full}/${q_repostc[0].id}`);
+ }
await fs.promises.copyFile(`./tmp/${filename}`, `./public/b/${filename}`);
await fs.promises.unlink(`./tmp/${filename}`).catch(_=>{});
@@ -240,15 +251,43 @@ export default async bot => {
}
} catch(err) {
console.error(err);
- }*/
+ }
+ const outputmsg = `[f0cked] link: ${cfg.main.url.full}/${itemid} | size: ${lib.formatSize(size)} | speed: ${speed}` + (tags.length > 0 ? ` | tags: ${tags.join(', ')} (score: ${score.toFixed(2)})` : '');
+ */
- /*e.reply([
- `[f0cked] link: ${cfg.main.url.full}/${itemid} | size: ${lib.formatSize(size)} | speed: ${speed}` + (tags.length > 0 ? ` | tags: ${tags.join(', ')} (score: ${score.toFixed(2)})` : '')
- ]);*/
- e.reply([
- `[f0cked] link: ${cfg.main.url.full}/${itemid} | size: ${lib.formatSize(size)} | speed: ${speed}`
- ]);
+ const outputmsgirc = `[f0cked] link: ${cfg.main.url.full}/${itemid} | size: ${lib.formatSize(size)} | speed: ${speed}`;
+ const outputmsgtg = `[f0cked] size: ${lib.formatSize(size)} | speed: ${speed}`;
+ if(e.type == 'tg') {
+ await e.deleteMessage(msg.result.chat.id, msg.result.message_id);
+ await e.reply(outputmsgtg, {
+ reply_markup: JSON.stringify({
+ inline_keyboard: [[
+ { text: 'sfw', callback_data: `b_sfw:${itemid}` },
+ { text: 'nsfw', callback_data: `b_nsfw:${itemid}` },
+ { text: 'tags', callback_data: `b_tags:${itemid}` },
+ { text: '❌ delete', callback_data: `b_delete:${itemid}` }
+ ], [
+ { text: `open f0ck #${itemid}`, url: `${cfg.main.url.full}/${itemid}` }
+ ]]
+ })
+ });
+ /*await e.editMessageText(msg.result.chat.id, msg.result.message_id, outputmsgtg, {
+ reply_markup: JSON.stringify({
+ inline_keyboard: [[
+ { text: 'sfw', callback_data: `b_sfw:${itemid}` },
+ { text: 'nsfw', callback_data: `b_nsfw:${itemid}` },
+ { text: 'tags', callback_data: `b_tags:${itemid}` },
+ { text: '❌ delete', callback_data: `b_delete:${itemid}` }
+ ], [
+ { text: `open f0ck #${itemid}`, url: `${cfg.main.url.full}/${itemid}` }
+ ]]
+ })
+ });*/
+ }
+ else {
+ await e.reply(outputmsgirc);
+ }
});
}
}];
diff --git a/src/inc/trigger/tags.mjs b/src/inc/trigger/tags.mjs
index baa17b6..f265c0e 100644
--- a/src/inc/trigger/tags.mjs
+++ b/src/inc/trigger/tags.mjs
@@ -12,11 +12,11 @@ export default async bot => {
f: async e => {
const id = +e.args[1];
if(!id)
- return e.reply("lol no");
+ return await e.reply("lol no");
const tags = (await lib.getTags(id)).map(t => t.tag);
if(tags.length === 0)
- return e.reply(`item ${cfg.main.url.full}/${id} has no tags!`);
- return e.reply(`item ${cfg.main.url.full}/${id} is tagged as: ${tags.join(', ')}`);
+ return await e.reply(`item ${cfg.main.url.full}/${id} has no tags!`);
+ return await e.reply(`item ${cfg.main.url.full}/${id} is tagged as: ${tags.join(', ')}`);
}
}, {
name: "tags add",
@@ -26,7 +26,7 @@ export default async bot => {
f: async e => {
const id = +e.args[1];
if(!id)
- return e.reply("lol no");
+ return await e.reply("lol no");
const tags = (await lib.getTags(id)).map(t => t.tag);
@@ -35,7 +35,7 @@ export default async bot => {
: e.args.splice(2)).filter(t => !tags.includes(t) && t.length > 0);
if(newtags.length === 0)
- return e.reply("no (new) tags provided");
+ return await e.reply("no (new) tags provided");
await Promise.all(newtags.map(async ntag => {
try {
@@ -73,8 +73,8 @@ export default async bot => {
const ntags = (await lib.getTags(id)).map(t => t.tag);
if(ntags.length === 0)
- return e.reply(`item ${cfg.main.url.full}/${id} has no tags!`);
- return e.reply(`item ${cfg.main.url.full}/${id} is now tagged as: ${ntags.join(', ')}`);
+ return await e.reply(`item ${cfg.main.url.full}/${id} has no tags!`);
+ return await e.reply(`item ${cfg.main.url.full}/${id} is now tagged as: ${ntags.join(', ')}`);
}
}, {
name: "tags remove",
@@ -84,7 +84,7 @@ export default async bot => {
f: async e => {
const id = +e.args[1];
if(!id)
- return e.reply("lol no");
+ return await e.reply("lol no");
const tags = await lib.getTags(id);
@@ -93,7 +93,7 @@ export default async bot => {
: e.args.splice(2)).filter(t => t.length > 0);
if(removetags.length === 0)
- return e.reply("no tags provided");
+ return await e.reply("no tags provided");
const res = await Promise.all(removetags.map(async rtag => {
const tagid = tags.filter(t => t.tag === rtag)[0]?.id ?? null;
@@ -122,12 +122,12 @@ export default async bot => {
};
}));
- e.reply(JSON.stringify(res));
+ await e.reply(JSON.stringify(res));
const ntags = (await lib.getTags(id)).map(t => t.tag);
if(ntags.length === 0)
- return e.reply(`item ${cfg.main.url.full}/${id} has no tags!`);
- return e.reply(`item ${cfg.main.url.full}/${id} is now tagged as: ${ntags.join(', ')}`);
+ return await e.reply(`item ${cfg.main.url.full}/${id} has no tags!`);
+ return await e.reply(`item ${cfg.main.url.full}/${id} is now tagged as: ${ntags.join(', ')}`);
}
}]
};
diff --git a/views/snippets/navbar2.html b/views/snippets/navbar2.html
new file mode 100644
index 0000000..09c64c7
--- /dev/null
+++ b/views/snippets/navbar2.html
@@ -0,0 +1,133 @@
+@if(session)
+
+@else
+
+@endif