@satorijs/adapter-discord 4.5.9 → 4.5.11

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/lib/bot.d.ts CHANGED
@@ -7,8 +7,8 @@ export declare class DiscordBot<C extends Context = Context> extends Bot<C, Disc
7
7
  static MessageEncoder: typeof DiscordMessageEncoder;
8
8
  static inject: string[];
9
9
  http: HTTP;
10
- internal: Internal;
11
- webhooks: Record<string, Webhook>;
10
+ internal: Internal<C>;
11
+ webhooks: Record<string, Webhook | null>;
12
12
  webhookLock: Record<string, Promise<Webhook>>;
13
13
  commands: Universal.Command[];
14
14
  constructor(ctx: C, config: DiscordBot.Config);
@@ -49,6 +49,11 @@ export declare class DiscordBot<C extends Context = Context> extends Bot<C, Disc
49
49
  }>;
50
50
  setGuildMemberRole(guildId: string, userId: string, roleId: string): Promise<void>;
51
51
  unsetGuildMemberRole(guildId: string, userId: string, roleId: string): Promise<void>;
52
+ getGuildMemberRoleList(guildId: string, userId: string, next?: string): Promise<{
53
+ data: {
54
+ id: string;
55
+ }[];
56
+ }>;
52
57
  getGuildRoleList(guildId: string): Promise<{
53
58
  data: Universal.GuildRole[];
54
59
  }>;
