@metagames/channel-bot-sdk 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 (48) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +75 -0
  3. package/dist/client.d.ts +49 -0
  4. package/dist/client.d.ts.map +1 -0
  5. package/dist/client.js +159 -0
  6. package/dist/commands.d.ts +52 -0
  7. package/dist/commands.d.ts.map +1 -0
  8. package/dist/commands.js +80 -0
  9. package/dist/events.d.ts +9 -0
  10. package/dist/events.d.ts.map +1 -0
  11. package/dist/events.js +27 -0
  12. package/dist/examples/echo-bot.d.ts +2 -0
  13. package/dist/examples/echo-bot.d.ts.map +1 -0
  14. package/dist/examples/echo-bot.js +24 -0
  15. package/dist/examples/moderation-helper-bot.d.ts +2 -0
  16. package/dist/examples/moderation-helper-bot.d.ts.map +1 -0
  17. package/dist/examples/moderation-helper-bot.js +31 -0
  18. package/dist/http.d.ts +12 -0
  19. package/dist/http.d.ts.map +1 -0
  20. package/dist/http.js +28 -0
  21. package/dist/index.d.ts +4 -0
  22. package/dist/index.d.ts.map +1 -0
  23. package/dist/index.js +3 -0
  24. package/dist/src/client.d.ts +49 -0
  25. package/dist/src/client.d.ts.map +1 -0
  26. package/dist/src/client.js +159 -0
  27. package/dist/src/commands.d.ts +52 -0
  28. package/dist/src/commands.d.ts.map +1 -0
  29. package/dist/src/commands.js +80 -0
  30. package/dist/src/events.d.ts +9 -0
  31. package/dist/src/events.d.ts.map +1 -0
  32. package/dist/src/events.js +27 -0
  33. package/dist/src/http.d.ts +12 -0
  34. package/dist/src/http.d.ts.map +1 -0
  35. package/dist/src/http.js +28 -0
  36. package/dist/src/index.d.ts +4 -0
  37. package/dist/src/index.d.ts.map +1 -0
  38. package/dist/src/index.js +3 -0
  39. package/dist/src/types.d.ts +119 -0
  40. package/dist/src/types.d.ts.map +1 -0
  41. package/dist/src/types.js +2 -0
  42. package/dist/types.d.ts +119 -0
  43. package/dist/types.d.ts.map +1 -0
  44. package/dist/types.js +2 -0
  45. package/docs/command-handling.md +44 -0
  46. package/docs/events.md +27 -0
  47. package/docs/quick-start.md +44 -0
  48. package/package.json +46 -0
