[skip ci] fix(gateway): perf optimisations

This commit is contained in:
Hampus Kraft committed 2026-02-22 18:47:45 +00:00
1 parent d843d6f3f8
commit fd59bc219c
3 files changed
+32 -10

No files matched your search

+22 -2
View File
@@ -130,7 +130,19 @@ filter_sessions_for_event(Event, FinalData, SessionIdOpt, Sessions, UpdatedState
)
end;
false ->
guild_sessions:filter_sessions_exclude_session(Sessions, SessionIdOpt)
FilteredSessions = guild_sessions:filter_sessions_exclude_session(
Sessions, SessionIdOpt
),
case Event of
guild_member_add ->
[
{Sid, SessionData}
|| {Sid, SessionData} <- FilteredSessions,
maps:get(bot, SessionData, false) =:= true
];
_ ->
FilteredSessions
end
end
end.
@@ -1149,9 +1161,17 @@ filter_sessions_for_event_guild_wide_goes_to_all_sessions_test() ->
S2 = #{session_id => <<"s2">>, user_id => 11, pid => self()},
Sessions = #{<<"s1">> => S1, <<"s2">> => S2},
State = #{sessions => Sessions, data => #{<<"members">> => #{}}},
Result = filter_sessions_for_event(guild_member_add, #{}, undefined, Sessions, State),
Result = filter_sessions_for_event(guild_update, #{}, undefined, Sessions, State),
?assertEqual(2, length(Result)).
filter_sessions_for_event_guild_member_add_bots_only_test() ->
S1 = #{session_id => <<"s1">>, user_id => 10, pid => self(), bot => false},
S2 = #{session_id => <<"s2">>, user_id => 11, pid => self(), bot => true},
Sessions = #{<<"s1">> => S1, <<"s2">> => S2},
State = #{sessions => Sessions, data => #{<<"members">> => #{}}},
Result = filter_sessions_for_event(guild_member_add, #{}, undefined, Sessions, State),
?assertEqual([{<<"s2">>, S2}], Result).
extract_channel_id_message_create_uses_channel_id_field_test() ->
Data = #{<<"channel_id">> => <<"42">>},
?assertEqual(42, extract_channel_id(message_create, Data)).
@@ -373,12 +373,9 @@ get_sorted_members_for_list(ListId, State) ->
Data = maps:get(data, State, #{}),
Members = guild_data_index:member_values(Data),
FilteredMembers = guild_member_list_common:filter_members_for_list(ListId, Members, State),
lists:sort(
fun(A, B) ->
guild_member_list_common:get_member_sort_key(A) =< guild_member_list_common:get_member_sort_key(B)
end,
FilteredMembers
).
Decorated = [{guild_member_list_common:get_member_sort_key(M), M} || M <- FilteredMembers],
Sorted = lists:sort(fun({KeyA, _}, {KeyB, _}) -> KeyA =< KeyB end, Decorated),
[M || {_, M} <- Sorted].
-spec build_full_items(list_id(), guild_state(), [map()]) -> [list_item()].
build_full_items(ListId, State, SortedMembers) ->