@nerimity/nerimity.js 1.12.1 → 1.14.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.
@@ -1 +1 @@
1
- {"version":3,"file":"RawData.js","sourceRoot":"","sources":["../src/RawData.ts"],"names":[],"mappings":";;;AA2DA,IAAY,WAMX;AAND,WAAY,WAAW;IACrB,mDAAW,CAAA;IACX,2DAAe,CAAA;IACf,6DAAgB,CAAA;IAChB,uDAAa,CAAA;IACb,qDAAY,CAAA;AACd,CAAC,EANW,WAAW,2BAAX,WAAW,QAMtB;AA8BD,IAAY,WAIX;AAJD,WAAY,WAAW;IACrB,mDAAW,CAAA;IACX,2DAAe,CAAA;IACf,qDAAY,CAAA;AACd,CAAC,EAJW,WAAW,2BAAX,WAAW,QAItB"}
1
+ {"version":3,"file":"RawData.js","sourceRoot":"","sources":["../src/RawData.ts"],"names":[],"mappings":";;;AA2DA,IAAY,WAMX;AAND,WAAY,WAAW;IACrB,mDAAW,CAAA;IACX,2DAAe,CAAA;IACf,6DAAgB,CAAA;IAChB,uDAAa,CAAA;IACb,qDAAY,CAAA;AACd,CAAC,EANW,WAAW,2BAAX,WAAW,QAMtB;AA+BD,IAAY,WAIX;AAJD,WAAY,WAAW;IACrB,mDAAW,CAAA;IACX,2DAAe,CAAA;IACf,qDAAY,CAAA;AACd,CAAC,EAJW,WAAW,2BAAX,WAAW,QAItB"}
@@ -0,0 +1,16 @@
1
+ export declare const RolePermissions: {
2
+ readonly ADMIN: 1;
3
+ readonly SEND_MESSAGE: 2;
4
+ readonly MANAGE_ROLES: 4;
5
+ readonly MANAGE_CHANNELS: 8;
6
+ readonly KICK: 16;
7
+ readonly BAN: 32;
8
+ readonly MENTION_EVERYONE: 64;
9
+ readonly NICKNAME_MEMBER: 128;
10
+ readonly MENTION_ROLES: 256;
11
+ };
12
+ export type AvailablePermissions = (typeof RolePermissions)[keyof typeof RolePermissions];
13
+ export declare const hasBit: (permissions: number, bit: number) => boolean;
14
+ export declare const addBit: (permissions: number, bit: number) => number;
15
+ export declare const removeBit: (permissions: number, bit: number) => number;
16
+ //# sourceMappingURL=bitwise.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bitwise.d.ts","sourceRoot":"","sources":["../src/bitwise.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,eAAe;;;;;;;;;;CAUlB,CAAC;AAEX,MAAM,MAAM,oBAAoB,GAC9B,CAAC,OAAO,eAAe,CAAC,CAAC,MAAM,OAAO,eAAe,CAAC,CAAC;AAEzD,eAAO,MAAM,MAAM,gBAAiB,MAAM,OAAO,MAAM,YAEtD,CAAC;AAEF,eAAO,MAAM,MAAM,gBAAiB,MAAM,OAAO,MAAM,WAEtD,CAAC;AACF,eAAO,MAAM,SAAS,gBAAiB,MAAM,OAAO,MAAM,WAEzD,CAAC"}
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.removeBit = exports.addBit = exports.hasBit = exports.RolePermissions = void 0;
4
+ exports.RolePermissions = {
5
+ ADMIN: 1,
6
+ SEND_MESSAGE: 2,
7
+ MANAGE_ROLES: 4,
8
+ MANAGE_CHANNELS: 8,
9
+ KICK: 16,
10
+ BAN: 32,
11
+ MENTION_EVERYONE: 64,
12
+ NICKNAME_MEMBER: 128,
13
+ MENTION_ROLES: 256,
14
+ };
15
+ const hasBit = (permissions, bit) => {
16
+ return (permissions & bit) === bit;
17
+ };
18
+ exports.hasBit = hasBit;
19
+ const addBit = (permissions, bit) => {
20
+ return permissions | bit;
21
+ };
22
+ exports.addBit = addBit;
23
+ const removeBit = (permissions, bit) => {
24
+ return permissions & ~bit;
25
+ };
26
+ exports.removeBit = removeBit;
27
+ //# sourceMappingURL=bitwise.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bitwise.js","sourceRoot":"","sources":["../src/bitwise.ts"],"names":[],"mappings":";;;AAAa,QAAA,eAAe,GAAG;IAC7B,KAAK,EAAE,CAAC;IACR,YAAY,EAAE,CAAC;IACf,YAAY,EAAE,CAAC;IACf,eAAe,EAAE,CAAC;IAClB,IAAI,EAAE,EAAE;IACR,GAAG,EAAE,EAAE;IACP,gBAAgB,EAAE,EAAE;IACpB,eAAe,EAAE,GAAG;IACpB,aAAa,EAAE,GAAG;CACV,CAAC;AAKJ,MAAM,MAAM,GAAG,CAAC,WAAmB,EAAE,GAAW,EAAE,EAAE;IACzD,OAAO,CAAC,WAAW,GAAG,GAAG,CAAC,KAAK,GAAG,CAAC;AACrC,CAAC,CAAC;AAFW,QAAA,MAAM,UAEjB;AAEK,MAAM,MAAM,GAAG,CAAC,WAAmB,EAAE,GAAW,EAAE,EAAE;IACzD,OAAO,WAAW,GAAG,GAAG,CAAC;AAC3B,CAAC,CAAC;AAFW,QAAA,MAAM,UAEjB;AACK,MAAM,SAAS,GAAG,CAAC,WAAmB,EAAE,GAAW,EAAE,EAAE;IAC5D,OAAO,WAAW,GAAG,CAAC,GAAG,CAAC;AAC5B,CAAC,CAAC;AAFW,QAAA,SAAS,aAEpB"}
package/build/index.d.ts CHANGED
@@ -2,4 +2,5 @@ export { Client, Events } from "./Client";
2
2
  export { AttachmentBuilder } from "./Attachment";
