Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- const { Component } = require('@neoxr/wb');
- const { Function: Func } = new Component();
- const { watermark } = require('../../lib/canvas');
- const { Utils, Chatbot } = require('../../lib/gemini');
- const ffmpeg = require('fluent-ffmpeg');
- const path = require('path');
- const fs = require('fs');
- const bytes = require('bytes');
- // Load instruction
- const instruction = fs.readFileSync(path.join(process.cwd(), 'media/txt/prompt-id.txt'), 'utf-8');
- // Inisialisasi database pengingat
- global.db.reminders = global.db.reminders || [];
- // Fungsi parsing waktu pengingat
- function parseReminderTime(text) {
- const match = text.match(/(\d+)\s*(menit|jam|detik|hari)/i);
- if (!match) return null;
- const value = parseInt(match[1]);
- const unit = match[2].toLowerCase();
- const timeMap = {
- detik: 1000,
- menit: 60 * 1000,
- jam: 60 * 60 * 1000,
- hari: 24 * 60 * 60 * 1000
- };
- return Date.now() + (timeMap[unit] || 0) * value;
- }
- // Periksa pengingat yang waktunya telah tiba
- async function checkReminders(client) {
- const now = Date.now();
- const dueReminders = global.db.reminders.filter(r => r.time <= now);
- for (const reminder of dueReminders) {
- try {
- await client.sendMessage(reminder.chatId, {
- text: `⏰ [PENGINGAT] ${reminder.text}`
- });
- global.db.reminders = global.db.reminders.filter(r =>
- !(r.jid === reminder.jid && r.time === reminder.time && r.text === reminder.text)
- );
- } catch (e) {
- console.error('Gagal mengirim pengingat:', e);
- }
- }
- }
- let reminderInterval;
- exports.run = {
- async: async (m, { client, body, users, setting, env, Func }) => {
- try {
- // Mulai interval pengecekan pengingat
- if (!reminderInterval) {
- reminderInterval = setInterval(() => checkReminders(client), 30000);
- }
- // Perintah pengingat
- if (/ingatkan\s+saya/i.test(body)) {
- const timeMatch = body.match(/(\d+)\s*(menit|jam|detik|hari)/i);
- const reminderText = body.replace(/ingatkan\s+saya\s+\d+\s*(menit|jam|detik|hari)\s+kedepan\s+untuk/i, '')
- .replace(/^[,\s]+|[,\s]+$/g, '').trim();
- if (!timeMatch || !reminderText) {
- return client.reply(m.chat, Func.texted('bold', 'Format salah. Contoh: "ingatkan saya 5 menit kedepan untuk mengangkat jemuran"'), m);
- }
- const reminderTime = parseReminderTime(body);
- if (!reminderTime) {
- return client.reply(m.chat, Func.texted('bold', 'Format waktu tidak valid. Gunakan menit/jam/detik/hari'), m);
- }
- global.db.reminders.push({
- jid: m.sender,
- time: reminderTime,
- text: reminderText,
- chatId: m.chat
- });
- return client.reply(
- m.chat,
- Func.texted('bold', `⏰ Saya akan mengingatkan Anda dalam ${timeMatch[1]} ${timeMatch[2]} untuk:\n"${reminderText}"`),
- m
- );
- }
- // Auto AI
- global.db.autoai = global.db.autoai || [];
- let session = global.db.autoai.find(v => v.jid === m.sender);
- if (!session) {
- global.db.autoai.push({ jid: m.sender, history: [] });
- session = global.db.autoai.find(v => v.jid === m.sender);
- }
- if (
- m.sender !== client.decodeJid(client.user.id) &&
- /conversation|extended|video|image|audio/.test(m.mtype) &&
- !global.db.menfess?.find(v => v.from === m.sender || v.receiver === m.sender)?.state &&
- !Func.socmed(body)
- ) {
- if (setting.chatbot && !env.evaluate_chars.some(v => body.startsWith(v))) {
- const isTag = (m.mentionedJid || []).includes(client.decodeJid(client.user.id));
- const isAI = m?.quoted?.id && /AI-/i.test(m?.quoted?.id);
- const q = m.quoted || m;
- const mime = (q.msg || q).mimetype;
- const maxSize = '5MB';
- const content = (m.quoted ? (body && typeof body === 'string' ? body : '') + ' ' + m.quoted?.text : body)?.trim();
- const isBody = content.replace(new RegExp(`@${client.decodeJid(client.user.id).replace(/@.+/, '')}`, 'g'), '');
- const useAI = (m.isGroup && (isTag || isAI)) || (!m.isGroup && !isTag);
- if (!useAI || !isBody || typeof isBody !== 'string') return;
- if (users.limit < 1) return client.reply(m.chat, Func.texted('bold', '🚩 Batas penggunaan anda habis.'), m);
- if (/video|image\/(jpe?g|png)|audio|document/.test(mime) && (q.msg || q).fileLength.low >= bytes(maxSize)) {
- return client.reply(m.chat, Func.texted('bold', `🚩 Maksimal ukuran file adalah ${maxSize}.`), m);
- }
- let buffer, cdn;
- if (mime) {
- buffer = await q.download();
- cdn = await Utils.upload(buffer);
- if (!cdn.status) return;
- }
- const json = await Chatbot(isBody, cdn?.data?.url || null, session.history, instruction);
- if (!json.status) return client.reply(m.chat, Func.texted('bold', `❌ ${json.msg}`), m);
- const chat = await Utils.logic(json.data.message);
- if (!chat.status) return client.reply(m.chat, Func.texted('bold', `❌ ${chat.msg}`), m);
- await wrapper(m, {
- client,
- metadata: chat.data,
- session,
- users,
- history: json.data.history,
- params: cdn?.data?.url ? { url: cdn.data.url } : {}
- });
- }
- }
- } catch (e) {
- console.error(e);
- }
- },
- error: false,
- cache: true,
- location: __filename
- };
- // Wrapper handler
- const wrapper = (m, { client, metadata, session, users, history, params = {} }) => new Promise(async resolve => {
- try {
- const { context, command, argument, message } = metadata;
- const send = m.isGroup ? client.reply : client.sendFromAI;
- if (context === 'NONE' || context === 'EMOTION') {
- if (message) await send(m.chat, message, m, { isAI: true });
- if (context === 'EMOTION') {
- const buffer = await Func.fetchBuffer(`./media/sticker/${command.replace('stc_', '')}.webp`);
- await client.sendSticker(m.chat, buffer, null, {
- packname: global.db?.setting?.sk_pack || '',
- author: global.db?.setting?.sk_author || ''
- });
- }
- session.history = history;
- users.limit -= 1;
- return;
- }
- if (context === 'REQUEST') {
- if (message) m.reply(message);
- const Api = require('../../lib/api');
- const handleResponse = async (resHandler) => {
- try {
- const json = await resHandler();
- if (!json.status) throw new Error(json.msg);
- return json;
- } catch (e) {
- m.reply(Func.texted('bold', `❌ ${e.message}`));
- throw e;
- }
- };
- switch (command) {
- case 'cmd_play': {
- const json = await handleResponse(() => Api.neoxr('/play', { q: argument }));
- await client.sendFile(m.chat, json.data.url, json.data.filename, '', m, {
- APIC: await Func.fetchBuffer(json.thumbnail),
- isAI: true
- });
- break;
- }
- case 'cmd_genimg': {
- const json = await handleResponse(() => Api.neoxr('/flux', { q: argument }));
- const contents = await Promise.all(
- json.data.images.map(async (img) => {
- const image = await Func.fetchBuffer(img.url);
- const output = await watermark(image, fs.readFileSync('./media/image/watermark.png'));
- return { type: 'image', url: output.buffer };
- })
- );
- await client.sendAlbumMessage(m.chat, contents, m, { isAI: true });
- break;
- }
- case 'cmd_edit': {
- if (!params.url) return m.reply('Mohon kirimkan gambar.');
- const json = await handleResponse(() => Api.neoxr('/photo-editor', { image: params.url, q: argument }));
- const image = await Func.fetchBuffer(json.data.url);
- const output = await watermark(image, fs.readFileSync('./media/image/watermark.png'));
- await client.sendFile(m.chat, output.buffer, '', '', m, { isAI: true });
- break;
- }
- case 'cmd_pin': {
- const json = await handleResponse(() => Api.neoxr('/pinterest', { q: argument }));
- const imgUrl = Func.random(json.data);
- await client.sendFile(m.chat, imgUrl, '', '', m, { isAI: true });
- break;
- }
- case 'cmd_pinimg':
- case 'cmd_pinvid': {
- const json = await handleResponse(() =>
- Api.neoxr('/pinterest-v2', {
- q: argument,
- show: 20,
- type: command === 'cmd_pinimg' ? 'image' : 'video'
- })
- );
- const result = Func.shuffle(json.data).slice(0, 1);
- for (const v of result) {
- const url = v.content[0].url;
- if (command === 'cmd_pinvid' && /m3u8/.test(url)) {
- const output = './temp/' + Func.filename('mp4');
- ffmpeg(url)
- .on('error', () => m.reply(Func.texted('bold', '🚩 Konversi gagal!')))
- .on('end', () => client.sendFile(m.chat, output, '', '', m))
- .outputOptions(['-c copy', '-bsf:a aac_adtstoasc'])
- .output(output)
- .run();
- } else {
- await client.sendFile(m.chat, url, '', '', m, { isAI: true });
- }
- }
- break;
- }
- default:
- await client.reply(m.chat, message, m, { isAI: true });
- }
- }
- } catch (e) {
- console.error(e);
- m.reply(e.message);
- }
- });
Add Comment
Please, Sign In to add comment