-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathCyberue.js
87 lines (72 loc) · 3.59 KB
/
Cyberue.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
import cron from 'node-cron';
import moment from 'moment-timezone';
import config from '../../config.cjs';
let scheduledTasks = {};
const groupSetting = async (m, gss) => {
try {
const prefix = config.PREFIX;
const cmd = m.body.startsWith(prefix) ? m.body.slice(prefix.length).split(' ')[0].toLowerCase() : '';
const text = m.body.slice(prefix.length + cmd.length).trim();
const validCommands = ['group'];
if (!validCommands.includes(cmd)) return;
if (!m.isGroup) return m.reply("*📛 THIS COMMAND CAN ONLY BE USED IN GROUPS*");
const groupMetadata = await gss.groupMetadata(m.from);
const participants = groupMetadata.participants;
const botNumber = await gss.decodeJid(gss.user.id);
const botAdmin = participants.find(p => p.id === botNumber)?.admin;
const senderAdmin = participants.find(p => p.id === m.sender)?.admin;
if (!botAdmin) return m.reply("*📛 BOT MUST BE AN ADMIN TO USE THIS COMMAND*");
if (!senderAdmin) return m.reply("*📛 YOU MUST BE AN ADMIN TO USE THIS COMMAND*");
const args = m.body.slice(prefix.length + cmd.length).trim().split(/\s+/);
if (args.length < 1) return m.reply(`Please specify a setting (open/close) and optionally a time.\n\nExample:\n*${prefix + cmd} open* or *${prefix + cmd} open 04:00 PM*`);
const groupSetting = args[0].toLowerCase();
const time = args.slice(1).join(' ');
// Handle immediate setting if no time is provided
if (!time) {
if (groupSetting === 'close') {
await gss.groupSettingUpdate(m.from, 'announcement');
return m.reply("Group successfully closed.");
} else if (groupSetting === 'open') {
await gss.groupSettingUpdate(m.from, 'not_announcement');
return m.reply("Group successfully opened.");
} else {
return m.reply(`Invalid setting. Use "open" to open the group and "close" to close the group.\n\nExample:\n*${prefix + cmd} open* or *${prefix + cmd} close*`);
}
}
// Check if the provided time is valid
if (!/^\d{1,2}:\d{2}\s*(?:AM|PM)$/i.test(time)) {
return m.reply(`Invalid time format. Use HH:mm AM/PM format.\n\nExample:\n*${prefix + cmd} open 04:00 PM*`);
}
// Convert time to 24-hour format
const [hour, minute] = moment(time, ['h:mm A', 'hh:mm A']).format('HH:mm').split(':').map(Number);
const cronTime = `${minute} ${hour} * * *`;
console.log(`Scheduling ${groupSetting} at ${cronTime} IST`);
// Clear any existing scheduled task for this group
if (scheduledTasks[m.from]) {
scheduledTasks[m.from].stop();
delete scheduledTasks[m.from];
}
scheduledTasks[m.from] = cron.schedule(cronTime, async () => {
try {
console.log(`Executing scheduled task for ${groupSetting} at ${moment().format('HH:mm')} IST`);
if (groupSetting === 'close') {
await gss.groupSettingUpdate(m.from, 'announcement');
await gss.sendMessage(m.from, { text: "Group successfully closed." });
} else if (groupSetting === 'open') {
await gss.groupSettingUpdate(m.from, 'not_announcement');
await gss.sendMessage(m.from, { text: "Group successfully opened." });
}
} catch (err) {
console.error('Error during scheduled task execution:', err);
await gss.sendMessage(m.from, { text: 'An error occurred while updating the group setting.' });
}
}, {
timezone: "Asia/Kolkata"
});
m.reply(`Group will be set to "${groupSetting}" at ${time} IST.`);
} catch (error) {
console.error('Error:', error);
m.reply('An error occurred while processing the command.');
}
};
export default groupSetting;