expose ocr and reverseimage via regular slash

This commit is contained in:
bignutty 2024-07-25 19:47:18 +02:00
parent cf6705cc55
commit 00725e8efb
2 changed files with 145 additions and 0 deletions

View file

@ -0,0 +1,82 @@
const { reverseImageSearch } = require("#api");
const { paginator } = require("#client");
const { validateAttachment } = require("#utils/attachment");
const { createEmbed, formatPaginationEmbeds, page } = require("#utils/embed");
const { acknowledge } = require("#utils/interactions");
const { editOrReply } = require("#utils/message");
const { ApplicationCommandOptionTypes } = require('detritus-client/lib/constants');
// TODO: create a favicon() util
function createReverseImageSearchResultPage(context, result, source) {
let res = page(
createEmbed("default", context, {
author: {
iconUrl: `https://www.google.com/s2/favicons?domain=${encodeURIComponent(result.url)}&sz=256`,
name: result.name,
url: result.url
},
image: {
url: result.image
},
thumbnail: {
url: source
}
}))
if (result.thumbnail) res.embeds[0].thumbnail = { url: result.thumbnail };
return res;
}
module.exports = {
name: 'reverse-image-search',
description: 'Searches for image matches on the internet.',
contexts: [
0,
1,
2
],
integrationTypes: [
1
],
options: [
{
name: 'image',
description: 'Image to search for',
type: ApplicationCommandOptionTypes.ATTACHMENT,
required: true
},
{
name: 'incognito',
description: 'Makes the response only visible to you.',
type: ApplicationCommandOptionTypes.BOOLEAN,
required: false,
default: false
}
],
run: async (context, args) => {
await acknowledge(context, args.incognito);
if(!validateAttachment(args.image, "image")) return await editOrReply(context, createEmbed("warning", context, "Unsupported attachment type."))
try{
let search = await reverseImageSearch(context, args.image.url);
search = search.response
if (search.body.status == 2) return editOrReply(context, createEmbed("error", context, search.body.message))
let pages = []
for (const res of search.body.results) {
pages.push(createReverseImageSearchResultPage(context, res, args.image.url))
}
await paginator.createPaginator({
context,
pages: formatPaginationEmbeds(pages)
});
}catch(e){
console.log(e)
return editOrReply(context, createEmbed("error", context, "Unable to perform reverse image search."))
}
}
}