Skip to content

Commit d91c658

Browse files
authored
add concurrency (#256)
1 parent 4c3c2e9 commit d91c658

File tree

1 file changed

+17
-9
lines changed

1 file changed

+17
-9
lines changed

packages/discord-bot/src/Notifications.ts

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import { DiscordGatewayLayer } from "@chat/discord/DiscordGateway"
22
import assert from "assert"
33
import { Discord, DiscordREST, Ix, UI } from "dfx"
44
import { InteractionsRegistry } from "dfx/gateway"
5-
import { Array, Effect, Layer } from "effect"
5+
import { Array, Effect, FiberSet, Layer } from "effect"
66
import { RolesCache } from "./RolesCache.ts"
77

88
export const NotificationsLayer = Effect.gen(function*() {
@@ -76,27 +76,35 @@ export const NotificationsLayer = Effect.gen(function*() {
7676
const roles = yield* notificationRoles(ix.guild_id!)
7777

7878
const userRoles = new Set(ix.member?.roles ?? [])
79+
const fibers = yield* FiberSet.make()
7980
for (const role of roles) {
8081
const currentlyHas = userRoles.has(role.id)
8182
const shouldHave = data.values.includes(role.id)
8283
if (currentlyHas === shouldHave) {
8384
continue
8485
} else if (shouldHave) {
8586
userRoles.add(role.id)
86-
yield* rest.addGuildMemberRole(
87-
ix.guild_id!,
88-
ix.member!.user.id,
89-
role.id
87+
yield* FiberSet.run(
88+
fibers,
89+
rest.addGuildMemberRole(
90+
ix.guild_id!,
91+
ix.member!.user.id,
92+
role.id
93+
)
9094
)
9195
} else {
9296
userRoles.delete(role.id)
93-
yield* rest.deleteGuildMemberRole(
94-
ix.guild_id!,
95-
ix.member!.user.id,
96-
role.id
97+
yield* FiberSet.run(
98+
fibers,
99+
rest.deleteGuildMemberRole(
100+
ix.guild_id!,
101+
ix.member!.user.id,
102+
role.id
103+
)
97104
)
98105
}
99106
}
107+
yield* FiberSet.awaitEmpty(fibers)
100108
return Ix.response({
101109
type: Discord.InteractionCallbackTypes.UPDATE_MESSAGE,
102110
data: yield* message(ix, Array.fromIterable(userRoles))

0 commit comments

Comments
 (0)