An open API service indexing awesome lists of open source software.

https://github.com/tim-smart/dfx

A Discord library for effect-ts
https://github.com/tim-smart/dfx

Last synced: 3 months ago
JSON representation

A Discord library for effect-ts

Awesome Lists containing this project

README

          

# dfx

[![Discord](https://img.shields.io/discord/887189613389705256?style=for-the-badge)](https://discord.gg/dtR2Mtu66Q)

A Discord library built on top of effect

- Supports both the gateway and webhooks
- Simple yet powerful abstractions to build Discord bots

## Example

```typescript
import { NodeHttpClient, NodeRuntime, NodeSocket } from "@effect/platform-node"
import { DiscordConfig, Ix } from "dfx"
import { DiscordIxLive, InteractionsRegistry } from "dfx/gateway"
import { Config, Effect, Layer } from "effect"

// Create a layer for the discord services
const DiscordLayer = DiscordIxLive.pipe(
Layer.provide([
DiscordConfig.layerConfig({
token: Config.redacted("DISCORD_BOT_TOKEN"),
}),
NodeHttpClient.layerUndici,
NodeSocket.layerWebSocketConstructor,
]),
)

// Create hello service
const HelloLayer = Layer.effectDiscard(
Effect.gen(function* () {
const registry = yield* InteractionsRegistry

// Create hello command that responds with "Hello!"
const hello = Ix.global(
{
name: "hello",
description: "A basic command",
},
Effect.succeed({
type: 4,
data: {
content: "Hello!",
},
}),
)

// register the command(s) and handle errors
yield* registry.register(
Ix.builder.add(hello).catchAllCause(Effect.logError),
)
}),
).pipe(
// provide discord layer
Layer.provide(DiscordLayer),
)

// Construct the main layer
const MainLive = Layer.mergeAll(
// add your other services here
HelloLayer,
)

// run it
NodeRuntime.runMain(Layer.launch(MainLive))
```