♣𝐓𝐄𝐂𝐇 𝐇𝐈𝐍𝐔𝐆𝐄𝐑𝐀 ᵇʸ ˡⁱᵐᵘˡᵉ🌐Code&Free🟢
177 subscribers
47 photos
23 videos
88 files
66 links
**亗ᵀʰᵉᘜㄖᗪ ㄒ乇匚卄۞🇷 🇦 🇵 🇭 🇦 🇪 🇱**
https://whatsapp.com/channel/0029VajBry5FnSzAqZxMhi1i
Download Telegram
𝚃𝚎𝚛𝚖𝚞𝚡 𝚒𝚗𝚌𝚕𝚞𝚎𝚗𝚝 𝚞𝚗 𝚌𝚎𝚛𝚝𝚊𝚒𝚗 𝚗𝚘𝚖𝚋𝚛𝚎 𝚍𝚎 𝚌𝚘𝚖𝚖𝚊𝚗𝚍𝚎. 𝙽𝚘𝚞𝚜 𝚊𝚕𝚕𝚘𝚗𝚜 𝚟𝚘𝚒𝚛 𝚕𝚎𝚜 𝚌𝚘𝚖𝚖𝚊𝚗𝚍𝚎𝚜 𝚍𝚎 𝚋𝚊𝚜𝚎𝚜
𝙰𝚟𝚊𝚗𝚝 𝚍'𝚎𝚗𝚝𝚛𝚎𝚛 𝚍𝚊𝚗𝚜 𝚕𝚎𝚜 𝚌𝚘𝚖𝚖𝚊𝚗𝚍𝚎𝚜 𝚃𝚎𝚛𝚖𝚞𝚡. 𝙽𝚘𝚞𝚜 𝚍𝚎𝚟𝚘𝚗𝚜 𝚜𝚊𝚟𝚘𝚒𝚛 𝚀𝚞'𝚎𝚜𝚝- 𝚌𝚎 𝚚𝚞𝚎 𝚃𝚎𝚛𝚖𝚞𝚡 𝚎𝚝 𝚚𝚞𝚎𝚕𝚕𝚎𝚜 𝚜𝚘𝚗𝚝 𝚜𝚎𝚜 𝚞𝚝𝚒𝚕𝚒𝚜𝚊𝚝𝚒𝚘𝚗𝚜 ?

𝙴𝚗 𝚝𝚎𝚛𝚖𝚎𝚜 𝚜𝚒𝚖𝚙𝚕𝚎𝚜, 𝚃𝚎𝚛𝚖𝚞𝚡 𝚎𝚜𝚝 𝚞𝚗 é𝚖𝚞𝚕𝚊𝚝𝚎𝚞𝚛 𝚍𝚎 𝚝𝚎𝚛𝚖𝚒𝚗𝚊𝚕 𝙰𝚗𝚍𝚛𝚘𝚒𝚍 𝚎𝚝 𝚞𝚗𝚎 𝚊𝚙𝚙𝚕𝚒𝚌𝚊𝚝𝚒𝚘𝚗 𝚍'𝚎𝚗𝚟𝚒𝚛𝚘𝚗𝚗𝚎𝚖𝚎𝚗𝚝 𝙻𝚒𝚗𝚞𝚡 𝚚𝚞𝚒 𝚗𝚎 𝚗é𝚌𝚎𝚜𝚜𝚒𝚝𝚎 𝚊𝚞𝚌𝚞𝚗 𝚊𝚌𝚌è𝚜 𝚛𝚘𝚘𝚝. 𝙲𝚎𝚕𝚊 𝚜𝚒𝚐𝚗𝚒𝚏𝚒𝚎 𝚚𝚞𝚎 𝚟𝚘𝚞𝚜 𝚙𝚘𝚞𝚟𝚎𝚣 𝚎𝚡é𝚌𝚞𝚝𝚎𝚛 𝚃𝚎𝚛𝚖𝚞𝚡 𝚜𝚊𝚗𝚜 𝚛𝚘𝚘𝚝𝚎𝚛 𝚟𝚘𝚝𝚛𝚎 𝚊𝚙𝚙𝚊𝚛𝚎𝚒𝚕 𝙰𝚗𝚍𝚛𝚘𝚒𝚍.

