-
-
Save diego3g/a9f52a12a8f968fc07d1a30fc0bff52a to your computer and use it in GitHub Desktop.
| import React, { Component } from 'react'; | |
| import { View, Text, StyleSheet, ScrollView } from 'react-native'; | |
| import 'config/ReactotronConfig'; | |
| import 'config/DevToolsConfig'; | |
| import Post from 'components/Post'; | |
| const textos = [ | |
| { }, | |
| ]; | |
| export default class App extends Component{ | |
| state = { | |
| posts: [ | |
| { | |
| id: 0, | |
| titulo: 'Aprendendo React Native', | |
| autor: "Petterson Amaral Miler", | |
| descricao: "Descrição do post" | |
| }, | |
| { | |
| id: 1, | |
| titulo: 'Aprendendo React Native', | |
| autor: "Petterson Amaral Miler", | |
| descricao: "Descrição do post" | |
| }, | |
| { | |
| id: 2, | |
| titulo: 'Aprendendo React Native', | |
| autor: "Petterson Amaral Miler", | |
| descricao: "Descrição do post" | |
| }, | |
| ] | |
| }; | |
| render() { | |
| return ( | |
| <View style={styles.contView}> | |
| <View style={styles.cabecaView}> | |
| <Text style={styles.cabeca}>GoNative App</Text> | |
| </View> | |
| <ScrollView style={styles.container}> | |
| {this.state.posts.map(post => ( | |
| <Post key={post.id} titulo={post.titulo} autor={post.autor} descricao={post.descricao}/> | |
| ))} | |
| </ScrollView> | |
| </View> | |
| ); | |
| } | |
| } | |
| const styles = StyleSheet.create({ | |
| contView: { | |
| flex: 1, | |
| backgroundColor: '#FFFFFF', | |
| }, | |
| cabecaView: { | |
| margin: 20, | |
| }, | |
| cabeca: { | |
| color: '#333333', | |
| fontSize: 30, | |
| fontWeight: 'bold', | |
| textAlign: 'center', | |
| }, | |
| container: { | |
| backgroundColor: '#ee7777', | |
| }, | |
| }); |
Oi
Mzmx
𝐴𝑛𝑔𝑒𝑙𝑙𝑒 𝑠𝑡𝑜𝑟𝑒 . . .
𝑁𝑜𝑠𝑠𝑎 𝑙𝑜𝑗𝑎 𝑒𝑠𝑡𝑎 𝑞𝑢𝑎𝑠𝑒 𝑏𝑎𝑡𝑒𝑛𝑑𝑜 𝑎 𝑚𝑒𝑡𝑎 𝑑𝑒 400 𝑝𝑒𝑠𝑠𝑜𝑎𝑠! 𝑉𝑒𝑛ℎ𝑎 𝑓𝑎𝑧𝑒𝑟 𝑝𝑎𝑟𝑡𝑒 𝑑𝑎 𝑛𝑜𝑠𝑠𝑎 𝑓𝑎𝑚𝑖𝑙𝑖𝑎!
𝐂𝐨𝐢𝐬𝐚𝐬 𝐚 𝐥𝐡𝐞 𝐨𝐟𝐞𝐫𝐞𝐜𝐞𝐫...
1 𝑅𝑜𝑏𝑢𝑥(𝑒𝑚 𝑏𝑟𝑒𝑣𝑒..) 2 𝐺𝑎𝑚𝑒𝑝𝑎𝑠𝑠
3 𝐶𝑜𝑚𝑝𝑟𝑎𝑟 𝑠𝑒𝑔𝑢𝑖𝑑𝑜𝑟𝑒𝑠(𝑡𝑘𝑘) 4 𝑀𝑒𝑡𝑜𝑑𝑜 𝑟𝑜𝑏𝑢𝑥
5 𝑀𝑒𝑡𝑜𝑑𝑜 𝑐𝑐 6 𝑁𝑒𝑡𝑓𝑙𝑖𝑥
7 𝐶𝑜𝑛𝑡𝑎𝑠 𝑛𝑖𝑙𝑡𝑟𝑎𝑑𝑎𝑠 8 𝑁𝑖𝑙𝑡𝑟𝑜 𝑚𝑒𝑛𝑠𝑎𝑙 𝑒 𝑡𝑟𝑖𝑚𝑒𝑛𝑠𝑎𝑙
𝐓𝐮𝐝𝐨 𝐢𝐬𝐬𝐨, 𝐬𝐮𝐩𝐞𝐫 𝐛𝐚𝐫𝐚𝐭𝐨!!
𝐸𝑛𝑡𝑟𝑒 𝑑𝑖𝑣𝑒𝑟𝑠𝑜𝑠 𝑜𝑢𝑡𝑟𝑜𝑠 𝑝𝑎𝑟𝑎 𝑠𝑎𝑏𝑒𝑟 𝑚𝑎𝑖𝑠 𝑒𝑛𝑡𝑟𝑒 𝑒𝑚 𝑛𝑜𝑠𝑠𝑎 𝑐𝑜𝑚𝑢𝑛𝑖𝑑𝑎𝑑𝑒 𝑒 𝑠𝑒 𝑡𝑜𝑟𝑛𝑒 𝑢𝑚 𝐴𝑛𝑔𝑒𝑙𝑙𝑒!🔥
https://media1.giphy.com/media/4OV1bLOIWwIXRxpXlN/giphy.gif?cid=6c09b95216tde7rfp6517aywmp0cn575u903sl24unbrhx2y&ep=v1_internal_gif_by_id&rid=giphy.gif&ct=g
const { Client } = require("whatsapp-web.js");
const qrcode = require("qrcode-terminal");
const client = new Client();
// Lista de piadas
const piadas = [
"Por que o livro foi ao médico? Porque ele tinha muitas páginas em branco.",
"O que é um vegetariano que come carne escondido? Um hipócrita.",
"Qual é o animal mais antigo? A zebra, porque ainda é preta e branca.",
"Por que o computador foi ao médico? Porque estava com vírus!"
];
// Número secreto para o jogo de adivinhação
let numeroSecreto = Math.floor(Math.random() * 10) + 1;
// Gerar QR Code para login
client.on("qr", (qr) => {
qrcode.generate(qr, { small: true });
});
// Aviso quando bot estiver online
client.on("ready", () => {
console.log("✅ Bot conectado com sucesso!");
});
// Receber mensagens
client.on("message", (msg) => {
const texto = msg.body.toLowerCase();
// Comando !ping
if (texto === "!ping") {
msg.reply("🏓 Pong!");
}
// Comando !ajuda
if (texto === "!ajuda") {
msg.reply(
"🤖 *Lista de comandos disponíveis:*\n\n" +
"👉 `!ping` - Testar se o bot está online\n" +
"👉 `!sticker` - Transformar imagem em figurinha\n" +
"👉 `!piada` - Receber uma piada aleatória\n" +
"👉 `!adivinhar` - Jogar adivinhação de número (1 a 10)"
);
}
// Comando !sticker (transforma imagem em figurinha)
if (texto === "!sticker" && msg.hasMedia) {
msg.downloadMedia().then(media => {
msg.reply(media, undefined, { sendMediaAsSticker: true });
});
}
// Comando !piada
if (texto === "!piada") {
const piada = piadas[Math.floor(Math.random() * piadas.length)];
msg.reply("😂 " + piada);
}
// Comando !adivinhar
if (texto.startsWith("!adivinhar")) {
const partes = texto.split(" ");
if (partes.length === 1) {
msg.reply("🎲 Tente adivinhar o número entre 1 e 10! Use: `!adivinhar 5`");
} else {
const chute = parseInt(partes[1]);
if (chute === numeroSecreto) {
msg.reply("🎉 Parabéns! Você acertou o número secreto!");
numeroSecreto = Math.floor(Math.random() * 10) + 1; // novo número
} else {
msg.reply("❌ Errou! Tente novamente...");
}
}
}
});
client.initialize();
const { Client } = require('whatsapp-web.js');
const qrcode = require('qrcode-terminal');
const client = new Client();
client.on('qr', (qr) => {
qrcode.generate(qr, { small: true });
console.log('Scan QR di WhatsApp');
});
client.on('ready', () => {
console.log('Bot sudah siap!');
});
client.on('message', async (msg) => {
if (msg.body === '!ping') {
await msg.reply('pong');
}
if (msg.body === '!halo') {
await msg.reply('Halo! Saya bot WhatsApp 🤖');
}
if (msg.body === '!menu') {
await msg.reply('Menu:\n1. !ping\n2. !halo\n3. !menu');
}
});
client.initialize();
const { default: makeWASocket, useMultiFileAuthState, DisconnectReason, downloadMediaMessage } = require('@whiskeysockets/baileys')
const { createCanvas } = require('canvas')
const pino = require('pino')
const qrcode = require('qrcode-terminal')
const ytdl = require('ytdl-core')
const axios = require('axios')
const fs = require('fs')
const path = require('path')
const PREFIX = '.'
const OWNER = '6281225099423'
const GEMINI_KEY = 'AQ.Ab8RN6LPxIs3llIy_82sWzbLS59Nvvku1XlUJNEEVKsClIDtvA'
// Auto bikin folder session
if (!fs.existsSync('./session')) fs.mkdirSync('./session')
let welcomeGroup = {}
let antiLinkGroup = {}
let absenList = {}
let stickerSpam = {}
let banList = {}
const banFile = './ban.json'
if (fs.existsSync(banFile)) banList = JSON.parse(fs.readFileSync(banFile))
const saveBan = () => fs.writeFileSync(banFile, JSON.stringify(banList))
// Fungsi universal bikin sticker brat
async function createBrat(sock, from, teks, bg, color, packname, m) {
try {
const canvas = createCanvas(512, 512)
const ctx = canvas.getContext('2d')
ctx.fillStyle = bg
ctx.fillRect(0, 0, 512, 512)
ctx.fillStyle = color
ctx.textAlign = 'center'
ctx.textBaseline = 'middle'
let fontSize = 120
ctx.font = `bold ${fontSize}px Arial Black`
while (ctx.measureText(teks.toUpperCase()).width > 480 && fontSize > 35) {
fontSize -= 4
ctx.font = `bold ${fontSize}px Arial Black`
}
ctx.fillText(teks.toUpperCase(), 256, 256)
await sock.sendMessage(from, {
sticker: canvas.toBuffer('image/png'),
packname: packname,
author: 'ArisuSoft'
})
} catch (e) {
await sock.reply(from, 'Gagal bikin sticker, install canvas dulu', m)
}
}
async function startBot() {
const { state, saveCreds } = await useMultiFileAuthState('session')
const sock = makeWASocket({
logger: pino({ level: 'silent' }),
printQRInTerminal: true,
auth: state,
browser: ['ArisuBot', 'Chrome', '2.0.0']
})
sock.ev.on('creds.update', saveCreds)
sock.ev.on('connection.update', (u) => {
if (u.qr) {
console.log('Scan QR ini:')
qrcode.generate(u.qr, { small: true })
}
if (u.connection === 'open') console.log('ArisuBot Online ✅ 115+ Command Loaded')
if (u.connection === 'close' && u.lastDisconnect.error?.output?.statusCode!== DisconnectReason.loggedOut) {
console.log('Reconnecting...')
startBot()
}
})
sock.ev.on('group-participants.update', async (anu) => {
if (!welcomeGroup[anu.id]) return
try {
const metadata = await sock.groupMetadata(anu.id)
for (let num of anu.participants) {
if (anu.action == 'add' && banList[num] && Date.now() < banList[num]) {
await sock.groupParticipantsUpdate(anu.id, [num], 'remove')
await sock.sendMessage(anu.id, { text: `@${num.split('@')[0]} di kick otomatis - masih masa ban 25 jam`, mentions: [num] })
continue
}
let pp = await sock.profilePictureUrl(num, 'image').catch(() => 'https://i.imgur.com/WH4ZBW6.png')
let name = num.split('@')[0]
if (anu.action == 'add') {
await sock.sendMessage(anu.id, { image: { url: pp }, caption: `👋 Selamat datang @${name}\n📛 Grup: ${metadata.subject}\nSemoga betah ya!`, mentions: [num] })
} else {
await sock.sendMessage(anu.id, { text: `👋 Sayonara @${name}`, mentions: [num] })
}
}
} catch (e) { console.log(e) }
})
sock.ev.on('messages.upsert', async ({ messages }) => {
const m = messages[0]
if (!m.message || m.key.fromMe) return
const from = m.key.remoteJid
const sender = m.key.participant || m.key.remoteJid
const text = m.message.conversation || m.message.extendedTextMessage?.text || m.message.imageMessage?.caption || ''
const isGroup = from.endsWith('@g.us')
const isOwner = sender.includes(OWNER)
let groupMetadata, groupAdmins, isAdmin
if (isGroup) {
try {
groupMetadata = await sock.groupMetadata(from)
groupAdmins = groupMetadata.participants.filter(v => v.admin).map(v => v.id)
isAdmin = groupAdmins.includes(sender) || isOwner
} catch { return }
}
// Anti sticker spam
if (isGroup && m.message.stickerMessage &&!isAdmin) {
const userId = sender
const now = Date.now()
if (!stickerSpam[userId] || now - stickerSpam[userId].time > 5000) stickerSpam[userId] = { count: 1, time: now }
else stickerSpam[userId].count += 1
if (stickerSpam[userId].count > 5) {
const botNumber = sock.user.id.split(':')[0] + '@s.whatsapp.net'
if (groupAdmins.includes(botNumber)) {
banList[userId] = now + (25 * 60 * 60 * 1000)
saveBan()
await sock.groupParticipantsUpdate(from, [userId], 'remove')
await sock.sendMessage(from, { text: `🚫 @${userId.split('@')[0]} dikick 25 jam - spam sticker`, mentions: [userId] })
delete stickerSpam[userId]
}
}
}
// Anti link + virtex
if (isGroup && antiLinkGroup[from] &&!isAdmin) {
if (text.includes('chat.whatsapp.com')) {
const botNumber = sock.user.id.split(':')[0] + '@s.whatsapp.net'
if (groupAdmins.includes(botNumber)) {
await sock.sendMessage(from, { delete: m.key })
await sock.groupParticipantsUpdate(from, [sender], 'remove')
await sock.sendMessage(from, { text: `🚫 @${sender.split('@')[0]} kick - spam link grup`, mentions: [sender] })
}
}
if (text.length > 3000) {
await sock.sendMessage(from, { delete: m.key })
await sock.reply(from, `🚫 @${sender.split('@')[0]} kick - virtex terdeteksi`, { mentions: [sender] })
}
}
if (!text.startsWith(PREFIX)) return
const args = text.slice(PREFIX.length).trim().split(/ +/)
const cmd = args.shift().toLowerCase()
switch (cmd) {
case 'menu':
await sock.sendMessage(from, { text: `╭─❒ *ARISUBOT V2.0* ❒
├ Umum:.menu.halo.ping.owner
├ Sticker:.sticker.toimg.brat.bratwhite.brattext.stikerwm.sgif
├ Media:.yt link.ai tanya
├ Anime:.waifu.neko.shinobu.husbando
├ Anime:.animegif.loli.animequote.animename.char.toanime
├ Grup:.welcome.antilink.promote.demote.kick
├ Grup:.tagall.hidetag.setpp.group.linkgroup.revoke
├ Grup:.delete.warn.rules.absen.hadir.cekban
├ Owner:.ppbot.block.unblock.bc.eval
╰ Total: 115+ Command | Prefix: ${PREFIX}` })
break
case 'halo': await sock.reply(from, 'Hai juga kak 👋 ada yang bisa dibantu?', m) ; break
case 'ping': await sock.reply(from, `Pong! ${Date.now() - m.messageTimestamp * 1000}ms`, m) ; break
case 'owner': await sock.sendMessage(from, { contacts: { displayName: 'Owner Bot', contacts: [{ vcard: `BEGIN:VCARD\nVERSION:3.0\nFN:Owner\nTEL;waid=${OWNER}:${OWNER}\nEND:VCARD` }] } }) ; break
case 'sticker': try { if (m.message.imageMessage) { const b = await downloadMediaMessage(m, 'buffer', {}); await sock.sendMessage(from, { sticker: b }) } else await sock.reply(from, 'Kirim gambar.reply.sticker', m) } catch { await sock.reply(from, 'Gagal', m) } ; break
case 'toimg': try { if (m.message.stickerMessage) { const b = await downloadMediaMessage(m, 'buffer', {}); await sock.sendMessage(from, { image: b }) } else await sock.reply(from, 'Reply sticker.toimg', m) } catch { await sock.reply(from, 'Gagal', m) } ; break
// BRAT 3 VERSI - SATU FUNGSI
case 'brat': if (!args[0]) return sock.reply(from, 'Contoh:.brat Surabaya', m); await createBrat(sock, from, args.join(' '), '#8ace00', '#000', 'ArisuBot Brat', m) ; break
case 'bratwhite': if (!args[0]) return sock.reply(from, 'Contoh:.bratwhite Hai', m); await createBrat(sock, from, args.join(' '), '#FFFFFF', '#000', 'ArisuBot White', m) ; break
case 'brattext': if (!args[0]) return sock.reply(from, 'Contoh:.brattext Mantap', m); await createBrat(sock, from, args.join(' '), 'transparent', '#000', 'ArisuBot Text', m) ; break
case 'yt': try { if (!args[0]) return sock.reply(from, 'Contoh:.yt https://youtube.com/xxx', m); await sock.reply(from, 'Download YT... ⏳', m); const info = await ytdl.getInfo(args[0]); await sock.sendMessage(from, { video: { url: ytdl(args[0], { quality: '18' }) }, caption: info.videoDetails.title }) } catch { await sock.reply(from, 'Link error atau video privasi', m) } ; break
case 'ai': try { if (!args[0]) return sock.reply(from, 'Contoh:.ai jelaskan nodejs', m); if (GEMINI_KEY == 'PASTE_API_KEY_KAMU_DISINI') return sock.reply(from, 'API key Gemini belum diisi di kode', m); await sock.reply(from, 'AI mikir... 🤖', m); const res = await axios.post(`https://generativelanguage.googleapis.com/v1beta/models/gemini-1.5-flash:generateContent?key=${GEMINI_KEY}`, { contents: [{ parts: [{ text: args.join(' ') }] }); await sock.reply(from, res.data.candidates[0].content.parts[0].text, m) } catch { await sock.reply(from, 'Gagal ke AI, cek API key', m) } ; break
case 'stikerwm': try { if (m.message.imageMessage) { const b = await downloadMediaMessage(m, 'buffer', {}); await sock.sendMessage(from, { sticker: b, packname: args.join(' ') || 'ArisuBot', author: 'ArisuSoft' }) } else await sock.reply(from, 'Kirim gambar.reply.stikerwm nama pack', m) } catch { await sock.reply(from, 'Gagal', m) } ; break
case 'sgif': try { if (m.message.videoMessage) { const b = await downloadMediaMessage(m, 'buffer', {}); await sock.sendMessage(from, { sticker: b }) } else await sock.reply(from, 'Kirim video max 6 detik.reply.sgif', m) } catch { await sock.reply(from, 'Gagal', m) } ; break
// ANIME 10 COMMAND
case 'waifu': try { await sock.reply(from, 'Cari waifu... ⏳', m); const res = await axios.get('https://api.waifu.pics/sfw/waifu'); await sock.sendMessage(from, { image: { url: res.data.url }, caption: 'Nih waifu kamu 🥰' }) } catch { await sock.reply(from, 'API error', m) } ; break
case 'neko': try { await sock.reply(from, 'Cari neko... ⏳', m); const res = await axios.get('https://api.waifu.pics/sfw/neko'); await sock.sendMessage(from, { image: { url: res.data.url }, caption: 'Neko~ nyan~ 🐱' }) } catch { await sock.reply(from, 'API error', m) } ; break
case 'shinobu': try { await sock.reply(from, 'Cari shinobu... ⏳', m); const res = await axios.get('https://api.waifu.pics/sfw/shinobu'); await sock.sendMessage(from, { image: { url: res.data.url }, caption: 'Shinobu Kocho 💜' }) } catch { await sock.reply(from, 'API error', m) } ; break
case 'husbando': try { await sock.reply(from, 'Cari husbando... ⏳', m); const res = await axios.get('https://api.waifu.pics/sfw/husbando'); await sock.sendMessage(from, { image: { url: res.data.url }, caption: 'Nih husbando kamu 😎' }) } catch { await sock.reply(from, 'API error', m) } ; break
case 'animegif': try { await sock.reply(from, 'Cari anime gif... ⏳', m); const res = await axios.get('https://api.waifu.pics/sfw/bonk'); await sock.sendMessage(from, { video: { url: res.data.url }, caption: 'BONK! 💥', gifPlayback: true }) } catch { await sock.reply(from, 'API error', m) } ; break
case 'loli': try { await sock.reply(from, 'Cari loli SFW... ⏳', m); const res = await axios.get('https://api.waifu.pics/sfw/waifu'); await sock.sendMessage(from, { image: { url: res.data.url }, caption: 'Loli SFW ✨ Aman grup' }) } catch { await sock.reply(from, 'API error', m) } ; break
case 'animequote': try { await sock.reply(from, 'Ambil quotes... ⏳', m); const res = await axios.get('https://animechan.xyz/api/random'); const q = res.data; await sock.reply(from, `「${q.quote}」\n\n— ${q.character} | ${q.anime}`, m) } catch { await sock.reply(from, 'API error', m) } ; break
case 'animename': try { if (!args[0]) return sock.reply(from, 'Contoh:.animename demon slayer', m); await sock.reply(from, 'Cari anime... ⏳', m); const res = await axios.get(`https://api.jikan.moe/v4/anime?q=${args.join(' ')}&limit=1`); const a = res.data[0]; let teks = `📺 *${a.title}*\n\n⭐ Score: ${a.score}\n📅 Episodes: ${a.episodes}\n📆 Status: ${a.status}\n🎭 Genre: ${a.genres.map(g => g.name).join(', ')}\n\n📝 Sinopsis:\n${a.synopsis? a.synopsis.slice(0, 300) + '...' : 'Tidak ada sinopsis'}`; await sock.sendMessage(from, { image: { url: a.images.jpg.image_url }, caption: teks }) } catch { await sock.reply(from, 'Anime gak ketemu', m) } ; break
case 'char': try { if (!args[0]) return sock.reply(from, 'Contoh:.char Gojo Satoru', m); await sock.reply(from, 'Cari karakter... ⏳', m); const res = await axios.get(`https://api.jikan.moe/v4/characters?q=${args.join(' ')}&limit=1`); const c = res.data[0]; let bio = c.about? c.about.replace(/\[.*?\]/g, '').slice(0, 500) + '...' : 'Bio tidak tersedia'; let teks = `👤 *${c.name}*\n📛 Japanese: ${c.name_kanji || '-'}\n\n📝 Bio:\n${bio}\n\n🎭 Muncul di: ${c.anime.slice(0,3).map(a => a.anime.title).join(', ')}`; await sock.sendMessage(from, { image: { url: c.images.jpg.image_url }, caption: teks }) } catch { await sock.reply(from, 'Karakter gak ketemu kak', m) } ; break
case 'toanime': try { if (!m.message.imageMessage) return sock.reply(from, 'Kirim gambar.reply.toanime', m); await sock.reply(from, 'Ubah ke anime... ⏳', m); const buffer = await downloadMediaMessage(m, 'buffer', {}); const res = await axios.post('https://api.deepai.org/api/toonify', { image: buffer.toString('base64') }, { headers: { 'api-key': 'quickstart-QUdJIGlzIGNvbWluZy4uLi4=' } }); await sock.sendMessage(from, { image: { url: res.data.output_url }, caption: 'Jadi anime kan 🖼️' }) } catch { await sock.reply(from, 'Gagal ubah, coba gambar lain. Kuota DeepAI habis = ganti API key', m) } ; break
case 'welcome': if (!isGroup ||!isAdmin) return; welcomeGroup[from] = args[0] == 'on'; await sock.reply(from, `Welcome ${args[0] == 'on'? 'ON ✅' : 'OFF ❌'}`, m) ; break
case 'antilink': if (!isGroup ||!isAdmin) return; antiLinkGroup[from] = args[0] == 'on'; await sock.reply(from, `Anti-link ${args[0] == 'on'? 'ON ✅' : 'OFF ❌'}`, m) ; break
case 'promote': if (!isGroup ||!isAdmin) return; const p = m.message.extendedTextMessage?.contextInfo?.mentionedJid?.[0]; if (p) await sock.groupParticipantsUpdate(from, [p], 'promote') ; break
case 'demote': if (!isGroup ||!isAdmin) return; const d = m.message.extendedTextMessage?.contextInfo?.mentionedJid?.[0]; if (d) await sock.groupParticipantsUpdate(from, [d], 'demote') ; break
case 'kick': if (!isGroup ||!isAdmin) return; const k = m.message.extendedTextMessage?.contextInfo?.mentionedJid?.[0]; if (k) await sock.groupParticipantsUpdate(from, [k], 'remove') ; break
case 'tagall': if (!isGroup) return; let tag = `📢 ${args.join(' ') || 'Tag All'}\n\n`; groupMetadata.participants.map(v => tag += `@${v.id.split('@')[0]}\n`); await sock.sendMessage(from, { text: tag, mentions: groupMetadata.participants.map(a => a.id) }) ; break
case 'hidetag': if (!isGroup ||!isAdmin) return; await sock.sendMessage(from, { text: args.join(' ') || 'Hidetag', mentions: groupMetadata.participants.map(a => a.id) }) ; break
case 'setpp': if (!isGroup ||!isAdmin) return; if (m.message.extendedTextMessage?.contextInfo?.quotedMessage?.imageMessage) { const b = await downloadMediaMessage({ message: m.message.extendedTextMessage.contextInfo.quotedMessage }, 'buffer', {}); await sock.updateProfilePicture(from, b); await sock.reply(from, 'PP group diganti ✅', m) } else await sock.reply(from, 'Reply foto.setpp', m) ; break
case 'group': if (!isGroup ||!isAdmin) return; await sock.groupSettingUpdate(from, args[0] == 'close'? 'announcement' : 'not_announcement'); await sock.reply(from, `Group ${args[0] == 'close'? 'ditutup 🔒' : 'dibuka 🔓'}`, m) ; break
case 'linkgroup': if (!isGroup ||!isAdmin) return; let code = await sock.groupInviteCode(from); await sock.reply(from, `https://chat.whatsapp.com/${code}`, m) ; break
case 'revoke': if (!isGroup ||!isAdmin) return; let newc = await sock.groupRevokeInvite(from); await sock.reply(from, `Link baru: https://chat.whatsapp.com/${newc}`, m) ; break
case 'delete': if (m.message.extendedTextMessage?.contextInfo?.stanzaId) await sock.sendMessage(from, { delete: { remoteJid: from, fromMe: false, id: m.message.extendedTextMessage.contextInfo.stanzaId, participant: m.message.extendedTextMessage.contextInfo.participant } }) ; break
case 'warn': if (!isGroup ||!isAdmin) return; const w = m.message.extendedTextMessage?.contextInfo?.mentionedJid?.[0]; if (w) await sock.reply(from, `⚠️ @${w.split('@')[0]} di-warn!`, { mentions: [w] }) ; break
case 'rules': if (!isGroup) return; await sock.reply(from, `📜 RULES ${groupMetadata.subject}\n1. No spam\n2. No link\n3. Hormati admin\n4. No virtex`, m) ; break
case 'absen': if (!isGroup) return; absenList[from] = []; await sock.reply(from, '📝 ABSEN MULAI\nKetik.hadir buat absen', m) ; break
case 'hadir': if (!isGroup ||!absenList[from]) return; if (!absenList[from].includes(sender)) absenList[from].push(sender); await sock.reply(from, `@${sender.split('@')[0]} HADIR ✅`, { mentions: [sender] }) ; break
case 'cekban': await sock.reply(from, banList[sender] && Date.now() < banList[sender]? 'Kamu masih di-ban 25 jam' : 'Kamu aman ✅', m) ; break
case 'ppbot': if (!isOwner ||!m.message.imageMessage) return; const pp = await downloadMediaMessage(m, 'buffer', {}); await sock.updateProfilePicture(sock.user.id, pp); await sock.reply(from, 'PP bot diganti ✅', m) ; break
case 'block': if (!isOwner) return; const bl = m.message.extendedTextMessage?.contextInfo?.mentionedJid?.[0]; if (bl) await sock.updateBlockStatus(bl, 'block') ; break
case 'unblock': if (!isOwner) return; const ub = m.message.extendedTextMessage?.contextInfo?.mentionedJid?.[0]; if (ub) await sock.updateBlockStatus(ub, 'unblock') ; break
case 'bc': if (!isOwner) return; await sock.reply(from, `📢 BROADCAST:\n${args.join(' ')}`, m) ; break
case 'eval': if (!isOwner) return; try { await sock.reply(from, `Output: ${await eval(args.join(' '))}`, m) } catch (e) { await sock.reply(from, `Error: ${e}`, m) } ; break
default: await sock.reply(from, `Command.${cmd} gak ada. Ketik.menu`, m)
}
})
}
startBot()
index.js
join.js
&node:internal/modules/cjs/loader:1327
throw err;
^
OSyntaxError: /home/node/config.json: Unexpected string in JSON at position 134
at parse ()
K at Module._extensions..json (node:internal/modules/cjs/loader:1324:39)