(sock, message, args, context)
| 8 | groupOnly: true, |
| 9 | adminOnly: true, |
| 10 | async handler(sock, message, args, context) { |
| 11 | const chatId = context.chatId || message.key.remoteJid; |
| 12 | const _senderId = context.senderId || message.key.participant || message.key.remoteJid; |
| 13 | const isBotAdmin = context.isBotAdmin; |
| 14 | if (!isBotAdmin) { |
| 15 | await sock.sendMessage(chatId, { |
| 16 | text: '❌ *I need to be an admin to delete messages*' |
| 17 | }, { quoted: message }); |
| 18 | return; |
| 19 | } |
| 20 | const text = message.message?.conversation || message.message?.extendedTextMessage?.text || ''; |
| 21 | const parts = text.trim().split(/\s+/); |
| 22 | let countArg = null; |
| 23 | if (parts.length > 1) { |
| 24 | const maybeNum = parseInt(parts[1], 10); |
| 25 | if (!isNaN(maybeNum) && maybeNum > 0) { |
| 26 | countArg = Math.min(maybeNum, 50); |
| 27 | } |
| 28 | } |
| 29 | const ctxInfo = message.message?.extendedTextMessage?.contextInfo || {}; |
| 30 | const repliedParticipant = ctxInfo.participant || null; |
| 31 | const mentioned = Array.isArray(ctxInfo.mentionedJid) && ctxInfo.mentionedJid.length > 0 ? ctxInfo.mentionedJid[0] : null; |
| 32 | if (countArg === null && repliedParticipant) { |
| 33 | countArg = 1; |
| 34 | } |
| 35 | else if (countArg === null && !repliedParticipant && !mentioned) { |
| 36 | await sock.sendMessage(chatId, { |
| 37 | text: '❌ *Please specify the number of messages to delete*\n\n' + |
| 38 | '*Usage:*\n' + |
| 39 | '• `.del 5` - Delete last 5 messages from group\n' + |
| 40 | '• `.del 3 @user` - Delete last 3 messages from @user\n' + |
| 41 | '• `.del 2` (reply to message) - Delete last 2 messages from replied user' |
| 42 | }, { quoted: message }); |
| 43 | return; |
| 44 | } |
| 45 | else if (countArg === null && mentioned) { |
| 46 | countArg = 1; |
| 47 | } |
| 48 | let targetUser = null; |
| 49 | let repliedMsgId = null; |
| 50 | let deleteGroupMessages = false; |
| 51 | if (repliedParticipant && ctxInfo.stanzaId) { |
| 52 | targetUser = repliedParticipant; |
| 53 | repliedMsgId = ctxInfo.stanzaId; |
| 54 | } |
| 55 | else if (mentioned) { |
| 56 | targetUser = mentioned; |
| 57 | } |
| 58 | else { |
| 59 | deleteGroupMessages = true; |
| 60 | } |
| 61 | const chatMessages = Array.isArray(store.messages[chatId]) ? store.messages[chatId] : []; |
| 62 | const toDelete = []; |
| 63 | const seenIds = new Set(); |
| 64 | if (deleteGroupMessages) { |
| 65 | for (let i = chatMessages.length - 1; i >= 0 && toDelete.length < Number(countArg); i--) { |
| 66 | const m = chatMessages[i]; |
| 67 | if (!seenIds.has(m.key.id)) { |
nothing calls this directly
no outgoing calls
no test coverage detected