Skip to content

Commit 485b2b9

Browse files
committed
add clock, improved registration
1 parent 8e76fe4 commit 485b2b9

15 files changed

Lines changed: 230 additions & 161 deletions

src/commands/alert/add.subcommand.js

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,8 @@ module.exports = {
1313
const { options, guildId, user, channelId } = interaction;
1414

1515
const messageInput = options.getString("message");
16-
const mentions = options.getString("mentions") || "";
1716
const scheduleInput = options.getString("schedule");
17+
const repeat = options.getString("repeat") === "true" ? true : false;
1818

1919
let schedule;
2020
const validScheduleInput = isValidSchedule(scheduleInput);
@@ -30,7 +30,7 @@ module.exports = {
3030
try {
3131
schedule = scheduleInput.split(", ").map((entry) => {
3232
const [day, time] = entry.trim().split(" ");
33-
return { day, time };
33+
return { day, time, repeat };
3434
});
3535
} catch (error) {
3636
return await interaction.reply({
@@ -40,13 +40,11 @@ module.exports = {
4040
});
4141
}
4242

43-
const message = mentions ? `${mentions} ${messageInput}` : messageInput;
44-
4543
const msg = await AlertMessage.create({
4644
guildId,
4745
channelId,
4846
userId: user.id,
49-
message,
47+
message: messageInput,
5048
schedule,
5149
});
5250

src/commands/alert/alert.command.js

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ module.exports = {
99
subcommand
1010
.setName("add")
1111
.setDescription("Add a new alert message to this channel.")
12-
1312
.addStringOption((option) =>
1413
option
1514
.setName("message")
@@ -26,10 +25,12 @@ module.exports = {
2625
)
2726
.addStringOption((option) =>
2827
option
29-
.setName("mentions")
30-
.setDescription(
31-
"Mention roles (separate by space, e.g., @role1 @role2)"
32-
)
28+
.setName("repeat")
29+
.setDescription("Whether to repeat the messages or sent once")
30+
.addChoices([
31+
{ name: "On", value: "true" },
32+
{ name: "Off", value: "false" },
33+
])
3334
)
3435
)
3536
.addSubcommand((subcommand) =>
@@ -43,7 +44,7 @@ module.exports = {
4344
.addSubcommand((subcommand) =>
4445
subcommand
4546
.setName("edit")
46-
.setDescription("Edit a alert message.")
47+
.setDescription("Edit an alert message.")
4748
.addStringOption((option) =>
4849
option
4950
.setName("id")
@@ -58,11 +59,20 @@ module.exports = {
5859
.setName("schedule")
5960
.setDescription("schedule in format: Wednesday 12:00, Friday 4:00")
6061
)
62+
.addStringOption((option) =>
63+
option
64+
.setName("repeat")
65+
.setDescription("Whether to repeat the messages or sent once")
66+
.addChoices([
67+
{ name: "On", value: "true" },
68+
{ name: "Off", value: "false" },
69+
])
70+
)
6171
)
6272
.addSubcommand((subcommand) =>
6373
subcommand
6474
.setName("remove")
65-
.setDescription("Delete a alert message.")
75+
.setDescription("Delete an alert message.")
6676
.addStringOption((option) =>
6777
option
6878
.setName("id")
@@ -73,7 +83,7 @@ module.exports = {
7383
.addSubcommand((subcommand) =>
7484
subcommand
7585
.setName("view")
76-
.setDescription("view individual alert message.")
86+
.setDescription("View individual alert message.")
7787
.addStringOption((option) =>
7888
option
7989
.setName("id")

src/commands/alert/edit.subcommand.js

Lines changed: 17 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -13,21 +13,10 @@ module.exports = {
1313
const id = interaction.options.getString("id");
1414
const newMessage = interaction.options.getString("message") || "";
1515
let newSchedule = interaction.options.getString("schedule") || "";
16+
const newRepeat =
17+
interaction.options.getString("repeat") === "true" ? true : false;
1618

17-
try {
18-
schedule = newSchedule.split(", ").map((entry) => {
19-
const [day, time] = entry.trim().split(" ");
20-
return { day, time };
21-
});
22-
} catch (error) {
23-
return await interaction.reply({
24-
content:
25-
"Invalid schedule format. Please use format like: `Wednesday 12:00, Friday 4:00`",
26-
ephemeral: true,
27-
});
28-
}
29-
30-
if (!newMessage && !newSchedule)
19+
if (!newMessage && !newSchedule && !newRepeat)
3120
return interaction.reply({
3221
content: "Please provide new message or schedule to update.",
3322
ephemeral: true,
@@ -41,7 +30,7 @@ module.exports = {
4130
ephemeral: true,
4231
});
4332

44-
if (newSchedule) {
33+
if (newSchedule || newRepeat) {
4534
const isValid = isValidSchedule(newSchedule);
4635

4736
if (!isValid)
@@ -52,10 +41,19 @@ module.exports = {
5241
});
5342

5443
try {
55-
schedule = newSchedule.split(", ").map((entry) => {
56-
const [day, time] = entry.trim().split(" ");
57-
return { day, time };
58-
});
44+
let schedule = [];
45+
46+
if (newRepeat) {
47+
schedule = scheduledMessage.schedule.map((entry) => {
48+
return { ...entry, repeat: newRepeat };
49+
});
50+
}
51+
if (newSchedule) {
52+
schedule = newSchedule.split(", ").map((entry) => {
53+
const [day, time] = entry.trim().split(" ");
54+
return { day, time, repeat: newRepeat };
55+
});
56+
}
5957

6058
scheduledMessage.schedule = schedule;
6159
} catch (error) {

src/commands/alert/list.subcommand.js

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -21,13 +21,20 @@ module.exports = {
2121
return interaction.reply("No scheduled messages found for this channel.");
2222
}
2323

24-
let reply = "**Scheduled Messages:**\n";
25-
alertMessages.forEach((msg, i) => {
26-
reply += `**${i + 1}.** ID: \`${msg.shortId}\` - Message: ${ msg.message} - Schedule: \`${msg.schedule
27-
.map((s) => `${s.day} ${s.time} UTC`)
28-
.join(", ")}\`\n`;
29-
});
30-
31-
interaction.reply({ content: reply });
24+
let reply = new EmbedBuilder()
25+
.setTitle("Scheduled Messages")
26+
.setDescription(
27+
alertMessages
28+
.map(
29+
(msg, i) =>
30+
`**${i + 1}.** ID: \`${msg.shortId}\` - Message: ${
31+
msg.message
32+
} - Schedule: \`${msg.schedule
33+
.map((s) => `${s.day} ${s.time} UTC`)
34+
.join(", ")}\``
35+
)
36+
.join("\n")
37+
);
38+
return await interaction.reply({ embeds: [reply] });
3239
},
3340
};
Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
const { ChatInputCommandInteraction, EmbedBuilder } = require("discord.js");
22
const AlertMessage = require("../../schemas/alert.schema.js");
3-
const { isValidSchedule } = require("../../helpers/date.js");
43

54
module.exports = {
65
subCommand: "alert.list_guild",
@@ -18,15 +17,19 @@ module.exports = {
1817
return interaction.reply("No scheduled messages found in this guild.");
1918
}
2019

21-
let reply = "**Scheduled Messages for this Guild:**\n";
22-
AlertMessages.forEach((msg, i) => {
23-
reply += `${i + 1}. \`${msg.shortId}\` **${msg.message}** in <#${
24-
msg.channelId
25-
}> at \`${msg.schedule
26-
.map((s) => `${s.day} ${s.time} UTC`)
27-
.join(", ")}\`\n`;
28-
});
20+
let reply = new EmbedBuilder()
21+
.setTitle("Scheduled Messages in this sever")
22+
.setDescription(
23+
AlertMessages.map(
24+
(msg, i) =>
25+
`${i + 1}. \`${msg.shortId}\` **${msg.message}** in <#${
26+
msg.channelId
27+
}> at \`${msg.schedule
28+
.map((s) => `${s.day} ${s.time} UTC`)
29+
.join(", ")}\``
30+
).join("\n")
31+
);
2932

30-
interaction.reply(reply);
33+
return await interaction.reply({ embeds: [reply] });
3134
},
3235
};

src/commands/alert/view.subcommand.js

Lines changed: 25 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,19 @@ const { ChatInputCommandInteraction, EmbedBuilder } = require("discord.js");
22
const AlertMessage = require("../../schemas/alert.schema.js");
33
const { toDiscordTime } = require("../../helpers/date.js");
44

5+
const getRecentLastSend = (schedule) => {
6+
const lastSends = schedule?.map((s) => s.lastSend).filter((date) => date);
7+
8+
if (lastSends.length === 0) {
9+
return "`Never`";
10+
} else {
11+
const recentLastSend = new Date(
12+
Math.max(...lastSends.map((d) => d.getTime()))
13+
);
14+
return `<t:${Math.floor(recentLastSend.getTime() / 1000)}:R>`;
15+
}
16+
};
17+
518
module.exports = {
619
subCommand: "alert.view",
720

@@ -22,14 +35,22 @@ module.exports = {
2235
const embed = new EmbedBuilder().setTitle("Scheduled Message").setFields([
2336
{ name: "ID", value: `\`${message.shortId}\``, inline: true },
2437
{ name: "Channel", value: `<#${message.channelId}>`, inline: true },
38+
39+
{
40+
name: "Created At",
41+
value: `<t:${Math.floor(message.createdAt.getTime() / 1000)}:R>`,
42+
inline: true,
43+
},
2544
{
2645
name: "Last Send",
27-
value: message.lastSend
28-
? `<t:${toDiscordTime(message.lastSend)}:R>`
29-
: "`Never`",
46+
value: getRecentLastSend(message.schedule),
47+
inline: true,
48+
},
49+
{
50+
name: "Repeat",
51+
value: message.schedule[0]?.repeat ? "`Yes`" : "`No`",
3052
inline: true,
3153
},
32-
3354
{
3455
name: "Schedule",
3556
value: `\`${message.schedule

src/commands/moderation/setup/bot.js

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,12 @@ module.exports = {
1717
"announcement_channel"
1818
)?.id;
1919

20+
const clockChannelId = options.getChannel("clock_channel")?.id;
21+
2022
const botConfig = {
2123
botLogChannelId,
2224
announcementChannelId,
25+
clockChannelId,
2326
};
2427

2528
// update bot log channel id to the database
@@ -46,6 +49,9 @@ module.exports = {
4649
? `<#${announcementChannelId}>`
4750
: "`Not specified`"
4851
} `,
52+
`- Clock Channel: ${
53+
clockChannelId ? `<#${clockChannelId}>` : "`Not specified`"
54+
} `,
4955
].join("\n")
5056
);
5157

src/commands/moderation/setup/monitor.js

Lines changed: 0 additions & 59 deletions
This file was deleted.

src/commands/moderation/setup/setup.js

Lines changed: 2 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -47,23 +47,11 @@ module.exports = {
4747
.setDescription("select public announcement channel")
4848
.addChannelTypes(ChannelType.GuildText)
4949
)
50-
)
51-
.addSubcommand((option) =>
52-
option
53-
.setName("monitor")
54-
.setDescription("Config Monitor settings")
5550
.addChannelOption((option) =>
5651
option
57-
.setName("announce_channel")
58-
.setDescription(
59-
"set bot default announce channel related to monitor"
60-
)
52+
.setName("clock_channel")
53+
.setDescription("select channel for UTC clock system")
6154
.addChannelTypes(ChannelType.GuildText)
6255
)
63-
.addRoleOption((option) =>
64-
option
65-
.setName("admin_role")
66-
.setDescription("set the role which can use monitor commands")
67-
)
6856
),
6957
};

src/helpers/embeds.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ function createRegistrationEmbed(event) {
44
return new EmbedBuilder()
55
.setTitle(event.title)
66
.setDescription(
7-
`${event.description}\n\n \`${
7+
`${event.description.replace(/\\n/g, "\n")}\n\n \`${
88
event.participants.length
99
}\` Participants and \`${
1010
event.reservists.length

0 commit comments

Comments
 (0)