@mathisalarcon/discord-bot-dashboard-api 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. package/.http +4 -0
  2. package/dist/index.d.ts +8 -0
  3. package/dist/index.js +230 -0
  4. package/dist/routes/guilds/[guildId]/members/[memberId]/permissions/route.d.ts +3 -0
  5. package/dist/routes/guilds/[guildId]/members/[memberId]/permissions/route.js +72 -0
  6. package/dist/routes/guilds/[guildId]/members/[memberId]/roles/[roleId]/route.d.ts +9 -0
  7. package/dist/routes/guilds/[guildId]/members/[memberId]/roles/[roleId]/route.js +225 -0
  8. package/dist/routes/guilds/[guildId]/members/[memberId]/roles/route.d.ts +3 -0
  9. package/dist/routes/guilds/[guildId]/members/[memberId]/roles/route.js +74 -0
  10. package/dist/routes/guilds/[guildId]/members/[memberId]/route.d.ts +7 -0
  11. package/dist/routes/guilds/[guildId]/members/[memberId]/route.js +72 -0
  12. package/dist/routes/guilds/[guildId]/members/route.d.ts +3 -0
  13. package/dist/routes/guilds/[guildId]/members/route.js +73 -0
  14. package/dist/routes/guilds/[guildId]/roles/[roleId]/members/route.d.ts +3 -0
  15. package/dist/routes/guilds/[guildId]/roles/[roleId]/members/route.js +70 -0
  16. package/dist/routes/guilds/[guildId]/roles/[roleId]/route.d.ts +7 -0
  17. package/dist/routes/guilds/[guildId]/roles/[roleId]/route.js +68 -0
  18. package/dist/routes/guilds/[guildId]/roles/route.d.ts +3 -0
  19. package/dist/routes/guilds/[guildId]/roles/route.js +67 -0
  20. package/dist/routes/guilds/[guildId]/route.d.ts +6 -0
  21. package/dist/routes/guilds/[guildId]/route.js +63 -0
  22. package/dist/routes/guilds/route.d.ts +3 -0
  23. package/dist/routes/guilds/route.js +68 -0
  24. package/dist/routes/middleware.d.ts +2 -0
  25. package/dist/routes/middleware.js +54 -0
  26. package/docs.md +13 -0
  27. package/package.json +28 -0
  28. package/src/index.ts +143 -0
  29. package/src/routes/guilds/[guildId]/members/[memberId]/permissions/route.ts +26 -0
  30. package/src/routes/guilds/[guildId]/members/[memberId]/roles/[roleId]/route.ts +163 -0
  31. package/src/routes/guilds/[guildId]/members/[memberId]/roles/route.ts +29 -0
  32. package/src/routes/guilds/[guildId]/members/[memberId]/route.ts +29 -0
  33. package/src/routes/guilds/[guildId]/members/route.ts +32 -0
  34. package/src/routes/guilds/[guildId]/roles/[roleId]/members/route.ts +25 -0
  35. package/src/routes/guilds/[guildId]/roles/[roleId]/route.ts +27 -0
  36. package/src/routes/guilds/[guildId]/roles/route.ts +22 -0
  37. package/src/routes/guilds/[guildId]/route.ts +23 -0
  38. package/src/routes/guilds/route.ts +28 -0
  39. package/src/routes/middleware.ts +14 -0
  40. package/src/types/express.d.ts +11 -0
  41. package/tsconfig.json +15 -0
