{"_id":"@antidonasi/kachina","_rev":"5-8642a48cf85f2b1f41ad9fe5bdce07d8","name":"@antidonasi/kachina","dist-tags":{"latest":"0.0.5"},"versions":{"0.0.1":{"name":"@antidonasi/kachina","version":"0.0.1","keywords":["whatsapp","bot","baileys","wa-bot","whatsapp-bot","framework","kachina"],"author":{"name":"Roynaldi"},"license":"MIT","_id":"@antidonasi/kachina@0.0.1","maintainers":[{"name":"antidonasi","email":"support@antidonasi.web.id"}],"homepage":"https://github.com/idlanyor/kachina-core#readme","bugs":{"url":"https://github.com/idlanyor/kachina-core/issues"},"dist":{"shasum":"ff52d94652c59828a5ca48ce60b45e1a0076e917","tarball":"https://registry.npmjs.org/@antidonasi/kachina/-/kachina-0.0.1.tgz","fileCount":12,"integrity":"sha512-/qVhnghoEKl31ZlGeEqp49YUpTH+eyoaLKcPAUfLsYpy/1H9GiUoiV1yuO5Iulhjy0xLWarat2LpbYPzz5F7YA==","signatures":[{"sig":"MEYCIQDle9WrCJhJH+b2U+0jkzl3jSNWT6YEC6CDX5Kxc9srdAIhAMVKN6U2v2BRTqjYq5JJAWL59X1SqCmyhAW/cVyrgDUf","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":99416},"main":"lib/index.js","type":"module","types":"lib/index.d.ts","engines":{"node":">=16.0.0"},"exports":{".":{"types":"./lib/index.d.ts","import":"./lib/index.js"},"./utils":{"import":"./lib/utils/index.js"},"./plugins":{"import":"./lib/plugins/index.js"}},"gitHead":"6978197a0c7807cb991f02206342e54cb7808ad6","scripts":{"test":"node example/basic-bot.js","build":"node build.js","release":"bash scripts/release.sh","docs:dev":"vitepress dev docs --host","docs:build":"vitepress build docs","docs:preview":"vitepress preview docs","prepublishOnly":"npm run build"},"_npmUser":{"name":"antidonasi","email":"support@antidonasi.web.id"},"repository":{"url":"git+https://github.com/idlanyor/kachina-core.git","type":"git"},"_npmVersion":"11.6.2","description":"WhatsApp Bot Framework - Simple, Fast, and Modular","directories":{},"_nodeVersion":"24.12.0","dependencies":{"jimp":"^0.16.13","pino":"^8.16.0","axios":"^1.6.0","chalk":"^5.3.0","lowdb":"^7.0.1","sharp":"^0.34.5","baileys":"npm:@whiskeysockets/baileys@latest","fs-extra":"^11.2.0","file-type":"^18.7.0","@hapi/boom":"^10.0.1","node-cache":"^5.1.2","qrcode-terminal":"^0.12.0","wa-sticker-formatter":"^4.4.4"},"_hasShrinkwrap":false,"devDependencies":{"vue":"^3.5.24","vitepress":"^1.6.4","gradient-string":"^2.0.2"},"_npmOperationalInternal":{"tmp":"tmp/kachina_0.0.1_1766368971192_0.9341435825989852","host":"s3://npm-registry-packages-npm-production"}},"0.0.2":{"name":"@antidonasi/kachina","version":"0.0.2","keywords":["whatsapp","bot","baileys","wa-bot","whatsapp-bot","framework","kachina"],"author":{"name":"Roynaldi"},"license":"MIT","_id":"@antidonasi/kachina@0.0.2","maintainers":[{"name":"antidonasi","email":"support@antidonasi.web.id"}],"homepage":"https://github.com/idlanyor/kachina-core#readme","bugs":{"url":"https://github.com/idlanyor/kachina-core/issues"},"dist":{"shasum":"0def25300aaa64fe4fea25c01bf8d7c7b9826309","tarball":"https://registry.npmjs.org/@antidonasi/kachina/-/kachina-0.0.2.tgz","fileCount":12,"integrity":"sha512-CiTtXQI2nqwYdRV4lSG5NsTegV570fC8sUoW0bWZt5EHAXtC8FxzH4lvxc3w/ES6qG8aAXWav/vJ7vA9skH/jQ==","signatures":[{"sig":"MEQCIFRHNj5V2kH/ai62hBmTbQvucHZxYNByLM4iKPfj2ENDAiANXQuHVI1UI27+qLI/bdgV1iPA1AGIyh/WCNSayfbHbg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":99464},"main":"lib/index.js","type":"module","types":"lib/index.d.ts","engines":{"node":">=16.0.0"},"exports":{".":{"types":"./lib/index.d.ts","import":"./lib/index.js"},"./utils":{"import":"./lib/utils/index.js"},"./plugins":{"import":"./lib/plugins/index.js"}},"gitHead":"6978197a0c7807cb991f02206342e54cb7808ad6","scripts":{"test":"node example/basic-bot.js","build":"node build.js","release":"bash scripts/release.sh","docs:dev":"vitepress dev docs --host","docs:build":"vitepress build docs","docs:preview":"vitepress preview docs","prepublishOnly":"npm run build"},"_npmUser":{"name":"antidonasi","email":"support@antidonasi.web.id"},"repository":{"url":"git+https://github.com/idlanyor/kachina-core.git","type":"git"},"_npmVersion":"11.6.2","description":"WhatsApp Bot Framework - Simple, Fast, and Modular","directories":{},"_nodeVersion":"24.12.0","dependencies":{"jimp":"^0.16.13","pino":"^8.16.0","axios":"^1.6.0","chalk":"^5.3.0","lowdb":"^7.0.1","sharp":"^0.34.5","baileys":"npm:@whiskeysockets/baileys@latest","fs-extra":"^11.2.0","file-type":"^18.7.0","@hapi/boom":"^10.0.1","node-cache":"^5.1.2","qrcode-terminal":"^0.12.0","wa-sticker-formatter":"^4.4.4"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vue":"^3.5.24","vitepress":"^1.6.4","gradient-string":"^2.0.2"},"_npmOperationalInternal":{"tmp":"tmp/kachina_0.0.2_1766369079525_0.48250520629354043","host":"s3://npm-registry-packages-npm-production"}},"0.0.3":{"name":"@antidonasi/kachina","version":"0.0.3","keywords":["whatsapp","bot","baileys","wa-bot","whatsapp-bot","framework","kachina"],"author":{"name":"Roynaldi"},"license":"MIT","_id":"@antidonasi/kachina@0.0.3","maintainers":[{"name":"antidonasi","email":"support@antidonasi.web.id"}],"homepage":"https://github.com/idlanyor/kachina-core#readme","bugs":{"url":"https://github.com/idlanyor/kachina-core/issues"},"dist":{"shasum":"60e1961b42ce4afd32ec9d490bfa748e984bdbca","tarball":"https://registry.npmjs.org/@antidonasi/kachina/-/kachina-0.0.3.tgz","fileCount":12,"integrity":"sha512-Ixt9NwSLm5JtO2+YGRZPSRCHW8SwgBiBees5zoPFaoKajE+R+wAcW+fgoSfliExrd+rBMDf5WTNg8kqlqpOd2Q==","signatures":[{"sig":"MEUCIQCjdwrL4+8wuowpDYy5XtStricp3JxLnnJz71A+fCNTyQIgL1wbUhKal3zhmib/96YK+boDKeeAmW/V35AaisIOwZ8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":99464},"main":"lib/index.js","type":"module","types":"lib/index.d.ts","engines":{"node":">=16.0.0"},"exports":{".":{"types":"./lib/index.d.ts","import":"./lib/index.js"},"./utils":{"import":"./lib/utils/index.js"},"./plugins":{"import":"./lib/plugins/index.js"}},"gitHead":"6978197a0c7807cb991f02206342e54cb7808ad6","scripts":{"test":"node example/basic-bot.js","build":"node build.js","release":"bash scripts/release.sh","docs:dev":"vitepress dev docs --host","docs:build":"vitepress build docs","docs:preview":"vitepress preview docs","prepublishOnly":"npm run build"},"_npmUser":{"name":"antidonasi","email":"support@antidonasi.web.id"},"repository":{"url":"git+https://github.com/idlanyor/kachina-core.git","type":"git"},"_npmVersion":"11.6.2","description":"WhatsApp Bot Framework - Simple, Fast, and Modular","directories":{},"_nodeVersion":"24.12.0","dependencies":{"jimp":"^0.16.13","pino":"^8.16.0","axios":"^1.6.0","chalk":"^5.3.0","lowdb":"^7.0.1","sharp":"^0.34.5","baileys":"npm:@whiskeysockets/baileys@latest","fs-extra":"^11.2.0","file-type":"^18.7.0","@hapi/boom":"^10.0.1","node-cache":"^5.1.2","qrcode-terminal":"^0.12.0","wa-sticker-formatter":"^4.4.4"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vue":"^3.5.24","vitepress":"^1.6.4","gradient-string":"^2.0.2"},"_npmOperationalInternal":{"tmp":"tmp/kachina_0.0.3_1766369140229_0.2934742194736606","host":"s3://npm-registry-packages-npm-production"}},"0.0.4":{"name":"@antidonasi/kachina","version":"0.0.4","keywords":["whatsapp","bot","baileys","wa-bot","whatsapp-bot","framework","kachina"],"author":{"name":"Roynaldi"},"license":"MIT","_id":"@antidonasi/kachina@0.0.4","maintainers":[{"name":"antidonasi","email":"support@antidonasi.web.id"}],"homepage":"https://github.com/idlanyor/kachina-core#readme","bugs":{"url":"https://github.com/idlanyor/kachina-core/issues"},"dist":{"shasum":"9d5be73b6622cf4a54319875f8ea174f81fbf004","tarball":"https://registry.npmjs.org/@antidonasi/kachina/-/kachina-0.0.4.tgz","fileCount":12,"integrity":"sha512-aPb0q80xNPhUEqylsek9pqfmhapsX0sGrAcrMpyt6uxlVSj8XJJ6fzH1O/jur0Gg5RvpGhhIx/DsrUKM8raPPQ==","signatures":[{"sig":"MEUCIFvqLY/Szela0kS2teoN/ZALUBNMEhVhtqbzs1qfd83kAiEA6Xz0YtWCHm4JQRXKEN3mWl/P3u80/fvPSAMN0U/hYh0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":99469},"main":"lib/index.js","type":"module","types":"lib/index.d.ts","engines":{"node":">=16.0.0"},"exports":{".":{"types":"./lib/index.d.ts","import":"./lib/index.js"},"./utils":{"import":"./lib/utils/index.js"},"./plugins":{"import":"./lib/plugins/index.js"}},"gitHead":"61e29842c0cbbc1cf25698f0f466c6940451b7db","scripts":{"test":"node example/basic-bot.js","build":"node build.js","release":"bash scripts/release.sh","docs:dev":"vitepress dev docs --host","docs:build":"vitepress build docs","docs:preview":"vitepress preview docs","prepublishOnly":"npm run build"},"_npmUser":{"name":"antidonasi","email":"support@antidonasi.web.id"},"repository":{"url":"git+https://github.com/idlanyor/kachina-core.git","type":"git"},"_npmVersion":"11.6.2","description":"WhatsApp Bot Framework - Simple, Fast, and Modular","directories":{},"_nodeVersion":"24.12.0","dependencies":{"jimp":"^0.16.13","pino":"^8.16.0","axios":"^1.6.0","chalk":"^5.3.0","lowdb":"^7.0.1","sharp":"^0.34.5","baileys":"npm:@whiskeysockets/baileys@latest","fs-extra":"^11.2.0","file-type":"^18.7.0","@hapi/boom":"^10.0.1","node-cache":"^5.1.2","qrcode-terminal":"^0.12.0","wa-sticker-formatter":"^4.4.4"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vue":"^3.5.24","vitepress":"^1.6.4","gradient-string":"^2.0.2"},"_npmOperationalInternal":{"tmp":"tmp/kachina_0.0.4_1766369629969_0.15558421206620743","host":"s3://npm-registry-packages-npm-production"}},"0.0.5":{"name":"@antidonasi/kachina","version":"0.0.5","description":"WhatsApp Bot Framework - Simple, Fast, and Modular","main":"lib/index.js","types":"lib/index.d.ts","type":"module","publishConfig":{"access":"public"},"scripts":{"build":"node build.js","test":"node example/basic-bot.js","prepublishOnly":"npm run build","release":"bash scripts/release.sh","docs:dev":"vitepress dev docs --host","docs:build":"vitepress build docs","docs:preview":"vitepress preview docs"},"keywords":["whatsapp","bot","baileys","wa-bot","whatsapp-bot","framework","kachina"],"author":{"name":"Roynaldi"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/idlanyor/kachina-core.git"},"bugs":{"url":"https://github.com/idlanyor/kachina-core/issues"},"homepage":"https://github.com/idlanyor/kachina-core#readme","dependencies":{"@hapi/boom":"^10.0.1","axios":"^1.6.0","baileys":"npm:ye-bail@latest","chalk":"^5.3.0","file-type":"^18.7.0","fs-extra":"^11.2.0","jimp":"^0.16.13","lowdb":"^7.0.1","node-cache":"^5.1.2","pino":"^8.16.0","qrcode-terminal":"^0.12.0","sharp":"^0.34.5","wa-sticker-formatter":"^4.4.4"},"devDependencies":{"gradient-string":"^2.0.2","vitepress":"^1.6.4","vue":"^3.5.24"},"engines":{"node":">=16.0.0"},"exports":{".":{"types":"./lib/index.d.ts","import":"./lib/index.js"},"./plugins":{"import":"./lib/plugins/index.js"},"./utils":{"import":"./lib/utils/index.js"}},"gitHead":"cfa97fbb7c70225e18d580536b0d6bd52aee19e6","_id":"@antidonasi/kachina@0.0.5","_nodeVersion":"24.12.0","_npmVersion":"11.6.2","dist":{"integrity":"sha512-xvy20GP1+9HCyVL2CwISphrXH60xbORbdoWVBAZ7eOleU0nq40B3/n6nPjiTNnBHvSn9CyjioDAKURz7X/kI6A==","shasum":"8374759ea3706056f1d5d9be41cf126c8509e23f","tarball":"https://registry.npmjs.org/@antidonasi/kachina/-/kachina-0.0.5.tgz","fileCount":12,"unpackedSize":99397,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIF+ryVdTrVqk5BR+2v9dH5iXYWKkv312EIympTtw8dOCAiA+DVT22j6g6wQf9XB/8jIx1iPmGSF2l1XbAmJQXZVctg=="}]},"_npmUser":{"name":"antidonasi","email":"support@antidonasi.web.id"},"directories":{},"maintainers":[{"name":"antidonasi","email":"support@antidonasi.web.id"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/kachina_0.0.5_1766377738884_0.09520597664016361"},"_hasShrinkwrap":false}},"time":{"created":"2025-12-22T02:02:51.110Z","modified":"2025-12-22T04:28:59.260Z","0.0.1":"2025-12-22T02:02:51.342Z","0.0.2":"2025-12-22T02:04:39.674Z","0.0.3":"2025-12-22T02:05:40.377Z","0.0.4":"2025-12-22T02:13:50.111Z","0.0.5":"2025-12-22T04:28:59.037Z"},"bugs":{"url":"https://github.com/idlanyor/kachina-core/issues"},"author":{"name":"Roynaldi"},"license":"MIT","homepage":"https://github.com/idlanyor/kachina-core#readme","keywords":["whatsapp","bot","baileys","wa-bot","whatsapp-bot","framework","kachina"],"repository":{"type":"git","url":"git+https://github.com/idlanyor/kachina-core.git"},"description":"WhatsApp Bot Framework - Simple, Fast, and Modular","maintainers":[{"name":"antidonasi","email":"support@antidonasi.web.id"}],"readme":"# @roidev/kachina-md\n\nWhatsApp Bot Framework - Simple, Fast, and Modular\n\n[![npm version](https://img.shields.io/npm/v/@roidev/kachina-md.svg)](https://www.npmjs.com/package/@roidev/kachina-md)\n[![License](https://img.shields.io/npm/l/@roidev/kachina-md.svg)](https://github.com/your-username/kachina-core/blob/main/LICENSE)\n[![Documentation](https://img.shields.io/badge/docs-kachina--core-blue)](https://kachina-core.antidonasi.web.id/)\n\n## 📖 Documentation\n\nComplete documentation is available at [https://kachina-core.antidonasi.web.id/](https://kachina-core.antidonasi.web.id/)\n\n- 🚀 [Getting Started](https://kachina-core.antidonasi.web.id/guide/getting-started)\n- 📘 [API Reference](https://kachina-core.antidonasi.web.id/api/client)\n- 💡 [Examples](https://kachina-core.antidonasi.web.id/examples/basic-bot)\n- 🔐 [Authentication Guide](https://kachina-core.antidonasi.web.id/guide/authentication/overview)\n\n## 🚀 Features\n\n- ✨ Simple and clean API\n- 🔌 Plugin system with auto-loading\n- 📦 Built-in database (LowDB)\n- 🎯 Event-driven architecture\n- 📱 Dual login method (QR Code & Pairing Code)\n- 🎨 Interactive buttons & custom messages (powered by sanka-baileyss)\n- 🛠️ Rich helper utilities\n- 📝 TypeScript-ready\n- 🔄 Auto-reconnect\n- 💾 Message serialization\n\n## 📦 Installation\n\n```bash\nnpm install @roidev/kachina-md\n```\n\n## 🎯 Quick Start\n\n### Basic Usage\n\n```javascript\nimport { Client } from '@roidev/kachina-md';\n\nconst bot = new Client({\n    sessionId: 'my-session',\n    prefix: '!',\n    owners: ['628xxx'] // Bot owner phone numbers\n});\n\nbot.on('ready', (user) => {\n    console.log('Bot is ready!', user.id);\n});\n\nbot.on('message', async (m) => {\n    if (m.body === '!ping') {\n        await m.reply('Pong! 🏓');\n    }\n});\n\nawait bot.start();\n```\n\n### With Plugins\n\n```javascript\nimport { Client } from '@roidev/kachina-md';\nimport path from 'path';\n\nconst bot = new Client({\n    sessionId: 'my-session',\n    prefix: '!',\n    owner: ['628xxx']\n});\n\n// Load plugins from directory\nawait bot.loadPlugins(path.join(process.cwd(), 'plugins'));\n\nawait bot.start();\n```\n\n## 🔌 Plugin System\n\n### Creating a Plugin\n\nCreate a file in `plugins/` directory:\n\n```javascript\n// plugins/hello.js\n\nexport default {\n    name: 'hello',\n    commands: ['hello', 'hi'],\n    category: 'fun',\n    description: 'Say hello',\n\n    async exec({ m, args }) {\n        await m.reply(`Hello ${m.pushName}! 👋`);\n    }\n};\n```\n\n### Plugin Structure\n\n```javascript\nexport default {\n    // Plugin metadata\n    name: 'plugin-name',           // Required\n    commands: ['cmd1', 'cmd2'],    // Command aliases\n    category: 'category',          // Plugin category\n    description: 'Description',    // Help text\n\n    // Plugin flags\n    owner: false,      // Owner only\n    group: false,      // Group only\n    private: false,    // Private chat only\n    admin: false,      // Group admin only\n    botAdmin: false,   // Bot must be admin\n\n    // Execution function\n    async exec({ client, m, args, command, prefix, sock }) {\n        // Your code here\n    }\n};\n```\n\n### Plugin Parameters\n\n| Parameter | Type | Description |\n|-----------|------|-------------|\n| `client` | Client | Bot client instance |\n| `m` | Message | Serialized message object |\n| `args` | Array | Command arguments |\n| `command` | String | Command name used |\n| `prefix` | String | Command prefix |\n| `sock` | Socket | Baileys socket |\n\n## 📝 Message Object\n\nThe serialized message object (`m`) includes:\n\n### Properties\n\n```javascript\nm.key           // Message key\nm.chat          // Chat ID (remoteJid)\nm.sender        // Sender ID\nm.pushName      // Sender push name\nm.body          // Message text\nm.type          // Message type\nm.isGroup       // Is from group\nm.fromMe        // Is from bot\nm.quoted        // Quoted message (if any)\nm.mentions      // Mentioned JIDs\nm.caption       // Media caption\nm.mimetype      // Media mime type\nm.fileSize      // Media file size\n```\n\n### Methods\n\n```javascript\n// Reply to message\nawait m.reply('Text')\n\n// React to message\nawait m.react('👍')\n\n// Download media\nconst buffer = await m.download()\n\n// Delete message\nawait m.delete()\n\n// Forward message\nawait m.forward(jid)\n```\n\n## 🛠️ Client API\n\n### Methods\n\n```javascript\n// Send messages\nawait bot.sendText(jid, 'Hello')\n\n// Send media\nawait bot.sendImage(jid, buffer, 'Caption', { /* options */ })\nawait bot.sendVideo(jid, buffer, 'Caption', { /* options */ })\nawait bot.sendAudio(jid, buffer, { mimetype: 'audio/mp4', ptt: false })\nawait bot.sendDocument(jid, buffer, 'file.pdf', 'application/pdf')\nawait bot.sendSticker(jid, buffer, { pack: 'Pack', author: 'Author' })\n\n// View once messages\nawait bot.readViewOnce(quotedMessage)  // Returns { buffer, type, caption, mimetype?, ptt? }\nawait bot.sendViewOnce(jid, quotedMessage)  // Read and send view once\n\n// Send other content\nawait bot.sendContact(jid, [{ displayName: 'John', vcard: '...' }])\nawait bot.sendLocation(jid, latitude, longitude)\nawait bot.sendPoll(jid, 'Question?', ['Option 1', 'Option 2'])\nawait bot.sendReact(jid, messageKey, '👍')\n\n// Send interactive messages (buttons, lists)\nawait bot.sendButtonMessage(jid, 'Choose:', [\n  { buttonId: 'id1', buttonText: { displayText: 'Button 1' }, type: 1 }\n])\nawait bot.sendListMessage(jid, 'Click Here', { text: 'Select option' }, sections)\nawait bot.sendTemplateButtons(jid, buttons, { text: 'Choose', footer: 'Footer' })\n\n// Group methods\nawait bot.groupMetadata(jid)\nawait bot.groupParticipantsUpdate(jid, [participant], 'add|remove|promote|demote')\nawait bot.groupUpdateSubject(jid, 'New Subject')\nawait bot.groupUpdateDescription(jid, 'New Description')\n\n// Plugin methods\nawait bot.loadPlugin('./plugins/my-plugin.js')\nawait bot.loadPlugins('./plugins')\n```\n\n### Events\n\n```javascript\nbot.on('ready', (user) => {\n    // Bot is ready\n})\n\nbot.on('message', async (m) => {\n    // New message\n})\n\nbot.on('group.update', (update) => {\n    // Group participants update\n})\n\nbot.on('pairing.code', (code) => {\n    // Pairing code (when using pairing method)\n})\n\nbot.on('reconnecting', () => {\n    // Reconnecting\n})\n\nbot.on('logout', () => {\n    // Bot logged out\n})\n```\n\n## 💾 Database\n\n```javascript\nimport { Database } from '@roidev/kachina-md';\n\nconst db = new Database({ path: './database' });\n\n// Basic operations\nawait db.set('users', 'user123', { name: 'John', balance: 100 })\nawait db.get('users', 'user123')\nawait db.has('users', 'user123')\nawait db.delete('users', 'user123')\nawait db.all('users')\n\n// Advanced operations\nawait db.update('users', 'user123', { balance: 200 })\nawait db.increment('users', 'user123', 'balance', 50)\nawait db.push('users', 'user123.items', 'item1')\n```\n\n## 🔧 Helpers\n\n```javascript\nimport {\n    formatTime,\n    formatBytes,\n    parseCommand,\n    isUrl,\n    extractUrls,\n    randomString,\n    randomNumber,\n    pickRandom,\n    chunk,\n    sleep,\n    createSticker,\n    createFullSticker,\n    createCroppedSticker,\n    createCircleSticker,\n    createRoundedSticker,\n    StickerTypes,\n    Logger,\n    Database\n} from '@roidev/kachina-md';\n\n// Format utilities\nformatTime(3600)           // \"1h 0m 0s\"\nformatBytes(1024)          // \"1 KB\"\n\n// String utilities\nparseCommand('!ping test')  // { command: 'ping', args: ['test'], text: 'test' }\nisUrl('https://...')       // true\nextractUrls(text)          // Array of URLs\n\n// Random utilities\nrandomString(10)           // Random string\nrandomNumber(1, 100)       // Random number\npickRandom([1,2,3])       // Random item from array\nchunk([1,2,3,4], 2)       // [[1,2], [3,4]]\nsleep(1000)               // Sleep for 1 second (returns Promise)\n\n// Logger utility\nconst logger = new Logger({ prefix: 'MyBot', level: 'info' });\nlogger.info('Bot started');\nlogger.success('Connected');\nlogger.warn('Warning message');\nlogger.error('Error occurred');\nlogger.debug('Debug info');\nlogger.command('!ping', 'User@s.whatsapp.net');\n\n// Sticker utilities\nconst stickerBuffer = await createSticker(imageBuffer, {\n    pack: 'My Pack',\n    author: 'My Name',\n    type: StickerTypes.FULL,\n    quality: 50\n})\n\n// Sticker type shortcuts\nawait createFullSticker(buffer, options)      // Full size\nawait createCroppedSticker(buffer, options)   // Cropped\nawait createCircleSticker(buffer, options)    // Circle\nawait createRoundedSticker(buffer, options)   // Rounded\n```\n\n## 📚 Examples\n\n### Example 1: Simple Command\n\n```javascript\nexport default {\n    name: 'dice',\n    commands: ['dice', 'roll'],\n    category: 'fun',\n    description: 'Roll a dice',\n\n    async exec({ m }) {\n        const result = Math.floor(Math.random() * 6) + 1;\n        await m.reply(`🎲 You rolled: ${result}`);\n    }\n};\n```\n\n### Example 2: With Arguments\n\n```javascript\nexport default {\n    name: 'say',\n    commands: ['say', 'echo'],\n    category: 'fun',\n    description: 'Repeat your message',\n\n    async exec({ m, args }) {\n        if (args.length === 0) {\n            return await m.reply('⚠️ Provide text to repeat!');\n        }\n\n        await m.reply(args.join(' '));\n    }\n};\n```\n\n### Example 3: Owner Only\n\n```javascript\nexport default {\n    name: 'broadcast',\n    commands: ['bc', 'broadcast'],\n    category: 'owner',\n    description: 'Broadcast message',\n    owner: true,\n\n    async exec({ client, m, args }) {\n        const text = args.join(' ');\n        const chats = await client.sock.getChats();\n\n        for (const chat of chats) {\n            await client.sendText(chat.id, text);\n        }\n\n        await m.reply(`✅ Broadcasted to ${chats.length} chats`);\n    }\n};\n```\n\n### Example 4: Group Only\n\n```javascript\nexport default {\n    name: 'tagall',\n    commands: ['tagall', 'everyone'],\n    category: 'group',\n    description: 'Mention all members',\n    group: true,\n    admin: true,\n\n    async exec({ client, m }) {\n        const metadata = await client.groupMetadata(m.chat);\n        const participants = metadata.participants.map(p => p.id);\n\n        const text = '📢 Attention everyone!\\n\\n' +\n            participants.map(p => `@${p.split('@')[0]}`).join('\\n');\n\n        await client.sendMessage(m.chat, {\n            text,\n            mentions: participants\n        });\n    }\n};\n```\n\n### Example 5: With Database\n\n```javascript\nimport { Database } from '@roidev/kachina-md';\nconst db = new Database();\n\nexport default {\n    name: 'balance',\n    commands: ['balance', 'bal'],\n    category: 'economy',\n    description: 'Check your balance',\n\n    async exec({ m }) {\n        const userId = m.sender;\n        const user = await db.get('users', userId, { balance: 0 });\n\n        await m.reply(`💰 Your balance: $${user.balance}`);\n    }\n};\n```\n\n## 🔐 Configuration\n\n```javascript\nconst bot = new Client({\n    // Session\n    sessionId: 'my-session',        // Session folder name (default: 'kachina-session')\n    phoneNumber: '628xxx',          // For pairing code (format: 628123456789)\n\n    // Login\n    loginMethod: 'qr',              // 'qr' or 'pairing' (default: 'qr')\n\n    // Bot config\n    prefix: '!',                    // Command prefix (default: '!')\n    owners: ['628xxx', '628yyy'],   // Owner numbers (array format)\n\n    // Advanced\n    browser: ['Bot', 'Chrome', '1.0.0'],  // Browser metadata\n    logger: pino({ level: 'silent' }),    // Pino logger instance\n    store: null                      // Optional message store\n});\n```\n\n## 📦 Project Structure\n\n```\nmy-bot/\n├── plugins/\n│   ├── ping.js\n│   ├── help.js\n│   └── ...\n├── database/\n│   ├── users.json\n│   └── groups.json\n├── my-session/\n│   └── creds.json\n├── index.js\n└── package.json\n```\n\n## 🤝 Contributing\n\nContributions are welcome! Please feel free to submit a Pull Request.\n\n## 📄 License\n\nMIT © Roynaldi\n\n## 🔗 Links\n\n- 📖 [Documentation](https://kachina-core.antidonasi.web.id/) - Complete documentation\n- 📦 [NPM Package](https://www.npmjs.com/package/@roidev/kachina-md) - Install via NPM\n- 💻 [GitHub](https://github.com/idlanyor/kachina-core) - Source code\n- 🔧 [Sanka-Baileys](https://github.com/SankaVollereii/Sanka-Baileys) - Enhanced WhatsApp Web API\n\n## ⚠️ Disclaimer\n\nThis project is not affiliated with WhatsApp. Use at your own risk. Do not spam or violate WhatsApp Terms of Service.\n\n---\n\nMade with ❤️ by Roynaldi\n","readmeFilename":"README.md"}