𝙰𝚟𝚎𝚌 𝚕'𝚊𝚒𝚍𝚎 𝚍𝚎 𝚃𝚎𝚛𝚖𝚞𝚡, 𝚟𝚘𝚞𝚜 𝚙𝚘𝚞𝚟𝚎𝚣 𝚏𝚊𝚌𝚒𝚕𝚎𝚖𝚎𝚗𝚝 𝚒𝚗𝚜𝚝𝚊𝚕𝚕𝚎𝚛 𝚕𝚎𝚜 𝚊𝚙𝚙𝚕𝚒𝚌𝚊𝚝𝚒𝚘𝚗𝚜 𝚚𝚞𝚒 𝚜'𝚎𝚡é𝚌𝚞𝚝𝚎𝚗𝚝 𝚜𝚞𝚛 𝚕𝚊 𝚙𝚕𝚊𝚝𝚎-𝚏𝚘𝚛𝚖𝚎 𝙻𝚒𝚗𝚞𝚡 𝚟𝚒𝚊 𝚕𝚎 𝚐𝚎𝚜𝚝𝚒𝚘𝚗𝚗𝚊𝚒𝚛𝚎 𝚍𝚎 𝚙𝚊𝚌𝚔𝚊𝚐𝚎𝚜 𝙰𝙿𝚃. 𝙲𝚎𝚛𝚝𝚊𝚒𝚗𝚜 𝚍𝚎𝚜 𝚖𝚎𝚒𝚕𝚕𝚎𝚞𝚛𝚜 𝚘𝚞𝚝𝚒𝚕𝚜 𝚙𝚘𝚞𝚛 𝚃𝚎𝚛𝚖𝚞𝚡 𝚜𝚘𝚗𝚝 𝙼𝚎𝚝𝚊𝚜𝚙𝚕𝚘𝚒𝚝, 𝚃𝚘𝚘𝚕-𝚇, 𝚂𝚀𝙻𝙼𝚊𝚙, 𝚇𝚙𝚕𝚘𝚒𝚝𝚂𝚙𝚢, 𝚆𝚒𝚛𝚎𝚜𝚑𝚊𝚛𝚔, 𝙵𝚜𝚘𝚌𝚒𝚎𝚝𝚢 𝚎𝚝 𝚋𝚒𝚎𝚗 𝚍'𝚊𝚞𝚝𝚛𝚎𝚜.

𝙸𝚕 𝚎𝚡𝚒𝚜𝚝𝚎 𝚍𝚎𝚞𝚡 𝚐𝚎𝚜𝚝𝚒𝚘𝚗𝚗𝚊𝚒𝚛𝚎𝚜 𝚍𝚎 𝚙𝚊𝚌𝚔𝚊𝚐𝚎𝚜 𝚍𝚒𝚜𝚙𝚘𝚗𝚒𝚋𝚕𝚎𝚜 𝚍𝚊𝚗𝚜 𝚃𝚎𝚛𝚖𝚞𝚡, 𝚕𝚎 𝚙𝚛𝚎𝚖𝚒𝚎𝚛 𝚎𝚜𝚝 "𝚊𝚙𝚝" 𝚎𝚝 𝚞𝚗 𝚊𝚞𝚝𝚛𝚎 𝚎𝚜𝚝 "𝚙𝚔𝚐". 𝚅𝚘𝚞𝚜 𝚙𝚘𝚞𝚟𝚎𝚣 𝚒𝚗𝚜𝚝𝚊𝚕𝚕𝚎𝚛 𝚗'𝚒𝚖𝚙𝚘𝚛𝚝𝚎 𝚚𝚞𝚎𝚕𝚕𝚎 𝚊𝚙𝚙𝚕𝚒𝚌𝚊𝚝𝚒𝚘𝚗 𝚍𝚒𝚜𝚙𝚘𝚗𝚒𝚋𝚕𝚎 𝚙𝚘𝚞𝚛 𝚃𝚎𝚛𝚖𝚞𝚡 à 𝚕'𝚊𝚒𝚍𝚎 𝚍𝚎 𝚌𝚎𝚜 𝚐𝚎𝚜𝚝𝚒𝚘𝚗𝚗𝚊𝚒𝚛𝚎𝚜 𝚍𝚎 𝚙𝚊𝚌𝚔𝚊𝚐𝚎𝚜. 𝚂𝚒 𝚟𝚘𝚞𝚜 𝚟𝚘𝚞𝚜 𝚎𝚗𝚗𝚞𝚢𝚎𝚣 𝚊𝚟𝚎𝚌 𝚃𝚎𝚛𝚖𝚞𝚡, 𝚟𝚘𝚞𝚜 𝚍𝚎𝚟𝚎𝚣 𝚎𝚜𝚜𝚊𝚢𝚎𝚛 𝚚𝚞𝚎𝚕𝚚𝚞𝚎𝚜 𝚊𝚕𝚝𝚎𝚛𝚗𝚊𝚝𝚒𝚟𝚎𝚜 𝚃𝚎𝚛𝚖𝚞𝚡.