package/.http ADDED
@@ -0,0 +1,4 @@
1
+ # Get http://localhost:3000/api/guilds/mama
2
+ GET http://localhost:3000/api/guilds/1368194292274823208/members
3
+ # Auth
4
+ Authorization: Bearer MTQ1OTAxOTk5MzEyNjUzNTI5Mw.GAGwea.449STE5HttR_x31USI19mUyWHGJOT_NUFtgceY
@@ -0,0 +1,8 @@
1
+ import { Client } from "discord.js";
2
+ import "dotenv/config";
3
+ type Options = {
4
+ client: Client;
5
+ secret: string;
6
+ };
7
+ export default function ({ client, secret }: Options): Promise<void>;
8
+ export {};
package/dist/index.js ADDED
@@ -0,0 +1,230 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
36
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
37
+ return new (P || (P = Promise))(function (resolve, reject) {
38
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
39
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
40
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
41
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
42
+ });
43
+ };
44
+ var __generator = (this && this.__generator) || function (thisArg, body) {
45
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
46
+ return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
47
+ function verb(n) { return function (v) { return step([n, v]); }; }
48
+ function step(op) {
49
+ if (f) throw new TypeError("Generator is already executing.");
50
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
51
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
52
+ if (y = 0, t) op = [op[0] & 2, t.value];
53
+ switch (op[0]) {
54
+ case 0: case 1: t = op; break;
55
+ case 4: _.label++; return { value: op[1], done: false };
56
+ case 5: _.label++; y = op[1]; op = [0]; continue;
57
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
58
+ default:
59
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
60
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
61
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
62
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
63
+ if (t[2]) _.ops.pop();
64
+ _.trys.pop(); continue;
65
+ }
66
+ op = body.call(thisArg, _);
67
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
68
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
69
+ }
70
+ };
71
+ var __importDefault = (this && this.__importDefault) || function (mod) {
72
+ return (mod && mod.__esModule) ? mod : { "default": mod };
73
+ };
74
+ Object.defineProperty(exports, "__esModule", { value: true });
75
+ exports.default = default_1;
76
+ require("dotenv/config");
77
+ var express_1 = __importStar(require("express"));
78
+ var path_1 = __importDefault(require("path"));
79
+ var fs_1 = __importDefault(require("fs"));
80
+ var PORT = process.env.PORT ? parseInt(process.env.PORT) : 3000;
81
+ function default_1(_a) {
82
+ return __awaiter(this, arguments, void 0, function (_b) {
83
+ var app, apiRouter;
84
+ var client = _b.client, secret = _b.secret;
85
+ return __generator(this, function (_c) {
86
+ switch (_c.label) {
87
+ case 0:
88
+ app = (0, express_1.default)().use(express_1.default.json());
89
+ app.set("secret", secret);
90
+ apiRouter = (0, express_1.Router)();
91
+ app.use("/api", apiRouter);
92
+ return [4 /*yield*/, loadBaseMiddleware(apiRouter, client)];
93
+ case 1:
94
+ _c.sent();
95
+ return [4 /*yield*/, loadRoutes(apiRouter, client)];
96
+ case 2:
97
+ _c.sent();
98
+ return [4 /*yield*/, startServer(app)];
99
+ case 3:
100
+ _c.sent();
101
+ app.bot = client;
102
+ return [2 /*return*/];
103
+ }
104
+ });
105
+ });
106
+ }
107
+ function startServer(app) {
108
+ return __awaiter(this, void 0, void 0, function () {
109
+ return __generator(this, function (_a) {
110
+ return [2 /*return*/, new Promise(function (resolve) {
111
+ app.listen(PORT, function () {
112
+ console.log("Server is running on port ".concat(PORT));
113
+ resolve();
114
+ }).on("error", function (err) {
115
+ console.log("Failed to start server on port ".concat(PORT, ", retrying on port ").concat(++PORT, ".\nFor production, set the PORT environment variable to a fixed port."));
116
+ startServer(app).then(function () { return resolve(); });
117
+ });
118
+ })];
119
+ });
120
+ });
121
+ }
122
+ function loadRoutes(app_1, client_1) {
123
+ return __awaiter(this, arguments, void 0, function (app, client, dir) {
124
+ var files, _loop_1, _i, files_1, file;
125
+ if (dir === void 0) { dir = path_1.default.join(__dirname, "routes"); }
126
+ return __generator(this, function (_a) {
127
+ switch (_a.label) {
128
+ case 0:
129
+ files = fs_1.default.readdirSync(dir).reverse();
130
+ _loop_1 = function (file) {
131
+ var dirname, router, route, subFiles, middlewareModule_1, routerModule_1;
132
+ return __generator(this, function (_b) {
133
+ switch (_b.label) {
134
+ case 0:
135
+ dirname = path_1.default.join(dir, file);
136
+ if (!fs_1.default.statSync(dirname).isDirectory()) return [3 /*break*/, 6];
137
+ router = (0, express_1.Router)({ mergeParams: true });
138
+ route = file.startsWith("[") && file.endsWith("]")
139
+ ? ":".concat(file.slice(1, -1))
140
+ : file;
141
+ console.log("Loading route: /".concat(route));
142
+ subFiles = fs_1.default.readdirSync(dirname);
143
+ if (!subFiles
144
+ .map(function (f) { return f.replace(/\.ts|\.js/, ""); })
145
+ .includes("middleware")) return [3 /*break*/, 2];
146
+ return [4 /*yield*/, Promise.resolve("".concat(path_1.default.join(dirname, subFiles.find(function (f) { return f.replace(/\.ts|\.js/, "") === "middleware"; })))).then(function (s) { return __importStar(require(s)); })];
147
+ case 1:
148
+ middlewareModule_1 = _b.sent();
149
+ /* require(path.join(
150
+ dirname,
151
+ subFiles.find((f) =>
152
+ f.replace(/\.ts|\.js/, "").includes("middleware")
153
+ ) as string
154
+ )); */
155
+ router.use(function (req, res, next) {
156
+ return middlewareModule_1.default(req, res, next, client);
157
+ });
158
+ _b.label = 2;
159
+ case 2:
160
+ if (!subFiles
161
+ .map(function (f) { return f.replace(/\.ts|\.js/, ""); })
162
+ .includes("route")) return [3 /*break*/, 4];
163
+ return [4 /*yield*/, Promise.resolve("".concat(path_1.default.join(dirname, subFiles.find(function (f) { return f.replace(/\.ts|\.js/, "") === "route"; })))).then(function (s) { return __importStar(require(s)); })];
164
+ case 3:
165
+ routerModule_1 = _b.sent();
166
+ router.all("/", function (req, res) {
167
+ var method = req.method.toUpperCase();
168
+ switch (method) {
169
+ case "GET":
170
+ return routerModule_1.GET(req, res, client);
171
+ case "POST":
172
+ if (routerModule_1.POST)
173
+ return routerModule_1.POST(req, res, client);
174
+ break;
175
+ case "PUT":
176
+ if (routerModule_1.PUT)
177
+ return routerModule_1.PUT(req, res, client);
178
+ break;
179
+ case "DELETE":
180
+ if (routerModule_1.DELETE)
181
+ return routerModule_1.DELETE(req, res, client);
182
+ break;
183
+ }
184
+ res.status(405).send({ error: "Method Not Allowed" });
185
+ });
186
+ _b.label = 4;
187
+ case 4:
188
+ // Recursive load routes
189
+ app.use("/".concat(route), router);
190
+ return [4 /*yield*/, loadRoutes(router, client, dirname)];
191
+ case 5:
192
+ _b.sent();
193
+ _b.label = 6;
194
+ case 6: return [2 /*return*/];
195
+ }
196
+ });
197
+ };
198
+ _i = 0, files_1 = files;
199
+ _a.label = 1;
200
+ case 1:
201
+ if (!(_i < files_1.length)) return [3 /*break*/, 4];
202
+ file = files_1[_i];
203
+ return [5 /*yield**/, _loop_1(file)];
204
+ case 2:
205
+ _a.sent();
206
+ _a.label = 3;
207
+ case 3:
208
+ _i++;
209
+ return [3 /*break*/, 1];
210
+ case 4: return [2 /*return*/];
211
+ }
212
+ });
213
+ });
214
+ }
215
+ function loadBaseMiddleware(app, client) {
216
+ return __awaiter(this, void 0, void 0, function () {
217
+ var middlewareModule;
218
+ return __generator(this, function (_a) {
219
+ switch (_a.label) {
220
+ case 0: return [4 /*yield*/, Promise.resolve("".concat(path_1.default.join(__dirname, "routes", "middleware"))).then(function (s) { return __importStar(require(s)); })];
221
+ case 1:
222
+ middlewareModule = _a.sent();
223
+ app.use(function (req, res, next) {
224
+ return middlewareModule.default(req, res, next, client);
225
+ });
226
+ return [2 /*return*/];
227
+ }
228
+ });
229
+ });
230
+ }
@@ -0,0 +1,3 @@
1
+ import express from "express";
2
+ import { Client } from "discord.js";
3
+ export declare function GET(req: express.Request, res: express.Response, client: Client): Promise<express.Response<any, Record<string, any>>>;
@@ -0,0 +1,72 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __generator = (this && this.__generator) || function (thisArg, body) {
12
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
13
+ return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
14
+ function verb(n) { return function (v) { return step([n, v]); }; }
15
+ function step(op) {
16
+ if (f) throw new TypeError("Generator is already executing.");
17
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
18
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
19
+ if (y = 0, t) op = [op[0] & 2, t.value];
20
+ switch (op[0]) {
21
+ case 0: case 1: t = op; break;
22
+ case 4: _.label++; return { value: op[1], done: false };
23
+ case 5: _.label++; y = op[1]; op = [0]; continue;
24
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
25
+ default:
26
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
27
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
28
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
29
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
30
+ if (t[2]) _.ops.pop();
31
+ _.trys.pop(); continue;
32
+ }
33
+ op = body.call(thisArg, _);
34
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
35
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
36
+ }
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.GET = GET;
40
+ function GET(req, res, client) {
41
+ return __awaiter(this, void 0, void 0, function () {
42
+ var _a, guildId, memberId, guild, member, error_1;
43
+ return __generator(this, function (_b) {
44
+ switch (_b.label) {
45
+ case 0:
46
+ _a = req.params, guildId = _a.guildId, memberId = _a.memberId;
47
+ _b.label = 1;
48
+ case 1:
49
+ _b.trys.push([1, 4, , 5]);
50
+ return [4 /*yield*/, client.guilds.fetch(guildId).catch(function () { return null; })];
51
+ case 2:
52
+ guild = _b.sent();
53
+ if (!guild)
54
+ return [2 /*return*/, res.status(404).json({ error: "Guild not found", code: "GUILD_NOT_FOUND" })];
55
+ return [4 /*yield*/, guild.members
56
+ .fetch({
57
+ user: memberId,
58
+ })
59
+ .catch(function () { return null; })];
60
+ case 3:
61
+ member = _b.sent();
62
+ if (!member)
63
+ return [2 /*return*/, res.status(404).json({ error: "Member not found", code: "MEMBER_NOT_FOUND" })];
64
+ return [2 /*return*/, res.status(200).json(member.permissions.toArray())];
65
+ case 4:
66
+ error_1 = _b.sent();
67
+ return [2 /*return*/, res.status(500).json({ error: "Internal Server Error", code: "INTERNAL_SERVER_ERROR" })];
68
+ case 5: return [2 /*return*/];
69
+ }
70
+ });
71
+ });
72
+ }
@@ -0,0 +1,9 @@
1
+ import express from "express";
2
+ import { Client } from "discord.js";
3
+ import { Params as SubParams } from "../../route";
4
+ export type Params = SubParams & {
5
+ roleId: string;
6
+ };
7
+ export declare function GET(req: express.Request, res: express.Response, client: Client): Promise<express.Response<any, Record<string, any>>>;
8
+ export declare function POST(req: express.Request, res: express.Response, client: Client): Promise<express.Response<any, Record<string, any>>>;
9
+ export declare function DELETE(req: express.Request, res: express.Response, client: Client): Promise<express.Response<any, Record<string, any>>>;
@@ -0,0 +1,225 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __generator = (this && this.__generator) || function (thisArg, body) {
12
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
13
+ return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
14
+ function verb(n) { return function (v) { return step([n, v]); }; }
15
+ function step(op) {
16
+ if (f) throw new TypeError("Generator is already executing.");
17
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
18
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
19
+ if (y = 0, t) op = [op[0] & 2, t.value];
20
+ switch (op[0]) {
21
+ case 0: case 1: t = op; break;
22
+ case 4: _.label++; return { value: op[1], done: false };
23
+ case 5: _.label++; y = op[1]; op = [0]; continue;
24
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
25
+ default:
26
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
27
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
28
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
29
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
30
+ if (t[2]) _.ops.pop();
31
+ _.trys.pop(); continue;
32
+ }
33
+ op = body.call(thisArg, _);
34
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
35
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
36
+ }
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.GET = GET;
40
+ exports.POST = POST;
41
+ exports.DELETE = DELETE;
42
+ function GET(req, res, client) {
43
+ return __awaiter(this, void 0, void 0, function () {
44
+ var _a, guildId, memberId, roleId, guild, member, role, error_1;
45
+ return __generator(this, function (_b) {
46
+ switch (_b.label) {
47
+ case 0:
48
+ _a = req.params, guildId = _a.guildId, memberId = _a.memberId, roleId = _a.roleId;
49
+ _b.label = 1;
50
+ case 1:
51
+ _b.trys.push([1, 5, , 6]);
52
+ return [4 /*yield*/, client.guilds.fetch(guildId).catch(function () { return null; })];
53
+ case 2:
54
+ guild = _b.sent();
55
+ if (!guild)
56
+ return [2 /*return*/, res
57
+ .status(404)
58
+ .json({ error: "Guild not found", code: "GUILD_NOT_FOUND" })];
59
+ return [4 /*yield*/, guild.members
60
+ .fetch({
61
+ user: memberId,
62
+ })
63
+ .catch(function () { return null; })];
64
+ case 3:
65
+ member = _b.sent();
66
+ if (!member)
67
+ return [2 /*return*/, res
68
+ .status(404)
69
+ .json({ error: "Member not found", code: "MEMBER_NOT_FOUND" })];
70
+ return [4 /*yield*/, guild.roles.fetch(roleId).catch(function () { return null; })];
71
+ case 4:
72
+ role = _b.sent();
73
+ if (!role)
74
+ return [2 /*return*/, res
75
+ .status(404)
76
+ .json({ error: "Role not found", code: "ROLE_NOT_FOUND" })];
77
+ return [2 /*return*/, res.status(200).json(role.toJSON())];
78
+ case 5:
79
+ error_1 = _b.sent();
80
+ return [2 /*return*/, res.status(500).json({
81
+ error: "Internal Server Error",
82
+ code: "INTERNAL_SERVER_ERROR",
83
+ })];
84
+ case 6: return [2 /*return*/];
85
+ }
86
+ });
87
+ });
88
+ }
89
+ function POST(req, res, client) {
90
+ return __awaiter(this, void 0, void 0, function () {
91
+ var _a, guildId, memberId, roleId, guild, member, role, error_2;
92
+ return __generator(this, function (_b) {
93
+ switch (_b.label) {
94
+ case 0:
95
+ _a = req.params, guildId = _a.guildId, memberId = _a.memberId, roleId = _a.roleId;
96
+ _b.label = 1;
97
+ case 1:
98
+ _b.trys.push([1, 6, , 7]);
99
+ return [4 /*yield*/, client.guilds.fetch(guildId).catch(function () { return null; })];
100
+ case 2:
101
+ guild = _b.sent();
102
+ if (!guild)
103
+ return [2 /*return*/, res.status(404).json({ error: "Guild not found", code: "GUILD_NOT_FOUND" })];
104
+ return [4 /*yield*/, guild.members
105
+ .fetch({
106
+ user: memberId,
107
+ })
108
+ .catch(function () { return null; })];
109
+ case 3:
110
+ member = _b.sent();
111
+ if (!member)
112
+ return [2 /*return*/, res.status(404).json({ error: "Member not found", code: "MEMBER_NOT_FOUND" })];
113
+ return [4 /*yield*/, guild.roles.fetch(roleId).catch(function () { return null; })];
114
+ case 4:
115
+ role = _b.sent();
116
+ if (!role)
117
+ return [2 /*return*/, res.status(404).json({ error: "Role not found", code: "ROLE_NOT_FOUND" })];
118
+ // Check if bot has permission to manage roles
119
+ if (!guild.members.me)
120
+ return [2 /*return*/, res.status(500).json({
121
+ error: "Bot member not found in guild",
122
+ code: "BOT_MEMBER_NOT_FOUND",
123
+ })];
124
+ if (!guild.members.me.permissions.has("ManageRoles"))
125
+ return [2 /*return*/, res.status(403).json({
126
+ error: "Bot lacks Manage Roles permission",
127
+ code: "BOT_MISSING_PERMISSIONS",
128
+ })];
129
+ // Check if the bot's highest role is higher than the role to be assigned
130
+ if (guild.members.me.roles.highest.position <= role.position)
131
+ return [2 /*return*/, res.status(403).json({
132
+ error: "Bot's highest role is not higher than the role to be assigned",
133
+ code: "BOT_ROLE_HIERARCHY",
134
+ })];
135
+ if (member.roles.cache.has(role.id))
136
+ return [2 /*return*/, res.status(400).json({ error: "Member already has the role", code: "ALREADY_EXISTS" })];
137
+ return [4 /*yield*/, member.roles.add(role)];
138
+ case 5:
139
+ _b.sent();
140
+ return [2 /*return*/, res.status(200).json({ message: "Role assigned successfully" })];
141
+ case 6:
142
+ error_2 = _b.sent();
143
+ return [2 /*return*/, res.status(500).json({
144
+ error: "Internal Server Error",
145
+ code: "INTERNAL_SERVER_ERROR",
146
+ })];
147
+ case 7: return [2 /*return*/];
148
+ }
149
+ });
150
+ });
151
+ }
152
+ function DELETE(req, res, client) {
153
+ return __awaiter(this, void 0, void 0, function () {
154
+ var _a, guildId, memberId, roleId, guild, member, role, error_3;
155
+ return __generator(this, function (_b) {
156
+ switch (_b.label) {
157
+ case 0:
158
+ _a = req.params, guildId = _a.guildId, memberId = _a.memberId, roleId = _a.roleId;
159
+ _b.label = 1;
160
+ case 1:
161
+ _b.trys.push([1, 6, , 7]);
162
+ return [4 /*yield*/, client.guilds.fetch(guildId).catch(function () { return null; })];
163
+ case 2:
164
+ guild = _b.sent();
165
+ if (!guild)
166
+ return [2 /*return*/, res
167
+ .status(404)
168
+ .json({ error: "Guild not found", code: "GUILD_NOT_FOUND" })];
169
+ return [4 /*yield*/, guild.members
170
+ .fetch({
171
+ user: memberId,
172
+ })
173
+ .catch(function () { return null; })];
174
+ case 3:
175
+ member = _b.sent();
176
+ if (!member)
177
+ return [2 /*return*/, res
178
+ .status(404)
179
+ .json({ error: "Member not found", code: "MEMBER_NOT_FOUND" })];
180
+ return [4 /*yield*/, guild.roles.fetch(roleId).catch(function () { return null; })];
181
+ case 4:
182
+ role = _b.sent();
183
+ if (!role)
184
+ return [2 /*return*/, res
185
+ .status(404)
186
+ .json({ error: "Role not found", code: "ROLE_NOT_FOUND" })];
187
+ // Check if bot has permission to manage roles
188
+ if (!guild.members.me)
189
+ return [2 /*return*/, res.status(500).json({
190
+ error: "Bot member not found in guild",
191
+ code: "BOT_MEMBER_NOT_FOUND",
192
+ })];
193
+ if (!guild.members.me.permissions.has("ManageRoles"))
194
+ return [2 /*return*/, res.status(403).json({
195
+ error: "Bot lacks Manage Roles permission",
196
+ code: "BOT_MISSING_PERMISSIONS",
197
+ })];
198
+ // Check if the bot's highest role is higher than the role to be assigned
199
+ if (guild.members.me.roles.highest.position <= role.position)
200
+ return [2 /*return*/, res.status(403).json({
201
+ error: "Bot's highest role is not higher than the role to be assigned",
202
+ code: "BOT_ROLE_HIERARCHY",
203
+ })];
204
+ if (!member.roles.cache.has(role.id))
205
+ return [2 /*return*/, res
206
+ .status(400)
207
+ .json({
208
+ error: "Member does not have the role",
209
+ code: "ALREADY_EXISTS",
210
+ })];
211
+ return [4 /*yield*/, member.roles.remove(role)];
212
+ case 5:
213
+ _b.sent();
214
+ return [2 /*return*/, res.status(200).json({ message: "Role removed successfully" })];
215
+ case 6:
216
+ error_3 = _b.sent();
217
+ return [2 /*return*/, res.status(500).json({
218
+ error: "Internal Server Error",
219
+ code: "INTERNAL_SERVER_ERROR",
220
+ })];
221
+ case 7: return [2 /*return*/];
222
+ }
223
+ });
224
+ });
225
+ }
@@ -0,0 +1,3 @@
1
+ import express from "express";
2
+ import { Client } from "discord.js";
3
+ export declare function GET(req: express.Request, res: express.Response, client: Client): Promise<express.Response<any, Record<string, any>>>;
@@ -0,0 +1,74 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __generator = (this && this.__generator) || function (thisArg, body) {
12
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
13
+ return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
14
+ function verb(n) { return function (v) { return step([n, v]); }; }
15
+ function step(op) {
16
+ if (f) throw new TypeError("Generator is already executing.");
17
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
18
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
19
+ if (y = 0, t) op = [op[0] & 2, t.value];
20
+ switch (op[0]) {
21
+ case 0: case 1: t = op; break;
22
+ case 4: _.label++; return { value: op[1], done: false };
23
+ case 5: _.label++; y = op[1]; op = [0]; continue;
24
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
25
+ default:
26
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
27
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
28
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
29
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
30
+ if (t[2]) _.ops.pop();
31
+ _.trys.pop(); continue;
32
+ }
33
+ op = body.call(thisArg, _);
34
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
35
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
36
+ }
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.GET = GET;
40
+ function GET(req, res, client) {
41
+ return __awaiter(this, void 0, void 0, function () {
42
+ var _a, guildId, memberId, guild, member, error_1;
43
+ return __generator(this, function (_b) {
44
+ switch (_b.label) {
45
+ case 0:
46
+ _a = req.params, guildId = _a.guildId, memberId = _a.memberId;
47
+ _b.label = 1;
48
+ case 1:
49
+ _b.trys.push([1, 4, , 5]);
50
+ return [4 /*yield*/, client.guilds.fetch(guildId).catch(function () { return null; })];
51
+ case 2:
52
+ guild = _b.sent();
53
+ if (!guild)
54
+ return [2 /*return*/, res.status(404).json({ error: "Guild not found", code: "GUILD_NOT_FOUND" })];
55
+ return [4 /*yield*/, guild.members
56
+ .fetch({
57
+ user: memberId,
58
+ })
59
+ .catch(function () { return null; })];
60
+ case 3:
61
+ member = _b.sent();
62
+ if (!member)
63
+ return [2 /*return*/, res.status(404).json({ error: "Member not found", code: "MEMBER_NOT_FOUND" })];
64
+ return [2 /*return*/, res
65
+ .status(200)
66
+ .json(member.roles.cache.map(function (role) { return role.toJSON(); }))];
67
+ case 4:
68
+ error_1 = _b.sent();
69
+ return [2 /*return*/, res.status(500).json({ error: "Internal Server Error", code: "INTERNAL_SERVER_ERROR" })];
70
+ case 5: return [2 /*return*/];
71
+ }
72
+ });
73
+ });
74
+ }
@@ -0,0 +1,7 @@
1
+ import express from "express";
2
+ import { Client } from "discord.js";
3
+ import { Params as SubParams } from "../../route";
4
+ export type Params = SubParams & {
5
+ memberId: string;
6
+ };
7
+ export declare function GET(req: express.Request, res: express.Response, client: Client): Promise<express.Response<any, Record<string, any>>>;