sugar-djs 0.2.1
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/Readme.ja.md +113 -0
- package/Readme.md +32 -0
- package/dist/collection.d.ts +47 -0
- package/dist/collection.js +177 -0
- package/dist/collection.js.map +1 -0
- package/dist/custom-id.d.ts +18 -0
- package/dist/custom-id.js +61 -0
- package/dist/custom-id.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.js +21 -0
- package/dist/index.js.map +1 -0
- package/dist/types.d.ts +38 -0
- package/dist/types.js +3 -0
- package/dist/types.js.map +1 -0
- package/dist/wrapper.d.ts +149 -0
- package/dist/wrapper.js +155 -0
- package/dist/wrapper.js.map +1 -0
- package/package.json +23 -0
package/Readme.ja.md
ADDED
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
# Sugar-DJS (discordjs-builder-wrapper)
|
|
2
|
+
|
|
3
|
+
discord.jsをTypeScriptでもっと楽しく書くためのライブラリ!
|
|
4
|
+
|
|
5
|
+
## 対応バージョン
|
|
6
|
+
|
|
7
|
+
```
|
|
8
|
+
discord.js: "^14.23.2"
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## 使い方の例
|
|
12
|
+
|
|
13
|
+
`SlashCommand`のサンプル
|
|
14
|
+
|
|
15
|
+
```typescript
|
|
16
|
+
import { wrapper } from 'sugar-djs';
|
|
17
|
+
import { SlashCommandBuilder } from 'discord.js';
|
|
18
|
+
import { isCachedInteraction } from './middlewares.ts';
|
|
19
|
+
|
|
20
|
+
export default wrapper
|
|
21
|
+
.setCommand(
|
|
22
|
+
// discord.jsのBuilderをそのまま使用
|
|
23
|
+
new SlashCommandBuilder()
|
|
24
|
+
.setName('ping')
|
|
25
|
+
.setDescription('Send "Pong!"')
|
|
26
|
+
)
|
|
27
|
+
.addMiddleware(isCachedInteraction) // キャッシュされたインタラクションのみ許可
|
|
28
|
+
.setProcess(({ interaction }) => {
|
|
29
|
+
// interaction: ChatInputCommandInteraction<"cached">;
|
|
30
|
+
interaction.reply('Ping!');
|
|
31
|
+
});
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
## 特徴
|
|
35
|
+
|
|
36
|
+
`Sugar-DJS`を使うと、一部の型指定を省略したり、共通の処理を簡単に挿入できたりすることで、スピーディーにボットを制作することができます。
|
|
37
|
+
|
|
38
|
+
### 適切なInteraction型を推論
|
|
39
|
+
|
|
40
|
+
`Sugar-DJS`は、渡された`Builder`から適切な`Interaction`を選択して、`setProcess`メソッドの引数の型に指定します。
|
|
41
|
+
|
|
42
|
+
### ミドルウェア概念の導入
|
|
43
|
+
|
|
44
|
+
コマンドやコンポーネントの処理の前に、ミドルウェアを追加することができます。ミドルウェアは、`Interaction`を含むペイロードを使って処理を行い、元のペイロードと追加のデータを返すことができます。また、ペイロードに含まれる形を絞る事もできます。
|
|
45
|
+
|
|
46
|
+
#### Interactionが'cached'であることを確認する例
|
|
47
|
+
```typescript
|
|
48
|
+
import { AnyInteraction, MiddlewarePayload } from 'sugar-djs';
|
|
49
|
+
|
|
50
|
+
export const isCachedInteraction = <T extends AnyInteraction, U>({
|
|
51
|
+
interaction,
|
|
52
|
+
...payload
|
|
53
|
+
}: MiddlewarePayload<T, U>) => {
|
|
54
|
+
if (!interaction.inCachedGuild()) {
|
|
55
|
+
interaction.reply("サーバー内で実行してください");
|
|
56
|
+
return; // voidを返した場合、次の処理は実行されません。
|
|
57
|
+
}
|
|
58
|
+
return { interaction, ...payload };
|
|
59
|
+
};
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
## 導入方法
|
|
63
|
+
|
|
64
|
+
### 1. sugardjs.tsの作成
|
|
65
|
+
|
|
66
|
+
コマンドやコンポーネントが格納されているディレクトリを指定して、`WrapperCollection`に渡します。
|
|
67
|
+
|
|
68
|
+
```typescript
|
|
69
|
+
// sugardjs.ts
|
|
70
|
+
import path from 'path';
|
|
71
|
+
import { WrapperCollection } from 'sugar-djs';
|
|
72
|
+
|
|
73
|
+
const commandsPath = path.join(__dirname, './commands');
|
|
74
|
+
const componentsPath = path.join(__dirname, './components');
|
|
75
|
+
|
|
76
|
+
export default new WrapperCollection({
|
|
77
|
+
paths: [commandsPath, componentsPath],
|
|
78
|
+
});
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
### 2.discord.jsに接続
|
|
82
|
+
|
|
83
|
+
手順1で作成した`WrapperCollection`の`interactionCreateHandler`をdiscord.jsの`InteractionCreate`イベントにイベントハンドラーとして渡します。
|
|
84
|
+
|
|
85
|
+
```typescript
|
|
86
|
+
// index.ts
|
|
87
|
+
import wrappers from "./sugardjs";
|
|
88
|
+
...
|
|
89
|
+
client.on('interactionCreate', wrappers.interactionCreateHandler);
|
|
90
|
+
...
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
### 3.register.tsの作成
|
|
94
|
+
|
|
95
|
+
手順1で作成した`WrapperCollection`の`toJSON`メソッドを活用すると、簡単にコマンドやコンポーネントを登録する処理が書けます。
|
|
96
|
+
|
|
97
|
+
```typescript
|
|
98
|
+
// register.ts
|
|
99
|
+
import { REST, Routes } from 'discord.js';
|
|
100
|
+
import wrappers from './sugardjs';
|
|
101
|
+
|
|
102
|
+
const TOKEN = process.env.DISCORD_TOKEN;
|
|
103
|
+
const CLIENT_ID = process.env.DISCORD_CLIENT_ID;
|
|
104
|
+
|
|
105
|
+
const rest = new REST({ version: '10' }).setToken(TOKEN);
|
|
106
|
+
const commands = wrappers.toJSON(); // Discord API に渡せるJSONのリストを返します。
|
|
107
|
+
await rest.put(Routes.applicationCommands(CLIENT_ID), {
|
|
108
|
+
body: commands,
|
|
109
|
+
});
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
## ライセンス
|
|
113
|
+
MIT License (see `LICENSE` file).
|
package/Readme.md
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# Sugar-DJS (discordjs-builder-wrapper)
|
|
2
|
+
|
|
3
|
+
Library for writing discord.js in TypeScript for more fun!
|
|
4
|
+
|
|
5
|
+
## Supported Versions
|
|
6
|
+
|
|
7
|
+
```
|
|
8
|
+
discord.js: "^14.23.2"
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
# Usege
|
|
12
|
+
|
|
13
|
+
SlashCommand Example
|
|
14
|
+
|
|
15
|
+
```typescript
|
|
16
|
+
import { wrapper } from 'sugar-djs';
|
|
17
|
+
import { SlashCommandBuilder } from 'discord.js';
|
|
18
|
+
|
|
19
|
+
export default wrapper
|
|
20
|
+
.setCommand(
|
|
21
|
+
new SlashCommandBuilder()
|
|
22
|
+
.setName('ping')
|
|
23
|
+
.setDescription('Send "Pong!"')
|
|
24
|
+
)
|
|
25
|
+
.setProcess(({ interaction }) => {
|
|
26
|
+
interaction.reply('Ping!');
|
|
27
|
+
});
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
# What is useful?
|
|
31
|
+
|
|
32
|
+
This library frees developers from the hassle of type specification.
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { Collection, Interaction } from 'discord.js';
|
|
2
|
+
import { AnyCommandData, AnyComponentData } from './wrapper';
|
|
3
|
+
export interface WrapperCollectionOptions {
|
|
4
|
+
paths: string[];
|
|
5
|
+
}
|
|
6
|
+
export interface WrapperCollectionCollections {
|
|
7
|
+
slashCommands: Collection<string, AnyCommandData>;
|
|
8
|
+
userCtxCommands: Collection<string, AnyCommandData>;
|
|
9
|
+
messageCtxCommands: Collection<string, AnyCommandData>;
|
|
10
|
+
components: Collection<string, AnyComponentData>;
|
|
11
|
+
}
|
|
12
|
+
export declare class WrapperCollection {
|
|
13
|
+
private options;
|
|
14
|
+
readonly collections: WrapperCollectionCollections;
|
|
15
|
+
constructor(options: WrapperCollectionOptions);
|
|
16
|
+
/**
|
|
17
|
+
* Return json list for registering commands to Discord.
|
|
18
|
+
*/
|
|
19
|
+
toJSON: () => string[];
|
|
20
|
+
interactionCreateHandler: (interaction: Interaction) => Promise<void>;
|
|
21
|
+
/**
|
|
22
|
+
* Execute a component process.
|
|
23
|
+
* @param interaction AnyComponentInteraction
|
|
24
|
+
* @param collection AnyCollection
|
|
25
|
+
*/
|
|
26
|
+
private executeComponent;
|
|
27
|
+
/**
|
|
28
|
+
* Execute a command process.
|
|
29
|
+
* @param interaction AnyComponentInteraction
|
|
30
|
+
* @param collection AnyCollection
|
|
31
|
+
*/
|
|
32
|
+
private executeCommand;
|
|
33
|
+
/**
|
|
34
|
+
* Execute an autocomplete process.
|
|
35
|
+
* @param interaction
|
|
36
|
+
* @param collection
|
|
37
|
+
*
|
|
38
|
+
*/
|
|
39
|
+
private executeAutocomplete;
|
|
40
|
+
/**
|
|
41
|
+
* Execute middlewares and command.
|
|
42
|
+
* @param payload MiddlewarePayload
|
|
43
|
+
* @param command AnyCommand and AnyComponent execute function
|
|
44
|
+
* @param middlewares Array of Middleware
|
|
45
|
+
*/
|
|
46
|
+
private execute;
|
|
47
|
+
}
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.WrapperCollection = void 0;
|
|
7
|
+
const discord_js_1 = require("discord.js");
|
|
8
|
+
const fs_1 = __importDefault(require("fs"));
|
|
9
|
+
const path_1 = __importDefault(require("path"));
|
|
10
|
+
const custom_id_1 = require("./custom-id");
|
|
11
|
+
class WrapperCollection {
|
|
12
|
+
constructor(options) {
|
|
13
|
+
this.options = options;
|
|
14
|
+
/**
|
|
15
|
+
* Return json list for registering commands to Discord.
|
|
16
|
+
*/
|
|
17
|
+
this.toJSON = () => {
|
|
18
|
+
let commands = this.collections.slashCommands;
|
|
19
|
+
commands = commands.concat(this.collections.userCtxCommands);
|
|
20
|
+
commands = commands.concat(this.collections.messageCtxCommands);
|
|
21
|
+
return commands.map((c) => c.data.toJSON());
|
|
22
|
+
};
|
|
23
|
+
this.interactionCreateHandler = async (interaction) => {
|
|
24
|
+
if (interaction.isCommand()) {
|
|
25
|
+
await this.executeCommand(interaction);
|
|
26
|
+
}
|
|
27
|
+
else if (interaction.isAutocomplete()) {
|
|
28
|
+
await this.executeAutocomplete(interaction);
|
|
29
|
+
}
|
|
30
|
+
else if (interaction.isButton() || interaction.isModalSubmit() || interaction.isAnySelectMenu()) {
|
|
31
|
+
await this.executeComponent(interaction);
|
|
32
|
+
}
|
|
33
|
+
};
|
|
34
|
+
this.collections = {
|
|
35
|
+
slashCommands: new discord_js_1.Collection(),
|
|
36
|
+
userCtxCommands: new discord_js_1.Collection(),
|
|
37
|
+
messageCtxCommands: new discord_js_1.Collection(),
|
|
38
|
+
components: new discord_js_1.Collection(),
|
|
39
|
+
};
|
|
40
|
+
// ファイル探索
|
|
41
|
+
let pathList = this.options.paths;
|
|
42
|
+
while (pathList.length) {
|
|
43
|
+
const currentDir = pathList.shift();
|
|
44
|
+
if (!currentDir)
|
|
45
|
+
continue;
|
|
46
|
+
const dirents = fs_1.default.readdirSync(currentDir, { withFileTypes: true });
|
|
47
|
+
dirents.forEach((dirent) => {
|
|
48
|
+
const filePath = path_1.default.join(currentDir, dirent.name);
|
|
49
|
+
if (dirent.isDirectory()) {
|
|
50
|
+
pathList.push(filePath); // ディレクトリの場合は探索キューに追加
|
|
51
|
+
}
|
|
52
|
+
else if (dirent.name.endsWith('.js') || dirent.name.endsWith('.ts')) {
|
|
53
|
+
let fileData = require(filePath);
|
|
54
|
+
if (!fileData)
|
|
55
|
+
return;
|
|
56
|
+
if (typeof fileData === 'object' && 'default' in fileData) {
|
|
57
|
+
fileData = fileData.default;
|
|
58
|
+
}
|
|
59
|
+
const item = fileData;
|
|
60
|
+
if (!('execute' in item))
|
|
61
|
+
return;
|
|
62
|
+
if ('data' in item) {
|
|
63
|
+
// Any Command
|
|
64
|
+
if ('type' in item.data) {
|
|
65
|
+
// AnyContextMenuCommand
|
|
66
|
+
if (item.data.type == discord_js_1.ApplicationCommandType.User) {
|
|
67
|
+
// UserContextMenuCommand
|
|
68
|
+
this.collections.userCtxCommands.set(item.data.name, item);
|
|
69
|
+
}
|
|
70
|
+
else if (item.data.type == discord_js_1.ApplicationCommandType.Message) {
|
|
71
|
+
// MessageContextMenuCommand
|
|
72
|
+
this.collections.messageCtxCommands.set(item.data.name, item);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
else {
|
|
76
|
+
// SlashCommand
|
|
77
|
+
this.collections.slashCommands.set(item.data.name, item);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
else if ('customId' in item) {
|
|
81
|
+
// Any Component
|
|
82
|
+
this.collections.components.set(item.customId, item);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Execute a component process.
|
|
90
|
+
* @param interaction AnyComponentInteraction
|
|
91
|
+
* @param collection AnyCollection
|
|
92
|
+
*/
|
|
93
|
+
async executeComponent(interaction) {
|
|
94
|
+
const [customId, args] = (0, custom_id_1.parseCustomId)(interaction.customId);
|
|
95
|
+
const component = this.collections.components.get(customId);
|
|
96
|
+
if (!component) {
|
|
97
|
+
console.log(`Component "${interaction.customId}" not found.`);
|
|
98
|
+
}
|
|
99
|
+
else {
|
|
100
|
+
try {
|
|
101
|
+
this.execute({ interaction, args }, component.execute, component.middlewares);
|
|
102
|
+
}
|
|
103
|
+
catch (error) {
|
|
104
|
+
console.log(`Error on component "${interaction.customId}"`);
|
|
105
|
+
console.error(error);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Execute a command process.
|
|
111
|
+
* @param interaction AnyComponentInteraction
|
|
112
|
+
* @param collection AnyCollection
|
|
113
|
+
*/
|
|
114
|
+
async executeCommand(interaction) {
|
|
115
|
+
let command;
|
|
116
|
+
let commandType = 'Unknown';
|
|
117
|
+
if (interaction.isChatInputCommand()) {
|
|
118
|
+
commandType = 'SlashCommand';
|
|
119
|
+
command = this.collections.slashCommands.get(interaction.commandName);
|
|
120
|
+
}
|
|
121
|
+
else if (interaction.isUserContextMenuCommand()) {
|
|
122
|
+
commandType = 'UserContextMenuCommand';
|
|
123
|
+
command = this.collections.userCtxCommands.get(interaction.commandName);
|
|
124
|
+
}
|
|
125
|
+
else if (interaction.isMessageContextMenuCommand()) {
|
|
126
|
+
commandType = 'MessageContextMenuCommand';
|
|
127
|
+
command = this.collections.messageCtxCommands.get(interaction.commandName);
|
|
128
|
+
}
|
|
129
|
+
if (!command) {
|
|
130
|
+
console.log(`${commandType} "${interaction.commandName}" not found.`);
|
|
131
|
+
}
|
|
132
|
+
else {
|
|
133
|
+
try {
|
|
134
|
+
this.execute({ interaction }, command.execute, command.middlewares);
|
|
135
|
+
}
|
|
136
|
+
catch (error) {
|
|
137
|
+
console.log(`Error on ${commandType} "${interaction.commandName}"`);
|
|
138
|
+
console.error(error);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Execute an autocomplete process.
|
|
144
|
+
* @param interaction
|
|
145
|
+
* @param collection
|
|
146
|
+
*
|
|
147
|
+
*/
|
|
148
|
+
async executeAutocomplete(interaction) {
|
|
149
|
+
const command = this.collections.slashCommands.get(interaction.commandName);
|
|
150
|
+
if (!command) {
|
|
151
|
+
console.log(`Command "${interaction.commandName}" not found.`);
|
|
152
|
+
}
|
|
153
|
+
else if (command.autocomplete) {
|
|
154
|
+
await command.autocomplete(interaction);
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Execute middlewares and command.
|
|
159
|
+
* @param payload MiddlewarePayload
|
|
160
|
+
* @param command AnyCommand and AnyComponent execute function
|
|
161
|
+
* @param middlewares Array of Middleware
|
|
162
|
+
*/
|
|
163
|
+
async execute(payload, command, middlewares) {
|
|
164
|
+
const middleware = middlewares.shift();
|
|
165
|
+
if (middleware) {
|
|
166
|
+
const mwResult = await middleware(payload);
|
|
167
|
+
if (mwResult) {
|
|
168
|
+
return await this.execute(mwResult, command, middlewares);
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
else {
|
|
172
|
+
return command(payload);
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
exports.WrapperCollection = WrapperCollection;
|
|
177
|
+
//# sourceMappingURL=collection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"collection.js","sourceRoot":"","sources":["../src/collection.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* カスタムID用エンコード関数
|
|
3
|
+
* @param id 文字列
|
|
4
|
+
* @returns エンコード済みカスタムID
|
|
5
|
+
*/
|
|
6
|
+
export declare function encodeId(id?: string): string;
|
|
7
|
+
/**
|
|
8
|
+
* カスタムID用デコード関数
|
|
9
|
+
* @param id 文字列
|
|
10
|
+
* @returns デコード済み文字列
|
|
11
|
+
*/
|
|
12
|
+
export declare function decodeId(id?: string): string;
|
|
13
|
+
/**
|
|
14
|
+
* カスタムIDを解析
|
|
15
|
+
* @param id カスタムID
|
|
16
|
+
* @returns カスタムIDと引数のタプル
|
|
17
|
+
*/
|
|
18
|
+
export declare function parseCustomId(id: string): [string, string[]];
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.encodeId = encodeId;
|
|
4
|
+
exports.decodeId = decodeId;
|
|
5
|
+
exports.parseCustomId = parseCustomId;
|
|
6
|
+
//カスタムIDのエンコード用
|
|
7
|
+
const encodeList = [
|
|
8
|
+
{
|
|
9
|
+
reg_d: /\$d;/g,
|
|
10
|
+
reg_e: '$$d;',
|
|
11
|
+
string: '$',
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
reg_d: /\$a;/g,
|
|
15
|
+
reg_e: '$$a;',
|
|
16
|
+
string: '&',
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
reg_d: /\$q;/g,
|
|
20
|
+
reg_e: '$$q;',
|
|
21
|
+
string: '?',
|
|
22
|
+
},
|
|
23
|
+
];
|
|
24
|
+
/**
|
|
25
|
+
* カスタムID用エンコード関数
|
|
26
|
+
* @param id 文字列
|
|
27
|
+
* @returns エンコード済みカスタムID
|
|
28
|
+
*/
|
|
29
|
+
function encodeId(id) {
|
|
30
|
+
if (!id)
|
|
31
|
+
return '';
|
|
32
|
+
return encodeList.reduce((id, data) => {
|
|
33
|
+
return id.replaceAll(data.string, data.reg_e);
|
|
34
|
+
}, id);
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* カスタムID用デコード関数
|
|
38
|
+
* @param id 文字列
|
|
39
|
+
* @returns デコード済み文字列
|
|
40
|
+
*/
|
|
41
|
+
function decodeId(id) {
|
|
42
|
+
if (!id)
|
|
43
|
+
return '';
|
|
44
|
+
return encodeList.reduce((id, data) => {
|
|
45
|
+
return id.replaceAll(data.reg_d, data.string);
|
|
46
|
+
}, id);
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* カスタムIDを解析
|
|
50
|
+
* @param id カスタムID
|
|
51
|
+
* @returns カスタムIDと引数のタプル
|
|
52
|
+
*/
|
|
53
|
+
function parseCustomId(id) {
|
|
54
|
+
const idWithArgs = id.split('?');
|
|
55
|
+
const customId = decodeId(idWithArgs.shift());
|
|
56
|
+
if (!idWithArgs.length)
|
|
57
|
+
return [customId, []];
|
|
58
|
+
const args = idWithArgs[0].split('&').map((arg) => decodeId(arg));
|
|
59
|
+
return [customId, args];
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=custom-id.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"custom-id.js","sourceRoot":"","sources":["../src/custom-id.ts"],"names":[],"mappings":";;AAwBA,4BAKC;AAOD,4BAKC;AAOD,sCAMC;AAtDD,eAAe;AACf,MAAM,UAAU,GAAG;IAClB;QACC,KAAK,EAAE,OAAO;QACd,KAAK,EAAE,MAAM;QACb,MAAM,EAAE,GAAG;KACX;IACD;QACC,KAAK,EAAE,OAAO;QACd,KAAK,EAAE,MAAM;QACb,MAAM,EAAE,GAAG;KACX;IACD;QACC,KAAK,EAAE,OAAO;QACd,KAAK,EAAE,MAAM;QACb,MAAM,EAAE,GAAG;KACX;CACD,CAAC;AAEF;;;;GAIG;AACH,SAAgB,QAAQ,CAAC,EAAW;IACnC,IAAI,CAAC,EAAE;QAAE,OAAO,EAAE,CAAC;IACnB,OAAO,UAAU,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE;QACrC,OAAO,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IAC/C,CAAC,EAAE,EAAE,CAAC,CAAC;AACR,CAAC;AAED;;;;GAIG;AACH,SAAgB,QAAQ,CAAC,EAAW;IACnC,IAAI,CAAC,EAAE;QAAE,OAAO,EAAE,CAAC;IACnB,OAAO,UAAU,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE;QACrC,OAAO,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IAC/C,CAAC,EAAE,EAAE,CAAC,CAAC;AACR,CAAC;AAED;;;;GAIG;AACH,SAAgB,aAAa,CAAC,EAAU;IACvC,MAAM,UAAU,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACjC,MAAM,QAAQ,GAAG,QAAQ,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC,CAAC;IAC9C,IAAI,CAAC,UAAU,CAAC,MAAM;QAAE,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;IAC9C,MAAM,IAAI,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;IAClE,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;AACzB,CAAC"}
|
package/dist/index.d.ts
ADDED
package/dist/index.js
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
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 __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
exports.WrapperCollection = void 0;
|
|
18
|
+
__exportStar(require("./wrapper"), exports);
|
|
19
|
+
var collection_1 = require("./collection");
|
|
20
|
+
Object.defineProperty(exports, "WrapperCollection", { enumerable: true, get: function () { return collection_1.WrapperCollection; } });
|
|
21
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,4CAA0B;AAE1B,2CAAiD;AAAxC,+GAAA,iBAAiB,OAAA"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { ButtonBuilder, ModalBuilder, StringSelectMenuBuilder, UserSelectMenuBuilder, RoleSelectMenuBuilder, MentionableSelectMenuBuilder, ChannelSelectMenuBuilder, CacheType, ButtonInteraction, ModalSubmitInteraction, StringSelectMenuInteraction, UserSelectMenuInteraction, RoleSelectMenuInteraction, MentionableSelectMenuInteraction, ChannelSelectMenuInteraction, PrimaryEntryPointCommandInteraction, SlashCommandBuilder as SCB, ChatInputCommandInteraction, ContextMenuCommandBuilder, ContextMenuCommandInteraction, SlashCommandSubcommandsOnlyBuilder, ApplicationCommandType, UserContextMenuCommandInteraction, MessageContextMenuCommandInteraction, SlashCommandOptionsOnlyBuilder } from 'discord.js';
|
|
2
|
+
export type UnwrapOrDefault<V, D> = V extends undefined ? D : Exclude<V, undefined>;
|
|
3
|
+
export type MaybePromise<T> = T | Promise<T>;
|
|
4
|
+
/**
|
|
5
|
+
* スマートコンポーネントで作れるコマンド
|
|
6
|
+
*/
|
|
7
|
+
type SlashCommandBuilder = SCB | Omit<SCB, 'addSubcommand' | 'addSubcommandGroup'> | SlashCommandOptionsOnlyBuilder | SlashCommandSubcommandsOnlyBuilder;
|
|
8
|
+
export type AnyCommandBuilder = SlashCommandBuilder | ContextMenuCommandBuilder;
|
|
9
|
+
/**
|
|
10
|
+
* スマートコンポーネントで作れるコンポーネント
|
|
11
|
+
*/
|
|
12
|
+
export type AnyComponentBuilder = ButtonBuilder | ModalBuilder | StringSelectMenuBuilder | UserSelectMenuBuilder | RoleSelectMenuBuilder | MentionableSelectMenuBuilder | ChannelSelectMenuBuilder;
|
|
13
|
+
export type AnyBuilder = AnyCommandBuilder | AnyComponentBuilder;
|
|
14
|
+
/**
|
|
15
|
+
* スマートコンポーネントで扱うコマンドインタラクション
|
|
16
|
+
*/
|
|
17
|
+
export type AnyCommandInteraction<Cached extends CacheType = CacheType> = ChatInputCommandInteraction<Cached> | ContextMenuCommandInteraction<Cached> | UserContextMenuCommandInteraction<Cached> | MessageContextMenuCommandInteraction<Cached> | PrimaryEntryPointCommandInteraction<Cached>;
|
|
18
|
+
/**
|
|
19
|
+
* スマートコンポーネントで扱うコンポーネントインタラクション
|
|
20
|
+
*/
|
|
21
|
+
export type AnyComponentInteraction<Cached extends CacheType = CacheType> = ButtonInteraction<Cached> | ModalSubmitInteraction<Cached> | StringSelectMenuInteraction<Cached> | StringSelectMenuInteraction<Cached> | UserSelectMenuInteraction<Cached> | RoleSelectMenuInteraction<Cached> | MentionableSelectMenuInteraction<Cached> | ChannelSelectMenuInteraction<Cached>;
|
|
22
|
+
export type AnyInteraction<Cached extends CacheType = CacheType> = AnyCommandInteraction<Cached> | AnyComponentInteraction<Cached>;
|
|
23
|
+
/**
|
|
24
|
+
* ビルダーからインターフェースへ変換
|
|
25
|
+
*/
|
|
26
|
+
export type inferBuilder<Builder extends AnyBuilder, CommandType extends ApplicationCommandType = ApplicationCommandType> = Builder extends ButtonBuilder ? ButtonInteraction : Builder extends ModalBuilder ? ModalSubmitInteraction : Builder extends StringSelectMenuBuilder ? StringSelectMenuInteraction : Builder extends UserSelectMenuBuilder ? UserSelectMenuInteraction : Builder extends RoleSelectMenuBuilder ? RoleSelectMenuInteraction : Builder extends MentionableSelectMenuBuilder ? MentionableSelectMenuInteraction : Builder extends ChannelSelectMenuBuilder ? ChannelSelectMenuInteraction : Builder extends SlashCommandBuilder ? ChatInputCommandInteraction : Builder extends ContextMenuCommandBuilder ? inferCommandType<CommandType> : never;
|
|
27
|
+
export type inferCommandType<CommandType extends ApplicationCommandType> = CommandType extends ApplicationCommandType.User ? UserContextMenuCommandInteraction : CommandType extends ApplicationCommandType.Message ? MessageContextMenuCommandInteraction : never;
|
|
28
|
+
export type MiddlewarePayload<T extends AnyInteraction = AnyInteraction<any>, U extends any = {}> = {
|
|
29
|
+
interaction: T;
|
|
30
|
+
} & U;
|
|
31
|
+
export interface MiddlewarePayloadWithArgs<T extends AnyComponentInteraction = AnyComponentInteraction<any>> extends MiddlewarePayload<T, {
|
|
32
|
+
args: string[];
|
|
33
|
+
}> {
|
|
34
|
+
interaction: T;
|
|
35
|
+
args: string[];
|
|
36
|
+
}
|
|
37
|
+
export type Middleware<T extends AnyInteraction = AnyInteraction<any>, U extends any = {}, V extends MiddlewarePayload<T, U> = MiddlewarePayload<T, U>> = (input: MiddlewarePayload<T, U>) => MaybePromise<V | void>;
|
|
38
|
+
export {};
|
package/dist/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
import type { ApplicationCommandType, AutocompleteInteraction, ContextMenuCommandBuilder, ContextMenuCommandType } from 'discord.js';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
import { AnyBuilder, AnyCommandBuilder, AnyCommandInteraction, AnyComponentBuilder, AnyComponentInteraction, AnyInteraction, MaybePromise, Middleware, MiddlewarePayload, UnwrapOrDefault, inferBuilder, inferCommandType } from './types';
|
|
4
|
+
interface BaseWrapperReturnData<T extends AnyInteraction = AnyInteraction<any>> {
|
|
5
|
+
middlewares: Middleware<T>[];
|
|
6
|
+
execute: (input: MiddlewarePayload<T>) => void;
|
|
7
|
+
}
|
|
8
|
+
interface BaseBuilderParms<Builder extends AnyBuilder = AnyBuilder, Interaction extends AnyInteraction = AnyInteraction<any>> {
|
|
9
|
+
_builder: Builder;
|
|
10
|
+
_processInputData: MiddlewarePayload<Interaction>;
|
|
11
|
+
_interaction: Interaction;
|
|
12
|
+
}
|
|
13
|
+
type AutocompleteProcess = (input: AutocompleteInteraction) => void;
|
|
14
|
+
/**
|
|
15
|
+
* コマンドビルダーの型情報
|
|
16
|
+
*/
|
|
17
|
+
interface CommandBuilderParms<Builder extends AnyCommandBuilder = AnyCommandBuilder, BuilderType extends ApplicationCommandType = ApplicationCommandType, Interaction extends AnyCommandInteraction = AnyCommandInteraction<any>> extends BaseBuilderParms<Builder, Interaction> {
|
|
18
|
+
_builderType: BuilderType;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* コマンドビルダーが保持するデータ
|
|
22
|
+
*/
|
|
23
|
+
interface CommandBuilderDef<TParms extends CommandBuilderParms> {
|
|
24
|
+
builder: TParms['_builder'];
|
|
25
|
+
autocomplete?: AutocompleteProcess;
|
|
26
|
+
middlewares: Middleware<TParms['_interaction']>[];
|
|
27
|
+
type: ApplicationCommandType;
|
|
28
|
+
}
|
|
29
|
+
type CommandBuilder = <T extends AnyCommandBuilder = AnyCommandBuilder>(command: T) => AutocompleteRegister<{
|
|
30
|
+
_builder: T;
|
|
31
|
+
_builderType: ApplicationCommandType;
|
|
32
|
+
_processInputData: MiddlewarePayload<inferBuilder<T>>;
|
|
33
|
+
_interaction: inferBuilder<T>;
|
|
34
|
+
}>;
|
|
35
|
+
/**
|
|
36
|
+
* コマンドの処理を登録する関数集
|
|
37
|
+
*/
|
|
38
|
+
interface CommandProcessRegister<TParms extends CommandBuilderParms> {
|
|
39
|
+
_def: CommandBuilderDef<TParms>;
|
|
40
|
+
addMiddleware<T extends TParms['_processInputData']>(fc: (input: TParms['_processInputData']) => MaybePromise<T | undefined>): CommandProcessRegister<{
|
|
41
|
+
_builder: TParms['_builder'];
|
|
42
|
+
_builderType: TParms['_builderType'];
|
|
43
|
+
_processInputData: Exclude<Awaited<T>, undefined>;
|
|
44
|
+
_interaction: Awaited<T['interaction']>;
|
|
45
|
+
}>;
|
|
46
|
+
setProcess(process: (input: TParms['_processInputData']) => void): CommandData<{
|
|
47
|
+
_builder: TParms['_builder'];
|
|
48
|
+
_builderType: TParms['_builderType'];
|
|
49
|
+
_processInputData: TParms['_processInputData'];
|
|
50
|
+
_interaction: TParms['_interaction'];
|
|
51
|
+
}>;
|
|
52
|
+
}
|
|
53
|
+
interface AutocompleteRegister<TParms extends CommandBuilderParms> extends CommandProcessRegister<TParms> {
|
|
54
|
+
setAutocomplete(fc: (input: AutocompleteInteraction) => void): CommandProcessRegister<{
|
|
55
|
+
_builder: TParms['_builder'];
|
|
56
|
+
_builderType: TParms['_builderType'];
|
|
57
|
+
_processInputData: TParms['_processInputData'];
|
|
58
|
+
_interaction: TParms['_interaction'];
|
|
59
|
+
}>;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* コマンドレジスターやイベントハンドラー用のデータ
|
|
63
|
+
*/
|
|
64
|
+
interface CommandData<TParms extends CommandBuilderParms> extends BaseWrapperReturnData<TParms['_interaction']> {
|
|
65
|
+
data: TParms['_builder'];
|
|
66
|
+
autocomplete?: AutocompleteProcess;
|
|
67
|
+
middlewares: Middleware<TParms['_interaction']>[];
|
|
68
|
+
execute(input: TParms['_processInputData']): void;
|
|
69
|
+
}
|
|
70
|
+
export type AnyCommandData = CommandData<any>;
|
|
71
|
+
type ContextBuilder = <T extends ContextMenuCommandBuilder = ContextMenuCommandBuilder>(command: T) => ContextMenuCommandTypeRegister;
|
|
72
|
+
/**
|
|
73
|
+
* コンテキストメニューコマンドのタイプを登録する関数
|
|
74
|
+
*/
|
|
75
|
+
interface ContextMenuCommandTypeRegister {
|
|
76
|
+
setType<T extends ContextMenuCommandType>(type: T): CommandProcessRegister<{
|
|
77
|
+
_builder: ContextMenuCommandBuilder;
|
|
78
|
+
_builderType: T;
|
|
79
|
+
_processInputData: MiddlewarePayload<inferCommandType<T>>;
|
|
80
|
+
_interaction: inferCommandType<T>;
|
|
81
|
+
}>;
|
|
82
|
+
}
|
|
83
|
+
interface ComponentBuilderParms<Schema = any, Args extends z.ZodArray<z.ZodString> = z.ZodArray<z.ZodString>, Builder extends AnyComponentBuilder = AnyComponentBuilder, ComponentType extends 'function' | 'builder' = 'function' | 'builder', Interaction extends AnyComponentInteraction = AnyComponentInteraction<any>> extends BaseBuilderParms<Builder, Interaction> {
|
|
84
|
+
_schema: Schema;
|
|
85
|
+
_args: Args | undefined;
|
|
86
|
+
_componentType: ComponentType;
|
|
87
|
+
}
|
|
88
|
+
type BuilderFC<TParms extends Omit<ComponentBuilderParms, '_args' | '_interaction' | '_processInputData'>> = (input: TParms['_schema']) => TParms['_builder'];
|
|
89
|
+
type UnwrapBuilderFC<T> = T extends (...args: any) => infer U ? U : T;
|
|
90
|
+
type inferComponentType<T> = T extends (...args: any) => any ? 'function' : 'builder';
|
|
91
|
+
interface ComponentBuilderDef<TParms extends ComponentBuilderParms> {
|
|
92
|
+
customId: string;
|
|
93
|
+
args: TParms['_args'];
|
|
94
|
+
middlewares: Middleware<TParms['_interaction']>[];
|
|
95
|
+
component: BuilderFC<TParms> | TParms['_builder'];
|
|
96
|
+
}
|
|
97
|
+
type ComponentBuilder = <T extends AnyComponentBuilder | ((input: V) => AnyComponentBuilder), V extends {}>(component: T, defaultValue?: T extends (...args: any) => any ? V : undefined) => ComponentProcessRegister<{
|
|
98
|
+
_schema: T extends (i: infer U, ...args: any) => any ? U : undefined;
|
|
99
|
+
_builder: UnwrapBuilderFC<T>;
|
|
100
|
+
_componentType: inferComponentType<T>;
|
|
101
|
+
_args: undefined;
|
|
102
|
+
_processInputData: MiddlewarePayload<inferBuilder<UnwrapBuilderFC<T>>>;
|
|
103
|
+
_interaction: inferBuilder<UnwrapBuilderFC<T>>;
|
|
104
|
+
}>;
|
|
105
|
+
interface ComponentProcessRegister<TParms extends ComponentBuilderParms> {
|
|
106
|
+
_def: ComponentBuilderDef<TParms>;
|
|
107
|
+
setCustomId(customId: string): ComponentProcessRegister<TParms>;
|
|
108
|
+
useArgs<Schema extends ComponentBuilderParms['_args'] = undefined>(schema?: (z: z.ZodArray<z.ZodString>) => Schema): ComponentProcessRegister<{
|
|
109
|
+
_schema: TParms['_schema'];
|
|
110
|
+
_builder: TParms['_builder'];
|
|
111
|
+
_componentType: TParms['_componentType'];
|
|
112
|
+
_args: UnwrapOrDefault<Schema, z.ZodArray<z.ZodString>>;
|
|
113
|
+
_processInputData: TParms['_processInputData'] & {
|
|
114
|
+
args: z.infer<UnwrapOrDefault<Schema, z.ZodArray<z.ZodString>>>;
|
|
115
|
+
};
|
|
116
|
+
_interaction: TParms['_interaction'];
|
|
117
|
+
}>;
|
|
118
|
+
addMiddleware<T extends TParms['_processInputData']>(fc: (input: TParms['_processInputData']) => T | Promise<T>): ComponentProcessRegister<{
|
|
119
|
+
_schema: TParms['_schema'];
|
|
120
|
+
_builder: TParms['_builder'];
|
|
121
|
+
_componentType: TParms['_componentType'];
|
|
122
|
+
_args: TParms['_args'];
|
|
123
|
+
_processInputData: Awaited<T>;
|
|
124
|
+
_interaction: Awaited<T['interaction']>;
|
|
125
|
+
}>;
|
|
126
|
+
setProcess(process: (input: TParms['_processInputData']) => void): ComponentData<{
|
|
127
|
+
_schema: TParms['_schema'];
|
|
128
|
+
_builder: TParms['_builder'];
|
|
129
|
+
_componentType: TParms['_componentType'];
|
|
130
|
+
_args: TParms['_args'];
|
|
131
|
+
_processInputData: TParms['_processInputData'];
|
|
132
|
+
_interaction: TParms['_interaction'];
|
|
133
|
+
}>;
|
|
134
|
+
}
|
|
135
|
+
type componentFC<TParms extends Omit<ComponentBuilderParms, '_interaction' | '_processInputData'>> = TParms['_componentType'] extends 'function' ? TParms['_schema'] extends undefined ? TParms['_args'] extends undefined ? (input?: any, args?: string[]) => TParms['_builder'] : (input: any | undefined, args: z.infer<Exclude<TParms['_args'], undefined>>) => TParms['_builder'] : TParms['_args'] extends undefined ? (input: TParms['_schema'], args?: string[]) => TParms['_builder'] : (input: TParms['_schema'], args: z.infer<Exclude<TParms['_args'], undefined>>) => TParms['_builder'] : TParms['_builder'];
|
|
136
|
+
interface ComponentData<TParms extends ComponentBuilderParms> extends BaseWrapperReturnData<TParms['_interaction']> {
|
|
137
|
+
args: TParms['_args'];
|
|
138
|
+
customId: string;
|
|
139
|
+
component: componentFC<TParms>;
|
|
140
|
+
middlewares: Middleware<TParms['_interaction']>[];
|
|
141
|
+
execute(input: TParms['_processInputData']): void;
|
|
142
|
+
}
|
|
143
|
+
export type AnyComponentData = ComponentData<any>;
|
|
144
|
+
export declare const wrapper: {
|
|
145
|
+
setCommand: CommandBuilder;
|
|
146
|
+
setCtxCommand: ContextBuilder;
|
|
147
|
+
setComponent: ComponentBuilder;
|
|
148
|
+
};
|
|
149
|
+
export {};
|
package/dist/wrapper.js
ADDED
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.wrapper = void 0;
|
|
4
|
+
const zod_1 = require("zod");
|
|
5
|
+
const custom_id_1 = require("./custom-id");
|
|
6
|
+
const createCommandBuilder = function (command) {
|
|
7
|
+
const _def = {
|
|
8
|
+
middlewares: [],
|
|
9
|
+
type: 1, // ApplicationCommandType.ChatInput
|
|
10
|
+
builder: command,
|
|
11
|
+
};
|
|
12
|
+
return {
|
|
13
|
+
...createCommandProcessRegister(_def),
|
|
14
|
+
setAutocomplete: (process) => {
|
|
15
|
+
return createCommandProcessRegister({
|
|
16
|
+
..._def,
|
|
17
|
+
autocomplete: process,
|
|
18
|
+
});
|
|
19
|
+
},
|
|
20
|
+
};
|
|
21
|
+
};
|
|
22
|
+
function createCommandProcessRegister(initDef) {
|
|
23
|
+
const _def = {
|
|
24
|
+
...initDef,
|
|
25
|
+
};
|
|
26
|
+
return {
|
|
27
|
+
_def,
|
|
28
|
+
addMiddleware: (fc) => {
|
|
29
|
+
if (typeof fc !== 'function') {
|
|
30
|
+
throw new Error('Middleware must be a function.');
|
|
31
|
+
}
|
|
32
|
+
return createCommandProcessRegister({
|
|
33
|
+
..._def,
|
|
34
|
+
middlewares: [..._def.middlewares, fc],
|
|
35
|
+
});
|
|
36
|
+
},
|
|
37
|
+
setProcess(process) {
|
|
38
|
+
return {
|
|
39
|
+
data: _def.builder,
|
|
40
|
+
autocomplete: _def.autocomplete,
|
|
41
|
+
middlewares: _def.middlewares,
|
|
42
|
+
execute: process,
|
|
43
|
+
};
|
|
44
|
+
},
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
const createCtxCommandBuilder = function (command) {
|
|
48
|
+
return createCommandTypeRegister(command);
|
|
49
|
+
};
|
|
50
|
+
function createCommandTypeRegister(builder) {
|
|
51
|
+
return {
|
|
52
|
+
setType: (type) => {
|
|
53
|
+
builder.setType(type);
|
|
54
|
+
return createCommandProcessRegister({
|
|
55
|
+
type,
|
|
56
|
+
middlewares: [],
|
|
57
|
+
builder: builder,
|
|
58
|
+
});
|
|
59
|
+
},
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
const extractComponentCustomId = (component) => {
|
|
63
|
+
const json = component.toJSON();
|
|
64
|
+
if ('custom_id' in json) {
|
|
65
|
+
return json.custom_id;
|
|
66
|
+
}
|
|
67
|
+
else {
|
|
68
|
+
throw new Error('Component does not have a custom_id.');
|
|
69
|
+
}
|
|
70
|
+
};
|
|
71
|
+
const createComponentBuilder = function (component, defaultValue) {
|
|
72
|
+
let customId;
|
|
73
|
+
if (typeof component === 'function') {
|
|
74
|
+
if (!defaultValue)
|
|
75
|
+
throw new Error('Default value is required for function component.');
|
|
76
|
+
customId = extractComponentCustomId(component(defaultValue));
|
|
77
|
+
}
|
|
78
|
+
else {
|
|
79
|
+
customId = extractComponentCustomId(component);
|
|
80
|
+
}
|
|
81
|
+
return createComponentProcessRegister({
|
|
82
|
+
customId,
|
|
83
|
+
args: undefined,
|
|
84
|
+
middlewares: [],
|
|
85
|
+
component,
|
|
86
|
+
});
|
|
87
|
+
};
|
|
88
|
+
function createComponentProcessRegister(initDef) {
|
|
89
|
+
const _def = { ...initDef };
|
|
90
|
+
return {
|
|
91
|
+
_def,
|
|
92
|
+
setCustomId(customId) {
|
|
93
|
+
return createComponentProcessRegister({
|
|
94
|
+
..._def,
|
|
95
|
+
customId,
|
|
96
|
+
});
|
|
97
|
+
},
|
|
98
|
+
useArgs: (fc) => {
|
|
99
|
+
const arrayString = zod_1.z.array(zod_1.z.string());
|
|
100
|
+
const schema = fc ? fc(arrayString) : arrayString;
|
|
101
|
+
return createComponentProcessRegister({
|
|
102
|
+
..._def,
|
|
103
|
+
args: schema,
|
|
104
|
+
});
|
|
105
|
+
},
|
|
106
|
+
addMiddleware: (fc) => {
|
|
107
|
+
if (typeof fc !== 'function') {
|
|
108
|
+
throw new Error('Middleware must be a function.');
|
|
109
|
+
}
|
|
110
|
+
return createComponentProcessRegister({
|
|
111
|
+
..._def,
|
|
112
|
+
middlewares: [..._def.middlewares, fc],
|
|
113
|
+
});
|
|
114
|
+
},
|
|
115
|
+
setProcess(process) {
|
|
116
|
+
return createComponentData(_def, process);
|
|
117
|
+
},
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
function createComponentData(initdef, process) {
|
|
121
|
+
let component;
|
|
122
|
+
if (typeof initdef.component === 'function') {
|
|
123
|
+
component = (input, args) => {
|
|
124
|
+
const builder = initdef.component(input);
|
|
125
|
+
if (!('custom_id' in builder.data))
|
|
126
|
+
return builder;
|
|
127
|
+
let customId = initdef.customId;
|
|
128
|
+
if (args?.length) {
|
|
129
|
+
const argsString = args?.map((arg) => (0, custom_id_1.encodeId)(arg)).join('&');
|
|
130
|
+
customId = customId + '?' + argsString;
|
|
131
|
+
}
|
|
132
|
+
builder.setCustomId(customId);
|
|
133
|
+
return builder;
|
|
134
|
+
};
|
|
135
|
+
}
|
|
136
|
+
else {
|
|
137
|
+
component = initdef.component;
|
|
138
|
+
}
|
|
139
|
+
return {
|
|
140
|
+
args: initdef.args,
|
|
141
|
+
customId: initdef.customId,
|
|
142
|
+
middlewares: initdef.middlewares,
|
|
143
|
+
component,
|
|
144
|
+
execute: process,
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
/*////////////////////////////////////////////////////////////
|
|
148
|
+
discordjsBuilderWrapper
|
|
149
|
+
////////////////////////////////////////////////////////////*/
|
|
150
|
+
exports.wrapper = {
|
|
151
|
+
setCommand: createCommandBuilder,
|
|
152
|
+
setCtxCommand: createCtxCommandBuilder,
|
|
153
|
+
setComponent: createComponentBuilder,
|
|
154
|
+
};
|
|
155
|
+
//# sourceMappingURL=wrapper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wrapper.js","sourceRoot":"","sources":["../src/wrapper.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "sugar-djs",
|
|
3
|
+
"version": "0.2.1",
|
|
4
|
+
"description": "Library for writing discord.js in TypeScript for more fun!",
|
|
5
|
+
"main": "dist/index.js",
|
|
6
|
+
"types": "dist/index.d.ts",
|
|
7
|
+
"scripts": {
|
|
8
|
+
"build": "tsc",
|
|
9
|
+
"prepare": "npm run build",
|
|
10
|
+
"test": "echo \"Error: no test specified\" && exit 1"
|
|
11
|
+
},
|
|
12
|
+
"author": "soukun",
|
|
13
|
+
"license": "MIT",
|
|
14
|
+
"homepage": "https://github.com/n-soukun/sugar-djs#readme",
|
|
15
|
+
"repository": {
|
|
16
|
+
"type": "git",
|
|
17
|
+
"url": "git+https://github.com/n-soukun/sugar-djs.git"
|
|
18
|
+
},
|
|
19
|
+
"dependencies": {
|
|
20
|
+
"discord.js": "^14.23.2",
|
|
21
|
+
"zod": "^4.1.12"
|
|
22
|
+
}
|
|
23
|
+
}
|