@spyglassmc/discord-bot 0.3.25 → 0.3.26

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/bin/bot.js ADDED
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ import '../lib/index.js'
package/lib/index.d.ts CHANGED
@@ -1,2 +1,3 @@
1
+ #!/usr/bin/env node
1
2
  export declare const __dirname: undefined;
2
3
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AA0BA,MAAM,CAAC,OAAO,CAAC,MAAM,SAAS,EAAE,SAAS,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAiCA,MAAM,CAAC,OAAO,CAAC,MAAM,SAAS,EAAE,SAAS,CAAA"}
package/lib/index.js CHANGED
@@ -1,59 +1,43 @@
1
- import { SlashCommandBooleanOption, SlashCommandBuilder, SlashCommandStringOption, } from '@discordjs/builders';
2
- import { REST } from '@discordjs/rest';
3
- import { ConfigService, FileNode, fileUtil, ProfilerFactory, Range, Service, VanillaConfig, } from '@spyglassmc/core';
1
+ #!/usr/bin/env node
2
+ import { FileNode, fileUtil, ProfilerFactory, Range, Service, } from '@spyglassmc/core';
4
3
  import { NodeJsExternals } from '@spyglassmc/core/lib/nodejs.js';
5
4
  import * as je from '@spyglassmc/java-edition';
6
5
  import * as mcdoc from '@spyglassmc/mcdoc';
7
- import { Routes } from 'discord-api-types/rest/v9';
8
- import { Client, Intents, MessageActionRow, MessageButton, MessageEmbed } from 'discord.js';
9
- import { dirname, join } from 'path';
10
- import { fileURLToPath, pathToFileURL } from 'url';
6
+ import { ActionRowBuilder, ButtonBuilder, ButtonStyle, Client, ComponentType, EmbedBuilder, GatewayIntentBits, REST, Routes, SlashCommandBooleanOption, SlashCommandBuilder, SlashCommandStringOption, } from 'discord.js';
7
+ import { join } from 'path';
8
+ import { env } from 'process';
9
+ import { pathToFileURL } from 'url';
11
10
  const MaxContentLength = 2000;
12
11
  const ProfilerId = 'discord-bot#startup';
13
12
  const profilers = new ProfilerFactory(console, [ProfilerId]);
14
13
  const __profiler = profilers.get(ProfilerId);
15
- const parentPath = dirname(fileURLToPath(import.meta.url));
16
- const cacheRoot = join(parentPath, 'cache');
17
- const projectPath = join(parentPath, 'project-root');
14
+ const rootPath = env.SPYGLASSMC_DISCORD_BOT_DIR;
15
+ if (!rootPath) {
16
+ throw new Error('Environment variable SPYGLASSMC_DISCORD_BOT_DIR expected.');
17
+ }
18
+ const cacheRoot = join(rootPath, 'cache');
19
+ const projectPath = join(rootPath, 'project-root');
18
20
  await fileUtil.ensureDir(NodeJsExternals, projectPath);
19
21
  console.log(`cacheRoot = ${cacheRoot}`);
20
22
  console.log(`projectPath = ${projectPath}`);
21
23
  const config = await loadConfig();
22
- const rest = new REST({ version: '9' }).setToken(config.token);
23
- const client = new Client({ intents: [Intents.FLAGS.GUILDS] });
24
+ const rest = new REST({ version: '10' }).setToken(config.token);
25
+ const client = new Client({ intents: [GatewayIntentBits.Guilds] });
24
26
  const service = new Service({
25
27
  logger: console,
26
28
  profilers,
27
29
  project: {
28
30
  cacheRoot: fileUtil.ensureEndingSlash(pathToFileURL(cacheRoot).toString()),
29
- defaultConfig: ConfigService.merge(VanillaConfig, { env: { dependencies: [] } }),
31
+ // defaultConfig: ConfigService.merge(VanillaConfig, { env: { dependencies: [] } }),
30
32
  externals: NodeJsExternals,
31
33
  initializers: [mcdoc.initialize, je.initialize],
32
34
  projectRoots: [fileUtil.ensureEndingSlash(pathToFileURL(projectPath).toString())],
33
35
  },
34
36
  });