3
3
  export { RPCClient, EmitPayload } from "./RPCClient";
4
4
  export { WebhookBuilder } from "./Webhooks";
5
+ export { RolePermissions } from "./bitwise";
5
6
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAC1C,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAC1C,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC"}
package/build/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.WebhookBuilder = exports.RPCClient = exports.AttachmentBuilder = exports.Events = exports.Client = void 0;
3
+ exports.RolePermissions = exports.WebhookBuilder = exports.RPCClient = exports.AttachmentBuilder = exports.Events = exports.Client = void 0;
4
4
  var Client_1 = require("./Client");
5
5
  Object.defineProperty(exports, "Client", { enumerable: true, get: function () { return Client_1.Client; } });
6
6
  Object.defineProperty(exports, "Events", { enumerable: true, get: function () { return Client_1.Events; } });
@@ -10,4 +10,6 @@ var RPCClient_1 = require("./RPCClient");
10
10
  Object.defineProperty(exports, "RPCClient", { enumerable: true, get: function () { return RPCClient_1.RPCClient; } });
11
11
  var Webhooks_1 = require("./Webhooks");
12
12
  Object.defineProperty(exports, "WebhookBuilder", { enumerable: true, get: function () { return Webhooks_1.WebhookBuilder; } });
13
+ var bitwise_1 = require("./bitwise");
14
+ Object.defineProperty(exports, "RolePermissions", { enumerable: true, get: function () { return bitwise_1.RolePermissions; } });
13
15
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,mCAA0C;AAAjC,gGAAA,MAAM,OAAA;AAAE,gGAAA,MAAM,OAAA;AACvB,2CAAiD;AAAxC,+GAAA,iBAAiB,OAAA;AAC1B,yCAAqD;AAA5C,sGAAA,SAAS,OAAA;AAClB,uCAA4C;AAAnC,0GAAA,cAAc,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,mCAA0C;AAAjC,gGAAA,MAAM,OAAA;AAAE,gGAAA,MAAM,OAAA;AACvB,2CAAiD;AAAxC,+GAAA,iBAAiB,OAAA;AAC1B,yCAAqD;AAA5C,sGAAA,SAAS,OAAA;AAClB,uCAA4C;AAAnC,0GAAA,cAAc,OAAA;AACvB,qCAA4C;AAAnC,0GAAA,eAAe,OAAA"}
@@ -0,0 +1,3 @@
1
+ import { Client } from "../Client";
2
+ export declare function banServerMember(client: Client, serverId: string, userId: string): Promise<any>;
3
+ //# sourceMappingURL=ServerService.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ServerService.d.ts","sourceRoot":"","sources":["../../src/services/ServerService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAInC,wBAAsB,eAAe,CACnC,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,gBAUf"}
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.banServerMember = void 0;
4
+ const MessageService_1 = require("./MessageService");
5
+ const serviceEndpoints_1 = require("./serviceEndpoints");
6
+ async function banServerMember(client, serverId, userId) {
7
+ return await (0, MessageService_1.request)({
8
+ client: client,
9
+ url: serviceEndpoints_1.ServiceEndpoints.serverMemberBan(serverId, userId),
10
+ method: "POST",
11
+ useToken: true,
12
+ }).catch((err) => {
13
+ throw new Error(`Failed to ban server member. ${err.message}`);
14
+ });
15
+ }
16
+ exports.banServerMember = banServerMember;
17
+ //# sourceMappingURL=ServerService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ServerService.js","sourceRoot":"","sources":["../../src/services/ServerService.ts"],"names":[],"mappings":";;;AACA,qDAA2C;AAC3C,yDAAsD;AAE/C,KAAK,UAAU,eAAe,CACnC,MAAc,EACd,QAAgB,EAChB,MAAc;IAEd,OAAO,MAAM,IAAA,wBAAO,EAAM;QACxB,MAAM,EAAE,MAAM;QACd,GAAG,EAAE,mCAAgB,CAAC,eAAe,CAAC,QAAQ,EAAE,MAAM,CAAC;QACvD,MAAM,EAAE,MAAM;QACd,QAAQ,EAAE,IAAI;KACf,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;QACf,MAAM,IAAI,KAAK,CAAC,gCAAgC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;IACjE,CAAC,CAAC,CAAC;AACL,CAAC;AAbD,0CAaC"}
@@ -10,5 +10,6 @@ export declare const ServiceEndpoints: {
10
10
  DeletePost: (postId: string) => string;
11
11
  BotCommands: () => string;
12
12
  ButtonClickCallback: (channelId: string, messageId: string, buttonId: string) => string;
13
+ serverMemberBan: (serverId: string, userId: string) => string;
13
14
  };
