Skip to content

Commit 2efecde

Browse files
authored
test this
1 parent 2ac1d14 commit 2efecde

File tree

4 files changed

+104
-70
lines changed

4 files changed

+104
-70
lines changed

src/commands.js

Lines changed: 62 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
*/
55

66
import { LOCKED_OVERWRITES, STAFF_OVERWRITES, USER_OVERWRITES, LOCK_PERMISSIONS } from "./constants.js";
7-
import { editOriginalInteractionResponse, getGameNightChannels, setChannelLimit, getUserVoiceState, getChannel, HTTPError, createChannel, deleteChannel, moveUserToChannel, setChannelOverwrites } from "./request.js";
7+
import { editOriginalInteractionResponse, getGameNightChannels, setChannelLimit, getUserVoiceState, getChannel, HTTPError, createChannel, deleteChannel, moveUserToChannel, setChannelOverwrites, sendMessage } from "./request.js";
88

99
export const SET_LIMIT = {
1010
name: 'set-limit',
@@ -677,4 +677,64 @@ export async function lockCommand(env, interaction, lock) {
677677
}
678678

679679

680-
export const COMMANDS = [SET_LIMIT, SET_CHANNEL_LIMIT, CREATE_CHANNEL, DELETE_CHANNEL, CREATE_CHANNELS, DELETE_ALL_CHANNELS, MOVE, LOCK, UNLOCK];
680+
export const COMMANDS = [SET_LIMIT, SET_CHANNEL_LIMIT, CREATE_CHANNEL, DELETE_CHANNEL, CREATE_CHANNELS, DELETE_ALL_CHANNELS, MOVE, LOCK, UNLOCK];
681+
682+
export async function processCommands(env, interaction) {
683+
// sleep a tiny bit to make sure we respond *after* discord gets the return
684+
// idk if this is needed, but its here
685+
// await new Promise(r=> setTimeout(()=>r(), 5));
686+
try {
687+
switch (interaction.data.name.toLowerCase()) {
688+
case SET_LIMIT.name.toLowerCase(): {
689+
await setLimitCommand(env, interaction);
690+
}
691+
case SET_CHANNEL_LIMIT.name.toLowerCase(): {
692+
await setChannelLimitCommand(env, interaction);
693+
}
694+
case CREATE_CHANNEL.name.toLowerCase(): {
695+
await createChannelCommand(env, interaction);
696+
}
697+
case DELETE_CHANNEL.name.toLowerCase(): {
698+
await deleteChannelCommand(env, interaction);
699+
}
700+
case CREATE_CHANNELS.name.toLowerCase(): {
701+
await createChannelsCommand(env, interaction);
702+
}
703+
case DELETE_ALL_CHANNELS.name.toLowerCase(): {
704+
await deleteAllChannelsCommand(env, interaction);
705+
}
706+
case MOVE.name.toLowerCase(): {
707+
await moveCommand(env, interaction);
708+
}
709+
case LOCK.name.toLowerCase(): {
710+
await lockCommand(env, interaction, true);
711+
}
712+
case UNLOCK.name.toLowerCase(): {
713+
await lockCommand(env, interaction, false);
714+
}
715+
default: {
716+
await editOriginalInteractionResponse(env, interaction, {
717+
type: InteractionResponseType.CHANNEL_MESSAGE_WITH_SOURCE,
718+
data: {
719+
content: "❌ Unknown Command",
720+
flags: InteractionResponseFlags.EPHEMERAL,
721+
}
722+
});
723+
}
724+
}
725+
} catch (e) {
726+
console.error('Error processing command', e);
727+
await editOriginalInteractionResponse(env, interaction, {
728+
content: '❌ Error processing command.'
729+
});
730+
await sendMessage(env, env.LOG_CHANNEL_ID, {
731+
content: `Error processing command: \`${interaction.data.name}\`\n${e}`,
732+
embeds: [],
733+
allowed_mentions: {
734+
parse: [],
735+
users: [],
736+
roles: [],
737+
},
738+
});
739+
}
740+
}

src/request.js

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,16 @@ export async function deleteChannel(env, channelId, reason) {
9595
});
9696
}
9797

