case 'animefind': case 'apaitu': { try { const quoted = m.quoted ? m.quoted : m const mime = (quoted.msg || quoted).mimetype || '' if (!/image/.test(mime)) return m.reply("Harap reply ke gambar yang mau dicari") const media = await quoted.download() const detect = async (buffer) => { const axios = require('axios') const BodyForm = require('form-data') const { fromBuffer } = require('file-type') return new Promise(async (resolve, reject) => { try { const BASE_URL = "https://smilingwolf-wd-tagger.hf.space/gradio_api" const session_hash = Math.random().toString(36).substring(2) const file_name = Math.random().toString(36).substring(2) const hr = { origin: "https://smilingwolf-wd-tagger.hf.space", referer: "https://smilingwolf-wd-tagger.hf.space/", "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36", "content-type": "application/json", } const { ext, mime } = (await fromBuffer(buffer)) || {} const form = new BodyForm() form.append("files", buffer, { filename: file_name + "." + ext, contentType: mime }) const files = await axios.post(BASE_URL + "/upload?" + new URLSearchParams({ upload_id: session_hash }), form, { headers: { ...hr, ...form.getHeaders() } }).then(i => i.data) const file_res = { path: files[0], mime_type: mime, orig_name: file_name + "." + ext, meta: { _type: "gradio.FileData" }, size: buffer.length, url: BASE_URL + "/file=" + files[0], } await axios.post(BASE_URL + "/queue/join?", { data: [ file_res, "SmilingWolf/wd-swinv2-tagger-v3", 0.35, true, 0.85, true ], event_data: null, fn_index: 2, session_hash, trigger_id: 18, }) const stream = await axios.get(BASE_URL + "/queue/data?" + new URLSearchParams({ session_hash }), { headers: { ...hr, "content-type": "text/event-stream" }, responseType: "stream" }) let result = '' stream.data.on('data', (chunk) => { result += chunk.toString() const lines = result.split('\n') result = lines.pop() for (const line of lines) { if (line.startsWith('data: ')) { try { const data = JSON.parse(line.substring(6)) if (data.msg !== "process_completed") continue if (!data.success) return resolve({ status: false, data }) const dt = data.output.data const is_char = typeof dt[2]?.label === 'string' const res = { prompt: dt[0], rating: dt[1].confidences, character: { name: dt[2]?.label, list: dt[2]?.confidences }, tags: { name: dt[3].label, list: dt[3].confidences } } return resolve({ status: true, data: res, is_char }) } catch (err) { console.error('Error parsing JSON:', err) resolve({ status: false, msg: err.message }) } } } }) } catch (e) { reject(e) } }) } const res = await detect(media) const fixed = num => (num * 100).toFixed(2) if (!res.is_char) return m.reply("Tidak terdeteksi karakter di gambar tersebut") const teks = ` *⎣⧉⎤ Karakter yang terdeteksi adalah* > *Nama:* ${res.data.character.name} > *Persentase:* ${fixed(res.data.character.list[0].confidence || 0)}% ${res.data.character.list.length >= 2 ? `\n*⎣⧉⎤ Karakter lain yang terdeteksi*\n${res.data.character.list.map((it) => `> *Nama:* ${it.label}\n> *Persentase:* ${fixed(it.confidence || 0)}%`).join('\n\n')}\n` : ''} *⎣⧉⎤ Prompt* ${res.data.prompt} *⎣⧉⎤ Rating* ${res.data.rating.map(it => `> *${it.label}:* ${fixed(it.confidence || 0)}%`).join('\n')} *⎣⧉⎤ Tag* ${res.data.tags.list.map(it => `> *${it.label}:* ${fixed(it.confidence || 0)}%`).join('\n')} `.trim() m.reply(teks) } catch (e) { console.error(e) m.reply(`Terjadi kesalahan saat mendeteksi karakter!\n\n${e.message}`) } } break