dfx 1.0.4 → 1.0.5
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/dist/Cache/driver.js +3 -0
- package/dist/Cache/driver.js.map +1 -0
- package/dist/Cache/memory.js +48 -0
- package/dist/Cache/memory.js.map +1 -0
- package/dist/Cache/memoryTTL.js +113 -0
- package/dist/Cache/memoryTTL.js.map +1 -0
- package/dist/Cache/prelude.js +130 -0
- package/dist/Cache/prelude.js.map +1 -0
- package/dist/Cache.js +77 -0
- package/dist/Cache.js.map +1 -0
- package/dist/DiscordConfig.js +29 -0
- package/dist/DiscordConfig.js.map +1 -0
- package/dist/DiscordGateway/DiscordWS.js +74 -0
- package/dist/DiscordGateway/DiscordWS.js.map +1 -0
- package/dist/DiscordGateway/Messaging.js +34 -0
- package/dist/DiscordGateway/Messaging.js.map +1 -0
- package/dist/DiscordGateway/Shard/StateStore.js +41 -0
- package/dist/DiscordGateway/Shard/StateStore.js.map +1 -0
- package/dist/DiscordGateway/Shard/heartbeats.js +25 -0
- package/dist/DiscordGateway/Shard/heartbeats.js.map +1 -0
- package/dist/DiscordGateway/Shard/identify.js +26 -0
- package/dist/DiscordGateway/Shard/identify.js.map +1 -0
- package/dist/DiscordGateway/Shard/sendEvents.js +26 -0
- package/dist/DiscordGateway/Shard/sendEvents.js.map +1 -0
- package/dist/DiscordGateway/Shard/utils.js +3 -0
- package/dist/DiscordGateway/Shard/utils.js.map +1 -0
- package/dist/DiscordGateway/Shard.js +134 -0
- package/dist/DiscordGateway/Shard.js.map +1 -0
- package/dist/DiscordGateway/ShardStore.js +23 -0
- package/dist/DiscordGateway/ShardStore.js.map +1 -0
- package/dist/DiscordGateway/Sharder.js +57 -0
- package/dist/DiscordGateway/Sharder.js.map +1 -0
- package/dist/DiscordGateway.js +21 -0
- package/dist/DiscordGateway.js.map +1 -0
- package/dist/DiscordREST/Generated.js +2302 -0
- package/dist/DiscordREST/Generated.js.map +1 -0
- package/dist/DiscordREST/utils.js +23 -0
- package/dist/DiscordREST/utils.js.map +1 -0
- package/dist/DiscordREST.js +123 -0
- package/dist/DiscordREST.js.map +1 -0
- package/dist/Helpers/flags.js +45 -0
- package/dist/Helpers/flags.js.map +1 -0
- package/dist/Helpers/intents.js +29 -0
- package/dist/Helpers/intents.js.map +1 -0
- package/dist/Helpers/interactions.js +114 -0
- package/dist/Helpers/interactions.js.map +1 -0
- package/dist/Helpers/members.js +10 -0
- package/dist/Helpers/members.js.map +1 -0
- package/dist/Helpers/permissions.js +84 -0
- package/dist/Helpers/permissions.js.map +1 -0
- package/dist/Helpers/ui.js +135 -0
- package/dist/Helpers/ui.js.map +1 -0
- package/dist/Interactions/builder.js +63 -0
- package/dist/Interactions/builder.js.map +1 -0
- package/dist/Interactions/commandHelper.js +47 -0
- package/dist/Interactions/commandHelper.js.map +1 -0
- package/dist/Interactions/context.js +35 -0
- package/dist/Interactions/context.js.map +1 -0
- package/dist/Interactions/definitions.js +51 -0
- package/dist/Interactions/definitions.js.map +1 -0
- package/dist/Interactions/error.js +2 -0
- package/dist/Interactions/error.js.map +1 -0
- package/dist/Interactions/gateway.js +75 -0
- package/dist/Interactions/gateway.js.map +1 -0
- package/dist/Interactions/handlers.js +61 -0
- package/dist/Interactions/handlers.js.map +1 -0
- package/dist/Interactions/index.js +11 -0
- package/dist/Interactions/index.js.map +1 -0
- package/dist/Interactions/utils.js +29 -0
- package/dist/Interactions/utils.js.map +1 -0
- package/dist/Interactions/webhook.js +56 -0
- package/dist/Interactions/webhook.js.map +1 -0
- package/dist/LICENSE +21 -0
- package/dist/README.md +66 -0
- package/dist/RateLimit/memory.js +35 -0
- package/dist/RateLimit/memory.js.map +1 -0
- package/dist/RateLimit/utils.js +18 -0
- package/dist/RateLimit/utils.js.map +1 -0
- package/dist/RateLimit.js +28 -0
- package/dist/RateLimit.js.map +1 -0
- package/dist/gateway.js +19 -0
- package/dist/gateway.js.map +1 -0
- package/dist/index.js +18 -0
- package/dist/index.js.map +1 -0
- package/dist/package.json +48 -0
- package/dist/src/Cache/driver.ts +37 -0
- package/dist/src/Cache/memory.ts +83 -0
- package/dist/src/Cache/memoryTTL.ts +225 -0
- package/dist/src/Cache/prelude.ts +279 -0
- package/dist/src/Cache.ts +261 -0
- package/dist/src/DiscordConfig.ts +67 -0
- package/dist/src/DiscordGateway/DiscordWS.ts +157 -0
- package/dist/src/DiscordGateway/Messaging.ts +71 -0
- package/dist/src/DiscordGateway/Shard/StateStore.ts +72 -0
- package/dist/src/DiscordGateway/Shard/heartbeats.ts +60 -0
- package/dist/src/DiscordGateway/Shard/identify.ts +50 -0
- package/dist/src/DiscordGateway/Shard/sendEvents.ts +43 -0
- package/dist/src/DiscordGateway/Shard/utils.ts +13 -0
- package/dist/src/DiscordGateway/Shard.ts +205 -0
- package/dist/src/DiscordGateway/ShardStore.ts +42 -0
- package/dist/src/DiscordGateway/Sharder.ts +118 -0
- package/dist/src/DiscordGateway.ts +79 -0
- package/dist/src/DiscordREST/Generated.ts +10832 -0
- package/dist/src/DiscordREST/utils.ts +42 -0
- package/dist/src/DiscordREST.ts +256 -0
- package/dist/src/Helpers/flags.ts +73 -0
- package/dist/src/Helpers/intents.ts +35 -0
- package/dist/src/Helpers/interactions.ts +317 -0
- package/dist/src/Helpers/members.ts +18 -0
- package/dist/src/Helpers/permissions.ts +145 -0
- package/dist/src/Helpers/ui.ts +253 -0
- package/dist/src/Interactions/builder.ts +171 -0
- package/dist/src/Interactions/commandHelper.ts +231 -0
- package/dist/src/Interactions/context.ts +104 -0
- package/dist/src/Interactions/definitions.ts +144 -0
- package/dist/src/Interactions/error.ts +3 -0
- package/dist/src/Interactions/gateway.ts +193 -0
- package/dist/src/Interactions/handlers.ts +108 -0
- package/dist/src/Interactions/index.ts +30 -0
- package/dist/src/Interactions/utils.ts +93 -0
- package/dist/src/Interactions/webhook.ts +204 -0
- package/dist/src/RateLimit/memory.ts +63 -0
- package/dist/src/RateLimit/utils.ts +28 -0
- package/dist/src/RateLimit.ts +90 -0
- package/dist/src/gateway.ts +50 -0
- package/dist/src/index.ts +44 -0
- package/dist/src/types.ts +3090 -0
- package/dist/src/utils/Effect.ts +65 -0
- package/dist/src/version.ts +1 -0
- package/dist/src/webhooks.ts +25 -0
- package/dist/types.js +356 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/Effect.js +42 -0
- package/dist/utils/Effect.js.map +1 -0
- package/dist/version.js +2 -0
- package/dist/version.js.map +1 -0
- package/dist/webhooks.js +6 -0
- package/dist/webhooks.js.map +1 -0
- package/package.json +83 -31
- package/src/version.ts +1 -1
- package/Cache/driver.js +0 -11
- package/Cache/driver.js.map +0 -1
- package/Cache/memory.js +0 -57
- package/Cache/memory.js.map +0 -1
- package/Cache/memoryTTL.js +0 -128
- package/Cache/memoryTTL.js.map +0 -1
- package/Cache/prelude.js +0 -143
- package/Cache/prelude.js.map +0 -1
- package/Cache.js +0 -145
- package/Cache.js.map +0 -1
- package/DiscordConfig.js +0 -43
- package/DiscordConfig.js.map +0 -1
- package/DiscordGateway/DiscordWS.js +0 -86
- package/DiscordGateway/DiscordWS.js.map +0 -1
- package/DiscordGateway/Messaging.js +0 -43
- package/DiscordGateway/Messaging.js.map +0 -1
- package/DiscordGateway/Shard/StateStore.js +0 -49
- package/DiscordGateway/Shard/StateStore.js.map +0 -1
- package/DiscordGateway/Shard/heartbeats.js +0 -33
- package/DiscordGateway/Shard/heartbeats.js.map +0 -1
- package/DiscordGateway/Shard/identify.js +0 -37
- package/DiscordGateway/Shard/identify.js.map +0 -1
- package/DiscordGateway/Shard/sendEvents.js +0 -39
- package/DiscordGateway/Shard/sendEvents.js.map +0 -1
- package/DiscordGateway/Shard/utils.js +0 -11
- package/DiscordGateway/Shard/utils.js.map +0 -1
- package/DiscordGateway/Shard.js +0 -155
- package/DiscordGateway/Shard.js.map +0 -1
- package/DiscordGateway/ShardStore.js +0 -32
- package/DiscordGateway/ShardStore.js.map +0 -1
- package/DiscordGateway/Sharder.js +0 -75
- package/DiscordGateway/Sharder.js.map +0 -1
- package/DiscordGateway.js +0 -28
- package/DiscordGateway.js.map +0 -1
- package/DiscordREST/Generated.js +0 -2480
- package/DiscordREST/Generated.js.map +0 -1
- package/DiscordREST/utils.js +0 -32
- package/DiscordREST/utils.js.map +0 -1
- package/DiscordREST.js +0 -128
- package/DiscordREST.js.map +0 -1
- package/Helpers/flags.js +0 -57
- package/Helpers/flags.js.map +0 -1
- package/Helpers/intents.js +0 -34
- package/Helpers/intents.js.map +0 -1
- package/Helpers/interactions.js +0 -143
- package/Helpers/interactions.js.map +0 -1
- package/Helpers/members.js +0 -17
- package/Helpers/members.js.map +0 -1
- package/Helpers/permissions.js +0 -97
- package/Helpers/permissions.js.map +0 -1
- package/Helpers/ui.js +0 -162
- package/Helpers/ui.js.map +0 -1
- package/Interactions/builder.js +0 -64
- package/Interactions/builder.js.map +0 -1
- package/Interactions/commandHelper.js +0 -57
- package/Interactions/commandHelper.js.map +0 -1
- package/Interactions/context.js +0 -47
- package/Interactions/context.js.map +0 -1
- package/Interactions/definitions.js +0 -67
- package/Interactions/definitions.js.map +0 -1
- package/Interactions/error.js +0 -8
- package/Interactions/error.js.map +0 -1
- package/Interactions/gateway.js +0 -92
- package/Interactions/gateway.js.map +0 -1
- package/Interactions/handlers.js +0 -73
- package/Interactions/handlers.js.map +0 -1
- package/Interactions/index.js +0 -94
- package/Interactions/index.js.map +0 -1
- package/Interactions/utils.js +0 -35
- package/Interactions/utils.js.map +0 -1
- package/Interactions/webhook.js +0 -89
- package/Interactions/webhook.js.map +0 -1
- package/RateLimit/memory.js +0 -47
- package/RateLimit/memory.js.map +0 -1
- package/RateLimit/utils.js +0 -25
- package/RateLimit/utils.js.map +0 -1
- package/RateLimit.js +0 -37
- package/RateLimit.js.map +0 -1
- package/gateway.js +0 -72
- package/gateway.js.map +0 -1
- package/index.js +0 -71
- package/index.js.map +0 -1
- package/types.js +0 -408
- package/types.js.map +0 -1
- package/utils/Effect.js +0 -53
- package/utils/Effect.js.map +0 -1
- package/version.js +0 -8
- package/version.js.map +0 -1
- package/webhooks.js +0 -55
- package/webhooks.js.map +0 -1
- /package/{Cache → dist/Cache}/driver.d.ts +0 -0
- /package/{Cache → dist/Cache}/driver.d.ts.map +0 -0
- /package/{Cache → dist/Cache}/memory.d.ts +0 -0
- /package/{Cache → dist/Cache}/memory.d.ts.map +0 -0
- /package/{Cache → dist/Cache}/memoryTTL.d.ts +0 -0
- /package/{Cache → dist/Cache}/memoryTTL.d.ts.map +0 -0
- /package/{Cache → dist/Cache}/prelude.d.ts +0 -0
- /package/{Cache → dist/Cache}/prelude.d.ts.map +0 -0
- /package/{Cache.d.ts → dist/Cache.d.ts} +0 -0
- /package/{Cache.d.ts.map → dist/Cache.d.ts.map} +0 -0
- /package/{DiscordConfig.d.ts → dist/DiscordConfig.d.ts} +0 -0
- /package/{DiscordConfig.d.ts.map → dist/DiscordConfig.d.ts.map} +0 -0
- /package/{DiscordGateway → dist/DiscordGateway}/DiscordWS.d.ts +0 -0
- /package/{DiscordGateway → dist/DiscordGateway}/DiscordWS.d.ts.map +0 -0
- /package/{DiscordGateway → dist/DiscordGateway}/Messaging.d.ts +0 -0
- /package/{DiscordGateway → dist/DiscordGateway}/Messaging.d.ts.map +0 -0
- /package/{DiscordGateway → dist/DiscordGateway}/Shard/StateStore.d.ts +0 -0
- /package/{DiscordGateway → dist/DiscordGateway}/Shard/StateStore.d.ts.map +0 -0
- /package/{DiscordGateway → dist/DiscordGateway}/Shard/heartbeats.d.ts +0 -0
- /package/{DiscordGateway → dist/DiscordGateway}/Shard/heartbeats.d.ts.map +0 -0
- /package/{DiscordGateway → dist/DiscordGateway}/Shard/identify.d.ts +0 -0
- /package/{DiscordGateway → dist/DiscordGateway}/Shard/identify.d.ts.map +0 -0
- /package/{DiscordGateway → dist/DiscordGateway}/Shard/sendEvents.d.ts +0 -0
- /package/{DiscordGateway → dist/DiscordGateway}/Shard/sendEvents.d.ts.map +0 -0
- /package/{DiscordGateway → dist/DiscordGateway}/Shard/utils.d.ts +0 -0
- /package/{DiscordGateway → dist/DiscordGateway}/Shard/utils.d.ts.map +0 -0
- /package/{DiscordGateway → dist/DiscordGateway}/Shard.d.ts +0 -0
- /package/{DiscordGateway → dist/DiscordGateway}/Shard.d.ts.map +0 -0
- /package/{DiscordGateway → dist/DiscordGateway}/ShardStore.d.ts +0 -0
- /package/{DiscordGateway → dist/DiscordGateway}/ShardStore.d.ts.map +0 -0
- /package/{DiscordGateway → dist/DiscordGateway}/Sharder.d.ts +0 -0
- /package/{DiscordGateway → dist/DiscordGateway}/Sharder.d.ts.map +0 -0
- /package/{DiscordGateway.d.ts → dist/DiscordGateway.d.ts} +0 -0
- /package/{DiscordGateway.d.ts.map → dist/DiscordGateway.d.ts.map} +0 -0
- /package/{DiscordREST → dist/DiscordREST}/Generated.d.ts +0 -0
- /package/{DiscordREST → dist/DiscordREST}/Generated.d.ts.map +0 -0
- /package/{DiscordREST → dist/DiscordREST}/utils.d.ts +0 -0
- /package/{DiscordREST → dist/DiscordREST}/utils.d.ts.map +0 -0
- /package/{DiscordREST.d.ts → dist/DiscordREST.d.ts} +0 -0
- /package/{DiscordREST.d.ts.map → dist/DiscordREST.d.ts.map} +0 -0
- /package/{Helpers → dist/Helpers}/flags.d.ts +0 -0
- /package/{Helpers → dist/Helpers}/flags.d.ts.map +0 -0
- /package/{Helpers → dist/Helpers}/intents.d.ts +0 -0
- /package/{Helpers → dist/Helpers}/intents.d.ts.map +0 -0
- /package/{Helpers → dist/Helpers}/interactions.d.ts +0 -0
- /package/{Helpers → dist/Helpers}/interactions.d.ts.map +0 -0
- /package/{Helpers → dist/Helpers}/members.d.ts +0 -0
- /package/{Helpers → dist/Helpers}/members.d.ts.map +0 -0
- /package/{Helpers → dist/Helpers}/permissions.d.ts +0 -0
- /package/{Helpers → dist/Helpers}/permissions.d.ts.map +0 -0
- /package/{Helpers → dist/Helpers}/ui.d.ts +0 -0
- /package/{Helpers → dist/Helpers}/ui.d.ts.map +0 -0
- /package/{Interactions → dist/Interactions}/builder.d.ts +0 -0
- /package/{Interactions → dist/Interactions}/builder.d.ts.map +0 -0
- /package/{Interactions → dist/Interactions}/commandHelper.d.ts +0 -0
- /package/{Interactions → dist/Interactions}/commandHelper.d.ts.map +0 -0
- /package/{Interactions → dist/Interactions}/context.d.ts +0 -0
- /package/{Interactions → dist/Interactions}/context.d.ts.map +0 -0
- /package/{Interactions → dist/Interactions}/definitions.d.ts +0 -0
- /package/{Interactions → dist/Interactions}/definitions.d.ts.map +0 -0
- /package/{Interactions → dist/Interactions}/error.d.ts +0 -0
- /package/{Interactions → dist/Interactions}/error.d.ts.map +0 -0
- /package/{Interactions → dist/Interactions}/gateway.d.ts +0 -0
- /package/{Interactions → dist/Interactions}/gateway.d.ts.map +0 -0
- /package/{Interactions → dist/Interactions}/handlers.d.ts +0 -0
- /package/{Interactions → dist/Interactions}/handlers.d.ts.map +0 -0
- /package/{Interactions → dist/Interactions}/index.d.ts +0 -0
- /package/{Interactions → dist/Interactions}/index.d.ts.map +0 -0
- /package/{Interactions → dist/Interactions}/utils.d.ts +0 -0
- /package/{Interactions → dist/Interactions}/utils.d.ts.map +0 -0
- /package/{Interactions → dist/Interactions}/webhook.d.ts +0 -0
- /package/{Interactions → dist/Interactions}/webhook.d.ts.map +0 -0
- /package/{RateLimit → dist/RateLimit}/memory.d.ts +0 -0
- /package/{RateLimit → dist/RateLimit}/memory.d.ts.map +0 -0
- /package/{RateLimit → dist/RateLimit}/utils.d.ts +0 -0
- /package/{RateLimit → dist/RateLimit}/utils.d.ts.map +0 -0
- /package/{RateLimit.d.ts → dist/RateLimit.d.ts} +0 -0
- /package/{RateLimit.d.ts.map → dist/RateLimit.d.ts.map} +0 -0
- /package/{gateway.d.ts → dist/gateway.d.ts} +0 -0
- /package/{gateway.d.ts.map → dist/gateway.d.ts.map} +0 -0
- /package/{index.d.ts → dist/index.d.ts} +0 -0
- /package/{index.d.ts.map → dist/index.d.ts.map} +0 -0
- /package/{mjs → dist/mjs}/Cache/driver.mjs +0 -0
- /package/{mjs → dist/mjs}/Cache/driver.mjs.map +0 -0
- /package/{mjs → dist/mjs}/Cache/memory.mjs +0 -0
- /package/{mjs → dist/mjs}/Cache/memory.mjs.map +0 -0
- /package/{mjs → dist/mjs}/Cache/memoryTTL.mjs +0 -0
- /package/{mjs → dist/mjs}/Cache/memoryTTL.mjs.map +0 -0
- /package/{mjs → dist/mjs}/Cache/prelude.mjs +0 -0
- /package/{mjs → dist/mjs}/Cache/prelude.mjs.map +0 -0
- /package/{mjs → dist/mjs}/Cache.mjs +0 -0
- /package/{mjs → dist/mjs}/Cache.mjs.map +0 -0
- /package/{mjs → dist/mjs}/DiscordConfig.mjs +0 -0
- /package/{mjs → dist/mjs}/DiscordConfig.mjs.map +0 -0
- /package/{mjs → dist/mjs}/DiscordGateway/DiscordWS.mjs +0 -0
- /package/{mjs → dist/mjs}/DiscordGateway/DiscordWS.mjs.map +0 -0
- /package/{mjs → dist/mjs}/DiscordGateway/Messaging.mjs +0 -0
- /package/{mjs → dist/mjs}/DiscordGateway/Messaging.mjs.map +0 -0
- /package/{mjs → dist/mjs}/DiscordGateway/Shard/StateStore.mjs +0 -0
- /package/{mjs → dist/mjs}/DiscordGateway/Shard/StateStore.mjs.map +0 -0
- /package/{mjs → dist/mjs}/DiscordGateway/Shard/heartbeats.mjs +0 -0
- /package/{mjs → dist/mjs}/DiscordGateway/Shard/heartbeats.mjs.map +0 -0
- /package/{mjs → dist/mjs}/DiscordGateway/Shard/identify.mjs +0 -0
- /package/{mjs → dist/mjs}/DiscordGateway/Shard/identify.mjs.map +0 -0
- /package/{mjs → dist/mjs}/DiscordGateway/Shard/sendEvents.mjs +0 -0
- /package/{mjs → dist/mjs}/DiscordGateway/Shard/sendEvents.mjs.map +0 -0
- /package/{mjs → dist/mjs}/DiscordGateway/Shard/utils.mjs +0 -0
- /package/{mjs → dist/mjs}/DiscordGateway/Shard/utils.mjs.map +0 -0
- /package/{mjs → dist/mjs}/DiscordGateway/Shard.mjs +0 -0
- /package/{mjs → dist/mjs}/DiscordGateway/Shard.mjs.map +0 -0
- /package/{mjs → dist/mjs}/DiscordGateway/ShardStore.mjs +0 -0
- /package/{mjs → dist/mjs}/DiscordGateway/ShardStore.mjs.map +0 -0
- /package/{mjs → dist/mjs}/DiscordGateway/Sharder.mjs +0 -0
- /package/{mjs → dist/mjs}/DiscordGateway/Sharder.mjs.map +0 -0
- /package/{mjs → dist/mjs}/DiscordGateway.mjs +0 -0
- /package/{mjs → dist/mjs}/DiscordGateway.mjs.map +0 -0
- /package/{mjs → dist/mjs}/DiscordREST/Generated.mjs +0 -0
- /package/{mjs → dist/mjs}/DiscordREST/Generated.mjs.map +0 -0
- /package/{mjs → dist/mjs}/DiscordREST/utils.mjs +0 -0
- /package/{mjs → dist/mjs}/DiscordREST/utils.mjs.map +0 -0
- /package/{mjs → dist/mjs}/DiscordREST.mjs +0 -0
- /package/{mjs → dist/mjs}/DiscordREST.mjs.map +0 -0
- /package/{mjs → dist/mjs}/Helpers/flags.mjs +0 -0
- /package/{mjs → dist/mjs}/Helpers/flags.mjs.map +0 -0
- /package/{mjs → dist/mjs}/Helpers/intents.mjs +0 -0
- /package/{mjs → dist/mjs}/Helpers/intents.mjs.map +0 -0
- /package/{mjs → dist/mjs}/Helpers/interactions.mjs +0 -0
- /package/{mjs → dist/mjs}/Helpers/interactions.mjs.map +0 -0
- /package/{mjs → dist/mjs}/Helpers/members.mjs +0 -0
- /package/{mjs → dist/mjs}/Helpers/members.mjs.map +0 -0
- /package/{mjs → dist/mjs}/Helpers/permissions.mjs +0 -0
- /package/{mjs → dist/mjs}/Helpers/permissions.mjs.map +0 -0
- /package/{mjs → dist/mjs}/Helpers/ui.mjs +0 -0
- /package/{mjs → dist/mjs}/Helpers/ui.mjs.map +0 -0
- /package/{mjs → dist/mjs}/Interactions/builder.mjs +0 -0
- /package/{mjs → dist/mjs}/Interactions/builder.mjs.map +0 -0
- /package/{mjs → dist/mjs}/Interactions/commandHelper.mjs +0 -0
- /package/{mjs → dist/mjs}/Interactions/commandHelper.mjs.map +0 -0
- /package/{mjs → dist/mjs}/Interactions/context.mjs +0 -0
- /package/{mjs → dist/mjs}/Interactions/context.mjs.map +0 -0
- /package/{mjs → dist/mjs}/Interactions/definitions.mjs +0 -0
- /package/{mjs → dist/mjs}/Interactions/definitions.mjs.map +0 -0
- /package/{mjs → dist/mjs}/Interactions/error.mjs +0 -0
- /package/{mjs → dist/mjs}/Interactions/error.mjs.map +0 -0
- /package/{mjs → dist/mjs}/Interactions/gateway.mjs +0 -0
- /package/{mjs → dist/mjs}/Interactions/gateway.mjs.map +0 -0
- /package/{mjs → dist/mjs}/Interactions/handlers.mjs +0 -0
- /package/{mjs → dist/mjs}/Interactions/handlers.mjs.map +0 -0
- /package/{mjs → dist/mjs}/Interactions/index.mjs +0 -0
- /package/{mjs → dist/mjs}/Interactions/index.mjs.map +0 -0
- /package/{mjs → dist/mjs}/Interactions/utils.mjs +0 -0
- /package/{mjs → dist/mjs}/Interactions/utils.mjs.map +0 -0
- /package/{mjs → dist/mjs}/Interactions/webhook.mjs +0 -0
- /package/{mjs → dist/mjs}/Interactions/webhook.mjs.map +0 -0
- /package/{mjs → dist/mjs}/RateLimit/memory.mjs +0 -0
- /package/{mjs → dist/mjs}/RateLimit/memory.mjs.map +0 -0
- /package/{mjs → dist/mjs}/RateLimit/utils.mjs +0 -0
- /package/{mjs → dist/mjs}/RateLimit/utils.mjs.map +0 -0
- /package/{mjs → dist/mjs}/RateLimit.mjs +0 -0
- /package/{mjs → dist/mjs}/RateLimit.mjs.map +0 -0
- /package/{mjs → dist/mjs}/gateway.mjs +0 -0
- /package/{mjs → dist/mjs}/gateway.mjs.map +0 -0
- /package/{mjs → dist/mjs}/index.mjs +0 -0
- /package/{mjs → dist/mjs}/index.mjs.map +0 -0
- /package/{mjs → dist/mjs}/types.mjs +0 -0
- /package/{mjs → dist/mjs}/types.mjs.map +0 -0
- /package/{mjs → dist/mjs}/utils/Effect.mjs +0 -0
- /package/{mjs → dist/mjs}/utils/Effect.mjs.map +0 -0
- /package/{mjs → dist/mjs}/version.mjs +0 -0
- /package/{mjs → dist/mjs}/version.mjs.map +0 -0
- /package/{mjs → dist/mjs}/webhooks.mjs +0 -0
- /package/{mjs → dist/mjs}/webhooks.mjs.map +0 -0
- /package/{tsconfig.base.json → dist/tsconfig.base.json} +0 -0
- /package/{tsconfig.build.json → dist/tsconfig.build.json} +0 -0
- /package/{tsconfig.examples.json → dist/tsconfig.examples.json} +0 -0
- /package/{tsconfig.json → dist/tsconfig.json} +0 -0
- /package/{tsconfig.madge.json → dist/tsconfig.madge.json} +0 -0
- /package/{tsconfig.test.json → dist/tsconfig.test.json} +0 -0
- /package/{types.d.ts → dist/types.d.ts} +0 -0
- /package/{types.d.ts.map → dist/types.d.ts.map} +0 -0
- /package/{utils → dist/utils}/Effect.d.ts +0 -0
- /package/{utils → dist/utils}/Effect.d.ts.map +0 -0
- /package/{version.d.ts → dist/version.d.ts} +0 -0
- /package/{version.d.ts.map → dist/version.d.ts.map} +0 -0
- /package/{webhooks.d.ts → dist/webhooks.d.ts} +0 -0
- /package/{webhooks.d.ts.map → dist/webhooks.d.ts.map} +0 -0
|
@@ -0,0 +1,253 @@
|
|
|
1
|
+
import type {
|
|
2
|
+
ActionRowComponentForMessageRequest,
|
|
3
|
+
ActionRowComponentForModalRequest,
|
|
4
|
+
ButtonComponentForMessageRequest,
|
|
5
|
+
ChannelSelectComponentForMessageRequest,
|
|
6
|
+
ContainerComponentForMessageRequest,
|
|
7
|
+
FileComponentForMessageRequest,
|
|
8
|
+
MediaGalleryComponentForMessageRequest,
|
|
9
|
+
MentionableSelectComponentForMessageRequest,
|
|
10
|
+
MessageCreateRequest,
|
|
11
|
+
PollAnswerCreateRequest,
|
|
12
|
+
PollCreateRequest,
|
|
13
|
+
PollMediaCreateRequest,
|
|
14
|
+
RoleSelectComponentForMessageRequest,
|
|
15
|
+
SectionComponentForMessageRequest,
|
|
16
|
+
SeparatorComponentForMessageRequest,
|
|
17
|
+
StringSelectComponentForMessageRequest,
|
|
18
|
+
TextDisplayComponentForMessageRequest,
|
|
19
|
+
TextInputComponentForModalRequest,
|
|
20
|
+
ThumbnailComponentForMessageRequest,
|
|
21
|
+
UserSelectComponentForMessageRequest,
|
|
22
|
+
} from "../types.ts"
|
|
23
|
+
import {
|
|
24
|
+
TextInputStyleTypes,
|
|
25
|
+
ButtonStyleTypes,
|
|
26
|
+
MessageComponentTypes,
|
|
27
|
+
MessageFlags,
|
|
28
|
+
} from "../types.ts"
|
|
29
|
+
|
|
30
|
+
type ActionRowComponents = ReadonlyArray<
|
|
31
|
+
| ActionRowComponentForMessageRequest["components"][number]
|
|
32
|
+
| ActionRowComponentForModalRequest["components"][number]
|
|
33
|
+
>
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Helper to create an Action Row.
|
|
37
|
+
*/
|
|
38
|
+
export const row = <const C extends ActionRowComponents>(
|
|
39
|
+
components: C,
|
|
40
|
+
): {
|
|
41
|
+
readonly type: typeof MessageComponentTypes.ACTION_ROW
|
|
42
|
+
readonly components: C
|
|
43
|
+
} => ({
|
|
44
|
+
type: MessageComponentTypes.ACTION_ROW,
|
|
45
|
+
components,
|
|
46
|
+
})
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* Helper to create an Action Row grid.
|
|
50
|
+
*/
|
|
51
|
+
export const grid = <C extends ActionRowComponents>(
|
|
52
|
+
items: ReadonlyArray<C>,
|
|
53
|
+
): ReadonlyArray<{
|
|
54
|
+
readonly type: typeof MessageComponentTypes.ACTION_ROW
|
|
55
|
+
readonly components: C
|
|
56
|
+
}> => items.map(row)
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* Helper to create a single column of components
|
|
60
|
+
*/
|
|
61
|
+
export const singleColumn = <C extends ActionRowComponents>(
|
|
62
|
+
items: C,
|
|
63
|
+
): ReadonlyArray<{
|
|
64
|
+
readonly type: typeof MessageComponentTypes.ACTION_ROW
|
|
65
|
+
readonly components: C
|
|
66
|
+
}> => items.map(c => row([c as any])) as any
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* Helper to create a button component.
|
|
70
|
+
*/
|
|
71
|
+
export const button = (
|
|
72
|
+
options: Partial<ButtonComponentForMessageRequest>,
|
|
73
|
+
): ButtonComponentForMessageRequest => ({
|
|
74
|
+
type: MessageComponentTypes.BUTTON,
|
|
75
|
+
style: ButtonStyleTypes.PRIMARY,
|
|
76
|
+
...options,
|
|
77
|
+
})
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* Helper to create a select component.
|
|
81
|
+
*/
|
|
82
|
+
export const select = (
|
|
83
|
+
options: Omit<StringSelectComponentForMessageRequest, "type">,
|
|
84
|
+
): StringSelectComponentForMessageRequest => ({
|
|
85
|
+
type: MessageComponentTypes.STRING_SELECT,
|
|
86
|
+
...options,
|
|
87
|
+
})
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
* Helper to create a select component.
|
|
91
|
+
*/
|
|
92
|
+
export const userSelect = (
|
|
93
|
+
options: Omit<UserSelectComponentForMessageRequest, "type">,
|
|
94
|
+
): UserSelectComponentForMessageRequest => ({
|
|
95
|
+
type: MessageComponentTypes.USER_SELECT,
|
|
96
|
+
...options,
|
|
97
|
+
})
|
|
98
|
+
|
|
99
|
+
/**
|
|
100
|
+
* Helper to create a select component.
|
|
101
|
+
*/
|
|
102
|
+
export const roleSelect = (
|
|
103
|
+
options: Omit<RoleSelectComponentForMessageRequest, "type">,
|
|
104
|
+
): RoleSelectComponentForMessageRequest => ({
|
|
105
|
+
type: MessageComponentTypes.ROLE_SELECT,
|
|
106
|
+
...options,
|
|
107
|
+
})
|
|
108
|
+
|
|
109
|
+
/**
|
|
110
|
+
* Helper to create a select component.
|
|
111
|
+
*/
|
|
112
|
+
export const mentionableSelect = (
|
|
113
|
+
options: Omit<MentionableSelectComponentForMessageRequest, "type">,
|
|
114
|
+
): MentionableSelectComponentForMessageRequest => ({
|
|
115
|
+
type: MessageComponentTypes.MENTIONABLE_SELECT,
|
|
116
|
+
...options,
|
|
117
|
+
})
|
|
118
|
+
|
|
119
|
+
/**
|
|
120
|
+
* Helper to create a select component.
|
|
121
|
+
*/
|
|
122
|
+
export const channelSelect = (
|
|
123
|
+
options: Omit<ChannelSelectComponentForMessageRequest, "type">,
|
|
124
|
+
): ChannelSelectComponentForMessageRequest => ({
|
|
125
|
+
type: MessageComponentTypes.CHANNEL_SELECT,
|
|
126
|
+
...options,
|
|
127
|
+
})
|
|
128
|
+
|
|
129
|
+
type TextInputOpts = Omit<
|
|
130
|
+
TextInputComponentForModalRequest,
|
|
131
|
+
"type" | "style"
|
|
132
|
+
> & {
|
|
133
|
+
style?: TextInputStyleTypes
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
/**
|
|
137
|
+
* Helper to create a text input
|
|
138
|
+
*/
|
|
139
|
+
export const textInput = (
|
|
140
|
+
input: TextInputOpts,
|
|
141
|
+
): TextInputComponentForModalRequest => ({
|
|
142
|
+
type: MessageComponentTypes.TEXT_INPUT,
|
|
143
|
+
style: TextInputStyleTypes.SHORT,
|
|
144
|
+
...input,
|
|
145
|
+
})
|
|
146
|
+
|
|
147
|
+
/**
|
|
148
|
+
* Helper to create a poll
|
|
149
|
+
*/
|
|
150
|
+
export const poll = (
|
|
151
|
+
input: Omit<PollCreateRequest, "answers"> & {
|
|
152
|
+
readonly answers: ReadonlyArray<PollMediaCreateRequest>
|
|
153
|
+
},
|
|
154
|
+
): PollCreateRequest => ({
|
|
155
|
+
...input,
|
|
156
|
+
answers: input.answers.map(
|
|
157
|
+
poll_media => ({ poll_media }) as PollAnswerCreateRequest,
|
|
158
|
+
),
|
|
159
|
+
})
|
|
160
|
+
|
|
161
|
+
/**
|
|
162
|
+
* Helper to create a media gallery
|
|
163
|
+
*/
|
|
164
|
+
export const mediaGallery = (
|
|
165
|
+
options: Omit<MediaGalleryComponentForMessageRequest, "type">,
|
|
166
|
+
): MediaGalleryComponentForMessageRequest => ({
|
|
167
|
+
type: MessageComponentTypes.MEDIA_GALLERY,
|
|
168
|
+
...options,
|
|
169
|
+
})
|
|
170
|
+
|
|
171
|
+
/**
|
|
172
|
+
* Helper to create a file component
|
|
173
|
+
*/
|
|
174
|
+
export const file = (
|
|
175
|
+
options: Omit<FileComponentForMessageRequest, "type">,
|
|
176
|
+
): FileComponentForMessageRequest => ({
|
|
177
|
+
type: MessageComponentTypes.FILE,
|
|
178
|
+
...options,
|
|
179
|
+
})
|
|
180
|
+
|
|
181
|
+
/**
|
|
182
|
+
* Helper to create a container component
|
|
183
|
+
*/
|
|
184
|
+
export const container = (
|
|
185
|
+
options: Omit<ContainerComponentForMessageRequest, "type">,
|
|
186
|
+
): ContainerComponentForMessageRequest => ({
|
|
187
|
+
type: MessageComponentTypes.CONTAINER,
|
|
188
|
+
...options,
|
|
189
|
+
})
|
|
190
|
+
|
|
191
|
+
/**
|
|
192
|
+
* Helper to create a section component
|
|
193
|
+
*/
|
|
194
|
+
export const section = (
|
|
195
|
+
options: Omit<SectionComponentForMessageRequest, "type">,
|
|
196
|
+
): SectionComponentForMessageRequest => ({
|
|
197
|
+
type: MessageComponentTypes.SECTION,
|
|
198
|
+
...options,
|
|
199
|
+
})
|
|
200
|
+
|
|
201
|
+
/**
|
|
202
|
+
* Helper to create a thumbnail component
|
|
203
|
+
*/
|
|
204
|
+
export const thumbnail = (options: {
|
|
205
|
+
readonly url: string
|
|
206
|
+
readonly description?: string | undefined
|
|
207
|
+
readonly spoiler?: boolean | undefined
|
|
208
|
+
}): ThumbnailComponentForMessageRequest => ({
|
|
209
|
+
type: MessageComponentTypes.THUMBNAIL,
|
|
210
|
+
description: options.description,
|
|
211
|
+
spoiler: options.spoiler,
|
|
212
|
+
media: { url: options.url },
|
|
213
|
+
})
|
|
214
|
+
|
|
215
|
+
/**
|
|
216
|
+
* Helper to create a separator component
|
|
217
|
+
*/
|
|
218
|
+
export const seperator = (
|
|
219
|
+
options?: Omit<SeparatorComponentForMessageRequest, "type">,
|
|
220
|
+
): SeparatorComponentForMessageRequest => ({
|
|
221
|
+
type: MessageComponentTypes.SEPARATOR,
|
|
222
|
+
...options,
|
|
223
|
+
})
|
|
224
|
+
|
|
225
|
+
/**
|
|
226
|
+
* Helper to create a text display component
|
|
227
|
+
*/
|
|
228
|
+
export const textDisplay = (
|
|
229
|
+
content: string,
|
|
230
|
+
): TextDisplayComponentForMessageRequest => ({
|
|
231
|
+
type: MessageComponentTypes.TEXT_DISPLAY,
|
|
232
|
+
content,
|
|
233
|
+
})
|
|
234
|
+
|
|
235
|
+
type MessageComponents = NonNullable<MessageCreateRequest["components"]>[number]
|
|
236
|
+
|
|
237
|
+
/**
|
|
238
|
+
* Create a components v2 message
|
|
239
|
+
*/
|
|
240
|
+
export const components = <const C extends ReadonlyArray<MessageComponents>>(
|
|
241
|
+
items: C,
|
|
242
|
+
options?: {
|
|
243
|
+
readonly ephemeral?: boolean | undefined
|
|
244
|
+
},
|
|
245
|
+
): {
|
|
246
|
+
readonly flags: MessageFlags
|
|
247
|
+
readonly components: C
|
|
248
|
+
} => ({
|
|
249
|
+
flags: options?.ephemeral
|
|
250
|
+
? MessageFlags.Ephemeral | MessageFlags.IsComponentsV2
|
|
251
|
+
: MessageFlags.IsComponentsV2,
|
|
252
|
+
components: items,
|
|
253
|
+
})
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
import * as Chunk from "effect/Chunk"
|
|
2
|
+
import { identity } from "effect/Function"
|
|
3
|
+
import type * as Cause from "effect/Cause"
|
|
4
|
+
import * as Effect from "effect/Effect"
|
|
5
|
+
import { catchTag } from "effect/Effect"
|
|
6
|
+
import type { DiscordRESTError } from "../DiscordREST.ts"
|
|
7
|
+
import { DiscordREST } from "../DiscordREST.ts"
|
|
8
|
+
import type * as D from "./definitions.ts"
|
|
9
|
+
import type * as Discord from "../types.ts"
|
|
10
|
+
|
|
11
|
+
type ExtractTag<A> = A extends { _tag: infer Tag }
|
|
12
|
+
? Tag extends string
|
|
13
|
+
? Tag
|
|
14
|
+
: never
|
|
15
|
+
: never
|
|
16
|
+
|
|
17
|
+
export class InteractionBuilder<R, E, TE> {
|
|
18
|
+
constructor(
|
|
19
|
+
readonly definitions: Chunk.Chunk<
|
|
20
|
+
readonly [
|
|
21
|
+
handler: D.InteractionDefinition<R, E>,
|
|
22
|
+
transform: (
|
|
23
|
+
self: Effect.Effect<any, any, any>,
|
|
24
|
+
) => Effect.Effect<void, TE, R>,
|
|
25
|
+
]
|
|
26
|
+
>,
|
|
27
|
+
readonly transform: (
|
|
28
|
+
self: Effect.Effect<any, any, any>,
|
|
29
|
+
) => Effect.Effect<void, TE, R>,
|
|
30
|
+
) {}
|
|
31
|
+
|
|
32
|
+
add<R1, E1>(definition: D.InteractionDefinition<R1, E1>) {
|
|
33
|
+
return new InteractionBuilder<R | R1, E | E1, TE | E1>(
|
|
34
|
+
Chunk.append(this.definitions, [definition, this.transform] as const),
|
|
35
|
+
this.transform,
|
|
36
|
+
)
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
concat<R1, E1, TE1>(builder: InteractionBuilder<R1, E1, TE1>) {
|
|
40
|
+
return new InteractionBuilder<R | R1, E | E1, TE | TE1>(
|
|
41
|
+
Chunk.appendAll(this.definitions, builder.definitions),
|
|
42
|
+
this.transform,
|
|
43
|
+
)
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
private transformTransform<R1, E1>(
|
|
47
|
+
f: (selr: Effect.Effect<void, TE, R>) => Effect.Effect<void, E1, R1>,
|
|
48
|
+
) {
|
|
49
|
+
return new InteractionBuilder<R1, E, E1>(
|
|
50
|
+
Chunk.map(this.definitions, ([d, t]) => [d as any, _ => f(t(_)) as any]),
|
|
51
|
+
_ => f(this.transform(_)) as any,
|
|
52
|
+
)
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
private transformHandlers<R1, E1>(
|
|
56
|
+
f: (
|
|
57
|
+
self: Effect.Effect<Discord.CreateInteractionResponseRequest, E, R>,
|
|
58
|
+
) => Effect.Effect<Discord.CreateInteractionResponseRequest, E1, R1>,
|
|
59
|
+
) {
|
|
60
|
+
return new InteractionBuilder<
|
|
61
|
+
R1,
|
|
62
|
+
E1,
|
|
63
|
+
Exclude<TE, Exclude<E, E1>> | Exclude<E1, E>
|
|
64
|
+
>(
|
|
65
|
+
Chunk.map(this.definitions, ([d, t]) => [
|
|
66
|
+
{
|
|
67
|
+
...d,
|
|
68
|
+
handle: Effect.isEffect(d.handle)
|
|
69
|
+
? f(d.handle)
|
|
70
|
+
: (_: any) => f((d.handle as any)(_)),
|
|
71
|
+
} as any,
|
|
72
|
+
t as any,
|
|
73
|
+
]),
|
|
74
|
+
this.transform as any,
|
|
75
|
+
)
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
catchAllCause<R1, E1>(
|
|
79
|
+
f: (cause: Cause.Cause<TE>) => Effect.Effect<void, E1, R1>,
|
|
80
|
+
) {
|
|
81
|
+
return this.transformTransform<R | R1, E1>(Effect.catchCause(f))
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
catchAllCauseRespond<R1, E1>(
|
|
85
|
+
f: (
|
|
86
|
+
cause: Cause.Cause<E>,
|
|
87
|
+
) => Effect.Effect<Discord.CreateInteractionResponseRequest, E1, R1>,
|
|
88
|
+
) {
|
|
89
|
+
return this.transformHandlers<R | R1, E1>(Effect.catchCause(f))
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
catchAll<R1, E1>(f: (error: TE) => Effect.Effect<void, E1, R1>) {
|
|
93
|
+
return this.transformTransform<R | R1, E1>(Effect.catch(f))
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
catchAllRespond<R1, E1>(
|
|
97
|
+
f: (
|
|
98
|
+
error: E,
|
|
99
|
+
) => Effect.Effect<Discord.CreateInteractionResponseRequest, E1, R1>,
|
|
100
|
+
) {
|
|
101
|
+
return this.transformHandlers<R | R1, E1>(Effect.catch(f))
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
catchTag<T extends ExtractTag<E>, R1, E1>(
|
|
105
|
+
tag: T,
|
|
106
|
+
f: (error: Extract<TE, { _tag: T }>) => Effect.Effect<void, E1, R1>,
|
|
107
|
+
) {
|
|
108
|
+
return this.transformTransform<R | R1, Exclude<TE, { _tag: T }> | E1>(
|
|
109
|
+
_ => catchTag(_ as any, tag, f as any) as any,
|
|
110
|
+
)
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
catchTagRespond<T extends ExtractTag<E>, R1, E1>(
|
|
114
|
+
tag: T,
|
|
115
|
+
f: (
|
|
116
|
+
error: Extract<E, { _tag: T }>,
|
|
117
|
+
) => Effect.Effect<Discord.CreateInteractionResponseRequest, E1, R1>,
|
|
118
|
+
) {
|
|
119
|
+
return this.transformHandlers<R | R1, Exclude<E, { _tag: T }> | E1>(
|
|
120
|
+
_ => catchTag(_ as any, tag, f as any) as any,
|
|
121
|
+
)
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
get syncGlobal() {
|
|
125
|
+
const commands = this.definitions.pipe(
|
|
126
|
+
Chunk.map(([d, _]) => d),
|
|
127
|
+
Chunk.filter(
|
|
128
|
+
(c): c is D.GlobalApplicationCommand<R, E> =>
|
|
129
|
+
c._tag === "GlobalApplicationCommand",
|
|
130
|
+
),
|
|
131
|
+
Chunk.map(c => c.command),
|
|
132
|
+
)
|
|
133
|
+
|
|
134
|
+
return DiscordREST.use(rest =>
|
|
135
|
+
rest
|
|
136
|
+
.getMyApplication()
|
|
137
|
+
.pipe(
|
|
138
|
+
Effect.flatMap(app =>
|
|
139
|
+
rest.bulkSetApplicationCommands(
|
|
140
|
+
app.id,
|
|
141
|
+
Chunk.toReadonlyArray(commands),
|
|
142
|
+
),
|
|
143
|
+
),
|
|
144
|
+
),
|
|
145
|
+
)
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
syncGuild(appId: Discord.Snowflake, guildId: Discord.Snowflake) {
|
|
149
|
+
const commands = this.definitions.pipe(
|
|
150
|
+
Chunk.map(([d, _]) => d),
|
|
151
|
+
Chunk.filter(
|
|
152
|
+
(c): c is D.GuildApplicationCommand<R, E> =>
|
|
153
|
+
c._tag === "GuildApplicationCommand",
|
|
154
|
+
),
|
|
155
|
+
Chunk.map(c => c.command),
|
|
156
|
+
)
|
|
157
|
+
|
|
158
|
+
return DiscordREST.use(rest =>
|
|
159
|
+
rest.bulkSetGuildApplicationCommands(
|
|
160
|
+
appId,
|
|
161
|
+
guildId,
|
|
162
|
+
Chunk.toReadonlyArray(commands),
|
|
163
|
+
),
|
|
164
|
+
)
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
export const builder = new InteractionBuilder<never, never, DiscordRESTError>(
|
|
169
|
+
Chunk.empty(),
|
|
170
|
+
identity as any,
|
|
171
|
+
)
|
|
@@ -0,0 +1,231 @@
|
|
|
1
|
+
import * as Option from "effect/Option"
|
|
2
|
+
import * as Effect from "effect/Effect"
|
|
3
|
+
import {
|
|
4
|
+
type DiscordSubCommand,
|
|
5
|
+
SubCommandContext,
|
|
6
|
+
SubCommandNotFound,
|
|
7
|
+
type DiscordApplicationCommand,
|
|
8
|
+
type DiscordInteraction,
|
|
9
|
+
} from "./context.ts"
|
|
10
|
+
import type * as Discord from "../types.ts"
|
|
11
|
+
import * as Helpers from "../Helpers/interactions.ts"
|
|
12
|
+
import * as Arr from "effect/Array"
|
|
13
|
+
import type { HashMap } from "effect/HashMap"
|
|
14
|
+
|
|
15
|
+
export class CommandHelper<A> {
|
|
16
|
+
constructor(readonly interaction: Discord.APIInteraction) {
|
|
17
|
+
this.target = Helpers.target(interaction.data as any) as any
|
|
18
|
+
this.data = interaction.data as any
|
|
19
|
+
}
|
|
20
|
+
readonly data: Discord.APIApplicationCommandInteraction["data"]
|
|
21
|
+
readonly target: CommandTypeMap<
|
|
22
|
+
A,
|
|
23
|
+
{
|
|
24
|
+
[Discord.ApplicationCommandType
|
|
25
|
+
.CHAT]: Discord.APIChatInputApplicationCommandGuildInteraction["data"]
|
|
26
|
+
[Discord.ApplicationCommandType.MESSAGE]: Discord.MessageResponse
|
|
27
|
+
[Discord.ApplicationCommandType.USER]: Discord.UserResponse
|
|
28
|
+
[Discord.ApplicationCommandType.PRIMARY_ENTRY_POINT]: undefined
|
|
29
|
+
}
|
|
30
|
+
>
|
|
31
|
+
|
|
32
|
+
resolve<T>(
|
|
33
|
+
name: AllResolvables<A>["name"],
|
|
34
|
+
f: (
|
|
35
|
+
id: Discord.Snowflake,
|
|
36
|
+
data: Discord.InteractionDataResolved,
|
|
37
|
+
) => T | undefined,
|
|
38
|
+
): Option.Option<T> {
|
|
39
|
+
return Helpers.resolveOptionValue(name, f)(this.interaction)
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
resolvedValues<T>(
|
|
43
|
+
f: (
|
|
44
|
+
id: Discord.Snowflake,
|
|
45
|
+
data: Discord.InteractionDataResolved,
|
|
46
|
+
) => T | undefined,
|
|
47
|
+
): Option.Option<ReadonlyArray<T>> {
|
|
48
|
+
return Helpers.resolveValues(f)(this.interaction)
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
option(
|
|
52
|
+
name: AllCommandOptions<A>["name"],
|
|
53
|
+
): Option.Option<Discord.APIApplicationCommandInteractionDataOption> {
|
|
54
|
+
return Helpers.getOption(name)(this.data as any)
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
optionValue<N extends AllRequiredCommandOptions<A>["name"]>(
|
|
58
|
+
name: N,
|
|
59
|
+
): CommandValue<A, N> {
|
|
60
|
+
return Option.getOrThrow(this.optionValueOptional(name))
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
optionValueOptional<N extends AllCommandOptions<A>["name"]>(
|
|
64
|
+
name: N,
|
|
65
|
+
): Option.Option<CommandValue<A, N>> {
|
|
66
|
+
return Option.map(this.option(name), _ => (_ as any).value) as any
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
optionValueOrElse<N extends AllCommandOptions<A>["name"], const OrElse>(
|
|
70
|
+
name: N,
|
|
71
|
+
orElse: () => OrElse,
|
|
72
|
+
): CommandValue<A, N> {
|
|
73
|
+
return Option.getOrElse(this.optionValueOptional(name), orElse) as any
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
subCommands<
|
|
77
|
+
NER extends SubCommandNames<A> extends never
|
|
78
|
+
? never
|
|
79
|
+
: Record<
|
|
80
|
+
SubCommandNames<A>,
|
|
81
|
+
Effect.Effect<Discord.CreateInteractionResponseRequest, any, any>
|
|
82
|
+
>,
|
|
83
|
+
>(
|
|
84
|
+
commands: NER,
|
|
85
|
+
): Effect.Effect<
|
|
86
|
+
Effect.Success<NER[keyof NER]>,
|
|
87
|
+
Effect.Error<NER[keyof NER]>,
|
|
88
|
+
| Exclude<Effect.Services<NER[keyof NER]>, DiscordSubCommand>
|
|
89
|
+
| DiscordInteraction
|
|
90
|
+
| DiscordApplicationCommand
|
|
91
|
+
> {
|
|
92
|
+
const commands_ = commands as Record<string, any>
|
|
93
|
+
const matchedCommand = Arr.findFirst(
|
|
94
|
+
Helpers.allSubCommands(this.data),
|
|
95
|
+
_ => !!commands_[_.name],
|
|
96
|
+
)
|
|
97
|
+
|
|
98
|
+
return Option.match(matchedCommand, {
|
|
99
|
+
onNone: () => Effect.fail(new SubCommandNotFound({ data: this.data })),
|
|
100
|
+
onSome: subCommand =>
|
|
101
|
+
Effect.provideService(commands_[subCommand.name], SubCommandContext, {
|
|
102
|
+
command: subCommand,
|
|
103
|
+
}),
|
|
104
|
+
}) as any
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
get optionsMap(): HashMap<string, string | undefined> {
|
|
108
|
+
return Helpers.optionsMap(this.data as any)
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
export type CommandHandlerFn<R, E, A> = (
|
|
113
|
+
i: CommandHelper<A>,
|
|
114
|
+
) => Effect.Effect<Discord.CreateInteractionResponseRequest, E, R>
|
|
115
|
+
|
|
116
|
+
interface CommandOption {
|
|
117
|
+
readonly type: any
|
|
118
|
+
readonly name: string
|
|
119
|
+
readonly options?: ReadonlyArray<CommandOption>
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
type CommandTypeMap<
|
|
123
|
+
A,
|
|
124
|
+
Options extends Record<Discord.ApplicationCommandType, any>,
|
|
125
|
+
> = A extends { readonly type: infer T }
|
|
126
|
+
? T extends keyof Options
|
|
127
|
+
? Options[T]
|
|
128
|
+
: never
|
|
129
|
+
: Options[typeof Discord.ApplicationCommandType.CHAT]
|
|
130
|
+
|
|
131
|
+
// == Sub commands
|
|
132
|
+
type SubCommands<A> = A extends {
|
|
133
|
+
readonly type: typeof Discord.ApplicationCommandOptionType.SUB_COMMAND
|
|
134
|
+
readonly options?: ReadonlyArray<CommandOption>
|
|
135
|
+
}
|
|
136
|
+
? A
|
|
137
|
+
: A extends { readonly options: ReadonlyArray<CommandOption> }
|
|
138
|
+
? SubCommands<A["options"][number]>
|
|
139
|
+
: never
|
|
140
|
+
|
|
141
|
+
type SubCommandNames<A> = Option<SubCommands<A>>["name"]
|
|
142
|
+
|
|
143
|
+
// == Command options
|
|
144
|
+
type CommandOptionType = Exclude<
|
|
145
|
+
Discord.ApplicationCommandOptionType,
|
|
146
|
+
| typeof Discord.ApplicationCommandOptionType.SUB_COMMAND
|
|
147
|
+
| typeof Discord.ApplicationCommandOptionType.SUB_COMMAND_GROUP
|
|
148
|
+
>
|
|
149
|
+
|
|
150
|
+
type CommandOptions<A> = OptionsWithLiteral<
|
|
151
|
+
A,
|
|
152
|
+
{
|
|
153
|
+
readonly type: CommandOptionType
|
|
154
|
+
}
|
|
155
|
+
>
|
|
156
|
+
|
|
157
|
+
type SubCommandOptions<A> = Extract<
|
|
158
|
+
Option<Exclude<SubCommands<A>["options"], undefined>[number]>,
|
|
159
|
+
{
|
|
160
|
+
readonly type: CommandOptionType
|
|
161
|
+
}
|
|
162
|
+
>
|
|
163
|
+
|
|
164
|
+
type AllCommandOptions<A> = CommandOptions<A> | SubCommandOptions<A>
|
|
165
|
+
|
|
166
|
+
type CommandWithName<A, N> = Extract<AllCommandOptions<A>, { readonly name: N }>
|
|
167
|
+
|
|
168
|
+
type OptionTypeValue = {
|
|
169
|
+
[Discord.ApplicationCommandOptionType.BOOLEAN]: boolean
|
|
170
|
+
[Discord.ApplicationCommandOptionType.INTEGER]: number
|
|
171
|
+
[Discord.ApplicationCommandOptionType.NUMBER]: number
|
|
172
|
+
}
|
|
173
|
+
type CommandValue<A, N> = CommandWithName<
|
|
174
|
+
A,
|
|
175
|
+
N
|
|
176
|
+
>["type"] extends keyof OptionTypeValue
|
|
177
|
+
? OptionTypeValue[CommandWithName<A, N>["type"]]
|
|
178
|
+
: string
|
|
179
|
+
|
|
180
|
+
// == Required options
|
|
181
|
+
type RequiredCommandOptions<A> = OptionsWithLiteral<
|
|
182
|
+
A,
|
|
183
|
+
{
|
|
184
|
+
readonly type: CommandOptionType
|
|
185
|
+
readonly required: true
|
|
186
|
+
}
|
|
187
|
+
>
|
|
188
|
+
|
|
189
|
+
type RequiredSubCommandOptions<A> = Extract<
|
|
190
|
+
SubCommandOptions<A>,
|
|
191
|
+
{ readonly required: true }
|
|
192
|
+
>
|
|
193
|
+
|
|
194
|
+
type AllRequiredCommandOptions<A> =
|
|
195
|
+
| RequiredCommandOptions<A>
|
|
196
|
+
| RequiredSubCommandOptions<A>
|
|
197
|
+
|
|
198
|
+
// == Resolveables
|
|
199
|
+
type ResolvableType =
|
|
200
|
+
| typeof Discord.ApplicationCommandOptionType.ROLE
|
|
201
|
+
| typeof Discord.ApplicationCommandOptionType.USER
|
|
202
|
+
| typeof Discord.ApplicationCommandOptionType.MENTIONABLE
|
|
203
|
+
| typeof Discord.ApplicationCommandOptionType.CHANNEL
|
|
204
|
+
|
|
205
|
+
type Resolvables<A> = OptionsWithLiteral<A, { readonly type: ResolvableType }>
|
|
206
|
+
type SubCommandResolvables<A> = Extract<
|
|
207
|
+
Option<Exclude<SubCommands<A>["options"], undefined>[number]>,
|
|
208
|
+
{
|
|
209
|
+
readonly type: ResolvableType
|
|
210
|
+
}
|
|
211
|
+
>
|
|
212
|
+
type AllResolvables<A> = Resolvables<A> | SubCommandResolvables<A>
|
|
213
|
+
|
|
214
|
+
// == Utilities
|
|
215
|
+
type StringLiteral<T> = T extends string
|
|
216
|
+
? string extends T
|
|
217
|
+
? never
|
|
218
|
+
: T
|
|
219
|
+
: never
|
|
220
|
+
|
|
221
|
+
type Option<A> = A extends { readonly name: infer N }
|
|
222
|
+
? N extends StringLiteral<N>
|
|
223
|
+
? A
|
|
224
|
+
: never
|
|
225
|
+
: never
|
|
226
|
+
|
|
227
|
+
type OptionsWithLiteral<A, T> = A extends {
|
|
228
|
+
readonly options: ReadonlyArray<CommandOption>
|
|
229
|
+
}
|
|
230
|
+
? Extract<A["options"][number], Option<A["options"][number]> & T>
|
|
231
|
+
: never
|