dfx 0.61.5 → 0.61.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (147) hide show
  1. package/Cache/memoryTTL.d.ts.map +1 -1
  2. package/Cache/memoryTTL.js.map +1 -1
  3. package/Cache/prelude.d.ts +3 -3
  4. package/Cache/prelude.d.ts.map +1 -1
  5. package/Cache/prelude.js.map +1 -1
  6. package/Cache.d.ts.map +1 -1
  7. package/Cache.js.map +1 -1
  8. package/DiscordGateway/DiscordWS.d.ts.map +1 -1
  9. package/DiscordGateway/DiscordWS.js.map +1 -1
  10. package/DiscordGateway/Shard/heartbeats.d.ts.map +1 -1
  11. package/DiscordGateway/Shard/heartbeats.js.map +1 -1
  12. package/DiscordGateway/Shard/sendEvents.js +9 -6
  13. package/DiscordGateway/Shard/sendEvents.js.map +1 -1
  14. package/DiscordGateway/Shard/utils.d.ts.map +1 -1
  15. package/DiscordGateway/Shard/utils.js.map +1 -1
  16. package/DiscordGateway/Shard.d.ts.map +1 -1
  17. package/DiscordGateway/Shard.js +8 -7
  18. package/DiscordGateway/Shard.js.map +1 -1
  19. package/DiscordGateway/Sharder.d.ts +2 -2
  20. package/DiscordGateway/Sharder.js.map +1 -1
  21. package/DiscordGateway/WS.d.ts.map +1 -1
  22. package/DiscordGateway/WS.js.map +1 -1
  23. package/DiscordGateway.d.ts +1 -1
  24. package/DiscordGateway.d.ts.map +1 -1
  25. package/DiscordGateway.js.map +1 -1
  26. package/DiscordREST/utils.d.ts.map +1 -1
  27. package/DiscordREST/utils.js.map +1 -1
  28. package/DiscordREST.d.ts +1 -1
  29. package/DiscordREST.d.ts.map +1 -1
  30. package/DiscordREST.js.map +1 -1
  31. package/Helpers/flags.d.ts.map +1 -1
  32. package/Helpers/flags.js.map +1 -1
  33. package/Helpers/intents.d.ts.map +1 -1
  34. package/Helpers/intents.js.map +1 -1
  35. package/Helpers/interactions.d.ts.map +1 -1
  36. package/Helpers/interactions.js +3 -2
  37. package/Helpers/interactions.js.map +1 -1
  38. package/Helpers/members.d.ts.map +1 -1
  39. package/Helpers/members.js.map +1 -1
  40. package/Helpers/permissions.js.map +1 -1
  41. package/Helpers/ui.js +12 -11
  42. package/Helpers/ui.js.map +1 -1
  43. package/Interactions/builder.d.ts.map +1 -1
  44. package/Interactions/builder.js.map +1 -1
  45. package/Interactions/context.d.ts.map +1 -1
  46. package/Interactions/context.js.map +1 -1
  47. package/Interactions/definitions.d.ts.map +1 -1
  48. package/Interactions/definitions.js.map +1 -1
  49. package/Interactions/gateway.d.ts +1 -1
  50. package/Interactions/gateway.d.ts.map +1 -1
  51. package/Interactions/gateway.js.map +1 -1
  52. package/Interactions/handlers.d.ts.map +1 -1
  53. package/Interactions/handlers.js +7 -7
  54. package/Interactions/handlers.js.map +1 -1
  55. package/Interactions/index.d.ts.map +1 -1
  56. package/Interactions/index.js.map +1 -1
  57. package/Interactions/utils.d.ts.map +1 -1
  58. package/Interactions/utils.js.map +1 -1
  59. package/Interactions/webhook.d.ts.map +1 -1
  60. package/Interactions/webhook.js.map +1 -1
  61. package/Log.js.map +1 -1
  62. package/RateLimit.d.ts.map +1 -1
  63. package/RateLimit.js.map +1 -1
  64. package/gateway.d.ts +1 -1
  65. package/mjs/Cache/memoryTTL.mjs.map +1 -1
  66. package/mjs/Cache/prelude.mjs.map +1 -1
  67. package/mjs/Cache.mjs.map +1 -1
  68. package/mjs/DiscordGateway/DiscordWS.mjs.map +1 -1
  69. package/mjs/DiscordGateway/Shard/heartbeats.mjs.map +1 -1
  70. package/mjs/DiscordGateway/Shard/sendEvents.mjs +7 -6
  71. package/mjs/DiscordGateway/Shard/sendEvents.mjs.map +1 -1
  72. package/mjs/DiscordGateway/Shard/utils.mjs.map +1 -1
  73. package/mjs/DiscordGateway/Shard.mjs +8 -7
  74. package/mjs/DiscordGateway/Shard.mjs.map +1 -1
  75. package/mjs/DiscordGateway/Sharder.mjs.map +1 -1
  76. package/mjs/DiscordGateway/WS.mjs.map +1 -1
  77. package/mjs/DiscordGateway.mjs.map +1 -1
  78. package/mjs/DiscordREST/utils.mjs.map +1 -1
  79. package/mjs/DiscordREST.mjs.map +1 -1
  80. package/mjs/Helpers/flags.mjs.map +1 -1
  81. package/mjs/Helpers/intents.mjs.map +1 -1
  82. package/mjs/Helpers/interactions.mjs +3 -2
  83. package/mjs/Helpers/interactions.mjs.map +1 -1
  84. package/mjs/Helpers/members.mjs.map +1 -1
  85. package/mjs/Helpers/permissions.mjs.map +1 -1
  86. package/mjs/Helpers/ui.mjs +12 -11
  87. package/mjs/Helpers/ui.mjs.map +1 -1
  88. package/mjs/Interactions/builder.mjs.map +1 -1
  89. package/mjs/Interactions/context.mjs.map +1 -1
  90. package/mjs/Interactions/definitions.mjs.map +1 -1
  91. package/mjs/Interactions/gateway.mjs.map +1 -1
  92. package/mjs/Interactions/handlers.mjs +7 -7
  93. package/mjs/Interactions/handlers.mjs.map +1 -1
  94. package/mjs/Interactions/index.mjs.map +1 -1
  95. package/mjs/Interactions/utils.mjs.map +1 -1
  96. package/mjs/Interactions/webhook.mjs.map +1 -1
  97. package/mjs/Log.mjs.map +1 -1
  98. package/mjs/RateLimit.mjs.map +1 -1
  99. package/mjs/types.mjs +733 -9
  100. package/mjs/types.mjs.map +1 -1
  101. package/mjs/utils/Effect.mjs.map +1 -1
  102. package/mjs/version.mjs +1 -1
  103. package/mjs/webhooks.mjs.map +1 -1
  104. package/package.json +2 -2
  105. package/src/Cache/memoryTTL.ts +4 -6
  106. package/src/Cache/prelude.ts +13 -15
  107. package/src/Cache.ts +5 -2
  108. package/src/DiscordGateway/DiscordWS.ts +6 -5
  109. package/src/DiscordGateway/Shard/heartbeats.ts +2 -3
  110. package/src/DiscordGateway/Shard/utils.ts +10 -9
  111. package/src/DiscordGateway/Shard.ts +13 -12
  112. package/src/DiscordGateway/Sharder.ts +8 -8
  113. package/src/DiscordGateway/WS.ts +9 -6
  114. package/src/DiscordGateway.ts +9 -8
  115. package/src/DiscordREST/utils.ts +2 -4
  116. package/src/DiscordREST.ts +24 -26
  117. package/src/Helpers/flags.ts +4 -2
  118. package/src/Helpers/intents.ts +4 -3
  119. package/src/Helpers/interactions.ts +54 -51
  120. package/src/Helpers/members.ts +2 -2
  121. package/src/Helpers/permissions.ts +2 -2
  122. package/src/Interactions/builder.ts +18 -20
  123. package/src/Interactions/context.ts +31 -18
  124. package/src/Interactions/definitions.ts +36 -27
  125. package/src/Interactions/gateway.ts +85 -82
  126. package/src/Interactions/handlers.ts +35 -34
  127. package/src/Interactions/index.ts +20 -16
  128. package/src/Interactions/utils.ts +17 -13
  129. package/src/Interactions/webhook.ts +15 -19
  130. package/src/Log.ts +2 -2
  131. package/src/RateLimit.ts +4 -5
  132. package/src/types.ts +172 -188
  133. package/src/utils/Effect.ts +19 -21
  134. package/src/version.ts +1 -1
  135. package/src/webhooks.ts +1 -4
  136. package/types.d.ts +140 -132
  137. package/types.d.ts.map +1 -1
  138. package/types.js +784 -10
  139. package/types.js.map +1 -1
  140. package/utils/Effect.d.ts.map +1 -1
  141. package/utils/Effect.js.map +1 -1
  142. package/version.d.ts +1 -1
  143. package/version.js +1 -1
  144. package/webhooks.d.ts +1 -1
  145. package/webhooks.d.ts.map +1 -1
  146. package/webhooks.js.map +1 -1
  147. package/tsconfig.tsbuildinfo +0 -1
