@neelegirl/baileys
v2.0.5
Published
WhatsApp API for wa-api, a multi-device WhatsApp Web API client
Maintainers
Readme
🌸 @neelegirl/baileys 🌸
Die WhatsApp Web API, die alles kann
Smart Queue · QR-Code · Message ID · LID · TypeScript
| 📦 Paket | 🎯 Baileys API | ✨ Highlights | |----------|----------------|----------------| | @neelegirl/baileys v2.0.5 | 1.7.2 | Upstream-Updates · QR-Code · Message ID · Update-Check von npm |
✨ v2.0.5 · README Glow-Up · Kompatibel mit Baileys 1.7.2 · QR & Message ID unverändert · Update-Prüfung via npm-Registry
Installation · Quickstart · Features · Dokumentation · Support
📋 Inhaltsverzeichnis
- ✨ Warum @neelegirl/baileys?
- 🚀 Installation
- 📖 Quickstart Guide
- ✨ Neue Features in Version 2.0.5
- 💡 Grundlegende Verwendung
- 🎯 Erweiterte Features
- 📚 Dokumentation
- ⚠️ Wichtige Hinweise
- 💬 Support & Community
✨ Warum @neelegirl/baileys?
🌟 Zauberhafte Vorteile 🌟
| Feature | Beschreibung | Status | |---------|-------------|--------| | 🧠 Leichtgewichtig | Keine Browser- oder Selenium-Monster nötig! | ✅ | | 🌈 WebSocket-Magie | Direkt, schnell & stabil | ✅ | | 💖 Multi-Device | Vollständige Unterstützung | ✅ | | 🧩 LID-Kompatibel | Linked ID Erkennung & Nutzung | ✅ | | 🧷 TypeScript | Saubere Typen, DX zum Verlieben | ✅ | | 🔄 Auto-Updates | Automatische Update-Prüfung | ✅ | | 📱 QR-Code | Schöne QR-Code-Anzeige | ✅ | | 🎯 Message ID | Verbesserte Message-ID-Generierung | ✅ | | 🚀 Smart Queue | Intelligente Nachrichten-Warteschlange | ✅ NEU! |
🚀 Installation
📦 Mit npm
npm install @neelegirl/baileys@latest📦 Mit yarn
yarn add @neelegirl/baileys@latest📦 Bleeding-Edge (GitHub)
npm install github:neelegirl/baileys
# oder
yarn add github:neelegirl/baileys📥 Import
// ES Modules
import makeWASocket, {
useMultiFileAuthState,
DisconnectReason,
fetchLatestBaileysVersion,
Browsers,
createSmartMessageQueue // 🆕 NEU!
} from '@neelegirl/baileys'
// CommonJS
const {
default: makeWASocket,
useMultiFileAuthState,
createSmartMessageQueue
} = require('@neelegirl/baileys')📖 Quickstart Guide
🎯 Für Anfänger: Dein erster Bot in 5 Minuten
import makeWASocket, {
useMultiFileAuthState,
DisconnectReason,
fetchLatestBaileysVersion
} from '@neelegirl/baileys'
import { Boom } from '@hapi/boom'
async function startBot() {
// 1️⃣ Auth-State laden/speichern
const { state, saveCreds } = await useMultiFileAuthState('./auth_info')
// 2️⃣ Neueste WhatsApp-Version holen
const { version } = await fetchLatestBaileysVersion()
// 3️⃣ Socket erstellen
const sock = makeWASocket({
version,
auth: state,
printQRInTerminal: true, // QR-Code im Terminal anzeigen
browser: ['Neele Bot', 'Chrome', '1.0.0']
})
// 4️⃣ Credentials speichern wenn sie sich ändern
sock.ev.on('creds.update', saveCreds)
// 5️⃣ Verbindungs-Updates verarbeiten
sock.ev.on('connection.update', (update) => {
const { connection, lastDisconnect } = update
if (connection === 'close') {
const shouldReconnect =
(lastDisconnect?.error as Boom)?.output?.statusCode !== DisconnectReason.loggedOut
console.log('🔌 Verbindung geschlossen, reconnect:', shouldReconnect)
if (shouldReconnect) {
startBot() // Automatisch neu verbinden
}
} else if (connection === 'open') {
console.log('✅ Verbunden mit WhatsApp!')
}
})
// 6️⃣ Nachrichten empfangen
sock.ev.on('messages.upsert', async ({ messages }) => {
const m = messages[0]
if (!m.message) return
const jid = m.key.remoteJid!
const text = m.message.conversation || m.message.extendedTextMessage?.text || ''
// Einfacher Echo-Bot
if (text.toLowerCase() === 'hallo') {
await sock.sendMessage(jid, {
text: '🌸 Hallo! Ich bin ein Neele-Bot! ✨'
})
}
})
}
// Bot starten
startBot().catch(console.error)🎨 Was passiert hier?
useMultiFileAuthState: Speichert deine WhatsApp-Session, damit du nicht jedes Mal den QR-Code scannen musstfetchLatestBaileysVersion: Holt die neueste WhatsApp-Version automatischmakeWASocket: Erstellt die Verbindung zu WhatsAppconnection.update: Event für Verbindungsstatus (QR-Code, Verbindung, etc.)messages.upsert: Event für neue Nachrichten
✨ Neue Features in Version 2.0.5
🆕 Was ist neu?
Kompatibel mit Baileys API 1.7.2 · Update-Check von npm-Registry (1× pro Prozess) · Message ID & QR-Code unverändert
| 🎯 Feature | 📝 Beschreibung | 🚀 Status | |-----------|----------------|-----------| | 🔧 Build-Tools | WAProto GenerateStatics & Fix-Imports Skripte | ✅ Neu | | 🧪 Engine-Check | Node.js 20+ Prüfung für stabile Laufzeit | ✅ Neu | | 🔄 Upstream-Updates | validate-connection, Defaults & Pairing aus Backup Baileys | ✅ | | 🔐 LID in Pairing | Linked ID (lid) in configureSuccessfulPairing & me | ✅ | | 📤 historySyncConfig | Vollständiges DeviceProps in generateRegistrationNode | ✅ | | 🌐 getWebInfo | Desktop-Check für syncFullHistory (browser[1] === 'Desktop') | ✅ | | ⚙️ Defaults | enableAutoSessionRecreation, enableRecentMessageCache, shouldSyncHistoryMessage | ✅ | | 🚀 Smart Message Queue | Intelligente Queue mit Auto-Retry & Prioritäten | ✅ | | 🎨 QR-Anzeige | Schöne QR-Code-Box · unverändert | ✅ | | 🎯 Message ID | Message-ID-Generierung · unverändert | ✅ | | 📦 WhatsApp Version | [2, 3000, 1032141294] · Basiert auf @whiskeysockets/baileys 7.0.0-rc.9 | ✅ |
🔥 Neue Funktionen
🚀 createSmartMessageQueue() - Intelligente Nachrichten-Warteschlange ⭐ NEU!
Die ultimative Lösung für zuverlässiges Nachrichtenversenden mit automatischen Retries, Prioritäten und Rate-Limiting!
import { createSmartMessageQueue } from '@neelegirl/baileys'
// Queue erstellen
const queue = createSmartMessageQueue(sock, {
maxRetries: 3, // Max. 3 Retry-Versuche
retryDelay: 1000, // 1 Sekunde Basis-Delay
maxConcurrent: 5, // Max. 5 gleichzeitige Nachrichten
onSuccess: (message) => {
console.log('✅ Nachricht erfolgreich gesendet!')
},
onError: (message, error) => {
console.error('❌ Nachricht fehlgeschlagen:', error)
}
})
// Nachrichten zur Queue hinzufügen
await queue.add({
jid: '[email protected]',
message: { text: 'Wichtige Nachricht!' },
priority: 'high' // 'low' | 'normal' | 'high'
})
// Queue-Statistiken abrufen
const stats = queue.getStats()
console.log(`Pending: ${stats.pending}, Processing: ${stats.processing}, Failed: ${stats.failed}`)
// Queue pausieren/fortsetzen
queue.pause() // Pausiert die Verarbeitung
queue.resume() // Setzt die Verarbeitung fort
// Queue leeren
queue.clear()Features der Smart Queue:
- ✅ Automatische Retries mit Exponential Backoff
- ✅ Prioritäts-System (high > normal > low)
- ✅ Rate-Limiting durch maxConcurrent
- ✅ Error-Handling mit Callbacks
- ✅ Queue-Statistiken für Monitoring
- ✅ Pause/Resume für flexible Kontrolle
1. onWhatsApp() - Prüfe ob Nummer auf WhatsApp ist
const [result] = await sock.onWhatsApp('[email protected]')
if (result?.exists) {
console.log(`✅ ${result.jid} ist auf WhatsApp!`)
}2. executeUSyncQuery() - USync-Queries ausführen
import { USyncQuery, USyncContactProtocol } from '@neelegirl/baileys'
const query = new USyncQuery()
.withContactProtocol()
.withUser(new USyncUser().withPhone('+491234567890'))
const result = await sock.executeUSyncQuery(query)
console.log('Kontakt-Info:', result)3. digestKeyBundle() - Key-Bundle validieren
try {
await sock.digestKeyBundle()
console.log('✅ Key-Bundle ist gültig')
} catch (error) {
console.log('⚠️ Key-Bundle ungültig, Pre-Keys werden hochgeladen')
}4. rotateSignedPreKey() - Signed Pre-Key rotieren
await sock.rotateSignedPreKey()
console.log('✅ Signed Pre-Key wurde rotiert')🔄 Automatische Update-Prüfung
Bei jedem Start wird automatisch geprüft, ob eine neue Version verfügbar ist:
╔════════════════════════════════════════╗
║ 🔔 NEUES UPDATE VERFÜGBAR! 🔔 ║
╠════════════════════════════════════════╣
║ @neelegirl/baileys ║
║ Aktuelle Version: 1.6.6 ║
║ Neue Version: 1.7.0 ║
║ ║
║ Bitte aktualisiere: ║
║ npm install @neelegirl/baileys@latest ║
╚════════════════════════════════════════╝💡 Grundlegende Verwendung
📱 Nachrichten senden
// Text-Nachricht
await sock.sendMessage(jid, { text: 'Hallo! 🌸' })
// Mit Quote (Antwort)
await sock.sendMessage(jid, {
text: 'Das ist eine Antwort!'
}, {
quoted: originalMessage
})
// Mit Erwähnung
await sock.sendMessage(jid, {
text: '@491234567890 Hallo!',
mentions: ['[email protected]']
})🖼️ Medien senden
// Bild
await sock.sendMessage(jid, {
image: { url: './bild.jpg' },
caption: 'Schönes Bild! 🌸'
})
// Video
await sock.sendMessage(jid, {
video: { url: './video.mp4' },
caption: 'Mein Video! 🎬'
})
// GIF (als Video mit gifPlayback Flag)
await sock.sendMessage(jid, {
video: { url: './animation.mp4' },
gifPlayback: true,
caption: 'Kawaii GIF! ✨'
})
// Audio/Sprachnachricht
await sock.sendMessage(jid, {
audio: { url: './audio.ogg' },
mimetype: 'audio/ogg',
ptt: true // Push-to-Talk (Sprachnachricht)
})
// Dokument
await sock.sendMessage(jid, {
document: { url: './dokument.pdf' },
mimetype: 'application/pdf',
fileName: 'Wichtiges Dokument.pdf'
})
// Sticker
await sock.sendMessage(jid, {
sticker: { url: './sticker.webp' }
})👥 Gruppen
// Gruppe erstellen
const group = await sock.groupCreate('Meine Gruppe', [
'[email protected]',
'[email protected]'
])
// Teilnehmer hinzufügen
await sock.groupParticipantsUpdate(
group.id,
['[email protected]'],
'add'
)
// Gruppenname ändern
await sock.groupUpdateSubject(group.id, 'Neuer Gruppenname')
// Gruppenbeschreibung ändern
await sock.groupUpdateDescription(group.id, 'Neue Beschreibung')
// Gruppen-Einstellungen ändern
await sock.groupSettingUpdate(group.id, 'announcement') // Nur Admins können schreiben
await sock.groupSettingUpdate(group.id, 'not_announcement') // Alle können schreiben📊 Umfragen (Polls)
await sock.sendMessage(jid, {
poll: {
name: 'Was ist deine Lieblingsfarbe?',
values: ['Rot', 'Blau', 'Grün', 'Gelb'],
selectableCount: 1 // Anzahl der auswählbaren Optionen
}
})⭐ Reaktionen
// Reaktion hinzufügen
await sock.sendMessage(jid, {
react: {
text: '❤️',
key: message.key
}
})
// Reaktion entfernen (leerer String)
await sock.sendMessage(jid, {
react: {
text: '',
key: message.key
}
})🎯 Erweiterte Features
🚀 Smart Message Queue - Praktisches Beispiel
import { createSmartMessageQueue } from '@neelegirl/baileys'
// Queue für Bulk-Messaging erstellen
const bulkQueue = createSmartMessageQueue(sock, {
maxRetries: 5,
retryDelay: 2000,
maxConcurrent: 3, // Nicht zu viele gleichzeitig
onSuccess: (msg) => {
console.log(`✅ Gesendet an ${msg.jid}`)
},
onError: (msg, err) => {
console.error(`❌ Fehler bei ${msg.jid}:`, err.message)
}
})
// Viele Nachrichten hinzufügen
const recipients = [
'[email protected]',
'[email protected]',
'[email protected]'
]
for (const jid of recipients) {
await bulkQueue.add({
jid,
message: { text: 'Wichtige Ankündigung! 📢' },
priority: 'high'
})
}
// Statistik prüfen
setInterval(() => {
const stats = bulkQueue.getStats()
console.log(`Queue: ${stats.pending} pending, ${stats.processing} processing, ${stats.failed} failed`)
}, 5000)💠 LID-Kompatibilität (Linked ID)
LID sorgt dafür, dass Benutzer auch über geräteübergreifende IDs korrekt erkannt werden:
import { jidDecode, jidEncode, isLidUser } from '@neelegirl/baileys'
// Prüfe ob es eine LID ist
if (isLidUser(someJid)) {
console.log('Das ist eine LID!')
}
// JID dekodieren
const decoded = jidDecode('[email protected]')
console.log(decoded) // { user: '491234567890', server: 's.whatsapp.net' }
// JID encodieren
const encoded = jidEncode('491234567890', 's.whatsapp.net')
console.log(encoded) // '[email protected]'🔐 Sichere Sender-ID-Extraktion
import { jidDecode } from '@neelegirl/baileys'
function getSenderId(message: any) {
const participant = message?.key?.participant || message?.participant
const lid = participant || message?.key?.remoteJid
if (lid) {
const decoded = jidDecode(lid)
return decoded?.user
? `${decoded.user}@${decoded.server}`
: lid
}
return 'unknown'
}
sock.ev.on('messages.upsert', ({ messages }) => {
const sender = getSenderId(messages[0])
console.log('Nachricht von:', sender)
})📥 Medien herunterladen
import { downloadMediaMessage } from '@neelegirl/baileys'
import { writeFile } from 'fs/promises'
sock.ev.on('messages.upsert', async ({ messages }) => {
const m = messages[0]
if (m.message?.imageMessage) {
// Medien als Buffer herunterladen
const buffer = await downloadMediaMessage(
m,
'buffer',
{},
{ logger: sock.logger }
)
// Speichern
await writeFile('./downloaded-image.jpg', buffer)
console.log('✅ Bild gespeichert!')
}
})🔄 Nachrichten bearbeiten
// Nachricht bearbeiten
const sentMessage = await sock.sendMessage(jid, { text: 'Ursprünglicher Text' })
// Später bearbeiten
await sock.sendMessage(jid, {
text: 'Bearbeiteter Text',
edit: sentMessage.key
})🗑️ Nachrichten löschen
// Für alle löschen
await sock.sendMessage(jid, { delete: message.key })
// Nur für mich löschen (via chatModify)
await sock.chatModify({
clear: {
messages: [{
id: message.key.id,
fromMe: true,
timestamp: message.messageTimestamp
}]
}
}, jid)📌 Nachrichten anpinnen
// Nachricht anpinnen (24 Stunden)
await sock.sendMessage(jid, {
pin: {
type: 1, // 0 = entfernen, 1 = anpinnen
time: 86400, // Sekunden (24h)
key: message.key
}
})📍 Standort senden
await sock.sendMessage(jid, {
location: {
degreesLatitude: 52.520008,
degreesLongitude: 13.404954
}
})📇 Kontakt teilen
const vcard = `BEGIN:VCARD
VERSION:3.0
FN:Max Mustermann
TEL;type=CELL;type=VOICE;waid=491234567890:+49 123 4567890
END:VCARD`
await sock.sendMessage(jid, {
contacts: {
displayName: 'Max Mustermann',
contacts: [{ vcard }]
}
})🔄 Nachrichten weiterleiten
await sock.sendMessage(jid, {
forward: originalMessage
})📚 Dokumentation
🎧 Events (Event-Handler)
// Verbindungs-Updates
sock.ev.on('connection.update', (update) => {
if (update.qr) {
console.log('📱 QR-Code:', update.qr)
}
if (update.connection === 'open') {
console.log('✅ Verbunden!')
}
})
// Neue Nachrichten
sock.ev.on('messages.upsert', ({ messages, type }) => {
console.log('📥 Neue Nachricht:', messages[0])
})
// Nachrichten-Updates (z.B. gelesen, gelöscht)
sock.ev.on('messages.update', (updates) => {
updates.forEach(({ key, update }) => {
if (update.status) {
console.log('📊 Status Update:', update.status)
}
})
})
// Credentials-Update (wichtig für Session-Speicherung!)
sock.ev.on('creds.update', saveCreds)
// Kontakte-Update
sock.ev.on('contacts.update', (updates) => {
updates.forEach(update => {
console.log('👤 Kontakt-Update:', update)
})
})
// Gruppen-Updates
sock.ev.on('groups.update', (updates) => {
updates.forEach(update => {
console.log('👥 Gruppen-Update:', update)
})
})
// Presence-Update (online, offline, typing)
sock.ev.on('presence.update', ({ id, presences }) => {
console.log('🟢 Presence:', id, presences)
})🔧 Socket-Konfiguration
const sock = makeWASocket({
// Auth-State (wichtig!)
auth: state,
// WhatsApp-Version (automatisch oder manuell)
version: [2, 3000, 1032141294],
// Browser-Info
browser: ['Mein Bot', 'Chrome', '1.0.0'],
// Oder vordefinierte Browser:
// browser: Browsers.macOS('Desktop')
// browser: Browsers.ubuntu('Server')
// browser: Browsers.iOS('Mobile')
// QR-Code im Terminal anzeigen
printQRInTerminal: true,
// Online beim Verbinden markieren
markOnlineOnConnect: true,
// Vollständige Historie synchronisieren
syncFullHistory: false,
// Logger (optional)
logger: pino({ level: 'silent' }),
// Message-Store (für Retry & Poll-Votes)
getMessage: async (key) => {
// Hole Nachricht aus deinem Store
return await yourMessageStore.get(key)
},
// Group-Metadata-Cache (empfohlen!)
cachedGroupMetadata: async (jid) => {
// Hole aus Cache
return await groupCache.get(jid)
},
// Custom Upload Hosts
customUploadHosts: [],
// Retry-Konfiguration
maxMsgRetryCount: 5,
retryRequestDelayMs: 250,
// Query-Timeout
defaultQueryTimeoutMs: 60000,
// QR-Timeout
qrTimeout: 60000
})💾 Session-Speicherung
import { useMultiFileAuthState, BufferJSON } from '@neelegirl/baileys'
import { readFileSync, writeFileSync } from 'fs'
// Option 1: Multi-File (einfach, empfohlen für Entwicklung)
const { state, saveCreds } = await useMultiFileAuthState('./auth_info')
// Option 2: Single-File (für Produktion)
import { useSingleFileAuthState } from '@neelegirl/baileys'
const { state, saveCreds } = await useSingleFileAuthState('./auth.json')
// Option 3: Custom (für Datenbanken)
const authFile = './auth.json'
const { state, saveCreds } = {
state: {
creds: JSON.parse(
readFileSync(authFile, { encoding: 'utf-8' }),
BufferJSON.reviver
),
keys: {
get: async (type, ids) => {
// Hole Keys aus deiner DB
},
set: async (data) => {
// Speichere Keys in deiner DB
}
}
},
saveCreds: async () => {
const creds = state.creds
writeFileSync(authFile, JSON.stringify(creds, BufferJSON.replacer, 2))
}
}🗄️ Message Store (für Retry & Poll-Votes)
import { makeInMemoryStore } from '@neelegirl/baileys'
// In-Memory Store (für Entwicklung)
const store = makeInMemoryStore({ logger: pino().child({ level: 'silent' }) })
// Aus Datei laden
store.readFromFile('./baileys_store.json')
// Socket binden
store.bind(sock.ev)
// Alle 10 Sekunden speichern
setInterval(() => {
store.writeToFile('./baileys_store.json')
}, 10_000)
// In Socket-Config verwenden
const sock = makeWASocket({
getMessage: async (key) => {
return store.loadMessage(key.remoteJid!, key.id!)
}
})⚠️ Wichtige Hinweise
🚨 Disclaimer
⚠️ WICHTIG: Dieses Projekt steht in keiner offiziellen Verbindung zu WhatsApp.
- ✖️ Kein Spam oder Massennachrichten
- ✖️ Kein Missbrauch für unethische Zwecke
- ✖️ Keine Stalkerware oder automatisierte Überwachung
- ✔️ Verantwortungsvoller Gebrauch wird erwartet
Die Entwickler:innen übernehmen keine Verantwortung für den Gebrauch.
🔒 Sicherheit
- Nie deine Auth-Dateien öffentlich teilen
- Immer
.gitignorefür Auth-Ordner verwenden - Regelmäßig Backups erstellen
- Sichere Passwörter für deine Server verwenden
💡 Best Practices
- Session-Speicherung: Immer
useMultiFileAuthStateoder ähnliches verwenden - Error-Handling: Immer try-catch für wichtige Operationen
- Rate-Limiting: Nicht zu viele Nachrichten auf einmal senden (nutze Smart Queue!)
- Logging: Logger für Debugging verwenden
- Updates: Regelmäßig auf Updates prüfen
💬 Support & Community
🌸 Made with Love by @neelegirl 🌸
⭐ Wenn dir dieses Projekt gefällt, gib ihm ein Star auf GitHub! ⭐
📝 Changelog
Version 2.0.5 (Aktuell) 🎉
- 📖 README Glow-Up – Version 2.0.5, Badges & Changelog
- 🧪 Engine-Check – Node.js 20+ Hinweis für stabile Laufzeit
- 🧰 WAProto Tools – GenerateStatics & Fix-Imports Skripte ergänzt
- 🔔 Update-Check – Liest Version von npm-Registry (registry.npmjs.org), nur 1× pro Prozess
- ✨ Semver-Vergleich für „Update verfügbar“ nur bei wirklich neuerer Version
- 🎨 QR-Code & Message ID – unverändert
- 🔄 Kompatibel mit Baileys API 1.7.2
Version 2.0.2
- 📖 README Glow-Up – Version 2.0.2, Badges & Changelog
- 🔔 Update-Check – Liest Version von npm-Registry (registry.npmjs.org), nur 1× pro Prozess
- ✨ Semver-Vergleich für „Update verfügbar“ nur bei wirklich neuerer Version
- 🎨 QR-Code & Message ID – unverändert
- 🔄 Kompatibel mit Baileys API 1.7.2
Version 2.0.1
- 🔄 Upstream aus Backup Baileys · LID in Pairing · historySyncConfig · getWebInfo · Defaults
Version 2.0.0
- 🔄 Upstream aus Backup Baileys – validate-connection, Defaults & Pairing angeglichen
- 🔐 LID in Pairing · 📤 historySyncConfig · 🌐 getWebInfo · ⚙️ Defaults
- 🎨 QR-Code & Message ID unverändert · WhatsApp-Version [2, 3000, 1032141294]
Version 1.1.2
- 📖 README Glow-Up, Baileys API 1.7.2 Badge
- 🚀 Smart Message Queue, Auto-Update-Prüfung
- 🎨 QR-Code-Anzeige · Message ID unverändert
Version 1.7.1
- 📖 README Glow-Up, Smart Message Queue, Auto-Update-Check
- 🎨 QR-Anzeige, Message ID System
Version 1.7.0
- 🚀 Smart Message Queue eingeführt
- ✨ Auto-Update-Check, QR-Anzeige, Message ID System
Version 1.6.6
- ✨ Automatische Update-Prüfung hinzugefügt
- 🎨 Verbesserte QR-Code-Anzeige mit Version-Info
- 🔄 WhatsApp-Version aktualisiert auf [2, 3000, 1032141294]
- 🚀 Basiert auf @whiskeysockets/baileys 7.0.0-rc.9
- 🛠️ Verbesserte Socket-Stabilität
- 🔐 Verbesserte Pre-Key-Verwaltung
Version 1.6.5
- 🆕 Neue Funktionen:
onWhatsApp(),executeUSyncQuery() - 🔐
digestKeyBundle()undrotateSignedPreKey()hinzugefügt - 💎 WAM Buffer Support
✨ Möge dein Bot so bezaubernd sein wie ein Anime-Mädchen mit Glitzeraugen ✨
🌸 Stay kawaii, stay connected! 🌸