𝚅𝚘𝚢𝚘𝚗𝚜 𝚖𝚊𝚒𝚗𝚝𝚎𝚗𝚊𝚗𝚝 𝚚𝚞𝚎𝚕𝚕𝚎𝚜 𝚜𝚘𝚗𝚝 𝚕𝚎𝚜 𝚞𝚝𝚒𝚕𝚒𝚜𝚊𝚝𝚒𝚘𝚗𝚜 𝚍𝚎 𝚃𝚎𝚛𝚖𝚞𝚡. 𝙰𝚒𝚗𝚜𝚒, 𝚃𝚎𝚛𝚖𝚞𝚡 𝚙𝚎𝚞𝚝 ê𝚝𝚛𝚎 𝚞𝚝𝚒𝚕𝚒𝚜é 𝚙𝚘𝚞𝚛 𝚊𝚖é𝚕𝚒𝚘𝚛𝚎𝚛 𝚕𝚊 𝚜é𝚌𝚞𝚛𝚒𝚝é 𝚎𝚝 𝚕𝚎 𝚙𝚒𝚛𝚊𝚝𝚊𝚐𝚎 é𝚝𝚑𝚒𝚚𝚞𝚎. 𝙶𝚛â𝚌𝚎 à 𝚃𝚎𝚛𝚖𝚞𝚡, 𝚟𝚘𝚞𝚜 𝚙𝚘𝚞𝚟𝚎𝚣 𝚏𝚊𝚌𝚒𝚕𝚎𝚖𝚎𝚗𝚝 𝚜é𝚌𝚞𝚛𝚒𝚜𝚎𝚛 𝚟𝚘𝚝𝚛𝚎 𝚆𝚒-𝙵𝚒 𝚘𝚞 𝚞𝚗𝚎 𝚊𝚙𝚙𝚕𝚒𝚌𝚊𝚝𝚒𝚘𝚗 𝚆𝚎𝚋 𝚎𝚗 𝚎𝚏𝚏𝚎𝚌𝚝𝚞𝚊𝚗𝚝 𝚍𝚎𝚜 𝚝𝚎𝚜𝚝𝚜 𝚍'𝚒𝚗𝚝𝚛𝚞𝚜𝚒𝚘𝚗 𝚎𝚝 𝚋𝚒𝚎𝚗 𝚍'𝚊𝚞𝚝𝚛𝚎𝚜 𝚌𝚑𝚘𝚜𝚎𝚜.