@@ -22,7 +22,10 @@ export class WebSocketError {
22
22
 
23
23
  export class WebSocketCloseError {
24
24
  readonly _tag = "WebSocketCloseError"
25
- constructor(readonly code: number, readonly reason: string) {}
25
+ constructor(
26
+ readonly code: number,
27
+ readonly reason: string,
28
+ ) {}
26
29
  }
27
30
 
28
31
  const isReconnect = (
@@ -38,7 +41,7 @@ const socket = (urlRef: Ref.Ref<string>) =>
38
41
  // eslint-disable-next-line no-extra-semi
39
42
  ;(ws as any).removeAllListeners?.()
40
43
  ws.close()
41
- })
44
+ }),
42
45
  ),
43
46
  )
44
47
 
@@ -72,7 +75,7 @@ const offer = (
72
75
  resume(Effect.fail(new WebSocketCloseError(e.code, e.reason)))
73
76
  })
74
77
  },
75
- )
78
+ ),
76
79
  ),
77
80
  )
78
81
 
@@ -117,7 +120,7 @@ const send = (
117
120
  Effect.forever,
118
121
  )
119
122
 
120
- const make = Effect.gen(function*(_) {
123
+ const make = Effect.gen(function* (_) {
121
124
  const log = yield* _(Log)
122
125
 
123
126
  const connect = (
@@ -126,7 +129,7 @@ const make = Effect.gen(function*(_) {
126
129
  onConnecting = Effect.unit,
127
130
  openTimeout = Duration.seconds(3),
128
131
  ) =>
129
- Effect.gen(function*(_) {
132
+ Effect.gen(function* (_) {
130
133
  const queue = yield* _(Queue.unbounded<WebSocket.Data>())
131
134
 
132
135
  const run = onConnecting.pipe(
@@ -140,7 +143,7 @@ const make = Effect.gen(function*(_) {
140
143
  ),
141
144
  ],
142
145
  { concurrency: "unbounded", discard: true },
143
- )
146
+ ),
144
147
  ),
145
148
  Effect.scoped,
146
149
  Effect.retryWhile(isReconnect),
@@ -11,13 +11,14 @@ import type { WebSocketCloseError, WebSocketError } from "dfx/DiscordGateway/WS"
11
11
  import type * as Discord from "dfx/types"
12
12
  import * as EffectUtils from "dfx/utils/Effect"
13
13
 
14
- const fromDispatchFactory = <R, E>(
15
- source: Stream.Stream<R, E, Discord.GatewayPayload<Discord.ReceiveEvent>>,
16
- ) =>
17
- <K extends keyof Discord.ReceiveEvents>(
18
- event: K,
19
- ): Stream.Stream<R, E, Discord.ReceiveEvents[K]> =>
20
- Stream.filter(source, p => p.t === event).pipe(Stream.map(p => p.d! as any))
14
+ const fromDispatchFactory =
15
+ <R, E>(
16
+ source: Stream.Stream<R, E, Discord.GatewayPayload<Discord.ReceiveEvent>>,
17
+ ) =>
18
+ <K extends keyof Discord.ReceiveEvents>(
19
+ event: K,
20
+ ): Stream.Stream<R, E, Discord.ReceiveEvents[K]> =>
21
+ Stream.filter(source, p => p.t === event).pipe(Stream.map(p => p.d! as any))
21
22
 
22
23
  const handleDispatchFactory =
23
24
  (hub: Hub.Hub<Discord.GatewayPayload<Discord.ReceiveEvent>>) =>
@@ -57,7 +58,7 @@ export interface DiscordGateway {
57
58
  }
58
59
  export const DiscordGateway = Tag<DiscordGateway>()
59
60
 
60
- export const make = Effect.gen(function*(_) {
61
+ export const make = Effect.gen(function* (_) {
61
62
  const sharder = yield* _(Sharder)
62
63
  const hub = yield* _(
63
64
  Hub.unbounded<Discord.GatewayPayload<Discord.ReceiveEvent>>(),
@@ -9,10 +9,8 @@ export const routeFromConfig = (path: string, method: string) => {
9
9
  // Only keep major ID's
10
10
  const routeURL = path
11
11
  .split("?")[0]
12
- .replace(
13
- /\/([A-Za-z]+)\/(\d{16,21}|@me)/g,
14
- (match, resource) =>
15
- majorResources.includes(resource) ? match : `/${resource}`,
12
+ .replace(/\/([A-Za-z]+)\/(\d{16,21}|@me)/g, (match, resource) =>
13
+ majorResources.includes(resource) ? match : `/${resource}`,
16
14
  )
17
15
  // Strip reactions
18
16
  .replace(/\/reactions\/(.*)/, "/reactions")
@@ -29,7 +29,7 @@ export class DiscordRESTError {
29
29
  ) {}
30
30
  }
31
31
 
32
- const make = Effect.gen(function*(_) {
32
+ const make = Effect.gen(function* (_) {
33
33
  const { rest, token } = yield* _(DiscordConfig)
34
34
 
35
35
  const http = yield* _(Http.client.Client)
@@ -65,7 +65,7 @@ const make = Effect.gen(function*(_) {
65
65
  Effect.tap(invalid =>
66
66
  invalid
67
67
  ? maybeWait("dfx.rest.invalid", Duration.minutes(10), 10000)
68
- : Effect.unit
68
+ : Effect.unit,
69
69
  ),
70
70
  Effect.asUnit,
71
71
  )
@@ -90,7 +90,7 @@ const make = Effect.gen(function*(_) {
90
90
  bucket.limit,
91
91
  ),
92
92
  ),
93
- })
93
+ }),
94
94
  ),
95
95
  )
96
96
 
@@ -102,9 +102,8 @@ const make = Effect.gen(function*(_) {
102
102
  Effect.Do.pipe(
103
103
  Effect.let("route", () => routeFromConfig(request.url, request.method)),
104
104
  Effect.bind("rateLimit", () => rateLimitFromHeaders(response.headers)),
105
- Effect.bind(
106
- "hasBucket",
107
- ({ rateLimit }) => store.hasBucket(rateLimit.bucket),
105
+ Effect.bind("hasBucket", ({ rateLimit }) =>
106
+ store.hasBucket(rateLimit.bucket),
108
107
  ),
109
108
  Effect.flatMap(({ hasBucket, rateLimit, route }) => {
110
109
  const effectsToRun = [
@@ -118,9 +117,10 @@ const make = Effect.gen(function*(_) {
118
117
  store.putBucket({
119
118
  key: rateLimit.bucket,
120
119
  resetAfter: Duration.toMillis(rateLimit.retryAfter),
121
- limit: !hasBucket && rateLimit.remaining > 0
122
- ? rateLimit.remaining
123
- : rateLimit.limit,
120
+ limit:
121
+ !hasBucket && rateLimit.remaining > 0
122
+ ? rateLimit.remaining
123
+ : rateLimit.limit,
124
124
  }),
125
125
  )
126
126
  }
@@ -140,20 +140,19 @@ const make = Effect.gen(function*(_) {
140
140
  Http.request.prependUrl(req, rest.baseUrl),
141
141
  Http.request.setHeaders({
142
142
  Authorization: `Bot ${ConfigSecret.value(token)}`,
143
- "User-Agent":
144
- `DiscordBot (https://github.com/tim-smart/dfx, ${LIB_VERSION})`,
143
+ "User-Agent": `DiscordBot (https://github.com/tim-smart/dfx, ${LIB_VERSION})`,
145
144
  }),
146
- )
145
+ ),
147
146
  ),
148
147
  Http.client.catchAll(error =>
149
148
  error.reason === "StatusCode"
150
149
  ? error.response.json.pipe(
151
- Effect.mapError(_ => new DiscordRESTError(_)),
152
- Effect.flatMap(body =>
153
- Effect.fail(new DiscordRESTError(error, body))
154
- ),
155
- )
156
- : Effect.fail(new DiscordRESTError(error))
150
+ Effect.mapError(_ => new DiscordRESTError(_)),
151
+ Effect.flatMap(body =>
152
+ Effect.fail(new DiscordRESTError(error, body)),
153
+ ),
154
+ )
155
+ : Effect.fail(new DiscordRESTError(error)),
157
156
  ),
158
157
  )
159
158
 
@@ -201,9 +200,8 @@ const make = Effect.gen(function*(_) {
201
200
  Effect.zipRight(updateBuckets(request, response)),
202
201
  Effect.zipRight(
203
202
  Effect.sleep(
204
- Option.getOrElse(
205
- retryAfter(response.headers),
206
- () => Duration.seconds(5),
203
+ Option.getOrElse(retryAfter(response.headers), () =>
204
+ Duration.seconds(5),
207
205
  ),
208
206
  ),
209
207
  ),
@@ -221,9 +219,10 @@ const make = Effect.gen(function*(_) {
221
219
  options = {},
222
220
  params,
223
221
  url,
224
- }: Discord.Route<P, Partial<Http.request.Options.NoUrl>>): RestResponse<
225
- R
226
- > => {
222
+ }: Discord.Route<
223
+ P,
224
+ Partial<Http.request.Options.NoUrl>
225
+ >): RestResponse<R> => {
227
226
  const hasBody = method !== "GET" && method !== "DELETE"
228
227
  let request = Http.request.make(method as any)(url, options)
229
228
 
@@ -248,8 +247,7 @@ const make = Effect.gen(function*(_) {
248
247
  })
249
248
 
250
249
  export interface DiscordREST
251
- extends Discord.Endpoints<Partial<Http.request.Options.NoUrl>>
252
- {
250
+ extends Discord.Endpoints<Partial<Http.request.Options.NoUrl>> {
253
251
  readonly executor: <A = unknown>(
254
252
  request: Http.request.ClientRequest,
255
253
  ) => Effect.Effect<never, DiscordRESTError, ResponseWithData<A>>
@@ -33,14 +33,16 @@ export function toList<T extends Flags<any>>(
33
33
  * Returns a function that converts a list of flags names to a bigint bitfield.
34
34
  */
35
35
  export const fromListBigint =
36
- <T extends Flags<bigint>>(flags: T) => (list: Array<keyof T>) =>
36
+ <T extends Flags<bigint>>(flags: T) =>
37
+ (list: Array<keyof T>) =>
37
38
  list.reduce((acc, key) => acc | flags[key], BigInt(0))
38
39
 
39
40
  /**
40
41
  * Returns a function that converts a list of flags names to a bitfield.
41
42
  */
42
43
  export const fromList =
43
- <T extends Flags<number>>(flags: T) => (list: Array<keyof T>) =>
44
+ <T extends Flags<number>>(flags: T) =>
45
+ (list: Array<keyof T>) =>
44
46
  list.reduce((acc, key) => acc | flags[key], 0)
45
47
 
46
48
  /**
@@ -9,9 +9,10 @@ export const ALL = Flags.all(Discord.GatewayIntents)
9
9
  /**
10
10
  * Privileged intents
11
11
  */
12
- export const PRIVILEGED = Discord.GatewayIntents.GUILD_PRESENCES
13
- | Discord.GatewayIntents.GUILD_MEMBERS
14
- | Discord.GatewayIntents.MESSAGE_CONTENT
12
+ export const PRIVILEGED =
13
+ Discord.GatewayIntents.GUILD_PRESENCES |
14
+ Discord.GatewayIntents.GUILD_MEMBERS |
15
+ Discord.GatewayIntents.MESSAGE_CONTENT
15
16
 
16
17
  /**
17
18
  * Un-privileged intents
@@ -24,8 +24,8 @@ export const findSubCommand =
24
24
  optionsWithNested(interaction),
25
25
  Arr.findFirst(
26
26
  o =>
27
- o.type === Discord.ApplicationCommandOptionType.SUB_COMMAND
28
- && o.name === name,
27
+ o.type === Discord.ApplicationCommandOptionType.SUB_COMMAND &&
28
+ o.name === name,
29
29
  ),
30
30
  )
31
31
 
@@ -114,42 +114,46 @@ export const resolved = (data: Discord.Interaction) =>
114
114
  /**
115
115
  * Try find a matching option value from the interaction.
116
116
  */
117
- export const resolveOptionValue = <T>(
118
- name: string,
119
- f: (id: Discord.Snowflake, data: Discord.ResolvedDatum) => T | undefined,
120
- ) =>
121
- (a: Discord.Interaction): Option.Option<T> =>
122
- Option.Do.pipe(
123
- Option.bind("data", () =>
124
- Option.fromNullable(a.data as Discord.ApplicationCommandDatum)),
125
- Option.bind("id", ({ data }) =>
126
- Option.flatMapNullable(
127
- getOption(name)(data),
128
- ({ value }) =>
129
- value as Discord.Snowflake,
130
- )),
131
- Option.bind("r", () => resolved(a)),
132
- Option.flatMapNullable(({ id, r }) => f(id, r)),
133
- )
117
+ export const resolveOptionValue =
118
+ <T>(
119
+ name: string,
120
+ f: (id: Discord.Snowflake, data: Discord.ResolvedDatum) => T | undefined,
121
+ ) =>
122
+ (a: Discord.Interaction): Option.Option<T> =>
123
+ Option.Do.pipe(
124
+ Option.bind("data", () =>
125
+ Option.fromNullable(a.data as Discord.ApplicationCommandDatum),
126
+ ),
127
+ Option.bind("id", ({ data }) =>
128
+ Option.flatMapNullable(
129
+ getOption(name)(data),
130
+ ({ value }) => value as Discord.Snowflake,
131
+ ),
132
+ ),
133
+ Option.bind("r", () => resolved(a)),
134
+ Option.flatMapNullable(({ id, r }) => f(id, r)),
135
+ )
134
136
 
135
137
  /**
136
138
  * Try find matching option values from the interaction.
137
139
  */
138
- export const resolveValues = <T>(
139
- f: (id: Discord.Snowflake, data: Discord.ResolvedDatum) => T | undefined,
140
- ) =>
141
- (a: Discord.Interaction): Option.Option<ReadonlyArray<T>> =>
142
- Option.Do.pipe(
143
- Option.bind("values", () =>
144
- Option.flatMapNullable(
145
- Option.fromNullable(a.data as Discord.MessageComponentDatum),
146
- a => a.values as unknown as Array<string>,
147
- )),
148
- Option.bind("r", () => resolved(a)),
149
- Option.map(({ r, values }) =>
150
- Arr.compact(values.map(a => Option.fromNullable(f(a as any, r))))
151
- ),
152
- )
140
+ export const resolveValues =
141
+ <T>(
142
+ f: (id: Discord.Snowflake, data: Discord.ResolvedDatum) => T | undefined,
143
+ ) =>
144
+ (a: Discord.Interaction): Option.Option<ReadonlyArray<T>> =>
145
+ Option.Do.pipe(
146
+ Option.bind("values", () =>
147
+ Option.flatMapNullable(
148
+ Option.fromNullable(a.data as Discord.MessageComponentDatum),
149
+ a => a.values as unknown as Array<string>,
150
+ ),
151
+ ),
152
+ Option.bind("r", () => resolved(a)),
153
+ Option.map(({ r, values }) =>
154
+ Arr.compact(values.map(a => Option.fromNullable(f(a as any, r)))),
155
+ ),
156
+ )
153
157
 
154
158
  const extractComponents = (c: Discord.Component): Array<Discord.Component> => {
155
159
  if ("components" in c) {
@@ -211,27 +215,26 @@ export const componentValue =
211
215
 
212
216
  export type InteractionResponse =
213
217
  | {
214
- type: Discord.InteractionCallbackType.CHANNEL_MESSAGE_WITH_SOURCE
215
- data: Discord.InteractionCallbackMessage
216
- }
218
+ type: Discord.InteractionCallbackType.CHANNEL_MESSAGE_WITH_SOURCE
219
+ data: Discord.InteractionCallbackMessage
220
+ }
217
221
  | {
218
- type: Discord.InteractionCallbackType.UPDATE_MESSAGE
219
- data: Discord.InteractionCallbackMessage
220
- }
222
+ type: Discord.InteractionCallbackType.UPDATE_MESSAGE
223
+ data: Discord.InteractionCallbackMessage
224
+ }
221
225
  | {
222
- type: Discord.InteractionCallbackType.MODAL
223
- data: Discord.InteractionCallbackModal
224
- }
226
+ type: Discord.InteractionCallbackType.MODAL
227
+ data: Discord.InteractionCallbackModal
228
+ }
225
229
  | {
226
- type: Discord.InteractionCallbackType.DEFERRED_UPDATE_MESSAGE
227
- }
230
+ type: Discord.InteractionCallbackType.DEFERRED_UPDATE_MESSAGE
231
+ }
228
232
  | {
229
- type: Discord.InteractionCallbackType.DEFERRED_CHANNEL_MESSAGE_WITH_SOURCE
230
- }
233
+ type: Discord.InteractionCallbackType.DEFERRED_CHANNEL_MESSAGE_WITH_SOURCE
234
+ }
231
235
  | {
232
- type:
233
- Discord.InteractionCallbackType.APPLICATION_COMMAND_AUTOCOMPLETE_RESULT
234
- data: Discord.InteractionCallbackAutocomplete
235
- }
236
+ type: Discord.InteractionCallbackType.APPLICATION_COMMAND_AUTOCOMPLETE_RESULT
237
+ data: Discord.InteractionCallbackAutocomplete
238
+ }
236
239
 
237
240
  export const response = (r: InteractionResponse) => r
@@ -13,5 +13,5 @@ export const roles =
13
13
  * Type-guard function for checking if the object is a guild member
14
14
  */
15
15
  export const is = (thing: unknown): thing is Discord.GuildMember =>
16
- Object.prototype.hasOwnProperty.call(thing, "roles")
17
- && Object.prototype.hasOwnProperty.call(thing, "joined_at")
16
+ Object.prototype.hasOwnProperty.call(thing, "roles") &&
17
+ Object.prototype.hasOwnProperty.call(thing, "joined_at")
@@ -84,8 +84,8 @@ export const forChannel =
84
84
  } else {
85
85
  const everyone = roles.find(role => role.name === "@everyone")
86
86
 
87
- basePermissions = BigInt(everyone?.permissions || "0")
88
- | BigInt(memberOrRole.permissions)
87
+ basePermissions =
88
+ BigInt(everyone?.permissions || "0") | BigInt(memberOrRole.permissions)
89
89
  filteredOverwrites = overwrites.filter(
90
90
  overwriteIsForRole(guild_id)(memberOrRole),
91
91
  )
@@ -8,8 +8,10 @@ import { DiscordREST, type DiscordRESTError } from "dfx/DiscordREST"
8
8
  import type * as D from "dfx/Interactions/definitions"
9
9
  import type * as Discord from "dfx/types"
10
10
 
11
- type ExtractTag<A> = A extends { _tag: infer Tag } ? Tag extends string ? Tag
12
- : never
11
+ type ExtractTag<A> = A extends { _tag: infer Tag }
12
+ ? Tag extends string
13
+ ? Tag
14
+ : never
13
15
  : never
14
16
 
15
17
  /**
@@ -130,17 +132,15 @@ export class InteractionBuilder<R, E, TE> {
130
132
  Chunk.map(c => c.command),
131
133
  )
132
134
 
133
- return Effect.flatMap(
134
- DiscordREST,
135
- rest =>
136
- rest.getCurrentBotApplicationInformation().pipe(
137
- Effect.flatMap(r => r.json),
138
- Effect.flatMap(app =>
139
- rest.bulkOverwriteGlobalApplicationCommands(app.id, {
140
- body: Http.body.unsafeJson(Chunk.toReadonlyArray(commands)),
141
- })
142
- ),
135
+ return Effect.flatMap(DiscordREST, rest =>
136
+ rest.getCurrentBotApplicationInformation().pipe(
137
+ Effect.flatMap(r => r.json),
138
+ Effect.flatMap(app =>
139
+ rest.bulkOverwriteGlobalApplicationCommands(app.id, {
140
+ body: Http.body.unsafeJson(Chunk.toReadonlyArray(commands)),
141
+ }),
143
142
  ),
143
+ ),
144
144
  )
145
145
  }
146
146
 
@@ -154,14 +154,12 @@ export class InteractionBuilder<R, E, TE> {
154
154
  Chunk.map(c => c.command),
155
155
  )
156
156
 
157
- return Effect.flatMap(
158
- DiscordREST,
159
- rest =>
160
- rest.bulkOverwriteGuildApplicationCommands(
161
- appId,
162
- guildId,
163
- Chunk.toReadonlyArray(commands) as any,
164
- ),
157
+ return Effect.flatMap(DiscordREST, rest =>
158
+ rest.bulkOverwriteGuildApplicationCommands(
159
+ appId,
160
+ guildId,
161
+ Chunk.toReadonlyArray(commands) as any,
162
+ ),
165
163
  )
166
164
  }
167
165
  }
@@ -23,7 +23,10 @@ export const SubCommandContext = Tag<SubCommandContext>()
23
23
 
24
24
  export class ResolvedDataNotFound {
25
25
  readonly _tag = "ResolvedDataNotFound"
26
- constructor(readonly data: Discord.Interaction, readonly name?: string) {}
26
+ constructor(
27
+ readonly data: Discord.Interaction,
28
+ readonly name?: string,
29
+ ) {}
27
30
  }
28
31
 
29
32
  export const resolvedValues = <A>(
@@ -33,7 +36,8 @@ export const resolvedValues = <A>(
33
36
  Effect.mapError(
34
37
  IxHelpers.resolveValues(f)(ix),
35
38
  () => new ResolvedDataNotFound(ix),
36
- ))
39
+ ),
40
+ )
37
41
 
38
42
  export const resolved = <A>(
39
43
  name: string,
@@ -43,7 +47,8 @@ export const resolved = <A>(
43
47
  Effect.mapError(
44
48
  IxHelpers.resolveOptionValue(name, f)(ix),
45
49
  () => new ResolvedDataNotFound(ix, name),
46
- ))
50
+ ),
51
+ )
47
52
 
48
53
  export const focusedOptionValue = Effect.map(
49
54
  FocusedOptionContext,
@@ -64,18 +69,20 @@ export const handleSubCommands = <
64
69
  commands: NER,
65
70
  ): Effect.Effect<
66
71
  | Exclude<
67
- [NER[keyof NER]] extends [
68
- { [Effect.EffectTypeId]: { _R: (_: never) => infer R } },
69
- ] ? R
70
- : never,
71
- SubCommandContext
72
- >
72
+ [NER[keyof NER]] extends [
73
+ { [Effect.EffectTypeId]: { _R: (_: never) => infer R } },
74
+ ]
75
+ ? R
76
+ : never,
77
+ SubCommandContext
78
+ >
73
79
  | Discord.Interaction
74
80
  | Discord.ApplicationCommandDatum,
75
81
  | ([NER[keyof NER]] extends [
76
- { [Effect.EffectTypeId]: { _E: (_: never) => infer E } },
77
- ] ? E
78
- : never)
82
+ { [Effect.EffectTypeId]: { _E: (_: never) => infer E } },
83
+ ]
84
+ ? E
85
+ : never)
79
86
  | SubCommandNotFound,
80
87
  Discord.InteractionResponse
81
88
  > =>
@@ -84,12 +91,12 @@ export const handleSubCommands = <
84
91
  Effect.mapError(
85
92
  Arr.findFirst(IxHelpers.allSubCommands(data), _ => !!commands[_.name]),
86
93
  () => new SubCommandNotFound(data),
87
- )
94
+ ),
88
95
  ),
89
96
  Effect.flatMap(command =>
90
97
  Effect.provideService(commands[command.name], SubCommandContext, {
91
98
  command,
92
- })
99
+ }),
93
100
  ),
94
101
  )
95
102
 
@@ -125,10 +132,12 @@ export const optionValue = (name: string) =>
125
132
  {
126
133
  onNone: () =>
127
134
  Effect.flatMap(ApplicationCommand, data =>
128
- Effect.fail(new RequiredOptionNotFound(data, name))),
135
+ Effect.fail(new RequiredOptionNotFound(data, name)),
136
+ ),
129
137
  onSome: Effect.succeed,
130
138
  },
131
- ))
139
+ ),
140
+ )
132
141
 
133
142
  export const optionValueOptional = (name: string) =>
134
143
  Effect.map(
@@ -143,7 +152,10 @@ export const modalValueOption = (name: string) =>
143
152
 
144
153
  export class ModalValueNotFound {
145
154
  readonly _tag = "ModalValueNotFound"
146
- constructor(readonly data: Discord.ModalSubmitDatum, readonly name: string) {}
155
+ constructor(
156
+ readonly data: Discord.ModalSubmitDatum,
157
+ readonly name: string,
158
+ ) {}
147
159
  }
148
160
 
149
161
  export const modalValue = (name: string) =>
@@ -151,4 +163,5 @@ export const modalValue = (name: string) =>
151
163
  Effect.mapError(
152
164
  IxHelpers.componentValue(name)(data),
153
165
  () => new ModalValueNotFound(data, name),
154
- ))
166
+ ),
167
+ )