generator-discord 1.3.19 → 1.40.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/README.md +16 -5
- package/app/index.d.ts +0 -1
- package/app/index.d.ts.map +1 -1
- package/app/index.js +15 -15
- package/app/index.js.map +1 -1
- package/package.json +15 -15
- package/src/index.ts +20 -27
- package/templates/javascript/_gitignore +4 -0
- package/templates/javascript/package.json +4 -1
- package/templates/javascript/src/index.js +4 -4
- package/templates/python/_gitignore +4 -0
- package/templates/python/config.py +1 -0
- package/templates/python/requirements.txt +1 -1
- package/templates/rust/Cargo.toml +1 -1
- package/templates/rust/_gitignore +1 -0
- package/templates/rust/src/main.rs +5 -2
- package/templates/typescript/_gitignore +5 -0
- package/templates/typescript/package.json +10 -4
- package/templates/typescript/src/index.ts +9 -9
- package/templates/typescript/tsconfig.json +6 -5
package/README.md
CHANGED
|
@@ -21,10 +21,15 @@ Generate a basic starter project for a new Discord-bot in your favorite programm
|
|
|
21
21
|
|
|
22
22
|
### Supported programming languages
|
|
23
23
|
|
|
24
|
-
- TypeScript
|
|
25
|
-
- JavaScript
|
|
26
|
-
- Python
|
|
27
|
-
- Rust
|
|
24
|
+
- TypeScript (discord.js 14)
|
|
25
|
+
- JavaScript (discord.js 14)
|
|
26
|
+
- Python (discord.py 2.7)
|
|
27
|
+
- Rust (serenity 0.12)
|
|
28
|
+
|
|
29
|
+
### Requirements
|
|
30
|
+
|
|
31
|
+
- Node.js 22.18 or newer
|
|
32
|
+
- Python 3 and/or a Rust toolchain, if you generate those templates
|
|
28
33
|
|
|
29
34
|
### Your favorite is not listed?
|
|
30
35
|
|
|
@@ -50,10 +55,16 @@ npm install -g generator-discord
|
|
|
50
55
|
yo discord
|
|
51
56
|
```
|
|
52
57
|
|
|
58
|
+
Add `--skip-install` to skip dependency installation and `--skip-build` to skip the initial build:
|
|
59
|
+
|
|
60
|
+
```bash
|
|
61
|
+
yo discord --skip-install --skip-build
|
|
62
|
+
```
|
|
63
|
+
|
|
53
64
|
[](https://github.com/emilkrebs/Sound-Bot)
|
|
54
65
|
|
|
55
66
|
## Known Issues
|
|
56
67
|
|
|
57
68
|
None
|
|
58
69
|
|
|
59
|
-
[Add Issue](https://github.com/emilkrebs/Generator-Discord/issues/new)
|
|
70
|
+
[Add Issue](https://github.com/emilkrebs/Generator-Discord/issues/new)
|
package/app/index.d.ts
CHANGED
package/app/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,kBAAkB,CAAC;AAazC,KAAK,OAAO,GAAG,YAAY,GAAG,YAAY,GAAG,QAAQ,GAAG,MAAM,CAAC;AAE/D,UAAU,OAAO;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,OAAO,CAAC;CACtB;AA6BD,MAAM,CAAC,OAAO,OAAO,gBAAiB,SAAQ,SAAS;IACtD,OAAO,CAAC,OAAO,CAA0B;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,kBAAkB,CAAC;AAazC,KAAK,OAAO,GAAG,YAAY,GAAG,YAAY,GAAG,QAAQ,GAAG,MAAM,CAAC;AAE/D,UAAU,OAAO;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,OAAO,CAAC;CACtB;AA6BD,MAAM,CAAC,OAAO,OAAO,gBAAiB,SAAQ,SAAS;IACtD,OAAO,CAAC,OAAO,CAA0B;IAEnC,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IAgDhC,IAAI,IAAI,IAAI;IAYZ,OAAO,IAAI,IAAI;IAqBT,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IA+BxB,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;IAyB1B,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,MAAM;CAWjE"}
|
package/app/index.js
CHANGED
|
@@ -22,19 +22,16 @@ const botNameValidation = {
|
|
|
22
22
|
errorMessage: 'Invalid bot name. Please use only letters, numbers, and underscores. Must start with a letter.'
|
|
23
23
|
},
|
|
24
24
|
rust: {
|
|
25
|
-
regex: new RegExp('
|
|
25
|
+
regex: new RegExp('^[a-z][a-z0-9_-]*$'),
|
|
26
26
|
errorMessage: 'Invalid bot name. Please use only lowercase letters, numbers, underscores, and hyphens. Must start with a letter.'
|
|
27
27
|
}
|
|
28
28
|
};
|
|
29
29
|
export default class DiscordGenerator extends Generator {
|
|
30
30
|
answers = {};
|
|
31
|
-
constructor(args, options) {
|
|
32
|
-
super(args, options);
|
|
33
|
-
}
|
|
34
31
|
async prompting() {
|
|
35
32
|
this.logo();
|
|
36
33
|
const askBotType = await this.prompt({
|
|
37
|
-
type: '
|
|
34
|
+
type: 'select',
|
|
38
35
|
name: 'botType',
|
|
39
36
|
message: 'The type of Discord Bot you want to create.',
|
|
40
37
|
choices: [
|
|
@@ -85,15 +82,18 @@ export default class DiscordGenerator extends Generator {
|
|
|
85
82
|
this.log('\x1b[0m');
|
|
86
83
|
}
|
|
87
84
|
writing() {
|
|
88
|
-
const paths = ['.'];
|
|
89
85
|
this.sourceRoot(path.join(__dirname, TEMPLATE_DIR, this.answers.botType));
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
86
|
+
this.fs.copy(this.templatePath('.'), this.destinationPath(USER_DIR, this.answers.botName), {
|
|
87
|
+
fileTransform: ({ destinationPath, contents }) => {
|
|
88
|
+
const targetPath = path.basename(destinationPath) === '_gitignore'
|
|
89
|
+
? path.join(path.dirname(destinationPath), '.gitignore')
|
|
90
|
+
: destinationPath;
|
|
91
|
+
return {
|
|
92
|
+
path: targetPath,
|
|
93
|
+
contents: this._replaceWords(contents, this.answers)
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
});
|
|
97
97
|
}
|
|
98
98
|
async install() {
|
|
99
99
|
this.log('');
|
|
@@ -102,7 +102,7 @@ export default class DiscordGenerator extends Generator {
|
|
|
102
102
|
const skipInstall = this.args.includes('skip-install');
|
|
103
103
|
const options = { cwd: this.destinationPath(USER_DIR, this.answers.botName) };
|
|
104
104
|
if (botType === 'typescript' || botType === 'javascript') {
|
|
105
|
-
if (
|
|
105
|
+
if (!skipInstall) {
|
|
106
106
|
this.log('Installing dependencies...');
|
|
107
107
|
await this.spawn('npm', ['install'], options);
|
|
108
108
|
}
|
|
@@ -119,7 +119,7 @@ export default class DiscordGenerator extends Generator {
|
|
|
119
119
|
}
|
|
120
120
|
async end() {
|
|
121
121
|
const answer = await this.prompt({
|
|
122
|
-
type: '
|
|
122
|
+
type: 'select',
|
|
123
123
|
name: 'openWithCode',
|
|
124
124
|
message: 'Do you want to open your Discord Bot with \x1b[36mVisual Studio Code\x1b[0m?',
|
|
125
125
|
choices: [
|
package/app/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,kBAAkB,CAAC;AACzC,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,GAAG,MAAM,KAAK,CAAC;AAEtB,MAAM,YAAY,GAAG,eAAe,CAAC;AACrC,MAAM,QAAQ,GAAG,GAAG,CAAC;AAErB,MAAM,QAAQ,GAAG,kBAAkB,CAAC;AACpC,MAAM,SAAS,GAAG,mBAAmB,CAAC;AAEtC,kBAAkB;AAClB,MAAM,aAAa,GAAG,WAAW,CAAC;AAgBlC,MAAM,SAAS,GAAG,GAAG,CAAC,aAAa,CAAC,IAAI,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AACnE,MAAM,iBAAiB,GAAuC;IAC7D,UAAU,EAAE;QACX,KAAK,EAAE,IAAI,MAAM,CAAC,2DAA2D,CAAC;QAC9E,YAAY,EAAE,sGAAsG;KACpH;IACD,UAAU,EAAE;QACX,KAAK,EAAE,IAAI,MAAM,CAAC,2DAA2D,CAAC;QAC9E,YAAY,EAAE,sGAAsG;KACpH;IACD,MAAM,EAAE;QACP,KAAK,EAAE,IAAI,MAAM,CAAC,iBAAiB,CAAC;QACpC,YAAY,EAAE,gGAAgG;KAC9G;IACD,IAAI,EAAE;QACL,KAAK,EAAE,IAAI,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "generator-discord",
|
|
3
3
|
"displayName": "Generator-Discord",
|
|
4
|
-
"version": "1.
|
|
4
|
+
"version": "1.40.0",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"exports": "./app/index.js",
|
|
7
7
|
"description": "Create a basic Discord-Bot, supporting many programming languages.",
|
|
8
8
|
"engines": {
|
|
9
|
-
"node": "
|
|
9
|
+
"node": "^22.18.0 || >=24.11.0"
|
|
10
10
|
},
|
|
11
11
|
"keywords": [
|
|
12
12
|
"yeoman-generator",
|
|
@@ -18,8 +18,8 @@
|
|
|
18
18
|
"build": "tsc",
|
|
19
19
|
"watch": "tsc -w",
|
|
20
20
|
"test": "npm run build && vitest run",
|
|
21
|
-
"lint": "eslint src test
|
|
22
|
-
"lint:fix": "eslint src test --
|
|
21
|
+
"lint": "eslint src test",
|
|
22
|
+
"lint:fix": "eslint src test --fix",
|
|
23
23
|
"clean": "npx rimraf app && npx rimraf node_modules"
|
|
24
24
|
},
|
|
25
25
|
"files": [
|
|
@@ -39,18 +39,18 @@
|
|
|
39
39
|
},
|
|
40
40
|
"homepage": "https://github.com/emilkrebs/Generator-Discord",
|
|
41
41
|
"dependencies": {
|
|
42
|
-
"yeoman-generator": "^
|
|
42
|
+
"yeoman-generator": "^10.3.0"
|
|
43
43
|
},
|
|
44
44
|
"devDependencies": {
|
|
45
|
-
"
|
|
46
|
-
"
|
|
47
|
-
"
|
|
48
|
-
"
|
|
49
|
-
"
|
|
50
|
-
"
|
|
51
|
-
"
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
"
|
|
45
|
+
"@eslint/js": "^10.0.1",
|
|
46
|
+
"@types/node": "^26.6.6",
|
|
47
|
+
"eslint": "^10.13.0",
|
|
48
|
+
"globals": "^17.13.0",
|
|
49
|
+
"typescript": "^5.9.3",
|
|
50
|
+
"typescript-eslint": "^8.72.1",
|
|
51
|
+
"vitest": "^5.0.5",
|
|
52
|
+
"vite": "^8.3.5",
|
|
53
|
+
"yeoman-environment": "^8.5.1",
|
|
54
|
+
"yeoman-test": "^11.8.2"
|
|
55
55
|
}
|
|
56
56
|
}
|
package/src/index.ts
CHANGED
|
@@ -40,7 +40,7 @@ const botNameValidation: Record<BotType, BotNameValidation> = {
|
|
|
40
40
|
errorMessage: 'Invalid bot name. Please use only letters, numbers, and underscores. Must start with a letter.'
|
|
41
41
|
},
|
|
42
42
|
rust: {
|
|
43
|
-
regex: new RegExp('
|
|
43
|
+
regex: new RegExp('^[a-z][a-z0-9_-]*$'),
|
|
44
44
|
errorMessage: 'Invalid bot name. Please use only lowercase letters, numbers, underscores, and hyphens. Must start with a letter.'
|
|
45
45
|
}
|
|
46
46
|
};
|
|
@@ -50,15 +50,11 @@ const botNameValidation: Record<BotType, BotNameValidation> = {
|
|
|
50
50
|
export default class DiscordGenerator extends Generator {
|
|
51
51
|
private answers: Answers = {} as Answers;
|
|
52
52
|
|
|
53
|
-
constructor(args: string | string[], options: Record<string, unknown>) {
|
|
54
|
-
super(args, options);
|
|
55
|
-
}
|
|
56
|
-
|
|
57
53
|
async prompting(): Promise<void> {
|
|
58
54
|
this.logo();
|
|
59
55
|
|
|
60
56
|
const askBotType = await this.prompt({
|
|
61
|
-
type: '
|
|
57
|
+
type: 'select',
|
|
62
58
|
name: 'botType',
|
|
63
59
|
message: 'The type of Discord Bot you want to create.',
|
|
64
60
|
choices: [
|
|
@@ -115,25 +111,24 @@ export default class DiscordGenerator extends Generator {
|
|
|
115
111
|
}
|
|
116
112
|
|
|
117
113
|
writing(): void {
|
|
118
|
-
const paths = ['.'];
|
|
119
|
-
|
|
120
114
|
this.sourceRoot(path.join(__dirname, TEMPLATE_DIR, this.answers.botType));
|
|
121
115
|
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
116
|
+
this.fs.copy(
|
|
117
|
+
this.templatePath('.'),
|
|
118
|
+
this.destinationPath(USER_DIR, this.answers.botName),
|
|
119
|
+
{
|
|
120
|
+
fileTransform: ({ destinationPath, contents }) => {
|
|
121
|
+
const targetPath = path.basename(destinationPath) === '_gitignore'
|
|
122
|
+
? path.join(path.dirname(destinationPath), '.gitignore')
|
|
123
|
+
: destinationPath;
|
|
124
|
+
|
|
125
|
+
return {
|
|
126
|
+
path: targetPath,
|
|
127
|
+
contents: this._replaceWords(contents, this.answers)
|
|
128
|
+
};
|
|
134
129
|
}
|
|
135
|
-
|
|
136
|
-
|
|
130
|
+
}
|
|
131
|
+
);
|
|
137
132
|
}
|
|
138
133
|
|
|
139
134
|
async install(): Promise<void> {
|
|
@@ -146,14 +141,12 @@ export default class DiscordGenerator extends Generator {
|
|
|
146
141
|
const options = { cwd: this.destinationPath(USER_DIR, this.answers.botName) };
|
|
147
142
|
|
|
148
143
|
if (botType === 'typescript' || botType === 'javascript') {
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
if(botType=== 'typescript' || botType === 'javascript' && !skipInstall) {
|
|
144
|
+
if (!skipInstall) {
|
|
152
145
|
this.log('Installing dependencies...');
|
|
153
146
|
await this.spawn('npm', ['install'], options);
|
|
154
147
|
}
|
|
155
148
|
|
|
156
|
-
if (botType=== 'typescript' && !skipBuild) {
|
|
149
|
+
if (botType === 'typescript' && !skipBuild) {
|
|
157
150
|
this.log('Building your Discord Bot...');
|
|
158
151
|
await this.spawn('npm', ['run', 'build'], options);
|
|
159
152
|
}
|
|
@@ -171,7 +164,7 @@ export default class DiscordGenerator extends Generator {
|
|
|
171
164
|
|
|
172
165
|
async end(): Promise<void> {
|
|
173
166
|
const answer = await this.prompt({
|
|
174
|
-
type: '
|
|
167
|
+
type: 'select',
|
|
175
168
|
name: 'openWithCode',
|
|
176
169
|
message: 'Do you want to open your Discord Bot with \x1b[36mVisual Studio Code\x1b[0m?',
|
|
177
170
|
choices: [
|
|
@@ -4,10 +4,13 @@
|
|
|
4
4
|
"description": "Please enter a brief description here",
|
|
5
5
|
"version": "1.0.0",
|
|
6
6
|
"main": "./src/index.js",
|
|
7
|
+
"engines": {
|
|
8
|
+
"node": ">=22"
|
|
9
|
+
},
|
|
7
10
|
"scripts": {
|
|
8
11
|
"start": "node ./src/index.js"
|
|
9
12
|
},
|
|
10
13
|
"dependencies": {
|
|
11
|
-
"discord.js": "^14.
|
|
14
|
+
"discord.js": "^14.27.0"
|
|
12
15
|
}
|
|
13
16
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
const { Client, GatewayIntentBits } = require('discord.js');
|
|
1
|
+
const { Client, Events, GatewayIntentBits } = require('discord.js');
|
|
2
2
|
const { token } = require('../config.json');
|
|
3
3
|
|
|
4
4
|
// Create a new client instance with Intents that specify which privileged intents your bot requires
|
|
@@ -6,8 +6,8 @@ const client = new Client({ intents: [GatewayIntentBits.Guilds, GatewayIntentBit
|
|
|
6
6
|
const prefix = '!';
|
|
7
7
|
|
|
8
8
|
// Run this code when the client is ready. This event will only trigger one time after logging in
|
|
9
|
-
client.once(
|
|
10
|
-
console.log(`Bot is logged in as ${
|
|
9
|
+
client.once(Events.ClientReady, readyClient => {
|
|
10
|
+
console.log(`Bot is logged in as ${readyClient.user.tag}.`);
|
|
11
11
|
});
|
|
12
12
|
|
|
13
13
|
|
|
@@ -39,4 +39,4 @@ client.on('messageCreate', async message => {
|
|
|
39
39
|
// Login to Discord with your app's token
|
|
40
40
|
client.login(token);
|
|
41
41
|
|
|
42
|
-
// For more information about the Discord.js library, visit https://discord.js.org/#/docs/main/stable/general/welcome
|
|
42
|
+
// For more information about the Discord.js library, visit https://discord.js.org/#/docs/main/stable/general/welcome
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
TOKEN = '<%= bot-token %>'
|
|
@@ -1 +1 @@
|
|
|
1
|
-
discord.py ~= 2.
|
|
1
|
+
discord.py ~= 2.7.1
|
|
@@ -6,5 +6,5 @@ edition = "2021"
|
|
|
6
6
|
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
|
7
7
|
|
|
8
8
|
[dependencies]
|
|
9
|
-
serenity = { version = "0.12", default-features = false, features = ["client", "gateway", "rustls_backend", "model"] }
|
|
9
|
+
serenity = { version = "0.12.5", default-features = false, features = ["client", "gateway", "rustls_backend", "model"] }
|
|
10
10
|
tokio = { version = "1", features = ["macros", "rt-multi-thread"] }
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
target/
|
|
@@ -13,10 +13,13 @@ impl EventHandler for Handler {
|
|
|
13
13
|
|
|
14
14
|
async fn message(&self, ctx: Context, msg: Message) {
|
|
15
15
|
// check if the message starts with the prefix
|
|
16
|
-
if msg.content.
|
|
16
|
+
if let Some(content) = msg.content.strip_prefix(PREFIX) {
|
|
17
|
+
if msg.author.bot {
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
17
20
|
|
|
18
21
|
// Split the message into command and arguments
|
|
19
|
-
let args =
|
|
22
|
+
let args = content.trim().split(' ').collect::<Vec<&str>>();
|
|
20
23
|
let command = args[0];
|
|
21
24
|
|
|
22
25
|
// ping - bot will reply with Pong!
|
|
@@ -3,14 +3,20 @@
|
|
|
3
3
|
"displayName": "<%= bot-name %>",
|
|
4
4
|
"description": "Please enter a brief description here",
|
|
5
5
|
"version": "1.0.0",
|
|
6
|
-
"main": "./src/index.
|
|
6
|
+
"main": "./dist/src/index.js",
|
|
7
|
+
"engines": {
|
|
8
|
+
"node": ">=22"
|
|
9
|
+
},
|
|
7
10
|
"scripts": {
|
|
8
|
-
"start": "
|
|
11
|
+
"start": "npm run build && node ./dist/src/index.js",
|
|
9
12
|
"watch": "tsc -w",
|
|
10
13
|
"build": "tsc"
|
|
11
14
|
},
|
|
12
15
|
"dependencies": {
|
|
13
|
-
"discord.js": "^14.
|
|
14
|
-
|
|
16
|
+
"discord.js": "^14.27.0"
|
|
17
|
+
},
|
|
18
|
+
"devDependencies": {
|
|
19
|
+
"@types/node": "^26.6.6",
|
|
20
|
+
"typescript": "^7.0.2"
|
|
15
21
|
}
|
|
16
22
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Client, GatewayIntentBits } from 'discord.js';
|
|
1
|
+
import { Client, Events, GatewayIntentBits } from 'discord.js';
|
|
2
2
|
import { token } from '../config.json';
|
|
3
3
|
|
|
4
4
|
// Create a new client instance with Intents that specify which privileged intents your bot requires
|
|
@@ -6,27 +6,27 @@ const client = new Client({ intents: [GatewayIntentBits.Guilds, GatewayIntentBit
|
|
|
6
6
|
const prefix = '!';
|
|
7
7
|
|
|
8
8
|
// Run this code when the client is ready. This event will only trigger one time after logging in
|
|
9
|
-
client.once(
|
|
10
|
-
console.log(`Bot is logged in as ${
|
|
9
|
+
client.once(Events.ClientReady, readyClient => {
|
|
10
|
+
console.log(`Bot is logged in as ${readyClient.user.tag}.`);
|
|
11
11
|
});
|
|
12
12
|
|
|
13
13
|
|
|
14
14
|
// Listen for messages
|
|
15
15
|
client.on('messageCreate', async message => {
|
|
16
16
|
// Ignore messages that don't start with the prefix or are from a bot
|
|
17
|
-
if(!message.content.startsWith(prefix) || message.author.bot) return;
|
|
17
|
+
if (!message.content.startsWith(prefix) || message.author.bot) return;
|
|
18
18
|
|
|
19
19
|
// Split the message into command and arguments
|
|
20
20
|
const args = message.content.slice(prefix.length).trim().split(/ +/);
|
|
21
21
|
const command = args.shift()?.toLowerCase();
|
|
22
|
-
|
|
22
|
+
|
|
23
23
|
// ping - bot will reply with Pong!
|
|
24
|
-
if(command === 'ping') {
|
|
24
|
+
if (command === 'ping') {
|
|
25
25
|
await message.reply('Pong!');
|
|
26
26
|
}
|
|
27
27
|
// say <message> - bot will send the message
|
|
28
|
-
else if(command === 'say') {
|
|
29
|
-
if(!args.length) {
|
|
28
|
+
else if (command === 'say') {
|
|
29
|
+
if (!args.length) {
|
|
30
30
|
await message.channel.send(`You didn't provide any arguments, ${message.author}!`);
|
|
31
31
|
return;
|
|
32
32
|
}
|
|
@@ -39,4 +39,4 @@ client.on('messageCreate', async message => {
|
|
|
39
39
|
// Login to Discord with your app's token
|
|
40
40
|
client.login(token);
|
|
41
41
|
|
|
42
|
-
// For more information about the Discord.js library, visit https://discord.js.org/#/docs/main/stable/general/welcome
|
|
42
|
+
// For more information about the Discord.js library, visit https://discord.js.org/#/docs/main/stable/general/welcome
|
|
@@ -1,24 +1,25 @@
|
|
|
1
1
|
{
|
|
2
2
|
"compilerOptions": {
|
|
3
|
-
"target": "
|
|
4
|
-
"module": "
|
|
3
|
+
"target": "ES2022",
|
|
4
|
+
"module": "node16",
|
|
5
|
+
"moduleResolution": "node16",
|
|
5
6
|
"lib": ["ESNext"],
|
|
6
7
|
"sourceMap": true,
|
|
7
8
|
"outDir": "dist",
|
|
9
|
+
"rootDir": ".",
|
|
8
10
|
"strict": true,
|
|
9
11
|
"noUnusedLocals": true,
|
|
10
12
|
"noImplicitReturns": true,
|
|
11
|
-
"moduleResolution": "node",
|
|
12
13
|
"esModuleInterop": true,
|
|
13
14
|
"skipLibCheck": true,
|
|
14
15
|
"resolveJsonModule": true,
|
|
15
16
|
"forceConsistentCasingInFileNames": true
|
|
16
17
|
},
|
|
17
18
|
"include": [
|
|
18
|
-
"src/**/*.ts"
|
|
19
|
+
"src/**/*.ts"
|
|
19
20
|
],
|
|
20
21
|
"exclude": [
|
|
21
22
|
"dist",
|
|
22
23
|
"node_modules"
|
|
23
24
|
]
|
|
24
|
-
}
|
|
25
|
+
}
|