too many things
This commit is contained in:
parent
3b892b3db0
commit
b5dd0ed413
9 changed files with 1187 additions and 3 deletions
3
.gitignore
vendored
3
.gitignore
vendored
|
@ -1,3 +1,4 @@
|
|||
.env
|
||||
dist/
|
||||
node_modules/
|
||||
node_modules/
|
||||
database.db
|
20
.vscode/launch.json
vendored
Normal file
20
.vscode/launch.json
vendored
Normal file
|
@ -0,0 +1,20 @@
|
|||
{
|
||||
"name": "Attach to process",
|
||||
"type": "node",
|
||||
"request": "attach",
|
||||
"port": 9229,
|
||||
"skipFiles": ["<node_internals>/**", "${workspaceFolder}/node_modules/**"],
|
||||
"configurations": [
|
||||
{
|
||||
"name": "Attach to process",
|
||||
"type": "node",
|
||||
"request": "attach",
|
||||
"port": 9229,
|
||||
"skipFiles": [
|
||||
"<node_internals>/**",
|
||||
"${workspaceFolder}/node_modules/**"
|
||||
],
|
||||
"configurations": []
|
||||
}
|
||||
]
|
||||
}
|
|
@ -4,14 +4,16 @@
|
|||
"dependencies": {
|
||||
"esbuild": "^0.25.3",
|
||||
"fastify": "^5.3.2",
|
||||
"oceanic.js": "^1.12.0"
|
||||
"oceanic.js": "^1.12.0",
|
||||
"sqlite": "^5.1.1",
|
||||
"sqlite3": "^5.1.7"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/node": "^22.15.2",
|
||||
"tsx": "^4.19.3"
|
||||
},
|
||||
"scripts": {
|
||||
"dev": "tsx --watch --env-file-if-exists=.env src/index.ts",
|
||||
"dev": "tsx --watch --inspect-brk --env-file-if-exists=.env src/index.ts",
|
||||
"build": "node build.mjs",
|
||||
"start": "node build.mjs && node dist/index.js"
|
||||
}
|
||||
|
|
1039
pnpm-lock.yaml
generated
1039
pnpm-lock.yaml
generated
File diff suppressed because it is too large
Load diff
|
@ -1,2 +1,3 @@
|
|||
onlyBuiltDependencies:
|
||||
- esbuild
|
||||
- sqlite3
|
||||
|
|
4
src/Constants.ts
Normal file
4
src/Constants.ts
Normal file
|
@ -0,0 +1,4 @@
|
|||
export const Constants = {
|
||||
PENDING_CHANNEL_ID: "1370539719842070683",
|
||||
REJECTION_CHANNEL_ID: "1371073658403164261"
|
||||
};
|
26
src/database.ts
Normal file
26
src/database.ts
Normal file
|
@ -0,0 +1,26 @@
|
|||
import sqlite3 from "sqlite3";
|
||||
import { Database, open } from "sqlite";
|
||||
|
||||
export let db: Database;
|
||||
export async function openDb() {
|
||||
db = await open({
|
||||
filename: "database.db",
|
||||
driver: sqlite3.Database
|
||||
});
|
||||
console.log("Opened database");
|
||||
|
||||
db.exec(
|
||||
`CREATE TABLE IF NOT EXISTS applications (
|
||||
id TEXT PRIMARY KEY,
|
||||
user_id TEXT,
|
||||
status INTEGER,
|
||||
responses TEXT,
|
||||
actioned_by TEXT,
|
||||
reject_reason TEXT,
|
||||
interview_invite TEXT,
|
||||
message_id TEXT,
|
||||
channel_id TEXT,
|
||||
thread_id TEXT
|
||||
)`
|
||||
);
|
||||
}
|
|
@ -3,6 +3,7 @@ import { selfappReq } from "./selfappReq";
|
|||
import { setupJoinRequestHandler } from "./joinRequestHandler";
|
||||
import { Constants } from "./Constants";
|
||||
import { Divider, generateList, generateUserComponent, Header } from "./cv2";
|
||||
import { openDb } from "./database";
|
||||
|
||||
export const client = new Client({
|
||||
auth: `Bot ${process.env.BOT_TOKEN}`,
|
||||
|
@ -26,4 +27,5 @@ process.on("uncaughtException", (e) => {
|
|||
console.error(e);
|
||||
});
|
||||
|
||||
openDb();
|
||||
client.connect();
|
||||
|
|
89
src/joinRequestHandler.ts
Normal file
89
src/joinRequestHandler.ts
Normal file
|
@ -0,0 +1,89 @@
|
|||
import { ComponentTypes, MessageFlags, Shard } from "oceanic.js";
|
||||
import { client } from ".";
|
||||
import { Constants } from "./Constants";
|
||||
import { Header, Divider, generateUserComponent } from "./cv2";
|
||||
import { db } from "./database";
|
||||
import { selfappReq } from "./selfappReq";
|
||||
|
||||
export async function setupJoinRequestHandler(shard: Shard) {
|
||||
shard.ws?.on("message", async (d) => {
|
||||
const data = JSON.parse(d.toString("utf8"));
|
||||
if (!data.t) return;
|
||||
if (data.t.startsWith("GUILD_JOIN_REQUEST")) {
|
||||
const applicationData = data.d;
|
||||
switch (data.t) {
|
||||
case "GUILD_JOIN_REQUEST_UPDATE": {
|
||||
switch (applicationData.status) {
|
||||
case "SUBMITTED": {
|
||||
const pendingMsg =
|
||||
await client.rest.channels.createMessage(
|
||||
Constants.PENDING_CHANNEL_ID,
|
||||
{
|
||||
content: "Placeholder"
|
||||
}
|
||||
);
|
||||
await db.run(
|
||||
"INSERT INTO applications (id, user_id, status, message_id, channel_id) VALUES (?, ?, 0, ?, ?)",
|
||||
applicationData.request.id,
|
||||
applicationData.request.user_id,
|
||||
pendingMsg.id,
|
||||
pendingMsg.channelID
|
||||
);
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
case "GUILD_JOIN_REQUEST_DELETE": {
|
||||
const application = await db.get(
|
||||
"SELECT * FROM applications WHERE id=?",
|
||||
applicationData.id
|
||||
);
|
||||
if (application) {
|
||||
await db.run(
|
||||
"DELETE FROM applications WHERE id=?",
|
||||
applicationData.id
|
||||
);
|
||||
await client.rest.channels.deleteMessage(
|
||||
application.channel_id,
|
||||
application.message_id
|
||||
);
|
||||
}
|
||||
await client.rest.channels.createMessage(
|
||||
Constants.REJECTION_CHANNEL_ID,
|
||||
{
|
||||
flags: MessageFlags.IS_COMPONENTS_V2,
|
||||
components: [
|
||||
{
|
||||
type: ComponentTypes.CONTAINER,
|
||||
accentColor: 0xffaaaa,
|
||||
components: [
|
||||
Header("Join request withdrawn", 2),
|
||||
Divider,
|
||||
await generateUserComponent(
|
||||
applicationData.user_id
|
||||
),
|
||||
Divider,
|
||||
Header("Application", 3),
|
||||
application
|
||||
? {
|
||||
type: ComponentTypes.TEXT_DISPLAY,
|
||||
content: "User has applied"
|
||||
}
|
||||
: {
|
||||
type: ComponentTypes.TEXT_DISPLAY,
|
||||
content:
|
||||
"User has never applied"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue