fix(gateway): use live online count (#1)
This commit is contained in:
parent
5ae825fc7d
commit
2c8a776f39
@ -44,6 +44,9 @@
|
|||||||
get_vanity_url_channel/1,
|
get_vanity_url_channel/1,
|
||||||
get_first_viewable_text_channel/1
|
get_first_viewable_text_channel/1
|
||||||
]).
|
]).
|
||||||
|
-import(guild_member_list, [
|
||||||
|
get_online_count/1
|
||||||
|
]).
|
||||||
-import(guild_members, [
|
-import(guild_members, [
|
||||||
get_users_to_mention_by_roles/2,
|
get_users_to_mention_by_roles/2,
|
||||||
get_users_to_mention_by_user_ids/2,
|
get_users_to_mention_by_user_ids/2,
|
||||||
@ -83,9 +86,10 @@ init(GuildState) ->
|
|||||||
Data = maps:get(data, StateWithMemberSubs, #{}),
|
Data = maps:get(data, StateWithMemberSubs, #{}),
|
||||||
Members = maps:get(<<"members">>, Data, []),
|
Members = maps:get(<<"members">>, Data, []),
|
||||||
MemberCount = length(Members),
|
MemberCount = length(Members),
|
||||||
OnlineCount = count_online_members(Members),
|
|
||||||
StateWithCounts = maps:put(member_count, MemberCount, StateWithMemberSubs),
|
StateWithCounts = maps:put(member_count, MemberCount, StateWithMemberSubs),
|
||||||
StateWithPresences = maps:put(presences, #{}, maps:put(online_count, OnlineCount, StateWithCounts)),
|
StateWithPresenceMap = maps:put(presences, #{}, StateWithCounts),
|
||||||
|
OnlineCount = get_online_count(StateWithPresenceMap),
|
||||||
|
StateWithPresences = maps:put(online_count, OnlineCount, StateWithPresenceMap),
|
||||||
guild_passive_sync:schedule_passive_sync(StateWithPresences),
|
guild_passive_sync:schedule_passive_sync(StateWithPresences),
|
||||||
{ok, StateWithPresences}.
|
{ok, StateWithPresences}.
|
||||||
|
|
||||||
@ -94,7 +98,7 @@ handle_call({session_connect, Request}, {CallerPid, _}, State) ->
|
|||||||
guild_sessions:handle_session_connect(Request, SessionPid, State);
|
guild_sessions:handle_session_connect(Request, SessionPid, State);
|
||||||
handle_call({get_counts}, _From, State) ->
|
handle_call({get_counts}, _From, State) ->
|
||||||
MemberCount = maps:get(member_count, State, 0),
|
MemberCount = maps:get(member_count, State, 0),
|
||||||
OnlineCount = maps:get(online_count, State, 0),
|
OnlineCount = get_online_count(State),
|
||||||
{reply, #{member_count => MemberCount, presence_count => OnlineCount}, State};
|
{reply, #{member_count => MemberCount, presence_count => OnlineCount}, State};
|
||||||
handle_call({get_large_guild_metadata}, _From, State) ->
|
handle_call({get_large_guild_metadata}, _From, State) ->
|
||||||
MemberCount = maps:get(member_count, State, 0),
|
MemberCount = maps:get(member_count, State, 0),
|
||||||
@ -551,22 +555,9 @@ resolve_data_map(State) when is_map(State) ->
|
|||||||
resolve_data_map(_) ->
|
resolve_data_map(_) ->
|
||||||
undefined.
|
undefined.
|
||||||
|
|
||||||
count_online_members(Members) ->
|
|
||||||
lists:foldl(
|
|
||||||
fun(Member, Count) ->
|
|
||||||
Presence = maps:get(<<"presence">>, Member, <<"offline">>),
|
|
||||||
case Presence of
|
|
||||||
<<"offline">> -> Count;
|
|
||||||
_ -> Count + 1
|
|
||||||
end
|
|
||||||
end,
|
|
||||||
0,
|
|
||||||
Members
|
|
||||||
).
|
|
||||||
|
|
||||||
update_counts(State) ->
|
update_counts(State) ->
|
||||||
Data = maps:get(data, State, #{}),
|
Data = maps:get(data, State, #{}),
|
||||||
Members = maps:get(<<"members">>, Data, []),
|
Members = maps:get(<<"members">>, Data, []),
|
||||||
MemberCount = length(Members),
|
MemberCount = length(Members),
|
||||||
OnlineCount = count_online_members(Members),
|
OnlineCount = get_online_count(State),
|
||||||
maps:put(member_count, MemberCount, maps:put(online_count, OnlineCount, State)).
|
maps:put(member_count, MemberCount, maps:put(online_count, OnlineCount, State)).
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user