dfx 0.51.0 → 0.51.2
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/Cache/driver.d.ts +17 -16
- package/Cache/driver.d.ts.map +1 -1
- package/Cache/driver.js +10 -2
- package/Cache/driver.js.map +1 -1
- package/Cache/memory.d.ts +3 -3
- package/Cache/memory.d.ts.map +1 -1
- package/Cache/memory.js +55 -45
- package/Cache/memory.js.map +1 -1
- package/Cache/memoryTTL.d.ts +7 -6
- package/Cache/memoryTTL.d.ts.map +1 -1
- package/Cache/memoryTTL.js +126 -118
- package/Cache/memoryTTL.js.map +1 -1
- package/Cache/prelude.d.ts +53 -47
- package/Cache/prelude.d.ts.map +1 -1
- package/Cache/prelude.js +125 -96
- package/Cache/prelude.js.map +1 -1
- package/Cache.d.ts +33 -32
- package/Cache.d.ts.map +1 -1
- package/Cache.js +137 -65
- package/Cache.js.map +1 -1
- package/DiscordConfig.d.ts +26 -20
- package/DiscordConfig.d.ts.map +1 -1
- package/DiscordConfig.js +43 -25
- package/DiscordConfig.js.map +1 -1
- package/DiscordGateway/DiscordWS.d.ts +17 -14
- package/DiscordGateway/DiscordWS.d.ts.map +1 -1
- package/DiscordGateway/DiscordWS.js +49 -30
- package/DiscordGateway/DiscordWS.js.map +1 -1
- package/DiscordGateway/Shard/heartbeats.d.ts +7 -3
- package/DiscordGateway/Shard/heartbeats.d.ts.map +1 -1
- package/DiscordGateway/Shard/heartbeats.js +28 -18
- package/DiscordGateway/Shard/heartbeats.js.map +1 -1
- package/DiscordGateway/Shard/identify.d.ts +10 -8
- package/DiscordGateway/Shard/identify.d.ts.map +1 -1
- package/DiscordGateway/Shard/identify.js +41 -24
- package/DiscordGateway/Shard/identify.js.map +1 -1
- package/DiscordGateway/Shard/invalidSession.d.ts +6 -3
- package/DiscordGateway/Shard/invalidSession.d.ts.map +1 -1
- package/DiscordGateway/Shard/invalidSession.js +14 -5
- package/DiscordGateway/Shard/invalidSession.js.map +1 -1
- package/DiscordGateway/Shard/sendEvents.d.ts +1 -1
- package/DiscordGateway/Shard/sendEvents.d.ts.map +1 -1
- package/DiscordGateway/Shard/sendEvents.js +30 -18
- package/DiscordGateway/Shard/sendEvents.js.map +1 -1
- package/DiscordGateway/Shard/utils.d.ts +7 -3
- package/DiscordGateway/Shard/utils.d.ts.map +1 -1
- package/DiscordGateway/Shard/utils.js +19 -9
- package/DiscordGateway/Shard/utils.js.map +1 -1
- package/DiscordGateway/Shard.d.ts +15 -10
- package/DiscordGateway/Shard.d.ts.map +1 -1
- package/DiscordGateway/Shard.js +109 -87
- package/DiscordGateway/Shard.js.map +1 -1
- package/DiscordGateway/ShardStore.d.ts +9 -6
- package/DiscordGateway/ShardStore.d.ts.map +1 -1
- package/DiscordGateway/ShardStore.js +30 -18
- package/DiscordGateway/ShardStore.js.map +1 -1
- package/DiscordGateway/Sharder.d.ts +17 -11
- package/DiscordGateway/Sharder.d.ts.map +1 -1
- package/DiscordGateway/Sharder.js +82 -52
- package/DiscordGateway/Sharder.js.map +1 -1
- package/DiscordGateway/WS.d.ts +13 -10
- package/DiscordGateway/WS.d.ts.map +1 -1
- package/DiscordGateway/WS.js +100 -74
- package/DiscordGateway/WS.js.map +1 -1
- package/DiscordGateway.d.ts +19 -13
- package/DiscordGateway.d.ts.map +1 -1
- package/DiscordGateway.js +45 -32
- package/DiscordGateway.js.map +1 -1
- package/DiscordREST/types.d.ts +5 -5
- package/DiscordREST/types.d.ts.map +1 -1
- package/DiscordREST/types.js +5 -1
- package/DiscordREST/types.js.map +1 -1
- package/DiscordREST/utils.d.ts +3 -2
- package/DiscordREST/utils.d.ts.map +1 -1
- package/DiscordREST/utils.js +27 -17
- package/DiscordREST/utils.js.map +1 -1
- package/DiscordREST.d.ts +11 -8
- package/DiscordREST.d.ts.map +1 -1
- package/DiscordREST.js +141 -127
- package/DiscordREST.js.map +1 -1
- package/Helpers/flags.js +31 -19
- package/Helpers/flags.js.map +1 -1
- package/Helpers/intents.d.ts.map +1 -1
- package/Helpers/intents.js +22 -10
- package/Helpers/intents.js.map +1 -1
- package/Helpers/interactions.d.ts +22 -21
- package/Helpers/interactions.d.ts.map +1 -1
- package/Helpers/interactions.js +75 -39
- package/Helpers/interactions.js.map +1 -1
- package/Helpers/members.d.ts +3 -3
- package/Helpers/members.d.ts.map +1 -1
- package/Helpers/members.js +10 -3
- package/Helpers/members.js.map +1 -1
- package/Helpers/permissions.d.ts +5 -4
- package/Helpers/permissions.d.ts.map +1 -1
- package/Helpers/permissions.js +69 -52
- package/Helpers/permissions.js.map +1 -1
- package/Helpers/ui.d.ts +1 -1
- package/Helpers/ui.d.ts.map +1 -1
- package/Helpers/ui.js +44 -29
- package/Helpers/ui.js.map +1 -1
- package/Interactions/builder.d.ts +20 -19
- package/Interactions/builder.d.ts.map +1 -1
- package/Interactions/builder.js +66 -63
- package/Interactions/builder.js.map +1 -1
- package/Interactions/context.d.ts +26 -23
- package/Interactions/context.d.ts.map +1 -1
- package/Interactions/context.js +86 -57
- package/Interactions/context.js.map +1 -1
- package/Interactions/definitions.d.ts +33 -30
- package/Interactions/definitions.d.ts.map +1 -1
- package/Interactions/definitions.js +61 -47
- package/Interactions/definitions.js.map +1 -1
- package/Interactions/gateway.d.ts +15 -10
- package/Interactions/gateway.d.ts.map +1 -1
- package/Interactions/gateway.js +55 -42
- package/Interactions/gateway.js.map +1 -1
- package/Interactions/handlers.d.ts +6 -4
- package/Interactions/handlers.d.ts.map +1 -1
- package/Interactions/handlers.js +68 -57
- package/Interactions/handlers.js.map +1 -1
- package/Interactions/index.d.ts +11 -10
- package/Interactions/index.d.ts.map +1 -1
- package/Interactions/index.js +95 -10
- package/Interactions/index.js.map +1 -1
- package/Interactions/utils.d.ts +42 -40
- package/Interactions/utils.d.ts.map +1 -1
- package/Interactions/utils.js +40 -32
- package/Interactions/utils.js.map +1 -1
- package/Interactions/webhook.d.ts +20 -16
- package/Interactions/webhook.d.ts.map +1 -1
- package/Interactions/webhook.js +73 -41
- package/Interactions/webhook.js.map +1 -1
- package/Log.d.ts +8 -5
- package/Log.d.ts.map +1 -1
- package/Log.js +23 -14
- package/Log.js.map +1 -1
- package/RateLimit/memory.d.ts +1 -1
- package/RateLimit/memory.d.ts.map +1 -1
- package/RateLimit/memory.js +46 -33
- package/RateLimit/memory.js.map +1 -1
- package/RateLimit/utils.d.ts +1 -1
- package/RateLimit/utils.d.ts.map +1 -1
- package/RateLimit/utils.js +23 -16
- package/RateLimit/utils.js.map +1 -1
- package/RateLimit.d.ts +18 -14
- package/RateLimit.d.ts.map +1 -1
- package/RateLimit.js +40 -26
- package/RateLimit.js.map +1 -1
- package/gateway.d.ts +20 -13
- package/gateway.d.ts.map +1 -1
- package/gateway.js +72 -25
- package/gateway.js.map +1 -1
- package/index.d.ts +14 -13
- package/index.d.ts.map +1 -1
- package/index.js +71 -13
- package/index.js.map +1 -1
- package/mjs/Cache/driver.mjs +3 -0
- package/mjs/Cache/driver.mjs.map +1 -0
- package/mjs/Cache/memory.mjs +48 -0
- package/mjs/Cache/memory.mjs.map +1 -0
- package/mjs/Cache/memoryTTL.mjs +119 -0
- package/mjs/Cache/memoryTTL.mjs.map +1 -0
- package/mjs/Cache/prelude.mjs +125 -0
- package/mjs/Cache/prelude.mjs.map +1 -0
- package/mjs/Cache.mjs +87 -0
- package/mjs/Cache.mjs.map +1 -0
- package/mjs/DiscordConfig.mjs +34 -0
- package/mjs/DiscordConfig.mjs.map +1 -0
- package/mjs/DiscordGateway/DiscordWS.mjs +39 -0
- package/mjs/DiscordGateway/DiscordWS.mjs.map +1 -0
- package/mjs/DiscordGateway/Shard/heartbeats.mjs +21 -0
- package/mjs/DiscordGateway/Shard/heartbeats.mjs.map +1 -0
- package/mjs/DiscordGateway/Shard/identify.mjs +37 -0
- package/mjs/DiscordGateway/Shard/identify.mjs.map +1 -0
- package/mjs/DiscordGateway/Shard/invalidSession.mjs +6 -0
- package/mjs/DiscordGateway/Shard/invalidSession.mjs.map +1 -0
- package/mjs/DiscordGateway/Shard/sendEvents.mjs +25 -0
- package/mjs/DiscordGateway/Shard/sendEvents.mjs.map +1 -0
- package/mjs/DiscordGateway/Shard/utils.mjs +11 -0
- package/mjs/DiscordGateway/Shard/utils.mjs.map +1 -0
- package/mjs/DiscordGateway/Shard.mjs +99 -0
- package/mjs/DiscordGateway/Shard.mjs.map +1 -0
- package/mjs/DiscordGateway/ShardStore.mjs +24 -0
- package/mjs/DiscordGateway/ShardStore.mjs.map +1 -0
- package/mjs/DiscordGateway/Sharder.mjs +73 -0
- package/mjs/DiscordGateway/Sharder.mjs.map +1 -0
- package/mjs/DiscordGateway/WS.mjs +94 -0
- package/mjs/DiscordGateway/WS.mjs.map +1 -0
- package/mjs/DiscordGateway.mjs +36 -0
- package/mjs/DiscordGateway.mjs.map +1 -0
- package/mjs/DiscordREST/types.mjs +2 -0
- package/mjs/DiscordREST/types.mjs.map +1 -0
- package/mjs/DiscordREST/utils.mjs +19 -0
- package/mjs/DiscordREST/utils.mjs.map +1 -0
- package/mjs/DiscordREST.mjs +129 -0
- package/mjs/DiscordREST.mjs.map +1 -0
- package/mjs/Helpers/flags.mjs +36 -0
- package/mjs/Helpers/flags.mjs.map +1 -0
- package/mjs/Helpers/intents.mjs +27 -0
- package/mjs/Helpers/intents.mjs.map +1 -0
- package/mjs/Helpers/interactions.mjs +104 -0
- package/mjs/Helpers/interactions.mjs.map +1 -0
- package/mjs/Helpers/members.mjs +9 -0
- package/mjs/Helpers/members.mjs.map +1 -0
- package/mjs/Helpers/permissions.mjs +82 -0
- package/mjs/Helpers/permissions.mjs.map +1 -0
- package/mjs/Helpers/ui.mjs +66 -0
- package/mjs/Helpers/ui.mjs.map +1 -0
- package/mjs/Interactions/builder.mjs +62 -0
- package/mjs/Interactions/builder.mjs.map +1 -0
- package/mjs/Interactions/context.mjs +63 -0
- package/mjs/Interactions/context.mjs.map +1 -0
- package/mjs/Interactions/definitions.mjs +51 -0
- package/mjs/Interactions/definitions.mjs.map +1 -0
- package/mjs/Interactions/gateway.mjs +48 -0
- package/mjs/Interactions/gateway.mjs.map +1 -0
- package/mjs/Interactions/handlers.mjs +61 -0
- package/mjs/Interactions/handlers.mjs.map +1 -0
- package/mjs/Interactions/index.mjs +12 -0
- package/mjs/Interactions/index.mjs.map +1 -0
- package/mjs/Interactions/utils.mjs +35 -0
- package/mjs/Interactions/utils.mjs.map +1 -0
- package/mjs/Interactions/webhook.mjs +73 -0
- package/mjs/Interactions/webhook.mjs.map +1 -0
- package/mjs/Log.mjs +15 -0
- package/mjs/Log.mjs.map +1 -0
- package/mjs/RateLimit/memory.mjs +39 -0
- package/mjs/RateLimit/memory.mjs.map +1 -0
- package/mjs/RateLimit/utils.mjs +18 -0
- package/mjs/RateLimit/utils.mjs.map +1 -0
- package/mjs/RateLimit.mjs +29 -0
- package/mjs/RateLimit.mjs.map +1 -0
- package/mjs/gateway.mjs +27 -0
- package/mjs/gateway.mjs.map +1 -0
- package/mjs/index.mjs +15 -0
- package/mjs/index.mjs.map +1 -0
- package/mjs/types.mjs +1211 -0
- package/mjs/types.mjs.map +1 -0
- package/mjs/utils/Effect.mjs +28 -0
- package/mjs/utils/Effect.mjs.map +1 -0
- package/mjs/utils/tsplus.mjs +2 -0
- package/mjs/utils/tsplus.mjs.map +1 -0
- package/mjs/version.mjs +2 -0
- package/mjs/version.mjs.map +1 -0
- package/mjs/webhooks.mjs +30 -0
- package/mjs/webhooks.mjs.map +1 -0
- package/package.json +46 -50
- package/src/Cache/driver.ts +27 -15
- package/src/Cache/memory.ts +9 -5
- package/src/Cache/memoryTTL.ts +69 -53
- package/src/Cache/prelude.ts +113 -91
- package/src/Cache.ts +73 -58
- package/src/DiscordConfig.ts +33 -19
- package/src/DiscordGateway/DiscordWS.ts +28 -25
- package/src/DiscordGateway/Shard/heartbeats.ts +47 -27
- package/src/DiscordGateway/Shard/identify.ts +29 -25
- package/src/DiscordGateway/Shard/invalidSession.ts +9 -7
- package/src/DiscordGateway/Shard/sendEvents.ts +1 -1
- package/src/DiscordGateway/Shard/utils.ts +33 -9
- package/src/DiscordGateway/Shard.ts +119 -99
- package/src/DiscordGateway/ShardStore.ts +12 -5
- package/src/DiscordGateway/Sharder.ts +95 -74
- package/src/DiscordGateway/WS.ts +85 -60
- package/src/DiscordGateway.ts +58 -18
- package/src/DiscordREST/types.ts +5 -5
- package/src/DiscordREST/utils.ts +10 -7
- package/src/DiscordREST.ts +152 -132
- package/src/Helpers/intents.ts +1 -0
- package/src/Helpers/interactions.ts +51 -38
- package/src/Helpers/members.ts +2 -0
- package/src/Helpers/permissions.ts +6 -5
- package/src/Helpers/ui.ts +1 -1
- package/src/Interactions/builder.ts +56 -43
- package/src/Interactions/context.ts +68 -38
- package/src/Interactions/definitions.ts +32 -24
- package/src/Interactions/gateway.ts +72 -47
- package/src/Interactions/handlers.ts +56 -39
- package/src/Interactions/index.ts +6 -5
- package/src/Interactions/utils.ts +32 -21
- package/src/Interactions/webhook.ts +78 -42
- package/src/Log.ts +4 -0
- package/src/RateLimit/memory.ts +10 -4
- package/src/RateLimit/utils.ts +1 -1
- package/src/RateLimit.ts +38 -25
- package/src/gateway.ts +62 -25
- package/src/index.ts +29 -15
- package/src/utils/Effect.ts +69 -0
- package/src/version.ts +1 -0
- package/src/webhooks.ts +47 -20
- package/tsconfig.base.json +48 -0
- package/tsconfig.build.json +10 -0
- package/tsconfig.examples.json +11 -0
- package/tsconfig.json +12 -8
- package/tsconfig.madge.json +12 -0
- package/tsconfig.test.json +10 -0
- package/types.d.ts.map +1 -1
- package/types.js +1216 -1200
- package/types.js.map +1 -1
- package/utils/Effect.d.ts +8 -0
- package/utils/Effect.d.ts.map +1 -0
- package/utils/Effect.js +38 -0
- package/utils/Effect.js.map +1 -0
- package/utils/tsplus.js +5 -1
- package/utils/tsplus.js.map +1 -1
- package/version.d.ts +2 -0
- package/version.d.ts.map +1 -0
- package/version.js +9 -0
- package/version.js.map +1 -0
- package/webhooks.d.ts +14 -9
- package/webhooks.d.ts.map +1 -1
- package/webhooks.js +76 -27
- package/webhooks.js.map +1 -1
- package/_common.d.ts +0 -37
- package/_common.d.ts.map +0 -1
- package/_common.js +0 -8
- package/_common.js.map +0 -1
- package/global.d.ts +0 -18
- package/global.d.ts.map +0 -1
- package/global.js +0 -2
- package/global.js.map +0 -1
- package/src/_common.ts +0 -43
- package/src/global.ts +0 -45
- package/src/package.json +0 -52
- package/src/utils/effect.ts +0 -0
- package/src/utils/hub.ts +0 -47
- package/tsplus.config.json +0 -8
- package/utils/effect.d.ts +0 -2
- package/utils/effect.d.ts.map +0 -1
- package/utils/effect.js +0 -2
- package/utils/effect.js.map +0 -1
- package/utils/hub.d.ts +0 -12
- package/utils/hub.d.ts.map +0 -1
- package/utils/hub.js +0 -26
- package/utils/hub.js.map +0 -1
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
import * as Http from "@effect-http/client"
|
|
2
|
+
import * as Chunk from "@effect/data/Chunk"
|
|
3
|
+
import { identity } from "@effect/data/Function"
|
|
4
|
+
import type * as Cause from "@effect/io/Cause"
|
|
5
|
+
import * as Effect from "@effect/io/Effect"
|
|
2
6
|
import { catchTag } from "@effect/io/Effect"
|
|
3
|
-
import { DiscordREST } from "dfx"
|
|
4
|
-
import
|
|
5
|
-
import * as D from "
|
|
6
|
-
import { DiscordRESTError } from "dfx/DiscordREST"
|
|
7
|
+
import { DiscordREST, type DiscordRESTError } from "dfx/DiscordREST"
|
|
8
|
+
import type * as Discord from "dfx/types"
|
|
9
|
+
import type * as D from "dfx/Interactions/definitions"
|
|
7
10
|
|
|
8
11
|
type ExtractTag<A> = A extends { _tag: infer Tag }
|
|
9
12
|
? Tag extends string
|
|
@@ -16,49 +19,53 @@ type ExtractTag<A> = A extends { _tag: infer Tag }
|
|
|
16
19
|
*/
|
|
17
20
|
export class InteractionBuilder<R, E, TE> {
|
|
18
21
|
constructor(
|
|
19
|
-
readonly definitions: Chunk<
|
|
22
|
+
readonly definitions: Chunk.Chunk<
|
|
20
23
|
readonly [
|
|
21
24
|
handler: D.InteractionDefinition<R, E>,
|
|
22
|
-
transform: (
|
|
25
|
+
transform: (
|
|
26
|
+
self: Effect.Effect<any, any, any>,
|
|
27
|
+
) => Effect.Effect<R, TE, void>,
|
|
23
28
|
]
|
|
24
29
|
>,
|
|
25
|
-
readonly transform: (
|
|
30
|
+
readonly transform: (
|
|
31
|
+
self: Effect.Effect<any, any, any>,
|
|
32
|
+
) => Effect.Effect<R, TE, void>,
|
|
26
33
|
) {}
|
|
27
34
|
|
|
28
35
|
add<R1, E1>(definition: D.InteractionDefinition<R1, E1>) {
|
|
29
36
|
return new InteractionBuilder<R | R1, E | E1, TE | E1>(
|
|
30
|
-
this.definitions
|
|
37
|
+
Chunk.append(this.definitions, [definition, this.transform] as const),
|
|
31
38
|
this.transform,
|
|
32
39
|
)
|
|
33
40
|
}
|
|
34
41
|
|
|
35
42
|
concat<R1, E1, TE1>(builder: InteractionBuilder<R1, E1, TE1>) {
|
|
36
43
|
return new InteractionBuilder<R | R1, E | E1, TE | TE1>(
|
|
37
|
-
this.definitions
|
|
44
|
+
Chunk.appendAll(this.definitions, builder.definitions),
|
|
38
45
|
this.transform,
|
|
39
46
|
)
|
|
40
47
|
}
|
|
41
48
|
|
|
42
49
|
private transformTransform<R1, E1>(
|
|
43
|
-
f: (selr: Effect<R, TE, void>) => Effect<R1, E1, void>,
|
|
50
|
+
f: (selr: Effect.Effect<R, TE, void>) => Effect.Effect<R1, E1, void>,
|
|
44
51
|
) {
|
|
45
52
|
return new InteractionBuilder<R1, E, E1>(
|
|
46
|
-
this.definitions
|
|
53
|
+
Chunk.map(this.definitions, ([d, t]) => [d as any, _ => f(t(_)) as any]),
|
|
47
54
|
_ => f(this.transform(_)) as any,
|
|
48
55
|
)
|
|
49
56
|
}
|
|
50
57
|
|
|
51
58
|
private transformHandlers<R1, E1>(
|
|
52
59
|
f: (
|
|
53
|
-
selr: Effect<R, E, Discord.InteractionResponse>,
|
|
54
|
-
) => Effect<R1, E1, Discord.InteractionResponse>,
|
|
60
|
+
selr: Effect.Effect<R, E, Discord.InteractionResponse>,
|
|
61
|
+
) => Effect.Effect<R1, E1, Discord.InteractionResponse>,
|
|
55
62
|
) {
|
|
56
63
|
return new InteractionBuilder<
|
|
57
64
|
R1,
|
|
58
65
|
E1,
|
|
59
66
|
Exclude<TE, Exclude<E, E1>> | Exclude<E1, E>
|
|
60
67
|
>(
|
|
61
|
-
this.definitions
|
|
68
|
+
Chunk.map(this.definitions, ([d, t]) => [
|
|
62
69
|
{
|
|
63
70
|
...d,
|
|
64
71
|
handle: Effect.isEffect(d.handle)
|
|
@@ -71,29 +78,33 @@ export class InteractionBuilder<R, E, TE> {
|
|
|
71
78
|
)
|
|
72
79
|
}
|
|
73
80
|
|
|
74
|
-
catchAllCause<R1, E1>(
|
|
75
|
-
|
|
81
|
+
catchAllCause<R1, E1>(
|
|
82
|
+
f: (cause: Cause.Cause<TE>) => Effect.Effect<R1, E1, void>,
|
|
83
|
+
) {
|
|
84
|
+
return this.transformTransform<R | R1, E1>(Effect.catchAllCause(f))
|
|
76
85
|
}
|
|
77
86
|
|
|
78
87
|
catchAllCauseRespond<R1, E1>(
|
|
79
|
-
f: (
|
|
88
|
+
f: (
|
|
89
|
+
cause: Cause.Cause<E>,
|
|
90
|
+
) => Effect.Effect<R1, E1, Discord.InteractionResponse>,
|
|
80
91
|
) {
|
|
81
|
-
return this.transformHandlers<R | R1, E1>(
|
|
92
|
+
return this.transformHandlers<R | R1, E1>(Effect.catchAllCause(f))
|
|
82
93
|
}
|
|
83
94
|
|
|
84
|
-
catchAll<R1, E1>(f: (error: TE) => Effect<R1, E1, void>) {
|
|
85
|
-
return this.transformTransform<R | R1, E1>(
|
|
95
|
+
catchAll<R1, E1>(f: (error: TE) => Effect.Effect<R1, E1, void>) {
|
|
96
|
+
return this.transformTransform<R | R1, E1>(Effect.catchAll(f))
|
|
86
97
|
}
|
|
87
98
|
|
|
88
99
|
catchAllRespond<R1, E1>(
|
|
89
|
-
f: (error: E) => Effect<R1, E1, Discord.InteractionResponse>,
|
|
100
|
+
f: (error: E) => Effect.Effect<R1, E1, Discord.InteractionResponse>,
|
|
90
101
|
) {
|
|
91
|
-
return this.transformHandlers<R | R1, E1>(
|
|
102
|
+
return this.transformHandlers<R | R1, E1>(Effect.catchAll(f))
|
|
92
103
|
}
|
|
93
104
|
|
|
94
105
|
catchTag<T extends ExtractTag<E>, R1, E1>(
|
|
95
106
|
tag: T,
|
|
96
|
-
f: (error: Extract<TE, { _tag: T }>) => Effect<R1, E1, void>,
|
|
107
|
+
f: (error: Extract<TE, { _tag: T }>) => Effect.Effect<R1, E1, void>,
|
|
97
108
|
) {
|
|
98
109
|
return this.transformTransform<R | R1, Exclude<TE, { _tag: T }> | E1>(
|
|
99
110
|
_ => catchTag(_ as any, tag, f as any) as any,
|
|
@@ -104,7 +115,7 @@ export class InteractionBuilder<R, E, TE> {
|
|
|
104
115
|
tag: T,
|
|
105
116
|
f: (
|
|
106
117
|
error: Extract<E, { _tag: T }>,
|
|
107
|
-
) => Effect<R1, E1, Discord.InteractionResponse>,
|
|
118
|
+
) => Effect.Effect<R1, E1, Discord.InteractionResponse>,
|
|
108
119
|
) {
|
|
109
120
|
return this.transformHandlers<R | R1, Exclude<E, { _tag: T }> | E1>(
|
|
110
121
|
_ => catchTag(_ as any, tag, f as any) as any,
|
|
@@ -112,40 +123,42 @@ export class InteractionBuilder<R, E, TE> {
|
|
|
112
123
|
}
|
|
113
124
|
|
|
114
125
|
get syncGlobal() {
|
|
115
|
-
const commands = this.definitions
|
|
116
|
-
.map(([d, _]) => d)
|
|
117
|
-
.filter(
|
|
126
|
+
const commands = this.definitions.pipe(
|
|
127
|
+
Chunk.map(([d, _]) => d),
|
|
128
|
+
Chunk.filter(
|
|
118
129
|
(c): c is D.GlobalApplicationCommand<R, E> =>
|
|
119
130
|
c._tag === "GlobalApplicationCommand",
|
|
120
|
-
)
|
|
121
|
-
.map(c => c.command)
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
.flatMap(r => r.json)
|
|
127
|
-
.flatMap(app =>
|
|
131
|
+
),
|
|
132
|
+
Chunk.map(c => c.command),
|
|
133
|
+
)
|
|
134
|
+
|
|
135
|
+
return Effect.flatMap(DiscordREST, rest =>
|
|
136
|
+
rest.getCurrentBotApplicationInformation().pipe(
|
|
137
|
+
Effect.flatMap(r => r.json),
|
|
138
|
+
Effect.flatMap(app =>
|
|
128
139
|
rest.bulkOverwriteGlobalApplicationCommands(app.id, {
|
|
129
|
-
body: Http.body.json(
|
|
140
|
+
body: Http.body.json(Chunk.toReadonlyArray(commands)),
|
|
130
141
|
}),
|
|
131
142
|
),
|
|
143
|
+
),
|
|
132
144
|
)
|
|
133
145
|
}
|
|
134
146
|
|
|
135
147
|
syncGuild(appId: Discord.Snowflake, guildId: Discord.Snowflake) {
|
|
136
|
-
const commands = this.definitions
|
|
137
|
-
.map(([d, _]) => d)
|
|
138
|
-
.filter(
|
|
148
|
+
const commands = this.definitions.pipe(
|
|
149
|
+
Chunk.map(([d, _]) => d),
|
|
150
|
+
Chunk.filter(
|
|
139
151
|
(c): c is D.GuildApplicationCommand<R, E> =>
|
|
140
152
|
c._tag === "GuildApplicationCommand",
|
|
141
|
-
)
|
|
142
|
-
.map(c => c.command)
|
|
153
|
+
),
|
|
154
|
+
Chunk.map(c => c.command),
|
|
155
|
+
)
|
|
143
156
|
|
|
144
|
-
return
|
|
157
|
+
return Effect.flatMap(DiscordREST, rest =>
|
|
145
158
|
rest.bulkOverwriteGuildApplicationCommands(
|
|
146
159
|
appId,
|
|
147
160
|
guildId,
|
|
148
|
-
|
|
161
|
+
Chunk.toReadonlyArray(commands) as any,
|
|
149
162
|
),
|
|
150
163
|
)
|
|
151
164
|
}
|
|
@@ -1,6 +1,10 @@
|
|
|
1
|
+
import { Tag } from "@effect/data/Context"
|
|
2
|
+
import * as HashMap from "@effect/data/HashMap"
|
|
3
|
+
import * as Option from "@effect/data/Option"
|
|
1
4
|
import * as Arr from "@effect/data/ReadonlyArray"
|
|
2
|
-
import
|
|
5
|
+
import * as Effect from "@effect/io/Effect"
|
|
3
6
|
import * as IxHelpers from "dfx/Helpers/interactions"
|
|
7
|
+
import * as Discord from "dfx/types"
|
|
4
8
|
import { ModalSubmitDatum } from "dfx/types"
|
|
5
9
|
|
|
6
10
|
export const Interaction = Tag<Discord.Interaction>()
|
|
@@ -25,23 +29,27 @@ export class ResolvedDataNotFound {
|
|
|
25
29
|
|
|
26
30
|
export const resolvedValues = <A>(
|
|
27
31
|
f: (id: Discord.Snowflake, data: Discord.ResolvedDatum) => A | undefined,
|
|
28
|
-
) =>
|
|
29
|
-
|
|
30
|
-
|
|
32
|
+
): Effect.Effect<Discord.Interaction, ResolvedDataNotFound, readonly A[]> =>
|
|
33
|
+
Effect.flatMap(Interaction, ix =>
|
|
34
|
+
Effect.mapError(
|
|
35
|
+
IxHelpers.resolveValues(f)(ix),
|
|
36
|
+
() => new ResolvedDataNotFound(ix),
|
|
37
|
+
),
|
|
31
38
|
)
|
|
32
39
|
|
|
33
40
|
export const resolved = <A>(
|
|
34
41
|
name: string,
|
|
35
42
|
f: (id: Discord.Snowflake, data: Discord.ResolvedDatum) => A | undefined,
|
|
36
|
-
) =>
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
name,
|
|
40
|
-
|
|
41
|
-
)
|
|
43
|
+
): Effect.Effect<Discord.Interaction, ResolvedDataNotFound, A> =>
|
|
44
|
+
Effect.flatMap(Interaction, ix =>
|
|
45
|
+
Effect.mapError(
|
|
46
|
+
IxHelpers.resolveOptionValue(name, f)(ix),
|
|
47
|
+
() => new ResolvedDataNotFound(ix, name),
|
|
48
|
+
),
|
|
42
49
|
)
|
|
43
50
|
|
|
44
|
-
export const focusedOptionValue =
|
|
51
|
+
export const focusedOptionValue = Effect.map(
|
|
52
|
+
FocusedOptionContext,
|
|
45
53
|
_ => _.focusedOption.value ?? "",
|
|
46
54
|
)
|
|
47
55
|
|
|
@@ -51,13 +59,16 @@ export class SubCommandNotFound {
|
|
|
51
59
|
}
|
|
52
60
|
|
|
53
61
|
export const handleSubCommands = <
|
|
54
|
-
NER extends Record<
|
|
62
|
+
NER extends Record<
|
|
63
|
+
string,
|
|
64
|
+
Effect.Effect<any, any, Discord.InteractionResponse>
|
|
65
|
+
>,
|
|
55
66
|
>(
|
|
56
67
|
commands: NER,
|
|
57
|
-
): Effect<
|
|
68
|
+
): Effect.Effect<
|
|
58
69
|
| Exclude<
|
|
59
70
|
[NER[keyof NER]] extends [
|
|
60
|
-
{ [EffectTypeId]: { _R: (_: never) => infer R } },
|
|
71
|
+
{ [Effect.EffectTypeId]: { _R: (_: never) => infer R } },
|
|
61
72
|
]
|
|
62
73
|
? R
|
|
63
74
|
: never,
|
|
@@ -66,26 +77,38 @@ export const handleSubCommands = <
|
|
|
66
77
|
| Discord.Interaction
|
|
67
78
|
| Discord.ApplicationCommandDatum,
|
|
68
79
|
| ([NER[keyof NER]] extends [
|
|
69
|
-
{ [EffectTypeId]: { _E: (_: never) => infer E } },
|
|
80
|
+
{ [Effect.EffectTypeId]: { _E: (_: never) => infer E } },
|
|
70
81
|
]
|
|
71
82
|
? E
|
|
72
83
|
: never)
|
|
73
84
|
| SubCommandNotFound,
|
|
74
85
|
Discord.InteractionResponse
|
|
75
86
|
> =>
|
|
76
|
-
ApplicationCommand.
|
|
77
|
-
|
|
78
|
-
.mapError(
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
command,
|
|
82
|
-
}),
|
|
87
|
+
ApplicationCommand.pipe(
|
|
88
|
+
Effect.flatMap(data =>
|
|
89
|
+
Effect.mapError(
|
|
90
|
+
Arr.findFirst(IxHelpers.allSubCommands(data), _ => !!commands[_.name]),
|
|
91
|
+
() => new SubCommandNotFound(data),
|
|
83
92
|
),
|
|
93
|
+
),
|
|
94
|
+
Effect.flatMap(command =>
|
|
95
|
+
Effect.provideService(commands[command.name], SubCommandContext, {
|
|
96
|
+
command,
|
|
97
|
+
}),
|
|
98
|
+
),
|
|
84
99
|
)
|
|
85
100
|
|
|
86
|
-
export const currentSubCommand
|
|
101
|
+
export const currentSubCommand: Effect.Effect<
|
|
102
|
+
SubCommandContext,
|
|
103
|
+
never,
|
|
104
|
+
Discord.ApplicationCommandInteractionDataOption
|
|
105
|
+
> = Effect.map(SubCommandContext, _ => _.command)
|
|
87
106
|
|
|
88
|
-
export const optionsMap
|
|
107
|
+
export const optionsMap: Effect.Effect<
|
|
108
|
+
Discord.ApplicationCommandDatum,
|
|
109
|
+
never,
|
|
110
|
+
HashMap.HashMap<string, string | undefined>
|
|
111
|
+
> = Effect.map(ApplicationCommand, IxHelpers.optionsMap)
|
|
89
112
|
|
|
90
113
|
export class RequiredOptionNotFound {
|
|
91
114
|
readonly _tag = "RequiredOptionNotFound"
|
|
@@ -98,26 +121,32 @@ export class RequiredOptionNotFound {
|
|
|
98
121
|
}
|
|
99
122
|
|
|
100
123
|
export const option = (name: string) =>
|
|
101
|
-
|
|
124
|
+
Effect.map(ApplicationCommand, IxHelpers.getOption(name))
|
|
102
125
|
|
|
103
126
|
export const optionValue = (name: string) =>
|
|
104
|
-
option(name)
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
127
|
+
Effect.flatMap(option(name), _ =>
|
|
128
|
+
Option.match(
|
|
129
|
+
Option.flatMapNullable(_, a => a.value),
|
|
130
|
+
{
|
|
131
|
+
onNone: () =>
|
|
132
|
+
Effect.flatMap(ApplicationCommand, data =>
|
|
133
|
+
Effect.fail(new RequiredOptionNotFound(data, name)),
|
|
134
|
+
),
|
|
135
|
+
onSome: Effect.succeed,
|
|
136
|
+
},
|
|
137
|
+
),
|
|
112
138
|
)
|
|
113
139
|
|
|
114
140
|
export const optionValueOptional = (name: string) =>
|
|
115
|
-
|
|
141
|
+
Effect.map(
|
|
142
|
+
option(name),
|
|
143
|
+
Option.flatMapNullable(o => o.value),
|
|
144
|
+
)
|
|
116
145
|
|
|
117
|
-
export const modalValues =
|
|
146
|
+
export const modalValues = Effect.map(ModalSubmitData, IxHelpers.componentsMap)
|
|
118
147
|
|
|
119
148
|
export const modalValueOption = (name: string) =>
|
|
120
|
-
|
|
149
|
+
Effect.map(ModalSubmitData, IxHelpers.componentValue(name))
|
|
121
150
|
|
|
122
151
|
export class ModalValueNotFound {
|
|
123
152
|
readonly _tag = "ModalValueNotFound"
|
|
@@ -125,8 +154,9 @@ export class ModalValueNotFound {
|
|
|
125
154
|
}
|
|
126
155
|
|
|
127
156
|
export const modalValue = (name: string) =>
|
|
128
|
-
|
|
129
|
-
|
|
157
|
+
Effect.flatMap(ModalSubmitData, data =>
|
|
158
|
+
Effect.mapError(
|
|
159
|
+
IxHelpers.componentValue(name)(data),
|
|
130
160
|
() => new ModalValueNotFound(data, name),
|
|
131
161
|
),
|
|
132
162
|
)
|
|
@@ -1,9 +1,11 @@
|
|
|
1
|
-
import
|
|
1
|
+
import * as Option from "@effect/data/Option"
|
|
2
|
+
import * as Effect from "@effect/io/Effect"
|
|
2
3
|
import {
|
|
3
4
|
FocusedOptionContext,
|
|
4
5
|
ResolvedDataNotFound,
|
|
5
6
|
SubCommandContext,
|
|
6
|
-
} from "
|
|
7
|
+
} from "dfx/Interactions/context"
|
|
8
|
+
import * as Discord from "dfx/types"
|
|
7
9
|
|
|
8
10
|
export type InteractionDefinition<R, E> =
|
|
9
11
|
| GlobalApplicationCommand<R, E>
|
|
@@ -57,13 +59,13 @@ export const guild = <
|
|
|
57
59
|
export class MessageComponent<R, E> {
|
|
58
60
|
readonly _tag = "MessageComponent"
|
|
59
61
|
constructor(
|
|
60
|
-
readonly predicate: (customId: string) => Effect<R, E, boolean>,
|
|
61
|
-
readonly handle: Effect<R, E, Discord.InteractionResponse>,
|
|
62
|
+
readonly predicate: (customId: string) => Effect.Effect<R, E, boolean>,
|
|
63
|
+
readonly handle: Effect.Effect<R, E, Discord.InteractionResponse>,
|
|
62
64
|
) {}
|
|
63
65
|
}
|
|
64
66
|
|
|
65
67
|
export const messageComponent = <R1, R2, E1, E2>(
|
|
66
|
-
pred: (customId: string) => Effect<R1, E1, boolean>,
|
|
68
|
+
pred: (customId: string) => Effect.Effect<R1, E1, boolean>,
|
|
67
69
|
handle: CommandHandler<R2, E2, Discord.InteractionResponse>,
|
|
68
70
|
) =>
|
|
69
71
|
new MessageComponent<
|
|
@@ -74,14 +76,14 @@ export const messageComponent = <R1, R2, E1, E2>(
|
|
|
74
76
|
export class ModalSubmit<R, E> {
|
|
75
77
|
readonly _tag = "ModalSubmit"
|
|
76
78
|
constructor(
|
|
77
|
-
readonly predicate: (customId: string) => Effect<R, E, boolean>,
|
|
78
|
-
readonly handle: Effect<R, E, Discord.InteractionResponse>,
|
|
79
|
+
readonly predicate: (customId: string) => Effect.Effect<R, E, boolean>,
|
|
80
|
+
readonly handle: Effect.Effect<R, E, Discord.InteractionResponse>,
|
|
79
81
|
) {}
|
|
80
82
|
}
|
|
81
83
|
|
|
82
84
|
export const modalSubmit = <R1, R2, E1, E2>(
|
|
83
|
-
pred: (customId: string) => Effect<R1, E1, boolean>,
|
|
84
|
-
handle: Effect<R2, E2, Discord.InteractionResponse>,
|
|
85
|
+
pred: (customId: string) => Effect.Effect<R1, E1, boolean>,
|
|
86
|
+
handle: Effect.Effect<R2, E2, Discord.InteractionResponse>,
|
|
85
87
|
) =>
|
|
86
88
|
new ModalSubmit<
|
|
87
89
|
Exclude<R1 | R2, Discord.Interaction | Discord.ModalSubmitDatum>,
|
|
@@ -94,8 +96,8 @@ export class Autocomplete<R, E> {
|
|
|
94
96
|
readonly predicate: (
|
|
95
97
|
data: Discord.ApplicationCommandDatum,
|
|
96
98
|
focusedOption: Discord.ApplicationCommandInteractionDataOption,
|
|
97
|
-
) => Effect<R, E, boolean>,
|
|
98
|
-
readonly handle: Effect<R, E, Discord.InteractionResponse>,
|
|
99
|
+
) => Effect.Effect<R, E, boolean>,
|
|
100
|
+
readonly handle: Effect.Effect<R, E, Discord.InteractionResponse>,
|
|
99
101
|
) {}
|
|
100
102
|
}
|
|
101
103
|
|
|
@@ -103,8 +105,8 @@ export const autocomplete = <R1, R2, E1, E2>(
|
|
|
103
105
|
pred: (
|
|
104
106
|
data: Discord.ApplicationCommandDatum,
|
|
105
107
|
focusedOption: Discord.ApplicationCommandInteractionDataOption,
|
|
106
|
-
) => Effect<R1, E1, boolean>,
|
|
107
|
-
handle: Effect<R2, E2, Discord.InteractionResponse>,
|
|
108
|
+
) => Effect.Effect<R1, E1, boolean>,
|
|
109
|
+
handle: Effect.Effect<R2, E2, Discord.InteractionResponse>,
|
|
108
110
|
) =>
|
|
109
111
|
new Autocomplete<
|
|
110
112
|
Exclude<
|
|
@@ -129,44 +131,48 @@ type DeepReadonlyObject<T> = {
|
|
|
129
131
|
}
|
|
130
132
|
|
|
131
133
|
export type CommandHandler<R, E, A = any> =
|
|
132
|
-
| Effect<R, E, Discord.InteractionResponse>
|
|
134
|
+
| Effect.Effect<R, E, Discord.InteractionResponse>
|
|
133
135
|
| CommandHandlerFn<R, E, A>
|
|
134
136
|
|
|
135
137
|
export interface CommandHelper<A> {
|
|
136
138
|
resolve: <T>(
|
|
137
139
|
name: AllResolvables<A>["name"],
|
|
138
140
|
f: (id: Discord.Snowflake, data: Discord.ResolvedDatum) => T | undefined,
|
|
139
|
-
) => Effect<Discord.Interaction, ResolvedDataNotFound, T>
|
|
141
|
+
) => Effect.Effect<Discord.Interaction, ResolvedDataNotFound, T>
|
|
140
142
|
|
|
141
143
|
option: (
|
|
142
144
|
name: AllCommandOptions<A>["name"],
|
|
143
|
-
) => Effect<
|
|
145
|
+
) => Effect.Effect<
|
|
144
146
|
Discord.ApplicationCommandDatum,
|
|
145
147
|
never,
|
|
146
|
-
|
|
148
|
+
Option.Option<Discord.ApplicationCommandInteractionDataOption>
|
|
147
149
|
>
|
|
148
150
|
|
|
149
151
|
optionValue: <N extends AllRequiredCommandOptions<A>["name"]>(
|
|
150
152
|
name: N,
|
|
151
|
-
) => Effect<Discord.ApplicationCommandDatum, never, CommandValue<A, N>>
|
|
153
|
+
) => Effect.Effect<Discord.ApplicationCommandDatum, never, CommandValue<A, N>>
|
|
152
154
|
|
|
153
155
|
optionValueOptional: <N extends AllCommandOptions<A>["name"]>(
|
|
154
156
|
name: N,
|
|
155
|
-
) => Effect
|
|
157
|
+
) => Effect.Effect<
|
|
158
|
+
Discord.ApplicationCommandDatum,
|
|
159
|
+
never,
|
|
160
|
+
Option.Option<CommandValue<A, N>>
|
|
161
|
+
>
|
|
156
162
|
|
|
157
163
|
subCommands: <
|
|
158
164
|
NER extends SubCommandNames<A> extends never
|
|
159
165
|
? never
|
|
160
166
|
: Record<
|
|
161
167
|
SubCommandNames<A>,
|
|
162
|
-
Effect<any, any, Discord.InteractionResponse>
|
|
168
|
+
Effect.Effect<any, any, Discord.InteractionResponse>
|
|
163
169
|
>,
|
|
164
170
|
>(
|
|
165
171
|
commands: NER,
|
|
166
|
-
) => Effect<
|
|
172
|
+
) => Effect.Effect<
|
|
167
173
|
| Exclude<
|
|
168
174
|
[NER[keyof NER]] extends [
|
|
169
|
-
{ [EffectTypeId]: { _R: (_: never) => infer R } },
|
|
175
|
+
{ [Effect.EffectTypeId]: { _R: (_: never) => infer R } },
|
|
170
176
|
]
|
|
171
177
|
? R
|
|
172
178
|
: never,
|
|
@@ -174,7 +180,9 @@ export interface CommandHelper<A> {
|
|
|
174
180
|
>
|
|
175
181
|
| Discord.Interaction
|
|
176
182
|
| Discord.ApplicationCommandDatum,
|
|
177
|
-
[NER[keyof NER]] extends [
|
|
183
|
+
[NER[keyof NER]] extends [
|
|
184
|
+
{ [Effect.EffectTypeId]: { _E: (_: never) => infer E } },
|
|
185
|
+
]
|
|
178
186
|
? E
|
|
179
187
|
: never,
|
|
180
188
|
Discord.InteractionResponse
|
|
@@ -183,7 +191,7 @@ export interface CommandHelper<A> {
|
|
|
183
191
|
|
|
184
192
|
export type CommandHandlerFn<R, E, A> = (
|
|
185
193
|
i: CommandHelper<A>,
|
|
186
|
-
) => Effect<R, E, Discord.InteractionResponse>
|
|
194
|
+
) => Effect.Effect<R, E, Discord.InteractionResponse>
|
|
187
195
|
|
|
188
196
|
interface CommandOption {
|
|
189
197
|
readonly type: any
|