Skip to content

Commit d499fa9

Browse files
authored
Merge pull request #19 from srm-kzilla/gap/refactor/architechture-change
Refactor: Architecture Change
2 parents 3cb6a37 + eda37c1 commit d499fa9

File tree

17 files changed

+490
-326
lines changed

17 files changed

+490
-326
lines changed

README.md

Lines changed: 17 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -26,22 +26,29 @@ crafted with <span style="color: #8b0000;">&hearts;</span> by your friends on th
2626
2727
- **Common Commands**
2828

29-
- `#kzjack help` - Get everything what Jack can do
30-
- `#kzjack meme` - Jack sends you a crazyyyy meme
31-
- `#kzjack joke` - Bored? Wait for jack to send you a joke, perfect joke indeed.
32-
- `#kzjack shrink <URL>` - Shrink a looooong URL using [KZILLA.XYZ](https://kzilla.xyz/)
29+
- **`#kzjack help` - Get everything what Jack can do**
30+
- **`#kzjack meme` - Jack sends you a crazyyyy meme**
31+
- **`#kzjack joke` - Bored? Wait for jack to send you a joke, perfect joke indeed.**
32+
- **`#kzjack shrink <URL>` - Shrink a looooong URL using [KZILLA.XYZ](https://kzilla.xyz/)**
33+
- **Example:** `#kzjack shrink https://srmkzilla.net`
3334

3435
- **Text Channel Commands**
3536

36-
- `#kzjack membercount` - Get members count for the channel
37+
- **`#kzjack membercount` - Get members count for the channel**
3738

3839
- **Moderators Channel Commands**
3940

40-
- `#kzjack flush` -Flush all cache
41-
- `#kzjack certificate <event-slug>` - Start a certificate thread
42-
- `#kzjack announce <? here|everyone > <channel> {<?title>} <description>` - Announcements
43-
- `#kzjack poll create <channel> {<Some Question>} [[<Option 1>],[<Option 2>],[<Option 3>]]` - Start a Poll
44-
- `#kzjack poll result <Poll ID>` - Get Poll Results
41+
- **`#kzjack flush` -Flush all cache**
42+
- **`#kzjack certificate <event-slug>` - Start a certificate thread**
43+
- `#kzjack certificate my-event`
44+
- **`#kzjack announce <? here|everyone > <#channel> {<?title>} <description>` - Announcements**
45+
- **Example:** `#kzjack announce #announcements {Hello World!} How are you?`
46+
- **Example:** `#kzjack announce here #announcements {Hello World!} How are you?`
47+
- **Example:** `#kzjack announce everyone #announcements {Hello World!} How are you?`
48+
- **`#kzjack poll create <#channel> {<Some Question>} [[<Option 1>],[<Option 2>],[<Option 3>]]` - Start a Poll**
49+
- **Example:** `#kzjack poll create #polls {Who's the best?} [[Jack],[Yvette]]`
50+
- **`#kzjack poll result <Poll ID>` - Get Poll Results**
51+
- **Example:** `#kzjack poll result s3cRe7ID`
4552

4653
## Installation 🔧
4754

index.ts

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@ import { initDbClient, initEventDbClient } from "./src/utils/database";
1010
import { initCache, refreshKeys } from "./src/utils/nodecache";
1111
import { handleMemberJoin, handleMemberLeave } from "./src/helper/memberLogs";
1212
import { serverLogger } from "./src/utils/logger";
13+
import { checkForAccessByRoles } from "./src/helper/roleAuth";
14+
import { incomingMessageSchema } from "./src/models/incomingMessage";
1315
/******************************************
1416
Initialize Server
1517
*******************************************/
@@ -34,21 +36,32 @@ async function createServer() {
3436
*******************************************/
3537
if (!message.author.bot) {
3638
if (message.content.split(" ")[0] == COMMANDS.prefix) {
39+
const messageType: incomingMessageSchema = {
40+
channelType: message.channel.type,
41+
incomingUser: {
42+
username: message.author.username,
43+
discriminator: message.author.discriminator,
44+
id: message.author.id,
45+
isMod: await checkForAccessByRoles(message.member, [
46+
`${process.env.OPERATOR_ROLE_ID}`,
47+
]),
48+
},
49+
};
3750
switch (message.channel.type) {
3851
/******************************************
3952
Text channel
4053
*******************************************/
4154
case "text": {
4255
//check for our command
43-
handleIncomingChannelCommand(message);
56+
handleIncomingChannelCommand(message, messageType);
4457

4558
break;
4659
}
4760
/******************************************
4861
DM channel
4962
*******************************************/
5063
case "dm": {
51-
handleIncomingDMCommand(message);
64+
handleIncomingDMCommand(message, messageType);
5265
break;
5366
}
5467
default: {

src/controllers/incomingMessageHandler.ts

Lines changed: 47 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -5,40 +5,41 @@ import { handleJokes, handleMemes } from "../helper/jokes";
55
import { handleShrinkURLMessage } from "../helper/kzillaXYZ";
66
import { handleGetMemberCount } from "../helper/memberCount";
77
import { getEvent } from "../utils/nodecache";
8-
import { COMMANDS, CONSTANTS } from "../utils/constants";
8+
import { COMMANDS, CONSTANTS, ERRORS } from "../utils/constants";
99
import { serverLogger } from "../utils/logger";
1010
import { flushCache } from "../helper/flushCache";
1111
import { createPoll, getResult } from "../helper/polls";
12-
import {
13-
getHelpMessage,
14-
invalidCommand,
15-
internalError,
16-
} from "../utils/messages";
12+
import { createBasicEmbed, getHelpMessage } from "../utils/messages";
1713
import { sendDirectMessageToUser } from "./sendMessageHandler";
14+
import { incomingMessageSchema } from "../models/incomingMessage";
1815
/**
19-
* Handles all incoming commands in channel
16+
* Handles all incoming commands in a text channel
2017
*
21-
* @param {Message} incomingMessage
18+
* @param {Message} incomingMessage The incoming message
19+
* @param {incomingMessageSchema} messageType The incoming message type
2220
*/
23-
export async function handleIncomingChannelCommand(incomingMessage: Message) {
21+
export async function handleIncomingChannelCommand(
22+
incomingMessage: Message,
23+
messageType: incomingMessageSchema
24+
) {
2425
try {
2526
const messageCommand = incomingMessage.content.split(" ")[1];
2627

2728
switch (messageCommand) {
2829
case COMMANDS.certificate: {
29-
getCertificateChannelMessage(incomingMessage);
30+
getCertificateChannelMessage(incomingMessage, messageType);
3031
break;
3132
}
3233
case COMMANDS.shrinkURL: {
33-
handleShrinkURLMessage(incomingMessage);
34+
handleShrinkURLMessage(incomingMessage, messageType);
3435
break;
3536
}
3637
case COMMANDS.membercount: {
37-
handleGetMemberCount(incomingMessage);
38+
handleGetMemberCount(incomingMessage, messageType);
3839
break;
3940
}
4041
case COMMANDS.announce: {
41-
handleAnnouncements(incomingMessage);
42+
handleAnnouncements(incomingMessage, messageType);
4243
serverLogger(
4344
"success",
4445
incomingMessage.content.split(" ").splice(0, 5),
@@ -47,73 +48,89 @@ export async function handleIncomingChannelCommand(incomingMessage: Message) {
4748
break;
4849
}
4950
case COMMANDS.joke: {
50-
handleJokes(incomingMessage);
51+
handleJokes(incomingMessage, messageType);
5152
break;
5253
}
5354
case COMMANDS.memes: {
54-
handleMemes(incomingMessage);
55+
handleMemes(incomingMessage, messageType);
5556
break;
5657
}
5758
case COMMANDS.cacheflush: {
58-
flushCache(incomingMessage);
59+
flushCache(incomingMessage, messageType);
5960
break;
6061
}
6162
case COMMANDS.createPoll: {
6263
if (incomingMessage.content.split(" ")[2] == "create")
63-
createPoll(incomingMessage);
64-
else getResult(incomingMessage);
64+
createPoll(incomingMessage, messageType);
65+
else getResult(incomingMessage, messageType);
6566
break;
6667
}
6768
case COMMANDS.help: {
68-
incomingMessage.channel.send(getHelpMessage());
69+
incomingMessage.channel.send(getHelpMessage(messageType));
6970
serverLogger("success", incomingMessage.content, "Help Message");
7071
break;
7172
}
7273
default:
73-
incomingMessage.channel.send(invalidCommand());
74+
incomingMessage.channel.send(
75+
`<@${messageType.incomingUser.id}>`,
76+
createBasicEmbed(ERRORS.INVALID_COMMAND, "ERROR")
77+
);
7478
serverLogger("user-error", incomingMessage.content, "Invalid Command");
7579
break;
7680
}
7781
} catch (err) {
7882
serverLogger("error", incomingMessage.content, err);
79-
incomingMessage.channel.send(internalError());
83+
incomingMessage.channel.send(
84+
`<@${messageType.incomingUser.id}>`,
85+
createBasicEmbed(ERRORS.INTERNAL_ERROR(messageType.channelType), "ERROR")
86+
);
8087
}
8188
}
8289

8390
/**
8491
* Handles all incoming commands in Direct Message
8592
*
86-
* @param {Message} incomingMessage
93+
* @param {Message} incomingMessage The incoming message
94+
* @param {incomingMessageSchema} messageType The incoming message type
8795
*/
88-
export function handleIncomingDMCommand(incomingMessage: Message) {
96+
export function handleIncomingDMCommand(
97+
incomingMessage: Message,
98+
messageType: incomingMessageSchema
99+
) {
89100
try {
90101
const messageCommand = incomingMessage.content.split(" ")[1];
91102
switch (messageCommand) {
92103
case COMMANDS.shrinkURL: {
93-
handleShrinkURLMessage(incomingMessage);
104+
handleShrinkURLMessage(incomingMessage, messageType);
94105
break;
95106
}
96107
case COMMANDS.help: {
97-
incomingMessage.channel.send(getHelpMessage());
108+
incomingMessage.channel.send(getHelpMessage(messageType));
98109
serverLogger("success", incomingMessage.content, "Help Message");
99110
break;
100111
}
101112
case COMMANDS.joke: {
102-
handleJokes(incomingMessage);
113+
handleJokes(incomingMessage, messageType);
103114
break;
104115
}
105116
case COMMANDS.memes: {
106-
handleMemes(incomingMessage);
117+
handleMemes(incomingMessage, messageType);
107118
break;
108119
}
109120
default:
110-
incomingMessage.channel.send(invalidCommand());
121+
incomingMessage.channel.send(
122+
`<@${messageType.incomingUser.id}>`,
123+
createBasicEmbed(ERRORS.INVALID_COMMAND, "ERROR")
124+
);
111125
serverLogger("user-error", incomingMessage.content, "Invalid Command");
112126
break;
113127
}
114128
} catch (err) {
115129
serverLogger("error", incomingMessage.content, err);
116-
incomingMessage.channel.send(internalError());
130+
incomingMessage.channel.send(
131+
`<@${messageType.incomingUser.id}>`,
132+
createBasicEmbed(ERRORS.INTERNAL_ERROR(messageType.channelType), "ERROR")
133+
);
117134
}
118135
}
119136

@@ -140,7 +157,7 @@ export async function handleIncomingReaction(
140157
user,
141158
message,
142159
event.slug,
143-
CONSTANTS.certificateUserDirectMessage(event.name)
160+
CONSTANTS.certificateUserDirectMessage(event.name, user.username)
144161
);
145162
}
146163
}

src/controllers/sendMessageHandler.ts

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,9 @@
11
import { Message, MessageReaction, User } from "discord.js";
2-
import { createBasicEmbed, internalError } from "../utils/messages";
2+
import { createBasicEmbed } from "../utils/messages";
33
import { ERRORS } from "../utils/constants";
44
import { certificateEmojifilter } from "../utils/filters";
55
import { handleIncomingReaction } from "./incomingMessageHandler";
66
import { serverLogger } from "../utils/logger";
7-
import { eventSchema } from "../models/event";
87
import { getEvent } from "../utils/nodecache";
98
import { certificateDMHandler } from "../helper/certificate";
109
import { emailSchema } from "../models/email";
@@ -32,9 +31,7 @@ export async function sendDirectMessageToUser(
3231
return true;
3332
} catch (err) {
3433
serverLogger("user-error", dm.content, "Malformed Email");
35-
dm.channel.send(
36-
createBasicEmbed("Invalid Email!", ERRORS.INVALID_EMAIL, "ERROR")
37-
);
34+
dm.channel.send(createBasicEmbed(ERRORS.INVALID_EMAIL, "ERROR"));
3835
return false;
3936
}
4037
},
@@ -49,7 +46,16 @@ export async function sendDirectMessageToUser(
4946
});
5047
} catch (err) {
5148
serverLogger("error", message, "DM Blocked");
52-
message.channel.send(ERRORS.DM_BLOCKED(user));
49+
message.channel.send(
50+
`<@${user.id}>`,
51+
createBasicEmbed(
52+
{
53+
title: ERRORS.DM_BLOCKED.title,
54+
message: ERRORS.DM_BLOCKED.message(user),
55+
},
56+
"ERROR"
57+
)
58+
);
5359
}
5460
}
5561

@@ -78,10 +84,12 @@ export async function sendReactableMessage(
7884
);
7985

8086
eventCollector.on("collect", (reaction: MessageReaction, user: User) => {
81-
handleIncomingReaction(user, reaction, event.slug, message);
87+
handleIncomingReaction(user, reaction, event.slug, reaction.message);
8288
});
8389
} catch (err) {
8490
serverLogger("error", incomingMessage.content, err);
85-
incomingMessage.channel.send(internalError());
91+
incomingMessage.channel.send(
92+
createBasicEmbed(ERRORS.INTERNAL_ERROR("dm"), "ERROR")
93+
);
8694
}
8795
}

src/helper/announcement.ts

Lines changed: 21 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,22 @@
11
import { Message, TextChannel, NewsChannel } from "discord.js";
22
import { serverLogger } from "../utils/logger";
3-
import {
4-
announcementMessage,
5-
invalidChannel,
6-
invalidCommand,
7-
unauthorizedUser,
8-
} from "../utils/messages";
9-
import { checkForAccessByRoles } from "../helper/roleAuth";
10-
import { COMMANDS } from "../utils/constants";
3+
import { announcementMessage, createBasicEmbed } from "../utils/messages";
4+
import { COMMANDS, ERRORS } from "../utils/constants";
5+
import { incomingMessageSchema } from "../models/incomingMessage";
116

127
/**
138
* Handles all announcements
149
*
1510
* @param {Message} incomingMessage
11+
* @param {incomingMessageSchema} messageType
1612
*/
1713

18-
export async function handleAnnouncements(incomingMessage: Message) {
14+
export async function handleAnnouncements(
15+
incomingMessage: Message,
16+
messageType: incomingMessageSchema
17+
) {
1918
try {
20-
const isAllowed = await checkForAccessByRoles(incomingMessage.member, [
21-
`${process.env.OPERATOR_ROLE_ID}`,
22-
]);
23-
if (isAllowed) {
19+
if (messageType.incomingUser.isMod) {
2420
const regex = new RegExp(
2521
`^${COMMANDS.prefix} ${COMMANDS.announce}( here | everyone | )<#.+> \{.*\} (.|\n)+$`,
2622
"g"
@@ -72,18 +68,27 @@ export async function handleAnnouncements(incomingMessage: Message) {
7268
incomingMessage.content.split(" ").splice(0, 5),
7369
"Invalid command"
7470
);
75-
incomingMessage.channel.send(invalidCommand());
71+
incomingMessage.channel.send(
72+
`<@${messageType.incomingUser.id}>`,
73+
createBasicEmbed(ERRORS.INVALID_COMMAND, "ERROR")
74+
);
7675
}
7776
} else {
7877
serverLogger(
7978
"user-error",
8079
incomingMessage.content.split(" ").splice(0, 5),
8180
"Unauthorized User"
8281
);
83-
incomingMessage.channel.send(unauthorizedUser());
82+
incomingMessage.channel.send(
83+
`<@${messageType.incomingUser.id}>`,
84+
createBasicEmbed(ERRORS.UNAUTHORIZED_USER, "ERROR")
85+
);
8486
}
8587
} catch (err) {
86-
incomingMessage.channel.send(invalidChannel());
88+
incomingMessage.channel.send(
89+
`<@${messageType.incomingUser.id}>`,
90+
createBasicEmbed(ERRORS.INVALID_CHANNEL, "ERROR")
91+
);
8792
serverLogger(
8893
"user-error",
8994
incomingMessage.content.split(" ").splice(0, 5),

0 commit comments

Comments
 (0)