diff --git a/src/core/presences.ts b/src/core/presences.ts index 3dbc9d64..defcdf0e 100644 --- a/src/core/presences.ts +++ b/src/core/presences.ts @@ -1,11 +1,10 @@ import type { ActivitiesOptions } from "discord.js"; import type { IntoDependencies } from "./ioc"; import type { Emitter } from "./interfaces"; +import { Awaitable } from "../types/utility"; type Status = 'online' | 'idle' | 'invisible' | 'dnd' -type PresenceReduce = (previous: Presence.Result) => Presence.Result; - - +type PresenceReduce = (previous: Presence.Result) => Awaitable; export const Presence = { /** @@ -50,7 +49,7 @@ export const Presence = { export declare namespace Presence { export type Config = { inject?: [...T] - execute: (...v: IntoDependencies) => Presence.Result; + execute: (...v: IntoDependencies) => Awaitable; } @@ -60,7 +59,7 @@ export declare namespace Presence { activities?: ActivitiesOptions[]; shardId?: number[]; repeat?: number | [Emitter, string]; - onRepeat?: (previous: Result) => Result; + onRepeat?: PresenceReduce } } diff --git a/src/handlers/presence.ts b/src/handlers/presence.ts index 2282e3d3..0a59b61f 100644 --- a/src/handlers/presence.ts +++ b/src/handlers/presence.ts @@ -1,4 +1,4 @@ -import { concatMap, from, interval, of, map, scan, startWith, fromEvent, take } from "rxjs" +import { concatMap, from, interval, of, map, scan, startWith, fromEvent, take, mergeScan } from "rxjs" import { Presence } from "../core/presences"; import { Services } from "../core/ioc"; import assert from "node:assert"; @@ -14,7 +14,7 @@ const parseConfig = async (conf: Promise) => { const src$ = typeof repeat === 'number' ? interval(repeat) : fromEvent(...repeat); - return src$.pipe(scan(onRepeat, s), + return src$.pipe(mergeScan(async (args) => onRepeat(args), s), startWith(s)); } return of(s).pipe(take(1));