𝚙𝚔𝚐 𝚞𝚙𝚍𝚊𝚝𝚎 && 𝚙𝚔𝚐 𝚞𝚙𝚐𝚛𝚊𝚍𝚎 𝚙𝚔𝚐-𝚞𝚙𝚍𝚊𝚝𝚎
𝙼𝚒𝚜𝚎 à 𝚓𝚘𝚞𝚛, 𝚌’𝚎𝚜𝚝 𝚒𝚗𝚍𝚒𝚜𝚙𝚎𝚗𝚜𝚊𝚋𝚕𝚎 𝚜𝚞𝚛 𝚃𝚎𝚛𝚖𝚞𝚡 𝚜𝚒 𝚟𝚘𝚞𝚜 𝚟𝚘𝚞𝚕𝚎𝚣 𝚋𝚒𝚎𝚗 𝚝𝚛𝚊𝚟𝚊𝚒𝚕𝚕𝚎𝚛 𝚌𝚊𝚛 𝚊𝚟𝚎𝚌 𝚌𝚎𝚝𝚝𝚎 𝚘𝚙𝚝𝚒𝚘𝚗 𝚃𝚎𝚛𝚖𝚞𝚡 𝚜𝚎 𝚖𝚎𝚝 à 𝚓𝚘𝚞𝚛 𝚙𝚘𝚞𝚛 𝚟𝚘𝚒𝚛 𝚜’𝚒𝚕 𝚢 𝚊 𝚍𝚞 𝚗𝚘𝚞𝚟𝚎𝚊𝚞 𝚌𝚘𝚗𝚌𝚎𝚛𝚗𝚊𝚗𝚝 𝚞𝚗𝚎 𝚒𝚗𝚜𝚝𝚊𝚕𝚕𝚊𝚝𝚒𝚘𝚗 𝚚𝚞𝚒 𝚊 é𝚝é 𝚍é𝚓à 𝚏𝚊𝚒𝚝𝚎.

𝙿𝚔𝚐 𝚒𝚗𝚜𝚝𝚊𝚕𝚕𝚎𝚛 𝚜𝟷
𝙴𝚕𝚕𝚎 𝚙𝚎𝚛𝚖𝚎𝚝 𝚍’𝚊𝚏𝚏𝚒𝚌𝚑𝚎 𝚞𝚗 𝚝𝚛𝚊𝚒𝚗 𝚊𝚗𝚒𝚖𝚎𝚛 𝚜𝚞𝚛 𝚕’é𝚌𝚛𝚊𝚗 𝚐𝚛𝚊𝚙𝚑𝚒𝚚𝚞𝚎 𝚍𝚎 𝚝𝚎𝚛𝚖𝚞𝚡
𝙿𝚔𝚐 𝚒𝚗𝚜𝚝𝚊𝚕𝚕𝚎𝚛 𝚏𝚒𝚐𝚕𝚎𝚝
𝙴𝚕𝚕𝚎 𝚙𝚎𝚛𝚖𝚎𝚝 𝚍’𝚊𝚏𝚏𝚒𝚌𝚑𝚎 𝚞𝚗 𝚖𝚎𝚜𝚜𝚊𝚐𝚎 𝚊 𝚕’é𝚌𝚛𝚊𝚗 𝚐𝚛𝚊𝚙𝚑𝚒𝚚𝚞𝚎 𝚍𝚎 𝚝𝚎𝚛𝚖𝚞𝚡
𝙿𝚔𝚐 𝚒𝚗𝚜𝚝𝚊𝚕𝚕𝚎𝚛 𝚌𝚖𝚊𝚝𝚛𝚒𝚡
𝙴𝚕𝚕𝚎 𝚙𝚎𝚛𝚖𝚎𝚝 𝚍’𝚊𝚏𝚏𝚒𝚌𝚑𝚎 𝚍𝚎𝚜 𝚎𝚏𝚏𝚎𝚝𝚜 𝚙𝚕𝚞𝚝ô𝚝 𝚌𝚘𝚘𝚕 𝚜𝚞𝚛 𝚕’é𝚌𝚛𝚊𝚗 𝚍’𝚊𝚏𝚏𝚒𝚌𝚑𝚊𝚐𝚎 𝚍𝚎 𝚝𝚎𝚛𝚖𝚞𝚡