35
- const DocumentUri = 'spyglassmc://discord-bot/file.mcfunction';
36
- const activeInteractions = new Map();
37
+ const DocumentUri = pathToFileURL(`${rootPath}/virtual/file.mcfunction`).toString();
37
38
  client.on('interactionCreate', async (i) => {
38
39
  try {
39
- if (i.isButton()) {
40
- const info = activeInteractions.get(i.message.id);
41
- if (!info) {
42
- await i.update({
43
- embeds: [new MessageEmbed().setDescription('The interaction has expired!')],
44
- components: [],
45
- });
46
- return;
47
- }
48
- if (i.customId === 'previous') {
49
- info.activeErrorIndex--;
50
- }
51
- else if (i.customId === 'next') {
52
- info.activeErrorIndex++;
53
- }
54
- await i.update(getReplyOptions(info));
55
- }
56
- else if (i.isCommand()) {
40
+ if (i.isChatInputCommand()) {
57
41
  switch (i.commandName) {
58
42
  case 'ping':
59
43
  await i.reply({
@@ -66,7 +50,30 @@ client.on('interactionCreate', async (i) => {
66
50
  const showRaw = i.options.getBoolean('showraw', false) ?? false;
67
51
  const info = await getInteractionInfo(command, showRaw);
68
52
  const reply = await i.reply(getReplyOptions(info));
69
- activeInteractions.set(reply.id, info);
53
+ const collector = reply.createMessageComponentCollector({
54
+ componentType: ComponentType.Button,
55
+ time: 3_600_000, // 1 hour
56
+ });
57
+ collector
58
+ .on('collect', async (bi) => {
59
+ if (bi.user.id !== i.user.id) {
60
+ // Only allow creator of the interaction to interact.
61
+ return;
62
+ }
63
+ if (bi.customId === 'previous') {
64
+ info.activeErrorIndex--;
65
+ }
66
+ else if (bi.customId === 'next') {
67
+ info.activeErrorIndex++;
68
+ }
69
+ await bi.update(getReplyOptions(info));
70
+ })
71
+ .on('end', async () => {
72
+ await i.editReply({
73
+ embeds: [new EmbedBuilder().setDescription('The interaction has expired!')],
74
+ components: [],
75
+ });
76
+ });
70
77
  break;
71
78
  }
72
79
  }
@@ -87,7 +94,7 @@ __profiler.task('Register Commands').finalize();
87
94
  * @throws
88
95
  */
89
96
  async function loadConfig() {
90
- const path = join(parentPath, 'config.json');
97
+ const path = join(rootPath, 'config.json');
91
98
  const config = (await fileUtil.readJson(NodeJsExternals, path));
92
99
  if (!(typeof config.clientId === 'string'
93
100
  && typeof config.guildId === 'string'
@@ -107,9 +114,6 @@ async function registerCommands() {
107
114
  });
108
115
  }
109
116
  async function getInteractionInfo(content, showRaw) {
110
- if (activeInteractions.has(content)) {
111
- return activeInteractions.get(content);
112
- }
113
117
  await service.project.onDidOpen(DocumentUri, 'mcfunction', 0, content);
114
118
  const docAndNode = await service.project.ensureClientManagedChecked(DocumentUri);
115
119
  service.project.onDidClose(DocumentUri);
@@ -129,8 +133,10 @@ function getReplyOptions(info) {
129
133
  ? `Skipped colorizing due to Discord length limit.\n\`\`\`\n${info.content}\n\`\`\``
130
134
  : content,
131
135
  components: info.errors.length > 1
132
- ? [new MessageActionRow().addComponents(new MessageButton().setCustomId('previous').setLabel('Previous Error').setStyle('PRIMARY').setDisabled(info.activeErrorIndex <= 0), new MessageButton().setCustomId('next').setLabel('Next Error').setStyle('PRIMARY')
133
- .setDisabled(info.activeErrorIndex >= info.errors.length - 1))]
136
+ ? [
137
+ new ActionRowBuilder().addComponents(new ButtonBuilder().setCustomId('previous').setLabel('Previous Error').setStyle(ButtonStyle.Primary).setDisabled(info.activeErrorIndex <= 0), new ButtonBuilder().setCustomId('next').setLabel('Next Error').setStyle(ButtonStyle.Primary)
138
+ .setDisabled(info.activeErrorIndex >= info.errors.length - 1)).toJSON(),
139
+ ]
134
140
  : [],
135
141
  fetchReply: true,
136
142
  };
@@ -168,7 +174,7 @@ const ColorTokenTypeLegend = {
168
174
  variable: new Set(['foreground_white']),
169
175
  };
170
176
  function getReplyContent(info) {
171
- const { content, tokens, errors, activeErrorIndex } = info;
177
+ const { content, errors, activeErrorIndex } = info;
172
178
  const ansiCode = getAnsiCode(content, toRenderTokens(info));
173
179
  const activeError = errors[activeErrorIndex];
174
180
  return `\`\`\`${info.showRaw ? '' : 'ansi'}\n${ansiCode}\n\`\`\`${activeError
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,22 +1,23 @@
1
1
  {
2
2
  "name": "@spyglassmc/discord-bot",
3
- "version": "0.3.25",
3
+ "version": "0.3.26",
4
4
  "type": "module",
5
5
  "main": "lib/index.js",
6
6
  "types": "lib/index.d.ts",
7
+ "bin": {
8
+ "spyglassmc-discord-bot": "bin/bot.js"
9
+ },
7
10
  "author": "SPGoding",
8
11
  "license": "MIT",
9
12
  "directories": {
10
13
  "test": "test/"
11
14
  },
12
15
  "dependencies": {
13
- "@discordjs/rest": "^0.4.1",
14
- "discord.js": "^13.7.0",
15
- "discord-api-types": "^0.33.1",
16
- "@spyglassmc/core": "0.4.19",
17
- "@spyglassmc/java-edition": "0.3.25",
18
- "@spyglassmc/locales": "0.3.10",
19
- "@spyglassmc/mcdoc": "0.3.23"
16
+ "discord.js": "^14.16.3",
17
+ "@spyglassmc/core": "0.4.20",
18
+ "@spyglassmc/java-edition": "0.3.26",
19
+ "@spyglassmc/locales": "0.3.11",
20
+ "@spyglassmc/mcdoc": "0.3.24"
20
21
  },
21
22
  "devDependencies": {},
22
23
  "scripts": {
package/src/index.ts CHANGED
@@ -1,28 +1,35 @@
1
- import {
2
- SlashCommandBooleanOption,
3
- SlashCommandBuilder,
4
- SlashCommandStringOption,
5
- } from '@discordjs/builders'
6
- import { REST } from '@discordjs/rest'
1
+ #!/usr/bin/env node
2
+
7
3
  import type { ColorToken, ColorTokenType, LanguageError } from '@spyglassmc/core'
8
4
  import {
9
- ConfigService,
10
5
  ErrorSeverity,
11
6
  FileNode,
12
7
  fileUtil,
13
8
  ProfilerFactory,
14
9
  Range,
15
10
  Service,
16
- VanillaConfig,
17
11
  } from '@spyglassmc/core'
18
12
  import { NodeJsExternals } from '@spyglassmc/core/lib/nodejs.js'
19
13
  import * as je from '@spyglassmc/java-edition'
20
14
  import * as mcdoc from '@spyglassmc/mcdoc'
21
- import { Routes } from 'discord-api-types/rest/v9'
22
- import type { Snowflake } from 'discord.js'
23
- import { Client, Intents, MessageActionRow, MessageButton, MessageEmbed } from 'discord.js'
24
- import { dirname, join } from 'path'
25
- import { fileURLToPath, pathToFileURL } from 'url'
15
+ import {
16
+ ActionRowBuilder,
17
+ ButtonBuilder,
18
+ ButtonStyle,
19
+ Client,
20
+ ComponentType,
21
+ EmbedBuilder,
22
+ GatewayIntentBits,
23
+ REST,
24
+ Routes,
25
+ SlashCommandBooleanOption,
26
+ SlashCommandBuilder,
27
+ SlashCommandStringOption,
28
+ } from 'discord.js'
29
+ import type { APIActionRowComponent, APIMessageActionRowComponent } from 'discord.js'
30
+ import { join } from 'path'
31
+ import { env } from 'process'
32
+ import { pathToFileURL } from 'url'
26
33
 
27
34
  export declare const __dirname: undefined // Not defined in ES module scope
28
35
  const MaxContentLength = 2000
@@ -31,28 +38,31 @@ const ProfilerId = 'discord-bot#startup'
31
38
  const profilers = new ProfilerFactory(console, [ProfilerId])
32
39
  const __profiler = profilers.get(ProfilerId)
33
40
 
34
- const parentPath = dirname(fileURLToPath(import.meta.url))
35
- const cacheRoot = join(parentPath, 'cache')
36
- const projectPath = join(parentPath, 'project-root')
41
+ const rootPath = env.SPYGLASSMC_DISCORD_BOT_DIR
42
+ if (!rootPath) {
43
+ throw new Error('Environment variable SPYGLASSMC_DISCORD_BOT_DIR expected.')
44
+ }
45
+ const cacheRoot = join(rootPath, 'cache')
46
+ const projectPath = join(rootPath, 'project-root')
37
47
  await fileUtil.ensureDir(NodeJsExternals, projectPath)
38
48
  console.log(`cacheRoot = ${cacheRoot}`)
39
49
  console.log(`projectPath = ${projectPath}`)
40
50
 
41
51
  const config = await loadConfig()
42
- const rest = new REST({ version: '9' }).setToken(config.token)
43
- const client = new Client({ intents: [Intents.FLAGS.GUILDS] })
52
+ const rest = new REST({ version: '10' }).setToken(config.token)
53
+ const client = new Client({ intents: [GatewayIntentBits.Guilds] })
44
54
  const service = new Service({
45
55
  logger: console,
46
56
  profilers,
47
57
  project: {
48
58
  cacheRoot: fileUtil.ensureEndingSlash(pathToFileURL(cacheRoot).toString()),
49
- defaultConfig: ConfigService.merge(VanillaConfig, { env: { dependencies: [] } }),
59
+ // defaultConfig: ConfigService.merge(VanillaConfig, { env: { dependencies: [] } }),
50
60
  externals: NodeJsExternals,
51
61
  initializers: [mcdoc.initialize, je.initialize],
52
62
  projectRoots: [fileUtil.ensureEndingSlash(pathToFileURL(projectPath).toString())],
53
63
  },
54
64
  })
55
- const DocumentUri = 'spyglassmc://discord-bot/file.mcfunction'
65
+ const DocumentUri = pathToFileURL(`${rootPath}/virtual/file.mcfunction`).toString()
56
66
 
57
67
  interface InteractionInfo {
58
68
  content: string
@@ -61,27 +71,10 @@ interface InteractionInfo {
61
71
  tokens: readonly ColorToken[]
62
72
  showRaw: boolean
63
73
  }
64
- const activeInteractions = new Map<Snowflake, InteractionInfo>()
65
74
 
66
75
  client.on('interactionCreate', async (i) => {
67
76
  try {
68
- if (i.isButton()) {
69
- const info = activeInteractions.get(i.message.id)
70
- if (!info) {
71
- await i.update({
72
- embeds: [new MessageEmbed().setDescription('The interaction has expired!')],
73
- components: [],
74
- })
75
- return
76
- }
77
-
78
- if (i.customId === 'previous') {
79
- info.activeErrorIndex--
80
- } else if (i.customId === 'next') {
81
- info.activeErrorIndex++
82
- }
83
- await i.update(getReplyOptions(info))
84
- } else if (i.isCommand()) {
77
+ if (i.isChatInputCommand()) {
85
78
  switch (i.commandName) {
86
79
  case 'ping':
87
80
  await i.reply({
@@ -94,7 +87,30 @@ client.on('interactionCreate', async (i) => {
94
87
  const showRaw = i.options.getBoolean('showraw', false) ?? false
95
88
  const info = await getInteractionInfo(command, showRaw)
96
89
  const reply = await i.reply(getReplyOptions(info))
97
- activeInteractions.set(reply.id, info)
90
+ const collector = reply.createMessageComponentCollector({
91
+ componentType: ComponentType.Button,
92
+ time: 3_600_000, // 1 hour
93
+ })
94
+ collector
95
+ .on('collect', async (bi) => {
96
+ if (bi.user.id !== i.user.id) {
97
+ // Only allow creator of the interaction to interact.
98
+ return
99
+ }
100
+
101
+ if (bi.customId === 'previous') {
102
+ info.activeErrorIndex--
103
+ } else if (bi.customId === 'next') {
104
+ info.activeErrorIndex++
105
+ }
106
+ await bi.update(getReplyOptions(info))
107
+ })
108
+ .on('end', async () => {
109
+ await i.editReply({
110
+ embeds: [new EmbedBuilder().setDescription('The interaction has expired!')],
111
+ components: [],
112
+ })
113
+ })
98
114
  break
99
115
  }
100
116
  }
@@ -122,7 +138,7 @@ interface Config {
122
138
  * @throws
123
139
  */
124
140
  async function loadConfig(): Promise<Config> {
125
- const path = join(parentPath, 'config.json')
141
+ const path = join(rootPath!, 'config.json')
126
142
  const config = (await fileUtil.readJson(NodeJsExternals, path)) as Config
127
143
  if (
128
144
  !(typeof config.clientId === 'string'
@@ -159,10 +175,6 @@ async function registerCommands(): Promise<unknown> {
159
175
  }
160
176
 
161
177
  async function getInteractionInfo(content: string, showRaw: boolean): Promise<InteractionInfo> {
162
- if (activeInteractions.has(content)) {
163
- return activeInteractions.get(content)!
164
- }
165
-
166
178
  await service.project.onDidOpen(DocumentUri, 'mcfunction', 0, content)
167
179
  const docAndNode = await service.project.ensureClientManagedChecked(DocumentUri)
168
180
  service.project.onDidClose(DocumentUri)
@@ -180,20 +192,28 @@ async function getInteractionInfo(content: string, showRaw: boolean): Promise<In
180
192
 
181
193
  function getReplyOptions(
182
194
  info: InteractionInfo,
183
- ): { content: string; components: MessageActionRow[]; fetchReply: true } {
195
+ ): {
196
+ content: string
197
+ components: APIActionRowComponent<APIMessageActionRowComponent>[]
198
+ fetchReply: true
199
+ } {
184
200
  const content = getReplyContent(info)
185
201
  return {
186
202
  content: content.length > MaxContentLength
187
203
  ? `Skipped colorizing due to Discord length limit.\n\`\`\`\n${info.content}\n\`\`\``
188
204
  : content,
189
205
  components: info.errors.length > 1
190
- ? [new MessageActionRow().addComponents(
191
- new MessageButton().setCustomId('previous').setLabel('Previous Error').setStyle(
192
- 'PRIMARY',
193
- ).setDisabled(info.activeErrorIndex <= 0),
194
- new MessageButton().setCustomId('next').setLabel('Next Error').setStyle('PRIMARY')
195
- .setDisabled(info.activeErrorIndex >= info.errors.length - 1),
196
- )]
206
+ ? [
207
+ new ActionRowBuilder<ButtonBuilder>().addComponents(
208
+ new ButtonBuilder().setCustomId('previous').setLabel('Previous Error').setStyle(
209
+ ButtonStyle.Primary,
210
+ ).setDisabled(info.activeErrorIndex <= 0),
211
+ new ButtonBuilder().setCustomId('next').setLabel('Next Error').setStyle(
212
+ ButtonStyle.Primary,
213
+ )
214
+ .setDisabled(info.activeErrorIndex >= info.errors.length - 1),
215
+ ).toJSON(),
216
+ ]
197
217
  : [],
198
218
  fetchReply: true,
199
219
  }
@@ -249,7 +269,7 @@ const ColorTokenTypeLegend: Record<ColorTokenType, Set<RenderFormat>> = {
249
269
  }
250
270
 
251
271
  function getReplyContent(info: InteractionInfo): string {
252
- const { content, tokens, errors, activeErrorIndex } = info
272
+ const { content, errors, activeErrorIndex } = info
253
273
  const ansiCode = getAnsiCode(content, toRenderTokens(info))
254
274
 
255
275
  const activeError: LanguageError | undefined = errors[activeErrorIndex]