package/lib/index.cjs CHANGED
@@ -18,15 +18,15 @@ var __copyProps = (to, from, except, desc) => {
18
18
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
19
 
20
20
  // src/index.ts
21
- var src_exports = {};
22
- __export(src_exports, {
21
+ var index_exports = {};
22
+ __export(index_exports, {
23
23
  Discord: () => utils_exports,
24
24
  DiscordBot: () => DiscordBot,
25
25
  DiscordMessageEncoder: () => DiscordMessageEncoder,
26
26
  WsClient: () => WsClient,
27
- default: () => src_default
27
+ default: () => index_default
28
28
  });
29
- module.exports = __toCommonJS(src_exports);
29
+ module.exports = __toCommonJS(index_exports);
30
30
 
31
31
  // src/bot.ts
32
32
  var import_core5 = require("@satorijs/core");
@@ -951,6 +951,7 @@ Internal.define({
951
951
  PATCH: "modifyGuildRolePositions"
952
952
  },
953
953
  "/guilds/{guild.id}/roles/{role.id}": {
954
+ GET: "getGuildRole",
954
955
  PATCH: "modifyGuildRole",
955
956
  DELETE: "deleteGuildRole"
956
957
  }
@@ -1230,7 +1231,7 @@ var decodeGuildMember = /* @__PURE__ */ __name((member) => ({
1230
1231
  user: member.user && decodeUser(member.user),
1231
1232
  nick: member.nick,
1232
1233
  roles: member.roles,
1233
- joinedAt: member.joined_at && new Date(member.joined_at).valueOf()
1234
+ joinedAt: member.joined_at ? new Date(member.joined_at).valueOf() : void 0
1234
1235
  }), "decodeGuildMember");
1235
1236
  var decodeGuild = /* @__PURE__ */ __name((data) => ({
1236
1237
  id: data.id,
@@ -1250,7 +1251,7 @@ var decodeRole = /* @__PURE__ */ __name((role) => ({
1250
1251
  }), "decodeRole");
1251
1252
  var encodeRole = /* @__PURE__ */ __name((role) => ({
1252
1253
  ...role,
1253
- permissions: role.permissions && "" + role.permissions
1254
+ permissions: role.permissions ? "" + role.permissions : void 0
1254
1255
  }), "encodeRole");
1255
1256
  async function decodeMessage(bot, data, message, payload = message, details = true) {
1256
1257
  const { platform } = bot;
@@ -1341,7 +1342,7 @@ async function decodeMessage(bot, data, message, payload = message, details = tr
1341
1342
  message.quote = await bot.getMessage(channel_id, message_id, false);
1342
1343
  }
1343
1344
  message.createdAt = new Date(data.timestamp).valueOf();
1344
- message.updatedAt = data.edited_timestamp && new Date(data.edited_timestamp).valueOf();
1345
+ message.updatedAt = data.edited_timestamp ? new Date(data.edited_timestamp).valueOf() : void 0;
1345
1346
  if (!payload) return message;
1346
1347
  payload.channel = {
1347
1348
  id: data.channel_id,
@@ -1608,9 +1609,9 @@ var DiscordMessageEncoder = class extends import_core3.MessageEncoder {
1608
1609
  stack = [new State("message")];
1609
1610
  buffer = "";
1610
1611
  addition = {};
1611
- figure = null;
1612
+ figure;
1612
1613
  mode = "default";
1613
- listType = null;
1614
+ listType;
1614
1615
  rows = [];
1615
1616
  async getUrl() {
1616
1617
  const input = this.options?.session?.discord;
@@ -1657,7 +1658,9 @@ var DiscordMessageEncoder = class extends import_core3.MessageEncoder {
1657
1658
  if (this.bot.http.isError(e) && e.response) {
1658
1659
  if (e.response.data?.code === 10015) {
1659
1660
  this.bot.logger.debug("webhook has been deleted, recreating..., %o", e.response.data);
1660
- if (!this.bot.webhookLock[this.channelId]) this.bot.webhooks[this.channelId] = null;
1661
+ if (!this.bot.webhookLock[this.channelId]) {
1662
+ this.bot.webhooks[this.channelId] = null;
1663
+ }
1661
1664
  await this.ensureWebhook();
1662
1665
  return this.post(data, headers);
1663
1666
  } else {
@@ -1708,7 +1711,7 @@ var DiscordMessageEncoder = class extends import_core3.MessageEncoder {
1708
1711
  headers: { accept: type + "/*" },
1709
1712
  timeout: 1e3
1710
1713
  }).then(
1711
- (headers) => headers.get("content-type").startsWith(type),
1714
+ (headers) => headers.get("content-type")?.startsWith(type),
1712
1715
  () => false
1713
1716
  );
1714
1717
  }
@@ -1829,7 +1832,7 @@ var DiscordMessageEncoder = class extends import_core3.MessageEncoder {
1829
1832
  } else if (type === "ul" || type === "ol") {
1830
1833
  this.listType = type;
1831
1834
  await this.render(children);
1832
- this.listType = null;
1835
+ this.listType = void 0;
1833
1836
  } else if (type === "li") {
1834
1837
  if (!this.buffer.endsWith("\n")) this.buffer += "\n";
1835
1838
  if (this.listType === "ol") {
@@ -1837,7 +1840,7 @@ var DiscordMessageEncoder = class extends import_core3.MessageEncoder {
1837
1840
  } else if (this.listType === "ul") {
1838
1841
  this.buffer += "- ";
1839
1842
  }
1840
- this.render(children);
1843
+ await this.render(children);
1841
1844
  this.buffer += "\n";
1842
1845
  } else if (type === "at") {
1843
1846
  if (attrs.id) {
@@ -2027,6 +2030,7 @@ var WsClient = class extends import_core4.Adapter.WsClient {
2027
2030
  return this.bot.http.ws(url + "/?v=10&encoding=json");
2028
2031
  }
2029
2032
  heartbeat() {
2033
+ if (!this.socket) return;
2030
2034
  this.bot.logger.debug(`heartbeat d ${this._d}`);
2031
2035
  this.socket.send(JSON.stringify({
2032
2036
  op: Gateway.Opcode.HEARTBEAT,
@@ -2138,7 +2142,7 @@ var DiscordBot = class extends import_core5.Bot {
2138
2142
  }
2139
2143
  });
2140
2144
  this.internal = new Internal(this);
2141
- this.proxyUrls.push("https://cdn.discordapp.com/");
2145
+ ctx.satori.proxyUrls.add("https://cdn.discordapp.com/");
2142
2146
  ctx.plugin(WsClient, this);
2143
2147
  }
2144
2148
  async _ensureWebhook(channelId) {
@@ -2267,6 +2271,10 @@ var DiscordBot = class extends import_core5.Bot {
2267
2271
  unsetGuildMemberRole(guildId, userId, roleId) {
2268
2272
  return this.internal.removeGuildMemberRole(guildId, userId, roleId);
2269
2273
  }
2274
+ async getGuildMemberRoleList(guildId, userId, next) {
2275
+ const data = await this.internal.getGuildMember(guildId, userId);
2276
+ return { data: data.roles.map((id) => ({ id })) };
2277
+ }
2270
2278
  async getGuildRoleList(guildId) {
2271
2279
  const data = await this.internal.getGuildRoles(guildId);
2272
2280
  return { data: data.map(decodeRole) };
@@ -2320,7 +2328,7 @@ var DiscordBot = class extends import_core5.Bot {
2320
2328
  })(DiscordBot || (DiscordBot = {}));
2321
2329
 
2322
2330
  // src/index.ts
2323
- var src_default = DiscordBot;
2331
+ var index_default = DiscordBot;
2324
2332
  // Annotate the CommonJS export names for ESM import in node:
2325
2333
  0 && (module.exports = {
2326
2334
  Discord,
@@ -2328,4 +2336,3 @@ var src_default = DiscordBot;
2328
2336
  DiscordMessageEncoder,
2329
2337
  WsClient
2330
2338
  });
2331
- //# sourceMappingURL=index.cjs.map
package/lib/message.d.ts CHANGED
@@ -5,9 +5,9 @@ export declare class DiscordMessageEncoder<C extends Context = Context> extends
5
5
  private stack;
6
6
  private buffer;
7
7
  private addition;
8
- private figure;
8
+ private figure?;
9
9
  private mode;
10
- private listType;
10
+ private listType?;
11
11
  private rows;
12
12
  private getUrl;
13
13
  post(data?: any, headers?: any): any;
@@ -5,7 +5,7 @@ export declare namespace Gateway {
5
5
  /** opcode for the payload */
6
6
  op: O;
7
7
  /** event data */
8
- d?: D;
8
+ d: D;
9
9
  /** the event name for this payload */
10
10
  t?: T;
11
11
  /** sequence number, used for resuming sessions and heartbeats */
@@ -1,7 +1,7 @@
1
- import { Dict, HTTP } from '@satorijs/core';
1
+ import { Context, Dict, HTTP } from '@satorijs/core';
2
2
  import { DiscordBot } from '../bot';
3
- export declare class Internal {
3
+ export declare class Internal<C extends Context = Context> {
4
4
  private bot;
5
- constructor(bot: DiscordBot);
5
+ constructor(bot: DiscordBot<C>);
6
6
  static define(routes: Dict<Partial<Record<HTTP.Method, string | string[]>>>): void;
7
7
  }
@@ -215,6 +215,11 @@ declare module './internal' {
215
215
  * @see https://discord.com/developers/docs/resources/guild#modify-guild-role-positions
216
216
  */
217
217
  modifyGuildRolePositions(guild_id: snowflake, param: Role.Params.ModifyPositions): Promise<Role[]>;
218
+ /**
219
+ * Returns a role object for the specified role.
220
+ * @see https://discord.com/developers/docs/resources/guild#get-guild-role
221
+ */
222
+ getGuildRole(guild_id: snowflake, role_id: snowflake): Promise<Role>;
218
223
  /**
219
224
  * Modify a guild role. Requires the MANAGE_ROLES permission. Returns the updated role on success. Fires a Guild Role Update Gateway event.
220
225
  * @see https://discord.com/developers/docs/resources/guild#modify-guild-role
package/lib/utils.d.ts CHANGED
@@ -10,8 +10,8 @@ export declare const decodeGuild: (data: Discord.Guild) => Universal.Guild;
10
10
  export declare const decodeChannel: (data: Discord.Channel) => Universal.Channel;
11
11
  export declare const decodeRole: (role: Discord.Role) => Universal.GuildRole;
12
12
  export declare const encodeRole: (role: Partial<Universal.GuildRole>) => Partial<Discord.Role>;
13
- export declare function decodeMessage(bot: DiscordBot, data: Discord.Message, message: Universal.Message, payload?: Universal.MessageLike, details?: boolean): Promise<Universal.Message>;
14
- export declare function setupMessageGuildId(session: Session, guildId: string): void;
13
+ export declare function decodeMessage<C extends Context = Context>(bot: DiscordBot<C>, data: Discord.Message, message: Universal.Message, payload?: Universal.MessageLike, details?: boolean): Promise<Universal.Message>;
14
+ export declare function setupMessageGuildId(session: Session, guildId?: string): void;
15
15
  export declare function adaptSession<C extends Context>(bot: DiscordBot<C>, input: Discord.Gateway.Payload): Promise<C[typeof import("cordis").Context.session]>;
16
16
  export declare const encodeCommand: (cmd: Universal.Command) => Discord.ApplicationCommand.Params.Create;
17
17
  export declare function encodeCommandOptions(cmd: Universal.Command): Discord.ApplicationCommand.Option[];
package/lib/ws.d.ts CHANGED
@@ -2,9 +2,9 @@ import { Adapter, Context, Schema } from '@satorijs/core';
2
2
  import { DiscordBot } from './bot';
3
3
  export declare class WsClient<C extends Context = Context> extends Adapter.WsClient<C, DiscordBot<C>> {
4
4
  _d: number;
5
- _ping: NodeJS.Timeout;
5
+ _ping?: NodeJS.Timeout;
6
6
  _sessionId: string;
7
- _resumeUrl: string;
7
+ _resumeUrl?: string;
8
8
  prepare(): Promise<WebSocket>;
9
9
  heartbeat(): void;
10
10
  accept(): void;
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@satorijs/adapter-discord",
3
3
  "description": "Discord Adapter for Satorijs",
4
- "version": "4.5.9",
4
+ "version": "4.5.11",
5
5
  "type": "module",
6
6
  "main": "lib/index.cjs",
7
7
  "typings": "lib/index.d.ts",
@@ -33,10 +33,10 @@
33
33
  "chat"
34
34
  ],
35
35
  "devDependencies": {
36
- "@satorijs/core": "^4.2.6",
36
+ "@satorijs/core": "^4.5.2",
37
37
  "cordis": "^3.18.1"
38
38
  },
39
39
  "peerDependencies": {
40
- "@satorijs/core": "^4.2.6"
40
+ "@satorijs/core": "^4.5.2"
41
41
  }
42
42
  }
package/src/bot.ts CHANGED
@@ -12,8 +12,8 @@ export class DiscordBot<C extends Context = Context> extends Bot<C, DiscordBot.C
12
12
  static inject = ['http']
13
13
 
14
14
  public http: HTTP
15
- public internal: Internal
16
- public webhooks: Record<string, Webhook> = {}
15
+ public internal: Internal<C>
16
+ public webhooks: Record<string, Webhook | null> = {}
17
17
  public webhookLock: Record<string, Promise<Webhook>> = {}
18
18
  public commands: Universal.Command[] = []
19
19
 
@@ -28,7 +28,7 @@ export class DiscordBot<C extends Context = Context> extends Bot<C, DiscordBot.C
28
28
  },
29
29
  })
30
30
  this.internal = new Internal(this)
31
- this.proxyUrls.push('https://cdn.discordapp.com/')
31
+ ctx.satori.proxyUrls.add('https://cdn.discordapp.com/')
32
32
  ctx.plugin(WsClient, this)
33
33
  }
34
34
 
@@ -122,7 +122,7 @@ export class DiscordBot<C extends Context = Context> extends Bot<C, DiscordBot.C
122
122
  async getGuildMemberList(guildId: string, after?: string) {
123
123
  const users = await this.internal.listGuildMembers(guildId, { after, limit: 1000 })
124
124
  const data = users.map(v => Discord.decodeGuildMember(v))
125
- return { data, next: data[999]?.user.id }
125
+ return { data, next: data[999]?.user!.id }
126
126
  }
127
127
 
128
128
  async getChannel(channelId: string) {
@@ -188,6 +188,11 @@ export class DiscordBot<C extends Context = Context> extends Bot<C, DiscordBot.C
188
188
  return this.internal.removeGuildMemberRole(guildId, userId, roleId)
189
189
  }
190
190
 
191
+ async getGuildMemberRoleList(guildId: string, userId: string, next?: string) {
192
+ const data = await this.internal.getGuildMember(guildId, userId)
193
+ return { data: data.roles.map(id => ({ id })) }
194
+ }
195
+
191
196
  async getGuildRoleList(guildId: string) {
192
197
  const data = await this.internal.getGuildRoles(guildId)
193
198
  return { data: data.map(Discord.decodeRole) }
package/src/message.ts CHANGED
@@ -19,9 +19,9 @@ export class DiscordMessageEncoder<C extends Context = Context> extends MessageE
19
19
  private stack: State[] = [new State('message')]
20
20
  private buffer: string = ''
21
21
  private addition: Dict = {}
22
- private figure: h = null
22
+ private figure?: h
23
23
  private mode: RenderMode = 'default'
24
- private listType: 'ol' | 'ul' = null
24
+ private listType?: 'ol' | 'ul'
25
25
  private rows: ActionRow[] = []
26
26
  private async getUrl() {
27
27
  const input = this.options?.session?.discord
@@ -73,7 +73,9 @@ export class DiscordMessageEncoder<C extends Context = Context> extends MessageE
73
73
  if (this.bot.http.isError(e) && e.response) {
74
74
  if (e.response.data?.code === 10015) {
75
75
  this.bot.logger.debug('webhook has been deleted, recreating..., %o', e.response.data)
76
- if (!this.bot.webhookLock[this.channelId]) this.bot.webhooks[this.channelId] = null
76
+ if (!this.bot.webhookLock[this.channelId]) {
77
+ this.bot.webhooks[this.channelId] = null
78
+ }
77
79
  await this.ensureWebhook()
78
80
  return this.post(data, headers)
79
81
  } else {
@@ -134,7 +136,7 @@ export class DiscordMessageEncoder<C extends Context = Context> extends MessageE
134
136
  headers: { accept: type + '/*' },
135
137
  timeout: 1000,
136
138
  }).then(
137
- (headers) => headers.get('content-type').startsWith(type),
139
+ (headers) => headers.get('content-type')?.startsWith(type),
138
140
  () => false,
139
141
  )
140
142
  }
@@ -260,7 +262,7 @@ export class DiscordMessageEncoder<C extends Context = Context> extends MessageE
260
262
  } else if (type === 'ul' || type === 'ol') {
261
263
  this.listType = type
262
264
  await this.render(children)
263
- this.listType = null
265
+ this.listType = undefined
264
266
  } else if (type === 'li') {
265
267
  if (!this.buffer.endsWith('\n')) this.buffer += '\n'
266
268
  if (this.listType === 'ol') {
@@ -268,7 +270,7 @@ export class DiscordMessageEncoder<C extends Context = Context> extends MessageE
268
270
  } else if (this.listType === 'ul') {
269
271
  this.buffer += '- '
270
272
  }
271
- this.render(children)
273
+ await this.render(children)
272
274
  this.buffer += '\n'
273
275
  } else if (type === 'at') {
274
276
  if (attrs.id) {
@@ -343,7 +345,7 @@ export class DiscordMessageEncoder<C extends Context = Context> extends MessageE
343
345
  if (this.stack[0].type === 'forward' && this.stack[0].fakeMessageMap[attrs.id]?.length >= 1) {
344
346
  // quote to fake message, eg. 1st message has id (in channel or thread), later message quote to it
345
347
  replyId = this.stack[0].fakeMessageMap[attrs.id][0].id
346
- channelId = this.stack[0].fakeMessageMap[attrs.id][0].channel.id
348
+ channelId = this.stack[0].fakeMessageMap[attrs.id][0].channel!.id
347
349
  }
348
350
  const quote = await this.bot.getMessage(channelId, replyId)
349
351
  if (!guildId) {
@@ -6,7 +6,7 @@ export namespace Gateway {
6
6
  /** opcode for the payload */
7
7
  op: O
8
8
  /** event data */
9
- d?: D
9
+ d: D
10
10
  /** the event name for this payload */
11
11
  t?: T
12
12
  /** sequence number, used for resuming sessions and heartbeats */
@@ -1,8 +1,8 @@
1
- import { Dict, HTTP, makeArray } from '@satorijs/core'
1
+ import { Context, Dict, HTTP, makeArray } from '@satorijs/core'
2
2
  import { DiscordBot } from '../bot'
3
3
 
4
- export class Internal {
5
- constructor(private bot: DiscordBot) {}
4
+ export class Internal<C extends Context = Context> {
5
+ constructor(private bot: DiscordBot<C>) {}
6
6
 
7
7
  static define(routes: Dict<Partial<Record<HTTP.Method, string | string[]>>>) {
8
8
  for (const path in routes) {
package/src/types/role.ts CHANGED
@@ -227,6 +227,11 @@ declare module './internal' {
227
227
  * @see https://discord.com/developers/docs/resources/guild#modify-guild-role-positions
228
228
  */
229
229
  modifyGuildRolePositions(guild_id: snowflake, param: Role.Params.ModifyPositions): Promise<Role[]>
230
+ /**
231
+ * Returns a role object for the specified role.
232
+ * @see https://discord.com/developers/docs/resources/guild#get-guild-role
233
+ */
234
+ getGuildRole(guild_id: snowflake, role_id: snowflake): Promise<Role>
230
235
  /**
231
236
  * Modify a guild role. Requires the MANAGE_ROLES permission. Returns the updated role on success. Fires a Guild Role Update Gateway event.
232
237
  * @see https://discord.com/developers/docs/resources/guild#modify-guild-role
@@ -247,6 +252,7 @@ Internal.define({
247
252
  PATCH: 'modifyGuildRolePositions',
248
253
  },
249
254
  '/guilds/{guild.id}/roles/{role.id}': {
255
+ GET: 'getGuildRole',
250
256
  PATCH: 'modifyGuildRole',
251
257
  DELETE: 'deleteGuildRole',
252
258
  },
package/src/utils.ts CHANGED
@@ -29,7 +29,7 @@ export const decodeGuildMember = (member: Partial<Discord.GuildMember>): Univers
29
29
  user: member.user && decodeUser(member.user),
30
30
  nick: member.nick,
31
31
  roles: member.roles,
32
- joinedAt: member.joined_at && new Date(member.joined_at).valueOf(),
32
+ joinedAt: member.joined_at ? new Date(member.joined_at).valueOf() : undefined,
33
33
  })
34
34
 
35
35
  export const decodeGuild = (data: Discord.Guild): Universal.Guild => ({
@@ -56,11 +56,11 @@ export const decodeRole = (role: Discord.Role): Universal.GuildRole => ({
56
56
 
57
57
  export const encodeRole = (role: Partial<Universal.GuildRole>): Partial<Discord.Role> => ({
58
58
  ...role,
59
- permissions: role.permissions && '' + role.permissions,
59
+ permissions: role.permissions ? '' + role.permissions : undefined,
60
60
  })
61
61
 
62
- export async function decodeMessage(
63
- bot: DiscordBot,
62
+ export async function decodeMessage<C extends Context = Context>(
63
+ bot: DiscordBot<C>,
64
64
  data: Discord.Message,
65
65
  message: Universal.Message,
66
66
  payload: Universal.MessageLike = message,
@@ -167,11 +167,11 @@ export async function decodeMessage(
167
167
  // THREAD_STARTER_MESSAGE (21) 事件下,message_reference 有 message_id
168
168
  if (details && data.message_reference?.message_id) {
169
169
  const { message_id, channel_id } = data.message_reference
170
- message.quote = await bot.getMessage(channel_id, message_id, false)
170
+ message.quote = await bot.getMessage(channel_id!, message_id, false)
171
171
  }
172
172
 
173
173
  message.createdAt = new Date(data.timestamp).valueOf()
174
- message.updatedAt = data.edited_timestamp && new Date(data.edited_timestamp).valueOf()
174
+ message.updatedAt = data.edited_timestamp ? new Date(data.edited_timestamp).valueOf() : undefined
175
175
  if (!payload) return message
176
176
  payload.channel = {
177
177
  id: data.channel_id,
@@ -183,7 +183,7 @@ export async function decodeMessage(
183
183
  return message
184
184
  }
185
185
 
186
- export function setupMessageGuildId(session: Session, guildId: string) {
186
+ export function setupMessageGuildId(session: Session, guildId?: string) {
187
187
  session.guildId = guildId
188
188
  session.isDirect = !guildId
189
189
  session.subtype = guildId ? 'group' : 'private'
@@ -226,11 +226,11 @@ export async function adaptSession<C extends Context>(bot: DiscordBot<C>, input:
226
226
  // if (!session.content) return
227
227
  } else if (input.t === 'MESSAGE_UPDATE') {
228
228
  session.type = 'message-updated'
229
- const message = await bot._getMessage(input.d.channel_id, input.d.id)
229
+ const message = await bot._getMessage(input.d.channel_id!, input.d.id!)
230
230
  // Unlike creates, message updates may contain only a subset of the full message object payload
231
231
  // https://discord.com/developers/docs/topics/gateway-events#message-update
232
232
  await decodeMessage(bot, message, session.event.message = {}, session.event)
233
- const channel = await bot.internal.getChannel(input.d.channel_id)
233
+ const channel = await bot.internal.getChannel(input.d.channel_id!)
234
234
  setupMessageGuildId(session, channel.guild_id)
235
235
  // if (!session.content) return
236
236
  } else if (input.t === 'MESSAGE_DELETE') {
@@ -279,7 +279,7 @@ export async function adaptSession<C extends Context>(bot: DiscordBot<C>, input:
279
279
  session.subtype = input.d.guild_id ? 'group' : 'private'
280
280
  session.channelId = input.d.channel_id
281
281
  session.guildId = input.d.guild_id
282
- session.userId = session.isDirect ? input.d.user.id : input.d.member.user.id
282
+ session.userId = session.isDirect ? input.d.user!.id : input.d.member!.user!.id
283
283
  session.messageId = input.d.id
284
284
  session.content = ''
285
285
  session.event.argv = decodeArgv(data, command)
@@ -296,7 +296,7 @@ export async function adaptSession<C extends Context>(bot: DiscordBot<C>, input:
296
296
  session.subtype = input.d.guild_id ? 'group' : 'private'
297
297
  session.channelId = input.d.channel_id
298
298
  session.guildId = input.d.guild_id
299
- session.userId = session.isDirect ? input.d.user.id : input.d.member.user.id
299
+ session.userId = session.isDirect ? input.d.user!.id : input.d.member!.user!.id
300
300
  session.messageId = input.d.id
301
301
  session.content = user_input
302
302
  } else if (input.t === 'INTERACTION_CREATE' && input.d.type === Discord.Interaction.Type.MESSAGE_COMPONENT) {
@@ -328,7 +328,7 @@ export async function adaptSession<C extends Context>(bot: DiscordBot<C>, input:
328
328
  session.isDirect = !input.d.guild_id
329
329
  session.channelId = input.d.channel_id
330
330
  session.guildId = input.d.guild_id
331
- session.userId = session.isDirect ? input.d.user.id : input.d.member.user.id
331
+ session.userId = session.isDirect ? input.d.user!.id : input.d.member!.user!.id
332
332
  session.messageId = input.d.id
333
333
  session.content = ''
334
334
  session.event.button = {
@@ -441,5 +441,5 @@ export function encodeCommandOptions(cmd: Universal.Command): Discord.Applicatio
441
441
  })
442
442
  }
443
443
  }
444
- return result.sort((a, b) => +b.required - +a.required)
444
+ return result.sort((a, b) => +b.required! - +a.required!)
445
445
  }
package/src/ws.ts CHANGED
@@ -5,9 +5,9 @@ import { DiscordBot } from './bot'
5
5
 
6
6
  export class WsClient<C extends Context = Context> extends Adapter.WsClient<C, DiscordBot<C>> {
7
7
  _d = 0
8
- _ping: NodeJS.Timeout
8
+ _ping?: NodeJS.Timeout
9
9
  _sessionId = ''
10
- _resumeUrl: string
10
+ _resumeUrl?: string
11
11
 
12
12
  async prepare() {
13
13
  if (this._resumeUrl) {
@@ -18,6 +18,7 @@ export class WsClient<C extends Context = Context> extends Adapter.WsClient<C, D
18
18
  }
19
19
 
20
20
  heartbeat() {
21
+ if (!this.socket) return
21
22
  this.bot.logger.debug(`heartbeat d ${this._d}`)
22
23
  this.socket.send(JSON.stringify({
23
24
  op: Gateway.Opcode.HEARTBEAT,
@@ -26,7 +27,7 @@ export class WsClient<C extends Context = Context> extends Adapter.WsClient<C, D
26
27
  }
27
28
 
28
29
  accept() {
29
- this.socket.addEventListener('message', async ({ data }) => {
30
+ this.socket!.addEventListener('message', async ({ data }) => {
30
31
  let parsed: Gateway.Payload
31
32
  data = data.toString()
32
33
  try {
@@ -44,7 +45,7 @@ export class WsClient<C extends Context = Context> extends Adapter.WsClient<C, D
44
45
  this._ping = setInterval(() => this.heartbeat(), parsed.d.heartbeat_interval)
45
46
  if (this._sessionId) {
46
47
  this.bot.logger.debug('resuming')
47
- this.socket.send(JSON.stringify({
48
+ this.socket!.send(JSON.stringify({
48
49
  op: Gateway.Opcode.RESUME,
49
50
  d: {
50
51
  token: this.bot.config.token,
@@ -53,7 +54,7 @@ export class WsClient<C extends Context = Context> extends Adapter.WsClient<C, D
53
54
  },
54
55
  }))
55
56
  } else {
56
- this.socket.send(JSON.stringify({
57
+ this.socket!.send(JSON.stringify({
57
58
  op: Gateway.Opcode.IDENTIFY,
58
59
  d: {
59
60
  token: this.bot.config.token,
@@ -75,7 +76,7 @@ export class WsClient<C extends Context = Context> extends Adapter.WsClient<C, D
75
76
  if (parsed.op === Gateway.Opcode.DISPATCH) {
76
77
  this.bot.dispatch(this.bot.session({
77
78
  type: 'internal',
78
- _type: 'discord/' + parsed.t.toLowerCase().replace(/_/g, '-'),
79
+ _type: 'discord/' + parsed.t!.toLowerCase().replace(/_/g, '-'),
79
80
  _data: parsed.d,
80
81
  }))
81
82
  if (parsed.t === 'READY') {
@@ -98,7 +99,7 @@ export class WsClient<C extends Context = Context> extends Adapter.WsClient<C, D
98
99
  }
99
100
  })
100
101
 
101
- this.socket.addEventListener('close', () => {
102
+ this.socket!.addEventListener('close', () => {
102
103
  clearInterval(this._ping)
103
104
  })
104
105
  }