14
15
  //# sourceMappingURL=serviceEndpoints.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"serviceEndpoints.d.ts","sourceRoot":"","sources":["../../src/services/serviceEndpoints.ts"],"names":[],"mappings":"AACA,eAAO,IAAI,IAAI,QAAyB,CAAC;AAGzC,eAAO,MAAM,UAAU,YAAa,MAAM,SAGzC,CAAC;AAuBF,eAAO,MAAM,gBAAgB;6BAtBG,MAAM;6BAEN,MAAM;6BAEN,MAAM,aAAa,MAAM;;;uBAM/B,MAAM;yBACJ,MAAM;;qCAKrB,MAAM,aACN,MAAM,YACP,MAAM;CAcjB,CAAC"}
1
+ {"version":3,"file":"serviceEndpoints.d.ts","sourceRoot":"","sources":["../../src/services/serviceEndpoints.ts"],"names":[],"mappings":"AACA,eAAO,IAAI,IAAI,QAAyB,CAAC;AAGzC,eAAO,MAAM,UAAU,YAAa,MAAM,SAGzC,CAAC;AA0BF,eAAO,MAAM,gBAAgB;6BAzBG,MAAM;6BAEN,MAAM;6BAEN,MAAM,aAAa,MAAM;;;uBAM/B,MAAM;yBACJ,MAAM;;qCAKrB,MAAM,aACN,MAAM,YACP,MAAM;gCAIiB,MAAM,UAAU,MAAM;CAcxD,CAAC"}
@@ -19,6 +19,7 @@ const EditPost = (postId) => `${BaseUrl}/posts/${postId}`;
19
19
  const DeletePost = (postId) => `${BaseUrl}/posts/${postId}`;
20
20
  const BotCommands = () => `${BaseUrl}/applications/bot/commands`;
