From 81fd8c9aad292c3dd572a8d8331339dca5508d50 Mon Sep 17 00:00:00 2001 From: Hampus Date: Fri, 11 Sep 2026 13:49:03 +0200 Subject: [PATCH] fix(gateway): skip empty dm partner registration casts (#2677) --- fluxer_gateway/src/session/session_dm_partners.erl | 10 ++++++++-- fluxer_gateway/test/session_dm_partners_tests.erl | 7 +++++++ 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/fluxer_gateway/src/session/session_dm_partners.erl b/fluxer_gateway/src/session/session_dm_partners.erl index 265379972..7673d7f70 100644 --- a/fluxer_gateway/src/session/session_dm_partners.erl +++ b/fluxer_gateway/src/session/session_dm_partners.erl @@ -29,12 +29,18 @@ register_all(State) -> register_guild(_GuildId, GuildPid, State) -> case enabled(State) of true -> - cast_partners({GuildPid, undefined}, partner_ids(State), State), - State; + maybe_cast_partners({GuildPid, undefined}, partner_ids(State), State); false -> State end. +-spec maybe_cast_partners(term(), [user_id()], session_state()) -> session_state(). +maybe_cast_partners(_GuildRef, [], State) -> + State; +maybe_cast_partners(GuildRef, Partners, State) -> + ok = cast_partners(GuildRef, Partners, State), + State. + -spec handle_mutual(guild_id(), [user_id()], session_state()) -> {noreply, session_state()}. handle_mutual(GuildId, PartnerIds, State) -> case maps:get(GuildId, maps:get(guilds, State, #{}), undefined) of diff --git a/fluxer_gateway/test/session_dm_partners_tests.erl b/fluxer_gateway/test/session_dm_partners_tests.erl index 121963c49..9b67813a9 100644 --- a/fluxer_gateway/test/session_dm_partners_tests.erl +++ b/fluxer_gateway/test/session_dm_partners_tests.erl @@ -41,6 +41,13 @@ register_guild_sends_direct_partners_to_that_guild_test() -> ?assertEqual({update_dm_partners, ?SESSION_ID, [2, 3]}, receive_cast()) end). +register_guild_without_direct_partners_stays_silent_test() -> + with_flag(true, fun() -> + State = (state(#{}))#{channels => #{300 => channel(3, [?SELF, 5, 6])}}, + _ = session_dm_partners:register_guild(?GUILD, self(), State), + ?assertEqual(none, receive_cast()) + end). + register_all_is_inert_when_disabled_test() -> with_flag(false, fun() -> _ = session_dm_partners:register_all(state(connected())),