98+
export async function sendMessage(env, channelId, data) {
99+
return await discordFetch(env, `channels/${channelId}/messages`, {
100+
method: 'POST',
101+
headers: {
102+
'Content-Type': 'application/json',
103+
},
104+
body: JSON.stringify(data),
105+
});
106+
}
107+
98108

99109
// User
100110
export async function getUserVoiceState(env, userId) {
@@ -113,7 +123,7 @@ export async function moveUserToChannel(env, userId, channelId) {
113123

114124
// Interactions
115125
export async function createInteractionResponse(env, interaction, data) {
116-
return await discordFetch(env, `interactions/${interaction.id}/${interaction.token}/callback`, {
126+
await discordFetch(env, `interactions/${interaction.id}/${interaction.token}/callback`, {
117127
method: 'POST',
118128
headers: {
119129
'Content-Type': 'application/json',
@@ -123,7 +133,7 @@ export async function createInteractionResponse(env, interaction, data) {
123133
}
124134

125135
export async function editOriginalInteractionResponse(env, interaction, data) {
126-
return await discordFetch(env, `webhooks/${interaction.application_id}/${interaction.token}/messages/@original`, {
136+
await discordFetch(env, `webhooks/${interaction.application_id}/${interaction.token}/messages/@original`, {
127137
method: 'PATCH',
128138
headers: {
129139
'Content-Type': 'application/json',

src/server.js

Lines changed: 13 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import {
1313
DELETE_ALL_CHANNELS, deleteAllChannelsCommand,
1414
MOVE, moveCommand,
1515
LOCK, UNLOCK, lockCommand,
16+
processCommands,
1617
} from './commands.js';
1718
import { createInteractionResponse, editOriginalInteractionResponse } from './request.js';
1819

@@ -43,7 +44,7 @@ async function verifyDiscordRequest(request, env) {
4344
return { interaction: JSON.parse(body), isValid: true };
4445
}
4546

46-
async function processDiscordRequest(request, env) {
47+
async function processDiscordRequest(request, env, ctx) {
4748
try {
4849
const { isValid, interaction } = await verifyDiscordRequest(
4950
request,
@@ -87,70 +88,18 @@ async function processDiscordRequest(request, env) {
8788
}
8889
)
8990
}
90-
try {
91-
await createInteractionResponse(env, interaction, {
91+
ctx.waitUntil(
92+
processCommands(
93+
env,
94+
interaction,
95+
)
96+
);
97+
return new JsonResponse(
98+
{
9299
type: InteractionResponseType.DEFERRED_CHANNEL_MESSAGE_WITH_SOURCE,
93100
data: {flags: InteractionResponseFlags.EPHEMERAL}
94-
});
95-
switch (interaction.data.name.toLowerCase()) {
96-
case SET_LIMIT.name.toLowerCase(): {
97-
await setLimitCommand(env, interaction);
98-
return new Response(null, {status: 202});
99-
}
100-
case SET_CHANNEL_LIMIT.name.toLowerCase(): {
101-
await setChannelLimitCommand(env, interaction);
102-
return new Response(null, {status: 202});
103-
}
104-
case CREATE_CHANNEL.name.toLowerCase(): {
105-
await createChannelCommand(env, interaction);
106-
return new Response(null, {status: 202});
107-
}
108-
case DELETE_CHANNEL.name.toLowerCase(): {
109-
await deleteChannelCommand(env, interaction);
110-
return new Response(null, {status: 202});
111-
}
112-
case CREATE_CHANNELS.name.toLowerCase(): {
113-
await createChannelsCommand(env, interaction);
114-
return new Response(null, {status: 202});
115-
}
116-
case DELETE_ALL_CHANNELS.name.toLowerCase(): {
117-
await deleteAllChannelsCommand(env, interaction);
118-
return new Response(null, {status: 202});
119-
}
120-
case MOVE.name.toLowerCase(): {
121-
await moveCommand(env, interaction);
122-
return new Response(null, {status: 202});
123-
}
124-
case LOCK.name.toLowerCase(): {
125-
await lockCommand(env, interaction, true);
126-
return new Response(null, {status: 202});
127-
}
128-
case UNLOCK.name.toLowerCase(): {
129-
await lockCommand(env, interaction, false);
130-
return new Response(null, {status: 202});
131-
}
132-
default: {
133-
await editOriginalInteractionResponse(env, interaction, {
134-
type: InteractionResponseType.CHANNEL_MESSAGE_WITH_SOURCE,
135-
data: {
136-
content: "❌ Unknown Command",
137-
flags: InteractionResponseFlags.EPHEMERAL,
138-
}
139-
});
140-
return new Response(null, {status: 202});
141-
}
142101
}
143-
} catch (error) {
144-
console.error('Error processing request:', error);
145-
await editOriginalInteractionResponse(env, interaction, {
146-
type: InteractionResponseType.CHANNEL_MESSAGE_WITH_SOURCE,
147-
data: {
148-
content: "❌ An error occurred while processing your request.",
149-
flags: InteractionResponseFlags.EPHEMERAL,
150-
}
151-
});
152-
return new Response(null, {status: 202});
153-
}
102+
);
154103
}
155104

156105
console.error('Unknown Type');
@@ -162,9 +111,9 @@ async function processDiscordRequest(request, env) {
162111
}
163112
};
164113

165-
async function handleFetch(request, env) {
114+
async function handleFetch(request, env, ctx) {
166115
if (request.method === 'POST') {
167-
return await processDiscordRequest(request, env);
116+
return await processDiscordRequest(request, env, ctx);
168117
}
169118
return new Response('Method Not Allowed', { status: 405 });
170119
}

wrangler.toml

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,19 @@ compatibility_date = "2025-03-27"
99
enabled = true
1010
head_sampling_rate = 1
1111

12+
13+
[vars]
14+
GUILD_ID = "791497586582224937"
15+
GAME_NIGHT_CATEGORY_ID = "1355250187546656920"
16+
STAFF_ROLE_IDS = ["823763612710993930"]
17+
USER_ROLE_ID = "" # Optional game night access role, leave blank for @everyone
18+
BANNED_ROLE_ID = "1355306903948754974"
19+
LOG_CHANNEL_ID = "1355994334930927850"
20+
21+
[[kv_namespaces]]
22+
binding = "KV"
23+
id = "64a099cc6bad4fb9b6bf542dca684322"
24+
1225
# Note: Use secrets to store sensitive data.
1326
# https://developers.cloudflare.com/workers/configuration/secrets/
1427

@@ -19,13 +32,14 @@ GAME_NIGHT_CATEGORY_ID = "1355250187546656920"
1932
STAFF_ROLE_IDS = ["823763612710993930"]
2033
USER_ROLE_ID = "" # Optional game night access role, leave blank for @everyone
2134
BANNED_ROLE_ID = "1355306903948754974"
35+
LOG_CHANNEL_ID = "1355994334930927850"
2236

2337
[env.dev.observability]
2438
enabled = true
2539

2640
[[env.dev.kv_namespaces]]
2741
binding = "KV"
28-
id = "cc4ff5a768d34e14a9bfcc38bc93b221"
42+
id = "64a099cc6bad4fb9b6bf542dca684322"
2943

3044

3145
[env.prod]
@@ -35,10 +49,11 @@ GAME_NIGHT_CATEGORY_ID = "1355250187546656920"
3549
STAFF_ROLE_IDS = ["823763612710993930"]
3650
USER_ROLE_ID = "" # Optional game night access role, leave blank for @everyone
3751
BANNED_ROLE_ID = "1355306903948754974"
52+
LOG_CHANNEL_ID = "1355994334930927850"
3853

3954
[env.prod.observability]
4055
enabled = true
4156

4257
[[env.prod.kv_namespaces]]
4358
binding = "KV"
44-
id = "cc4ff5a768d34e14a9bfcc38bc93b221"
59+
id = "64a099cc6bad4fb9b6bf542dca684322"

0 commit comments

Comments
 (0)