@@ -0,0 +1,119 @@
1
+ export type ChannelBotEmbedField = {
2
+ name: string;
3
+ value: string;
4
+ inline?: boolean;
5
+ };
6
+ export type ChannelBotEmbed = {
7
+ title?: string;
8
+ description?: string;
9
+ url?: string;
10
+ color?: string;
11
+ footer?: string;
12
+ fields?: ChannelBotEmbedField[];
13
+ };
14
+ export type ChannelBotMessage = {
15
+ id: string;
16
+ content: string;
17
+ embeds?: ChannelBotEmbed[] | null;
18
+ isPinned?: boolean;
19
+ createdAt: string;
20
+ updatedAt: string;
21
+ edited?: boolean;
22
+ reactions?: Array<{
23
+ emoji: string;
24
+ count: number;
25
+ reactedByMe: boolean;
26
+ }>;
27
+ sender: {
28
+ id: string;
29
+ username: string;
30
+ };
31
+ };
32
+ export type GuildBotInteraction = {
33
+ commandName: string;
34
+ rawInput: string;
35
+ arguments: string[];
36
+ user: {
37
+ id: string;
38
+ username: string;
39
+ };
40
+ };
41
+ export type GuildBotSocketEvent = {
42
+ type: "guildBot.ready";
43
+ bot: {
44
+ id: string;
45
+ username: string;
46
+ description: string | null;
47
+ };
48
+ } | {
49
+ type: "guildBot.error";
50
+ message: string;
51
+ requestId?: string;
52
+ } | {
53
+ type: "guildBot.messageCreate";
54
+ guildId: string;
55
+ channelId: string;
56
+ message: ChannelBotMessage;
57
+ } | {
58
+ type: "guildBot.messageUpdate";
59
+ guildId: string;
60
+ channelId: string;
61
+ message: ChannelBotMessage;
62
+ } | {
63
+ type: "guildBot.messageDelete";
64
+ guildId: string;
65
+ channelId: string;
66
+ messageId: string;
67
+ } | {
68
+ type: "guildBot.reactionUpdate";
69
+ guildId: string;
70
+ channelId: string;
71
+ messageId: string;
72
+ reactions: Array<{
73
+ emoji: string;
74
+ count: number;
75
+ reactedByMe: boolean;
76
+ }>;
77
+ } | {
78
+ type: "guildBot.interactionCreate";
79
+ guildId: string;
80
+ channelId: string;
81
+ interaction: GuildBotInteraction;
82
+ };
83
+ export type GuildBotMeResponse = {
84
+ success: boolean;
85
+ bot: {
86
+ id: string;
87
+ username: string;
88
+ description: string | null;
89
+ logoId: string | null;
90
+ creatorId: string;
91
+ creatorType: string;
92
+ };
93
+ installations: Array<{
94
+ guildId: string;
95
+ guildName: string;
96
+ }>;
97
+ commands: Array<{
98
+ id: string;
99
+ name: string;
100
+ description: string;
101
+ options?: unknown;
102
+ }>;
103
+ };
104
+ export type ChannelBotClientOptions = {
105
+ token: string;
106
+ apiBaseUrl: string;
107
+ websocketUrl?: string;
108
+ fetchImpl?: typeof fetch;
109
+ WebSocketImpl?: typeof WebSocket;
110
+ autoReconnect?: boolean;
111
+ reconnectDelayMs?: number;
112
+ };
113
+ export type ChannelBotMessageInput = {
114
+ guildId: string;
115
+ channelId: string;
116
+ content?: string;
117
+ embeds?: ChannelBotEmbed[];
118
+ };
119
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ // (c) 2026 Meta Games LLC. All rights reserved.
2
+ export {};
@@ -0,0 +1,119 @@
1
+ export type ChannelBotEmbedField = {
2
+ name: string;
3
+ value: string;
4
+ inline?: boolean;
5
+ };
6
+ export type ChannelBotEmbed = {
7
+ title?: string;
8
+ description?: string;
9
+ url?: string;
10
+ color?: string;
11
+ footer?: string;
12
+ fields?: ChannelBotEmbedField[];
13
+ };
14
+ export type ChannelBotMessage = {
15
+ id: string;
16
+ content: string;
17
+ embeds?: ChannelBotEmbed[] | null;
18
+ isPinned?: boolean;
19
+ createdAt: string;
20
+ updatedAt: string;
21
+ edited?: boolean;
22
+ reactions?: Array<{
23
+ emoji: string;
24
+ count: number;
25
+ reactedByMe: boolean;
26
+ }>;
27
+ sender: {
28
+ id: string;
29
+ username: string;
30
+ };
31
+ };
32
+ export type GuildBotInteraction = {
33
+ commandName: string;
34
+ rawInput: string;
35
+ arguments: string[];
36
+ user: {
37
+ id: string;
38
+ username: string;
39
+ };
40
+ };
41
+ export type GuildBotSocketEvent = {
42
+ type: "guildBot.ready";
43
+ bot: {
44
+ id: string;
45
+ username: string;
46
+ description: string | null;
47
+ };
48
+ } | {
49
+ type: "guildBot.error";
50
+ message: string;
51
+ requestId?: string;
52
+ } | {
53
+ type: "guildBot.messageCreate";
54
+ guildId: string;
55
+ channelId: string;
56
+ message: ChannelBotMessage;
57
+ } | {
58
+ type: "guildBot.messageUpdate";
59
+ guildId: string;
60
+ channelId: string;
61
+ message: ChannelBotMessage;
62
+ } | {
63
+ type: "guildBot.messageDelete";
64
+ guildId: string;
65
+ channelId: string;
66
+ messageId: string;
67
+ } | {
68
+ type: "guildBot.reactionUpdate";
69
+ guildId: string;
70
+ channelId: string;
71
+ messageId: string;
72
+ reactions: Array<{
73
+ emoji: string;
74
+ count: number;
75
+ reactedByMe: boolean;
76
+ }>;
77
+ } | {
78
+ type: "guildBot.interactionCreate";
79
+ guildId: string;
80
+ channelId: string;
81
+ interaction: GuildBotInteraction;
82
+ };
83
+ export type GuildBotMeResponse = {
84
+ success: boolean;
85
+ bot: {
86
+ id: string;
87
+ username: string;
88
+ description: string | null;
89
+ logoId: string | null;
90
+ creatorId: string;
91
+ creatorType: string;
92
+ };
93
+ installations: Array<{
94
+ guildId: string;
95
+ guildName: string;
96
+ }>;
97
+ commands: Array<{
98
+ id: string;
99
+ name: string;
100
+ description: string;
101
+ options?: unknown;
102
+ }>;
103
+ };
104
+ export type ChannelBotClientOptions = {
105
+ token: string;
106
+ apiBaseUrl: string;
107
+ websocketUrl?: string;
108
+ fetchImpl?: typeof fetch;
109
+ WebSocketImpl?: typeof WebSocket;
110
+ autoReconnect?: boolean;
111
+ reconnectDelayMs?: number;
112
+ };
113
+ export type ChannelBotMessageInput = {
114
+ guildId: string;
115
+ channelId: string;
116
+ content?: string;
117
+ embeds?: ChannelBotEmbed[];
118
+ };
119
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js ADDED
@@ -0,0 +1,2 @@
1
+ // (c) 2026 Meta Games LLC. All rights reserved.
2
+ export {};
@@ -0,0 +1,44 @@
1
+ # Command Handling
2
+
3
+ Use `CommandRouter` for slash-command-like interaction dispatch.
4
+
5
+ ## Register commands
6
+
7
+ ```ts
8
+ import { CommandRouter } from "@metagames/channel-bot-sdk";
9
+
10
+ const router = new CommandRouter()
11
+ .command("ping", async (ctx) => {
12
+ await ctx.replyMention("pong");
13
+ })
14
+ .command("help", async (ctx) => {
15
+ await ctx.replyEmbed({
16
+ title: "Commands",
17
+ description: "Available commands for this bot",
18
+ fields: [
19
+ { name: "ping", value: "Health check" },
20
+ { name: "help", value: "Show this help" },
21
+ ],
22
+ });
23
+ });
24
+ ```
25
+
26
+ ## Attach router
27
+
28
+ ```ts
29
+ client.useCommandRouter(router);
30
+ await client.connect();
31
+ ```
32
+
33
+ ## Context
34
+
35
+ Each handler receives a `CommandContext` with:
36
+
37
+ - `ctx.guildId`
38
+ - `ctx.channelId`
39
+ - `ctx.commandName`
40
+ - `ctx.args`
41
+ - `ctx.user`
42
+ - `ctx.reply(...)`
43
+ - `ctx.replyMention(...)`
44
+ - `ctx.replyEmbed(...)`
package/docs/events.md ADDED
@@ -0,0 +1,27 @@
1
+ # Events
2
+
3
+ All events are available through `client.on(eventName, listener)`.
4
+
5
+ ## Gateway events
6
+
7
+ - `guildBot.ready`
8
+ - `guildBot.error`
9
+ - `guildBot.messageCreate`
10
+ - `guildBot.messageUpdate`
11
+ - `guildBot.messageDelete`
12
+ - `guildBot.reactionUpdate`
13
+ - `guildBot.interactionCreate`
14
+
15
+ ## Utility events
16
+
17
+ - `raw` (all parsed gateway payloads)
18
+ - `disconnected`
19
+ - `guildBot.commandError` (when command router handler throws)
20
+
21
+ ## Example
22
+
23
+ ```ts
24
+ client.on("guildBot.interactionCreate", async (event) => {
25
+ console.log(event.interaction.commandName);
26
+ });
27
+ ```
@@ -0,0 +1,44 @@
1
+ # Quick Start
2
+
3
+ ## 1. Create a bot in Brickverse
4
+
5
+ Create a guild bot in the Brickverse dashboard and copy its token.
6
+
7
+ ## 2. Initialize the client
8
+
9
+ ```ts
10
+ import { ChannelBotClient } from "@metagames/channel-bot-sdk";
11
+
12
+ const client = new ChannelBotClient({
13
+ token: process.env.BOT_TOKEN!,
14
+ apiBaseUrl: "https://api.brickverse.gg",
15
+ });
16
+ ```
17
+
18
+ ## 3. Listen to events
19
+
20
+ ```ts
21
+ client.on("guildBot.ready", (event) => {
22
+ console.log("ready", event.bot.id);
23
+ });
24
+
25
+ client.on("guildBot.messageCreate", (event) => {
26
+ console.log(event.message.content);
27
+ });
28
+ ```
29
+
30
+ ## 4. Connect
31
+
32
+ ```ts
33
+ await client.connect();
34
+ ```
35
+
36
+ ## 5. Send messages manually
37
+
38
+ ```ts
39
+ await client.sendMessage({
40
+ guildId: "123",
41
+ channelId: "456",
42
+ content: "Hello from SDK",
43
+ });
44
+ ```
package/package.json ADDED
@@ -0,0 +1,46 @@
1
+ {
2
+ "name": "@metagames/channel-bot-sdk",
3
+ "version": "1.0.0",
4
+ "description": "Brickverse guild channel bot SDK",
5
+ "type": "module",
6
+ "main": "./dist/index.js",
7
+ "types": "./dist/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "import": "./dist/index.js",
11
+ "types": "./dist/index.d.ts"
12
+ }
13
+ },
14
+ "sideEffects": false,
15
+ "engines": {
16
+ "node": ">=18.0.0"
17
+ },
18
+ "repository": {
19
+ "type": "git",
20
+ "url": "git+https://github.com/BrickVerse-co/channel-bot-sdk.git"
21
+ },
22
+ "files": [
23
+ "dist",
24
+ "README.md",
25
+ "docs"
26
+ ],
27
+ "scripts": {
28
+ "build": "tsc -p tsconfig.json",
29
+ "type-check": "tsc -p tsconfig.json --noEmit"
30
+ },
31
+ "keywords": [
32
+ "brickverse",
33
+ "bot",
34
+ "guild",
35
+ "sdk"
36
+ ],
37
+ "license": "Apache-2.0",
38
+ "author": "Meta Games LLC",
39
+ "devDependencies": {
40
+ "typescript": "^5.9.3"
41
+ },
42
+ "bugs": {
43
+ "url": "https://github.com/BrickVerse-co/channel-bot-sdk/issues"
44
+ },
45
+ "homepage": "https://github.com/BrickVerse-co/channel-bot-sdk#readme"
46
+ }