cleaned code

Signed-off-by: ale <ale@manalejandro.com>
This commit is contained in:
ale 2025-06-08 05:03:41 +02:00
parent b81b016887
commit 5742e1bafc
Signed by: ale
GPG Key ID: 244A9C4DAB1C0C81

View File

@ -1,5 +1,5 @@
import { config } from 'dotenv'; import { config } from 'dotenv';
import { Client, Events, GatewayIntentBits, SlashCommandBuilder, EmbedBuilder, AttachmentBuilder } from 'discord.js'; import { Client, Events, GatewayIntentBits, EmbedBuilder, AttachmentBuilder } from 'discord.js';
import fetch from 'node-fetch'; import fetch from 'node-fetch';
import * as cheerio from 'cheerio'; import * as cheerio from 'cheerio';
import { createWriteStream, unlinkSync, existsSync } from 'fs'; import { createWriteStream, unlinkSync, existsSync } from 'fs';
@ -66,7 +66,7 @@ client.on(Events.ClientReady, async readyClient => {
}, },
{ {
name: 'search', name: 'search',
description: 'Search for images or videos on Google', description: 'Search for images or videos online',
options: [ options: [
{ {
name: 'query', name: 'query',
@ -179,21 +179,6 @@ function getFileExtension(url) {
return path.extname(urlPath).toLowerCase(); return path.extname(urlPath).toLowerCase();
} }
function isImageFile(url) {
const extension = getFileExtension(url);
return ['.jpg', '.jpeg', '.png', '.gif', '.webp', '.bmp', '.svg'].includes(extension);
}
function isVideoFile(url) {
const extension = getFileExtension(url);
return ['.mp4', '.webm', '.mov', '.avi', '.mkv', '.flv'].includes(extension);
}
function isAudioFile(url) {
const extension = getFileExtension(url);
return ['.mp3', '.wav', '.ogg', '.m4a', '.aac', '.flac'].includes(extension);
}
async function validateMultimediaUrl(url) { async function validateMultimediaUrl(url) {
try { try {
const response = await fetch(url, { const response = await fetch(url, {
@ -218,44 +203,6 @@ async function validateMultimediaUrl(url) {
} }
} }
// More lenient validation for search results
async function validateImageUrl(url) {
try {
// First check if the URL looks like an image file
const urlLower = url.toLowerCase();
const imageExtensions = ['.jpg', '.jpeg', '.png', '.gif', '.webp', '.bmp'];
const hasImageExtension = imageExtensions.some(ext => urlLower.includes(ext));
// If it has an image extension or is from known image hosting sites, consider it valid
const knownImageHosts = ['imgur.com', 'i.imgur.com', 'cdn.', 'images.', 'img.', 'static.', 'upload.wikimedia.org', 'picsum.photos', 'cataas.com', 'dog.ceo', 'images.dog.ceo', 'placeholder.com', 'dummyimage.com'];
const isFromImageHost = knownImageHosts.some(host => urlLower.includes(host));
if (hasImageExtension || isFromImageHost) {
return { valid: true, contentType: 'image/jpeg' };
}
// For other URLs, try a quick GET request to follow redirects
const response = await fetch(url, {
method: 'GET',
timeout: 3000,
redirect: 'follow',
headers: {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'
}
});
const contentType = response.headers.get('content-type') || '';
return {
valid: response.ok && (contentType.startsWith('image/') || contentType === ''),
contentType: contentType || 'image/jpeg'
};
} catch (error) {
// If validation fails, assume it might be valid anyway for search results
return { valid: true, contentType: 'image/jpeg', error: error.message };
}
}
// Real search function using Unsplash for high-quality full-sized images // Real search function using Unsplash for high-quality full-sized images
async function searchImages(query, limit = 10) { async function searchImages(query, limit = 10) {
try { try {
@ -295,27 +242,10 @@ async function searchImages(query, limit = 10) {
}); });
} }
} catch (unsplashError) { } catch (unsplashError) {
// Continue to fallback methods // Continue to DuckDuckGo fallback
} }
// Fallback 1: Try Pixabay-style search using Google Images API alternative // Fallback: Use DuckDuckGo for search results
if (searchResults.length < limit) {
try {
// Use Lorem Picsum for placeholder images with proper dimensions
const remaining = limit - searchResults.length;
for (let i = 0; i < remaining; i++) {
const randomId = Math.floor(Math.random() * 1000) + 1;
searchResults.push({
title: `${query} - High Quality Image ${searchResults.length + 1}`,
link: `https://picsum.photos/800/600?random=${randomId}&t=${Date.now()}`
});
}
} catch (fallbackError) {
// Continue to next fallback
}
}
// Fallback 2: Use DuckDuckGo but try to get better image URLs
if (searchResults.length < limit) { if (searchResults.length < limit) {
try { try {
const searchUrl = `https://api.duckduckgo.com/?q=${encodeURIComponent(query)}&format=json&no_html=1&skip_disambig=1&safe_search=strict`; const searchUrl = `https://api.duckduckgo.com/?q=${encodeURIComponent(query)}&format=json&no_html=1&skip_disambig=1&safe_search=strict`;