something something pending application message (finally)

This commit is contained in:
nin0 2025-05-24 08:07:17 -04:00
parent 13eb492cab
commit 9191b156d7
Signed by: nin0
SSH key fingerprint: SHA256:NOoDnFVvZNFvqfXCIhzr6oCTDImZAbTTuyAysZ8Ufk8
3 changed files with 168 additions and 4 deletions

View file

@ -1,4 +1,4 @@
import { ComponentTypes, MessageFlags, Shard } from "oceanic.js"; import { ButtonStyles, ComponentTypes, MessageFlags, Shard } from "oceanic.js";
import { client } from "."; import { client } from ".";
import { Constants } from "./Constants"; import { Constants } from "./Constants";
import { db } from "./database"; import { db } from "./database";
@ -14,6 +14,8 @@ import {
} from "~/components"; } from "~/components";
import { selfappReq } from "./selfappReq"; import { selfappReq } from "./selfappReq";
import { User } from "./components/User"; import { User } from "./components/User";
import { Response } from "./types";
import { match } from "./utils";
export async function setupJoinRequestHandler(shard: Shard) { export async function setupJoinRequestHandler(shard: Shard) {
shard.ws?.on("message", async (d) => { shard.ws?.on("message", async (d) => {
@ -25,19 +27,165 @@ export async function setupJoinRequestHandler(shard: Shard) {
case "GUILD_JOIN_REQUEST_UPDATE": { case "GUILD_JOIN_REQUEST_UPDATE": {
switch (applicationData.status) { switch (applicationData.status) {
case "SUBMITTED": { case "SUBMITTED": {
const rawResponses =
applicationData.request.form_responses;
const response: Response = {
hereFor: match(rawResponses[0].response, {
0: ["tag"],
1: ["chat"],
2: ["tag", "chat"]
}),
foundThrough: match(rawResponses[1].response, {
0: "archive",
1: "user",
2: "tag",
3: "other",
4: "sold"
}),
languages: rawResponses[2].response,
details: rawResponses[3].response,
canBoost: rawResponses[4].response === 0
};
const user = await client.rest.users.get(
applicationData.request.user.id
);
const pendingMsg = const pendingMsg =
await client.rest.channels.createMessage( await client.rest.channels.createMessage(
Constants.PENDING_CHANNEL_ID, Constants.PENDING_CHANNEL_ID,
<ComponentMessage> <ComponentMessage>
<TextDisplay>Placeholder</TextDisplay> <TextDisplay>
{"<@&1375617676139040909>"}
</TextDisplay>
<Container accentColor={0xaaaaff}>
<TextDisplay>
## New join request
</TextDisplay>
<Divider />
<User user={user} />
<Divider />
<TextDisplay>
### Application
<br />
Here for
<br />
-# {response.hereFor.join(", ")}
<br />
Found through
<br />
-#{" "}
{(() => {
switch (
response.foundThrough
) {
case "archive":
return "Guild Archive/nelly.tools";
case "tag":
return 'Hit "Ask to Join" on a clan tag';
case "user":
return "User invited them\n-# **Only accept if someone is mentioned in details**";
case "other":
return "Something else";
case "sold":
return "Was sold an invite\n-# **Only the owner can interact with this application**";
}
})()}
<br />
Languages
<br />
-# {response.languages}
<br />
Can boost
<br />
-#{" "}
{response.canBoost
? "Yes"
: "No"}
</TextDisplay>
<Divider />
<TextDisplay>
### Details
<br />
{response.details}
</TextDisplay>
<Divider />
<ActionRow>
<Button
style={ButtonStyles.SUCCESS}
customID={`accept-${applicationData.request.id}`}
emoji={{
name: "blobcatgreen",
id: "1375806000312881233"
}}
>
Accept
</Button>
<Button
style={ButtonStyles.SUCCESS}
customID={`accept-friend-${applicationData.request.id}`}
emoji={{
name: "blobcatgreen",
id: "1375806000312881233"
}}
>
Accept + Friend
</Button>
</ActionRow>
<ActionRow>
<Button
style={ButtonStyles.DANGER}
customID={`reject-${applicationData.request.id}`}
emoji={{
name: "blobcatred",
id: "1375806202470203513"
}}
>
Deny
</Button>
<Button
style={ButtonStyles.DANGER}
customID={`reject-ban-${applicationData.request.id}`}
emoji={{
name: "BAN",
id: "1375806319621046313"
}}
>
Deny + Ban
</Button>
</ActionRow>
<ActionRow>
<Button
style={
ButtonStyles.SECONDARY
}
customID={`interview-${applicationData.request.id}`}
emoji={{
name: "💬"
}}
>
Interview
</Button>
<Button
style={
ButtonStyles.SECONDARY
}
customID={`lock-${applicationData.request.id}`}
emoji={{
name: "🔑"
}}
>
Lock
</Button>
</ActionRow>
</Container>
</ComponentMessage> </ComponentMessage>
); );
await db.run( await db.run(
"INSERT INTO applications (id, user_id, status, message_id, channel_id) VALUES (?, ?, 0, ?, ?)", "INSERT INTO applications (id, user_id, status, message_id, channel_id, responses) VALUES (?, ?, 0, ?, ?, ?)",
applicationData.request.id, applicationData.request.id,
applicationData.request.user_id, applicationData.request.user_id,
pendingMsg.id, pendingMsg.id,
pendingMsg.channelID pendingMsg.channelID,
JSON.stringify(response)
); );
break; break;

View file

@ -0,0 +1,7 @@
export type Response = {
hereFor: ("tag" | "chat")[];
foundThrough: "archive" | "user" | "tag" | "other" | "sold";
languages: string;
details: string;
canBoost: boolean;
};

9
src/utils.ts Normal file
View file

@ -0,0 +1,9 @@
export function match(
value: any,
matches: {
[key: number | string]: any;
}
) {
if (matches[value]) return matches[value];
else return null;
}