@@ -2,7 +2,7 @@ import { DiscordGatewayLayer } from "@chat/discord/DiscordGateway"
22import assert from "assert"
33import { Discord , DiscordREST , Ix , UI } from "dfx"
44import { InteractionsRegistry } from "dfx/gateway"
5- import { Array , Effect , Layer } from "effect"
5+ import { Array , Effect , FiberSet , Layer } from "effect"
66import { RolesCache } from "./RolesCache.ts"
77
88export 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