@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.
- package/.http +4 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.js +230 -0
- package/dist/routes/guilds/[guildId]/members/[memberId]/permissions/route.d.ts +3 -0
- package/dist/routes/guilds/[guildId]/members/[memberId]/permissions/route.js +72 -0
- package/dist/routes/guilds/[guildId]/members/[memberId]/roles/[roleId]/route.d.ts +9 -0
- package/dist/routes/guilds/[guildId]/members/[memberId]/roles/[roleId]/route.js +225 -0
- package/dist/routes/guilds/[guildId]/members/[memberId]/roles/route.d.ts +3 -0
- package/dist/routes/guilds/[guildId]/members/[memberId]/roles/route.js +74 -0
- package/dist/routes/guilds/[guildId]/members/[memberId]/route.d.ts +7 -0
- package/dist/routes/guilds/[guildId]/members/[memberId]/route.js +72 -0
- package/dist/routes/guilds/[guildId]/members/route.d.ts +3 -0
- package/dist/routes/guilds/[guildId]/members/route.js +73 -0
- package/dist/routes/guilds/[guildId]/roles/[roleId]/members/route.d.ts +3 -0
- package/dist/routes/guilds/[guildId]/roles/[roleId]/members/route.js +70 -0
- package/dist/routes/guilds/[guildId]/roles/[roleId]/route.d.ts +7 -0
- package/dist/routes/guilds/[guildId]/roles/[roleId]/route.js +68 -0
- package/dist/routes/guilds/[guildId]/roles/route.d.ts +3 -0
- package/dist/routes/guilds/[guildId]/roles/route.js +67 -0
- package/dist/routes/guilds/[guildId]/route.d.ts +6 -0
- package/dist/routes/guilds/[guildId]/route.js +63 -0
- package/dist/routes/guilds/route.d.ts +3 -0
- package/dist/routes/guilds/route.js +68 -0
- package/dist/routes/middleware.d.ts +2 -0
- package/dist/routes/middleware.js +54 -0
- package/docs.md +13 -0
- package/package.json +28 -0
- package/src/index.ts +143 -0
- package/src/routes/guilds/[guildId]/members/[memberId]/permissions/route.ts +26 -0
- package/src/routes/guilds/[guildId]/members/[memberId]/roles/[roleId]/route.ts +163 -0
- package/src/routes/guilds/[guildId]/members/[memberId]/roles/route.ts +29 -0
- package/src/routes/guilds/[guildId]/members/[memberId]/route.ts +29 -0
- package/src/routes/guilds/[guildId]/members/route.ts +32 -0
- package/src/routes/guilds/[guildId]/roles/[roleId]/members/route.ts +25 -0
- package/src/routes/guilds/[guildId]/roles/[roleId]/route.ts +27 -0
- package/src/routes/guilds/[guildId]/roles/route.ts +22 -0
- package/src/routes/guilds/[guildId]/route.ts +23 -0
- package/src/routes/guilds/route.ts +28 -0
- package/src/routes/middleware.ts +14 -0
- package/src/types/express.d.ts +11 -0
- package/tsconfig.json +15 -0
package/.http
ADDED
package/dist/index.d.ts
ADDED
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,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,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>>>;
|