𝙿𝚔𝚐 𝚒𝚗𝚜𝚝𝚊𝚕𝚕𝚎𝚛 𝚏𝚒𝚜𝚑
𝚃𝚘𝚞𝚝 𝚌𝚎 𝚚𝚞𝚒 𝚙𝚎𝚞𝚝 ê𝚝𝚛𝚎 𝚏𝚊𝚒𝚝 𝚍𝚊𝚗𝚜 𝚍'𝚊𝚞𝚝𝚛𝚎𝚜 𝚕𝚊𝚗𝚐𝚊𝚐𝚎𝚜 𝚜𝚑𝚎𝚕𝚕 𝚍𝚎𝚟𝚛𝚊𝚒𝚝 ê𝚝𝚛𝚎 𝚏𝚊𝚒𝚝 𝚍𝚊𝚗𝚜 𝚕𝚎 𝚏𝚒𝚜𝚑. 𝙸𝚕 𝚌𝚘𝚖𝚙𝚕è𝚝𝚎 𝚊𝚞𝚝𝚘𝚖𝚊𝚝𝚒𝚚𝚞𝚎𝚖𝚎𝚗𝚝 𝚕𝚎𝚜 𝚌𝚘𝚖𝚖𝚊𝚗𝚍𝚎𝚜 𝚚𝚞𝚒 𝚜𝚘𝚗𝚝 𝚙𝚕𝚞𝚝ô𝚝 𝚌𝚘𝚘𝚕.

𝚃𝚘𝚒𝚕𝚎𝚝
𝙴𝚕𝚕𝚎 𝚙𝚎𝚛𝚖𝚎𝚝 𝚍’𝚊𝚏𝚏𝚒𝚌𝚑𝚎 𝚞𝚗 𝚖𝚎𝚜𝚜𝚊𝚐𝚎 à 𝚕’é𝚌𝚛𝚊𝚗 𝚐𝚛𝚊𝚙𝚑𝚒𝚚𝚞𝚎 𝚍𝚎 𝚝𝚎𝚛𝚖𝚞𝚡
Soutenez nous vivement en
Partageant le canal ✊
com.termux_117.apk
81.8 MB
Voici la dernière version de termux ☝️
PhotoRoom_Remove_Background_&_Photo_Editor_v1_6_0_Pro.apk
9.3 MB
Changer ou enlever l'arrière plan de vos photos
Connaissez vous Kali Linux ??
Anonymous Poll
68%
Oui
32%
Non
CRICFy_v5.6_.apk
21.3 MB
CANAL+ Sport GRATUIT sur Android !

Comment profiter de l'application :
1. Installez et ouvrez l'application.
2. Découvrez les événements sportifs en direct ou à venir, sélectionnez et choisissez un serveur de diffusion.
3. Profitez de tous les contenus CANAL+ Sport et bien plus sur votre smartphone !
4. Ajustez la qualité vidéo en fonction de votre connexion via l'icône ⚙ pendant la lecture.

t.me/scriptbothinugera
Example of main entry points for a WhatsApp bot with pairing code

By @DevCode237 :
import makeWASocket, {
useMultiFileAuthState,
DisconnectReason,
fetchLatestBaileysVersion,
Browsers,
makeInMemoryStore
} from '@whiskeysockets/baileys';
import pino from 'pino';
import { Boom } from '@hapi/boom';
import { getMenu } from './lib/menu.mjs';
import config from './config.mjs';
import readline from 'readline';
import fs from 'fs/promises';
import path from 'path';
import { performance } from 'node:perf_hooks'; // ← pour performance.now()

const logger = pino({ level: 'silent' });
const store = makeInMemoryStore({ logger });

// Fichier persistant pour les chats
const CHATS_FILE = path.join(process.cwd(), 'chats.json');

let chatsMap = new Map();

