Kembali ke Beranda
Gistify Snippet
Feb 22·1 file(s)
Public
Uploaded by Joy MD - Bot | 22/2/2026, 10.53.04
synced from github gist Search Anime Chara
#api
Search Anime Charaplaintext
82 baris| 1 | /* |
| 2 | * ─────────────────────────── |
| 3 | * 🟢 JOY MD - SOURCE CODE |
| 4 | * ─────────────────────────── |
| 5 | * 👤 Channel : https://shorturl.at/ce5eX |
| 6 | * 📅 Fetched : 22/2/2026, 10.51.42 |
| 7 | * 📂 File : character.js |
| 8 | * ─────────────────────────── |
| 9 | */ |
| 10 | |
| 11 | /** |
| 12 | * @module plugins/search/character |
| 13 | * @description Character Search using Jikan API v4 (Stable & Official MAL Data) |
| 14 | */ |
| 15 | |
| 16 | import axios from 'axios' |
| 17 | |
| 18 | // Helper to Force HD Image (Remove MAL Resize params) |
| 19 | const getHDImage = (url) => { |
| 20 | if (!url) return null; |
| 21 | return url.replace(/\/r\/\d+x\d+/, '').split('?')[0]; |
| 22 | } |
| 23 | |
| 24 | let handler = async (m, { conn, text, usedPrefix, command }) => { |
| 25 | if (!text) return m.reply(`🔍 Siapa nama karakter animenya?\nContoh: *${usedPrefix + command}* Yui Hirasawa`) |
| 26 | |
| 27 | await m.react('⏳') |
| 28 | |
| 29 | try { |
| 30 | const { data } = await axios.get(`https://api.jikan.moe/v4/characters?q=${encodeURIComponent(text)}&limit=1`) |
| 31 | |
| 32 | if (!data.data || data.data.length === 0) { |
| 33 | return m.reply('❌ Karakter tidak ditemukan.') |
| 34 | } |
| 35 | |
| 36 | const char = data.data[0] |
| 37 | const name = char.name |
| 38 | const nameKanji = char.name_kanji || '-' |
| 39 | const url = char.url |
| 40 | |
| 41 | // Priority: Large -> Normal -> Helper cleanup |
| 42 | let imgRaw = char.images?.jpg?.large_image_url || char.images?.jpg?.image_url |
| 43 | const img = getHDImage(imgRaw) |
| 44 | |
| 45 | let about = char.about || 'No description available.' |
| 46 | |
| 47 | // Basic Cleanup |
| 48 | about = about.replace(/\\n/g, '\n') |
| 49 | |
| 50 | let caption = `◈ *CHARACTER PROFILE* ◈\n` |
| 51 | caption += `──────────────────\n\n` |
| 52 | caption += `◇ *Name* : ${name}\n` |
| 53 | caption += `◇ *Kanji* : ${nameKanji}\n` |
| 54 | if (char.nicknames && char.nicknames.length > 0) { |
| 55 | caption += `◇ *Nick* : ${char.nicknames.slice(0, 3).join(', ')}\n` |
| 56 | } |
| 57 | caption += `➜ *Link* : ${url}\n\n` |
| 58 | caption += `──────────────────\n` |
| 59 | caption += `⬡ *ABOUT* \n\n` |
| 60 | |
| 61 | const limit = 800 |
| 62 | caption += about.length > limit ? about.substring(0, limit) + '...' : about |
| 63 | |
| 64 | await conn.sendMessage(m.chat, { |
| 65 | image: { url: img }, |
| 66 | caption: caption |
| 67 | }, { quoted: m }) |
| 68 | |
| 69 | await m.react('✅') |
| 70 | |
| 71 | } catch (e) { |
| 72 | console.error('Jikan API Error:', e.message) |
| 73 | m.reply('❌ Gagal mengambil data (API Error).') |
| 74 | } |
| 75 | } |
| 76 | |
| 77 | handler.help = ['char <name>'] |
| 78 | handler.tags = ['search', 'anime'] |
| 79 | handler.command = ['char', 'character', 'charai'] |
| 80 | handler.prefix = true |
| 81 | |
| 82 | export default handler |
Diskusi & Komentar0
Belum ada komentar — jadilah yang pertama memberikan masukan atau diskusi kode.
Masuk dengan akun GitHub untuk menulis komentar dan berdiskusi.