(sock, message, args, context)
| 49 | groupOnly: true, |
| 50 | adminOnly: true, |
| 51 | async handler(sock, message, args, context) { |
| 52 | const { chatId, senderId, channelInfo } = context; |
| 53 | try { |
| 54 | initializeWarningsFile(); |
| 55 | let userToWarn; |
| 56 | const mentionedJids = message.message?.extendedTextMessage?.contextInfo?.mentionedJid; |
| 57 | if (mentionedJids && mentionedJids.length > 0) { |
| 58 | userToWarn = mentionedJids[0]; |
| 59 | } |
| 60 | else if (message.message?.extendedTextMessage?.contextInfo?.participant) { |
| 61 | userToWarn = message.message.extendedTextMessage.contextInfo.participant; |
| 62 | } |
| 63 | if (!userToWarn) { |
| 64 | await sock.sendMessage(chatId, { |
| 65 | text: '❌ Error: Please mention the user or reply to their message to warn!', |
| 66 | ...channelInfo |
| 67 | }, { quoted: message }); |
| 68 | return; |
| 69 | } |
| 70 | await new Promise(resolve => setTimeout(resolve, 1000)); |
| 71 | try { |
| 72 | const warnings = await getWarnings(); |
| 73 | if (!warnings[chatId]) |
| 74 | warnings[chatId] = {}; |
| 75 | if (!warnings[chatId][userToWarn]) |
| 76 | warnings[chatId][userToWarn] = 0; |
| 77 | warnings[chatId][userToWarn]++; |
| 78 | await saveWarnings(warnings); |
| 79 | const warningMessage = `*『 WARNING ALERT 』*\n\n` + |
| 80 | `👤 *Warned User:* @${userToWarn.split('@')[0]}\n` + |
| 81 | `⚠️ *Warning Count:* ${warnings[chatId][userToWarn]}/3\n` + |
| 82 | `👑 *Warned By:* @${senderId.split('@')[0]}\n` + |
| 83 | `🗄️ *Storage:* ${HAS_DB ? 'Database' : 'File System'}\n\n` + |
| 84 | `📅 *Date:* ${new Date().toLocaleString()}`; |
| 85 | await sock.sendMessage(chatId, { |
| 86 | text: warningMessage, |
| 87 | mentions: [userToWarn, senderId], |
| 88 | ...channelInfo |
| 89 | }); |
| 90 | if (warnings[chatId][userToWarn] >= 3) { |
| 91 | await new Promise(resolve => setTimeout(resolve, 1000)); |
| 92 | await sock.groupParticipantsUpdate(chatId, [userToWarn], "remove"); |
| 93 | delete warnings[chatId][userToWarn]; |
| 94 | await saveWarnings(warnings); |
| 95 | const kickMessage = `*『 AUTO-KICK 』*\n\n` + |
| 96 | `@${userToWarn.split('@')[0]} has been removed from the group after receiving 3 warnings! ⚠️`; |
| 97 | await sock.sendMessage(chatId, { |
| 98 | text: kickMessage, |
| 99 | mentions: [userToWarn], |
| 100 | ...channelInfo |
| 101 | }); |
| 102 | } |
| 103 | } |
| 104 | catch (error) { |
| 105 | console.error('Error in warn command:', error); |
| 106 | await sock.sendMessage(chatId, { |
| 107 | text: '❌ Failed to warn user!', |
| 108 | ...channelInfo |
nothing calls this directly
no test coverage detected