21
21
  const ButtonClickCallback = (channelId, messageId, buttonId) => `${BaseUrl}/channels/${channelId}/messages/${messageId}/buttons/${buttonId}/callback`;
22
+ const serverMemberBan = (serverId, userId) => `${BaseUrl}/servers/${serverId}/bans/${userId}`;
22
23
  exports.ServiceEndpoints = {
23
24
  GetMessages,
24
25
  PostMessage,
@@ -29,5 +30,6 @@ exports.ServiceEndpoints = {
29
30
  DeletePost,
30
31
  BotCommands,
31
32
  ButtonClickCallback,
33
+ serverMemberBan,
32
34
  };
33
35
  //# sourceMappingURL=serviceEndpoints.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"serviceEndpoints.js","sourceRoot":"","sources":["../../src/services/serviceEndpoints.ts"],"names":[],"mappings":";;;AAAA,+CAA+C;AACpC,QAAA,IAAI,GAAG,sBAAsB,CAAC;AACzC,IAAI,OAAO,GAAG,YAAI,GAAG,MAAM,CAAC;AAErB,MAAM,UAAU,GAAG,CAAC,OAAe,EAAE,EAAE;IAC5C,YAAI,GAAG,OAAO,CAAC;IACf,OAAO,GAAG,YAAI,GAAG,MAAM,CAAC;AAC1B,CAAC,CAAC;AAHW,QAAA,UAAU,cAGrB;AACF,MAAM,WAAW,GAAG,CAAC,SAAiB,EAAE,EAAE,CACxC,GAAG,OAAO,aAAa,SAAS,WAAW,CAAC;AAC9C,MAAM,WAAW,GAAG,CAAC,SAAiB,EAAE,EAAE,CACxC,GAAG,OAAO,aAAa,SAAS,WAAW,CAAC;AAC9C,MAAM,WAAW,GAAG,CAAC,SAAiB,EAAE,SAAiB,EAAE,EAAE,CAC3D,GAAG,OAAO,aAAa,SAAS,aAAa,SAAS,EAAE,CAAC;AAE3D,QAAQ;AACR,MAAM,QAAQ,GAAG,GAAG,EAAE,CAAC,GAAG,OAAO,QAAQ,CAAC;AAC1C,MAAM,QAAQ,GAAG,GAAG,EAAE,CAAC,GAAG,OAAO,QAAQ,CAAC;AAC1C,MAAM,QAAQ,GAAG,CAAC,MAAc,EAAE,EAAE,CAAC,GAAG,OAAO,UAAU,MAAM,EAAE,CAAC;AAClE,MAAM,UAAU,GAAG,CAAC,MAAc,EAAE,EAAE,CAAC,GAAG,OAAO,UAAU,MAAM,EAAE,CAAC;AAEpE,MAAM,WAAW,GAAG,GAAG,EAAE,CAAC,GAAG,OAAO,4BAA4B,CAAC;AAEjE,MAAM,mBAAmB,GAAG,CAC1B,SAAiB,EACjB,SAAiB,EACjB,QAAgB,EAChB,EAAE,CACF,GAAG,OAAO,aAAa,SAAS,aAAa,SAAS,YAAY,QAAQ,WAAW,CAAC;AAE3E,QAAA,gBAAgB,GAAG;IAC9B,WAAW;IACX,WAAW;IACX,WAAW;IACX,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,UAAU;IACV,WAAW;IACX,mBAAmB;CACpB,CAAC"}
1
+ {"version":3,"file":"serviceEndpoints.js","sourceRoot":"","sources":["../../src/services/serviceEndpoints.ts"],"names":[],"mappings":";;;AAAA,+CAA+C;AACpC,QAAA,IAAI,GAAG,sBAAsB,CAAC;AACzC,IAAI,OAAO,GAAG,YAAI,GAAG,MAAM,CAAC;AAErB,MAAM,UAAU,GAAG,CAAC,OAAe,EAAE,EAAE;IAC5C,YAAI,GAAG,OAAO,CAAC;IACf,OAAO,GAAG,YAAI,GAAG,MAAM,CAAC;AAC1B,CAAC,CAAC;AAHW,QAAA,UAAU,cAGrB;AACF,MAAM,WAAW,GAAG,CAAC,SAAiB,EAAE,EAAE,CACxC,GAAG,OAAO,aAAa,SAAS,WAAW,CAAC;AAC9C,MAAM,WAAW,GAAG,CAAC,SAAiB,EAAE,EAAE,CACxC,GAAG,OAAO,aAAa,SAAS,WAAW,CAAC;AAC9C,MAAM,WAAW,GAAG,CAAC,SAAiB,EAAE,SAAiB,EAAE,EAAE,CAC3D,GAAG,OAAO,aAAa,SAAS,aAAa,SAAS,EAAE,CAAC;AAE3D,QAAQ;AACR,MAAM,QAAQ,GAAG,GAAG,EAAE,CAAC,GAAG,OAAO,QAAQ,CAAC;AAC1C,MAAM,QAAQ,GAAG,GAAG,EAAE,CAAC,GAAG,OAAO,QAAQ,CAAC;AAC1C,MAAM,QAAQ,GAAG,CAAC,MAAc,EAAE,EAAE,CAAC,GAAG,OAAO,UAAU,MAAM,EAAE,CAAC;AAClE,MAAM,UAAU,GAAG,CAAC,MAAc,EAAE,EAAE,CAAC,GAAG,OAAO,UAAU,MAAM,EAAE,CAAC;AAEpE,MAAM,WAAW,GAAG,GAAG,EAAE,CAAC,GAAG,OAAO,4BAA4B,CAAC;AAEjE,MAAM,mBAAmB,GAAG,CAC1B,SAAiB,EACjB,SAAiB,EACjB,QAAgB,EAChB,EAAE,CACF,GAAG,OAAO,aAAa,SAAS,aAAa,SAAS,YAAY,QAAQ,WAAW,CAAC;AAExF,MAAM,eAAe,GAAG,CAAC,QAAgB,EAAE,MAAc,EAAE,EAAE,CAC3D,GAAG,OAAO,YAAY,QAAQ,SAAS,MAAM,EAAE,CAAC;AAErC,QAAA,gBAAgB,GAAG;IAC9B,WAAW;IACX,WAAW;IACX,WAAW;IACX,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,UAAU;IACV,WAAW;IACX,mBAAmB;IACnB,eAAe;CAChB,CAAC"}
package/package.json CHANGED
@@ -1,38 +1,37 @@
1
- {
2
- "name": "@nerimity/nerimity.js",
3
- "version": "1.12.1",
4
- "description": "",
5
- "main": "build/index.js",
6
- "scripts": {
7
- "build": "tsc",
8
- "prepublishOnly": "tsc",
9
- "dev": "tsc && node tests/test.js"
10
- },
11
- "keywords": [],
12
- "author": "SupertigerDev",
13
- "license": "ISC",
14
- "devDependencies": {
15
- "@types/node-fetch": "^2.6.12",
16
- "@types/ws": "^8.5.12",
17
- "@typescript-eslint/eslint-plugin": "^7.0.1",
18
- "@typescript-eslint/parser": "^7.0.1",
19
- "eslint": "^8.56.0",
20
- "nodemon": "^3.0.3",
21
- "ts-node": "^10.9.2",
22
- "typescript": "^5.3.3"
23
- },
24
- "dependencies": {
25
- "eventemitter3": "^5.0.1",
26
- "node-fetch": "^2.7.0",
27
- "socket.io-client": "^4.7.4",
28
- "ws": "^8.18.0"
29
- },
30
- "repository": {
31
- "type": "git",
32
- "url": "git+https://github.com/Nerimity/nerimity.js.git"
33
- },
34
- "bugs": {
35
- "url": "https://github.com/Nerimity/nerimity.js/issues"
36
- },
37
- "homepage": "https://github.com/Nerimity/nerimity.js#readme"
38
- }
1
+ {
2
+ "name": "@nerimity/nerimity.js",
3
+ "version": "1.14.0",
4
+ "description": "",
5
+ "main": "build/index.js",
6
+ "keywords": [],
7
+ "author": "SupertigerDev",
8
+ "license": "ISC",
9
+ "devDependencies": {
10
+ "@types/node-fetch": "^2.6.12",
11
+ "@types/ws": "^8.5.12",
12
+ "@typescript-eslint/eslint-plugin": "^7.0.1",
13
+ "@typescript-eslint/parser": "^7.0.1",
14
+ "eslint": "^8.56.0",
15
+ "nodemon": "^3.0.3",
16
+ "ts-node": "^10.9.2",
17
+ "typescript": "^5.3.3"
18
+ },
19
+ "dependencies": {
20
+ "eventemitter3": "^5.0.1",
21
+ "node-fetch": "^2.7.0",
22
+ "socket.io-client": "^4.7.4",
23
+ "ws": "^8.18.0"
24
+ },
25
+ "repository": {
26
+ "type": "git",
27
+ "url": "git+https://github.com/Nerimity/nerimity.js.git"
28
+ },
29
+ "bugs": {
30
+ "url": "https://github.com/Nerimity/nerimity.js/issues"
31
+ },
32
+ "homepage": "https://github.com/Nerimity/nerimity.js#readme",
33
+ "scripts": {
34
+ "build": "tsc",
35
+ "dev": "tsc && node tests/test.js"
36
+ }
37
+ }
package/src/Client.ts CHANGED
@@ -18,6 +18,7 @@ import {
18
18
  RawPost,
19
19
  RawServer,
20
20
  RawServerMember,
21
+ RawServerRole,
21
22
  RawUser,
22
23
  } from "./RawData";
23
24
  import {
@@ -34,6 +35,13 @@ import {
34
35
  postPost,
35
36
  } from "./services/PostsService";
36
37
  import { updateCommands as postUpdateCommands } from "./services/ApplicationService";
38
+ import { banServerMember } from "./services/ServerService";
39
+ import {
40
+ addBit,
41
+ AvailablePermissions,
42
+ hasBit,
43
+ RolePermissions,
44
+ } from "./bitwise";
37
45
 
38
46
  export const Events = ClientEvents;
39
47
 
@@ -88,6 +96,10 @@ class EventHandlers {
88
96
  SocketServerEvents.SERVER_MEMBER_JOINED,
89
97
  this.onServerMemberJoined.bind(this)
90
98
  );
99
+ client.socket.on(
100
+ SocketServerEvents.SERVER_MEMBER_UPDATED,
101
+ this.onServerMemberUpdated.bind(this)
102
+ );
91
103
  client.socket.on(
92
104
  SocketServerEvents.SERVER_MEMBER_LEFT,
93
105
  this.onServerMemberLeft.bind(this)
@@ -124,6 +136,22 @@ class EventHandlers {
124
136
  SocketServerEvents.MESSAGE_BUTTON_CLICKED,
125
137
  this.onMessageButtonClicked.bind(this)
126
138
  );
139
+ client.socket.on(
140
+ SocketServerEvents.SERVER_ROLE_CREATED,
141
+ this.onServerRoleCreated.bind(this)
142
+ );
143
+ client.socket.on(
144
+ SocketServerEvents.SERVER_ROLE_DELETED,
145
+ this.onServerRoleDeleted.bind(this)
146
+ );
147
+ client.socket.on(
148
+ SocketServerEvents.SERVER_ROLE_UPDATED,
149
+ this.onServerRoleUpdated.bind(this)
150
+ );
151
+ client.socket.on(
152
+ SocketServerEvents.SERVER_ROLE_ORDER_UPDATED,
153
+ this.onServerRoleOrderUpdated.bind(this)
154
+ );
127
155
  }
128
156
  onConnect() {
129
157
  this.socket.emit(SocketClientEvents.AUTHENTICATE, {
@@ -149,6 +177,12 @@ class EventHandlers {
149
177
  server?.members.setCache(member);
150
178
  }
151
179
 
180
+ for (let i = 0; i < payload.serverRoles.length; i++) {
181
+ const role = payload.serverRoles[i];
182
+ const server = this.client.servers.cache.get(role.serverId);
183
+ server?.roles.setCache(role);
184
+ }
185
+
152
186
  this.client.emit(ClientEvents.Ready);
153
187
  }
154
188
 
@@ -157,14 +191,30 @@ class EventHandlers {
157
191
  this.client.users.setCache(payload.member.user);
158
192
  const member = server?.members.setCache(payload.member);
159
193
  if (!member) return;
160
- this.client.emit("serverMemberJoined", member);
194
+ this.client.emit(ClientEvents.ServerMemberJoined, member);
195
+ }
196
+
197
+ onServerMemberUpdated(payload: {
198
+ serverId: string;
199
+ userId: string;
200
+ updated: {
201
+ roleIds: string[];
202
+ };
203
+ }) {
204
+ const server = this.client.servers.cache.get(payload.serverId);
205
+ const member = server?.members.cache.get(payload.userId);
206
+ if (!member) return;
207
+
208
+ updateClass<ServerMember>(member, payload.updated);
209
+
210
+ this.client.emit(ClientEvents.ServerMemberUpdated, member);
161
211
  }
162
212
 
163
213
  onServerJoined(payload: {
164
214
  server: RawServer;
165
215
  members: RawServerMember[];
166
216
  channels: RawChannel[];
167
- // roles: any[];
217
+ roles: RawServerRole[];
168
218
  // memberPresences: any[]
169
219
  // voiceChannelUsers: any[];
170
220
  }) {
@@ -175,6 +225,10 @@ class EventHandlers {
175
225
  this.client.users.setCache(member.user);
176
226
  server?.members.setCache(member);
177
227
  }
228
+ for (let i = 0; i < payload.roles.length; i++) {
229
+ const role = payload.roles[i];
230
+ server?.roles.setCache(role);
231
+ }
178
232
 
179
233
  for (let i = 0; i < payload.channels.length; i++) {
180
234
  const channel = payload.channels[i];
@@ -234,7 +288,7 @@ class EventHandlers {
234
288
  const server = this.client.servers.cache.get(payload.serverId);
235
289
  const member = server?.members.cache.get(payload.userId);
236
290
  if (!member) return;
237
- this.client.emit("serverMemberLeft", member);
291
+ this.client.emit(ClientEvents.ServerMemberLeft, member);
238
292
  server?.members.cache.delete(payload.userId);
239
293
  }
240
294
  onMessageCreated(payload: { message: RawMessage }) {
@@ -243,7 +297,46 @@ class EventHandlers {
243
297
  }
244
298
  onMessageButtonClicked(payload: MessageButtonClickPayload) {
245
299
  const button = new Button(this.client, payload);
246
- this.client.emit("messageButtonClick", button);
300
+ this.client.emit(ClientEvents.MessageButtonClick, button);
301
+ }
302
+ onServerRoleCreated(payload: RawServerRole) {
303
+ const server = this.client.servers.cache.get(payload.serverId);
304
+ const role = server?.roles.setCache(payload);
305
+ if (!role) return;
306
+ this.client.emit(ClientEvents.ServerRoleCreated, role);
307
+ }
308
+ onServerRoleDeleted(payload: { serverId: string; roleId: string }) {
309
+ const server = this.client.servers.cache.get(payload.serverId);
310
+ const role = server?.roles.cache.get(payload.roleId);
311
+ if (!role) return;
312
+ server?.roles.cache.delete(payload.roleId);
313
+
314
+ this.client.emit(ClientEvents.ServerRoleDeleted, role);
315
+ }
316
+ onServerRoleUpdated(payload: {
317
+ serverId: string;
318
+ roleId: string;
319
+ updated: Partial<RawServerRole>;
320
+ }) {
321
+ const server = this.client.servers.cache.get(payload.serverId);
322
+ const role = server?.roles.cache.get(payload.roleId);
323
+ if (!role) return;
324
+
325
+ updateClass<ServerRole>(role, payload.updated);
326
+
327
+ this.client.emit(ClientEvents.ServerRoleUpdated, role);
328
+ }
329
+ onServerRoleOrderUpdated(payload: { serverId: string; roleIds: string[] }) {
330
+ const server = this.client.servers.cache.get(payload.serverId);
331
+
332
+ for (let i = 0; i < payload.roleIds.length; i++) {
333
+ const roleId = payload.roleIds[i];
334
+ const role = server?.roles.cache.get(roleId);
335
+ if (!role) continue;
336
+ role.order = i + 1;
337
+ }
338
+
339
+ this.client.emit(ClientEvents.ServerRoleOrderUpdated, server?.roles!);
247
340
  }
248
341
  }
249
342
 
@@ -280,8 +373,11 @@ export class Server {
280
373
  id: string;
281
374
  name: string;
282
375
  avatar?: string;
376
+ defaultRoleId: string;
377
+ createdById: string;
283
378
 
284
379
  members: ServerMembers;
380
+ roles: ServerRoles;
285
381
  constructor(client: Client, server: RawServer) {
286
382
  this.client = client;
287
383
 
@@ -289,6 +385,49 @@ export class Server {
289
385
  this.name = server.name;
290
386
  this.avatar = server.avatar;
291
387
  this.members = new ServerMembers(this.client);
388
+ this.roles = new ServerRoles(this.client);
389
+ this.defaultRoleId = server.defaultRoleId;
390
+ this.createdById = server.createdById;
391
+ }
392
+
393
+ async banMember(userId: string) {
394
+ return banServerMember(this.client, this.id, userId);
395
+ }
396
+ }
397
+
398
+ export class ServerRoles {
399
+ client: Client;
400
+ cache: Collection<string, ServerRole>;
401
+ constructor(client: Client) {
402
+ this.client = client;
403
+ this.cache = new Collection();
404
+ }
405
+ setCache(rawServerRole: RawServerRole) {
406
+ const server = new ServerRole(this.client, rawServerRole);
407
+ this.cache.set(server.id, server);
408
+ return server;
409
+ }
410
+ }
411
+
412
+ export class ServerRole {
413
+ client: Client;
414
+ id: string;
415
+ name: string;
416
+ permissions: number;
417
+ hexColor: string;
418
+ server: Server;
419
+ order: number;
420
+ isDefaultRole?: boolean;
421
+ constructor(client: Client, role: RawServerRole) {
422
+ this.client = client;
423
+ this.server = this.client.servers.cache.get(role.serverId)!;
424
+
425
+ this.id = role.id;
426
+ this.name = role.name;
427
+ this.permissions = role.permissions;
428
+ this.hexColor = role.hexColor;
429
+ this.order = role.order;
430
+ this.isDefaultRole = this.server.defaultRoleId === this.id;
292
431
  }
293
432
  }
294
433
 
@@ -310,10 +449,14 @@ export class ServerMember {
310
449
  id: string;
311
450
  user: User;
312
451
  server: Server;
452
+ roleIds: string[];
453
+ nickname?: string | null;
313
454
 
314
455
  constructor(client: Client, member: RawServerMember) {
315
456
  this.client = client;
316
457
  this.id = member.user.id;
458
+ this.roleIds = member.roleIds;
459
+ this.nickname = member.nickname;
317
460
 
318
461
  this.user = this.client.users.cache.get(member.user.id)!;
319
462
  this.server = this.client.servers.cache.get(member.serverId)!;
@@ -321,6 +464,43 @@ export class ServerMember {
321
464
  toString() {
322
465
  return `[@:${this.id}]`;
323
466
  }
467
+ async ban() {
468
+ return banServerMember(this.client, this.server.id, this.user.id);
469
+ }
470
+ get roles() {
471
+ return this.roleIds
472
+ .map((id) => this.server.roles.cache.get(id)!)
473
+ .filter(Boolean);
474
+ }
475
+
476
+ permissions(this: ServerMember) {
477
+ const defaultRoleId = this.server?.defaultRoleId;
478
+ const defaultRole = this.server.roles.cache.get(defaultRoleId!);
479
+
480
+ let currentPermissions = defaultRole?.permissions || 0;
481
+
482
+ const memberRoles = this.roles;
483
+ for (let i = 0; i < memberRoles.length; i++) {
484
+ const role = memberRoles[i];
485
+ currentPermissions = addBit(currentPermissions, role?.permissions || 0);
486
+ }
487
+
488
+ return currentPermissions;
489
+ }
490
+
491
+ hasPermission(
492
+ permission: AvailablePermissions,
493
+ ignoreAdmin = false,
494
+ ignoreCreator = false
495
+ ) {
496
+ if (!ignoreCreator) {
497
+ if (this.server.createdById === this.user.id) return true;
498
+ }
499
+ if (!ignoreAdmin) {
500
+ if (hasBit(this.permissions(), RolePermissions.ADMIN)) return true;
501
+ }
502
+ return hasBit(this.permissions(), permission);
503
+ }
324
504
  }
325
505
 
326
506
  export class Channels {