async function loadChats() {
try {
const data = await fs.readFile(CHATS_FILE, 'utf-8');
const chatsArray = JSON.parse(data);
chatsMap = new Map(chatsArray.map(chat => [chat.id, chat]));
console.log(`Chats chargés : ${chatsMap.size}`);
} catch (err) {
if (err.code !== 'ENOENT') console.error('Erreur chargement chats.json:', err);
chatsMap = new Map();
}
}

async function saveChats() {
try {
const chatsArray = Array.from(chatsMap.values());
await fs.writeFile(CHATS_FILE, JSON.stringify(chatsArray, null, 2));
} catch (err) {
console.error('Erreur sauvegarde chats.json:', err);
}
}

const rl = readline.createInterface({ input: process.stdin, output: process.stdout });
const question = text => new Promise(resolve => rl.question(text, resolve));

async function connect() {
await loadChats();

const { state, saveCreds } = await useMultiFileAuthState('./session_limule');
const { version } = await fetchLatestBaileysVersion();

const sock = makeWASocket({
version,
logger,
printQRInTerminal: false,
auth: state,
browser: Browsers.macOS('Chrome'),
syncFullHistory: false
});

store.bind(sock.ev);

// Mise à jour persistante des chats
sock.ev.on('chats.upsert', chats => {
chats.forEach(chat => chatsMap.set(chat.id, chat));
saveChats();
});

sock.ev.on('chats.update', updates => {
updates.forEach(update => {
const existing = chatsMap.get(update.id);
if (existing) Object.assign(existing, update);
});
saveChats();
});

sock.ev.on('chats.delete', ids => {
ids.forEach(id => chatsMap.delete(id));
saveChats();
});

sock.ev.on('creds.update', saveCreds);

sock.ev.on('connection.update', async update => {
const { connection, lastDisconnect } = update;

if (connection === 'close') {
const reason = new Boom(lastDisconnect?.error)?.output?.statusCode;
if (reason !== DisconnectReason.loggedOut) connect();
else console.log('Déconnexion (logged out)');
} else if (connection === 'open') {
console.log('Limule-Bot connecté ✅');
}

if (!sock.authState.creds.registered) {
const phone = await question('Entre ton numéro WhatsApp (ex: 23769xxxxxxxx) : ');
const code = await sock.requestPairingCode(phone.trim());
console.log(`Code de pairing : ${code}`);
}
});

sock.ev.on('messages.upsert', async ({ messages }) => {
const m = messages[0];
if (!m.message) return;

const from = m.key.remoteJid;
const sender = m.key.participant || from;
const isOwner = sender.replace(/\D/g, '') === config.ownerNumber;

// Extraction texte (caption incluse)
let text = m.message.conversation ||
m.message.extendedTextMessage?.text ||
m.message.imageMessage?.caption ||
m.message.videoMessage?.caption ||
'';

text = text.trim();
if (!text.startsWith(config.prefix)) return;

const args = text.slice(config.prefix.length).trim().split(/ +/);
const command = args.shift()?.toLowerCase();
if (!command) return;

const commands = {
async ping() {
const start = performance.now();
await sock.sendMessage(from, { text: '🏓 Pong !' });
const latency = (performance.now() - start).toFixed(2);

await sock.sendMessage(from, {
text: `Pong ! Latency: *${latency} ms* ${latency < 150 ? '⚡' : latency < 300 ? '🚀' : '🐢'}`
});
},

async uptime() {
const up = process.uptime();
const h = Math.floor(up / 3600).toString().padStart(2, '0');
const m = Math.floor((up % 3600) / 60).toString().padStart(2, '0');
const s = Math.floor(up % 60).toString().padStart(2, '0');
await sock.sendMessage(from, { text: `⏳ *Uptime* : ${h}h ${m}m ${s}s` });
},

async menu() {
const menuMsg = await getMenu(from, m.pushName || 'Toi');
await sock.relayMessage(from, menuMsg.message, { messageId: m.key.id });
},
help: 'menu',

async cmds() {
const cmdList = [
'🏓 !ping — Test de latence',
'⏳ !uptime — Temps d\'activité',
'📜 !menu / !help — Menu principal',
'📋 !cmds — Cette liste',
'🖼️ !sticker — Image/vidéo → sticker',
'🖼️ !toimg — Sticker → image',
'📢 !bc <texte> — Diffusion (owner only)',
'🔒 !self — Mode privé (owner only)',
'🔗 !channel — Lien de la chaîne'
].join('\n');

await sock.sendMessage(from, {
text: `┏━━━ *Commandes disponibles* ━━━┓\n\n\( {cmdList}\n\n┗━━━━━━━━━━━━━━━━━━━━━┛\n \){config.footer}`
});
},

async sticker() {
const quoted = m.message.extendedTextMessage?.contextInfo?.quotedMessage ||
m.message.imageMessage || m.message.videoMessage;

if (!quoted || (!quoted.imageMessage && !quoted.videoMessage && !quoted.stickerMessage)) {
return sock.sendMessage(from, { text: '❌ Réponds à une image, vidéo ou sticker !' });
}

try {
const buffer = await sock.downloadMediaMessage(quoted);
await sock.sendMessage(from, { sticker: buffer });
await sock.sendMessage(from, { react: { text: '✅', key: m.key } });
} catch (err) {
console.error('Sticker error:', err);
await sock.sendMessage(from, { text: '❌ Échec création sticker' });
}
},

async toimg() {
const quoted = m.message.extendedTextMessage?.contextInfo?.quotedMessage;
if (!quoted?.stickerMessage) {
return sock.sendMessage(from, { text: '❌ Réponds à un sticker !' });
}

try {
const buffer = await sock.downloadMediaMessage(quoted);
await sock.sendMessage(from, { image: buffer, caption: 'Sticker → Image' });
await sock.sendMessage(from, { react: { text: '🖼️', key: m.key } });
} catch (err) {
console.error('Toimg error:', err);
await sock.sendMessage(from, { text: '❌ Échec conversion' });
}
},

async bc() {
if (!isOwner) return sock.sendMessage(from, { text: '⛔ Owner only' });

const broadcastText = args.join(' ') || '(test broadcast)';
let success = 0, failed = 0;

for (const [jid] of chatsMap) {
if (jid === 'status@broadcast' || jid === from) continue;

try {
await sock.sendMessage(jid, {
text: `📢 Broadcast :\n\n\( {broadcastText}\n\n \){config.footer}`
});
success++;
} catch (err) {
failed++;
console.error(`Échec BC → ${jid}:`, err.message);
}
}

await sock.sendMessage(from, {
text: `📊 *Broadcast terminé*\n\n✅ Réussis : ${success}\n❌ Échecs : ${failed}\nTotal : ${success + failed}`
});
},

async self() {
if (!isOwner) return sock.sendMessage(from, { text: '⛔ Owner only' });
await sock.sendMessage(from, { text: '🔒 Mode self activé (placeholder – à développer)' });
},

async channel() {
await sock.sendMessage(from, {
text: `🌟 *Rejoins la chaîne officielle !*\n\n→ \( {config.channelLink}\n\n \){config.footer}`
});
}
};

try {
const handler = commands[command];

if (handler) {
if (typeof handler === 'string') return await commands[handler]();
await handler();
} else {
await sock.sendMessage(from, { react: { text: '❓', key: m.key } });
}
} catch (err) {
console.error(`Erreur commande ${command}:`, err);
await sock.sendMessage(from, { text: `😓 Erreur avec *${command}* — réessaie plus tard` });
}
});

setInterval(saveChats, 10 * 60 * 1000); // Sauvegarde toutes les 10 min
}

connect().catch(err => {
console.error('Erreur fatale:', err);
process.exit(1);
});
This media is not supported in your browser
VIEW IN TELEGRAM
Forwarded from ▇ █ ɴᴇxᴜs🌐ʟᴀʙs █ ▇ (—͟͞͞𝐒𝐤𝐲𝐥𝐞𝐫🥀꧁⁣🌀𓆩Limule𓆪🌀꧂ 𝐇𝐨𝐬𝐡𝐢𝐧𝐨)