Couple more slight tweaks :)

This commit is contained in:
Ske 2020-08-21 17:08:49 +02:00
parent 1bb5d203df
commit 10c01da39b
8 changed files with 37 additions and 22 deletions

View File

@ -245,7 +245,7 @@ namespace PluralKit.Bot
throw new PKError("You do not have permission to access this information."); throw new PKError("You do not have permission to access this information.");
} }
var groups = (await conn.QueryGroupsInSystem(system.Id)) var groups = (await conn.QueryGroupList(system.Id))
.Where(g => g.Visibility.CanAccess(pctx)) .Where(g => g.Visibility.CanAccess(pctx))
.ToList(); .ToList();
@ -262,14 +262,14 @@ namespace PluralKit.Bot
var title = system.Name != null ? $"Groups of {system.Name} (`{system.Hid}`)" : $"Groups of `{system.Hid}`"; var title = system.Name != null ? $"Groups of {system.Name} (`{system.Hid}`)" : $"Groups of `{system.Hid}`";
await ctx.Paginate(groups.ToAsyncEnumerable(), groups.Count, 25, title, Renderer); await ctx.Paginate(groups.ToAsyncEnumerable(), groups.Count, 25, title, Renderer);
Task Renderer(DiscordEmbedBuilder eb, IEnumerable<PKGroup> page) Task Renderer(DiscordEmbedBuilder eb, IEnumerable<ListedGroup> page)
{ {
eb.WithSimpleLineContent(page.Select(g => eb.WithSimpleLineContent(page.Select(g =>
{ {
if (g.DisplayName != null) if (g.DisplayName != null)
return $"[`{g.Hid}`] **{g.Name}** ({g.DisplayName})"; return $"[`{g.Hid}`] **{g.Name}** ({g.DisplayName}) ({"member".ToQuantity(g.MemberCount)})";
else else
return $"[`{g.Hid}`] **{g.Name}**"; return $"[`{g.Hid}`] **{g.Name}** ({"member".ToQuantity(g.MemberCount)})";
})); }));
eb.WithFooter($"{groups.Count} total."); eb.WithFooter($"{groups.Count} total.");
return Task.CompletedTask; return Task.CompletedTask;

View File

@ -26,6 +26,7 @@ create table group_members (
primary key (group_id, member_id) primary key (group_id, member_id)
); );
alter table systems add column group_list_privacy integer check (group_list_privacy in (1, 2)) not null default systems.member_list_privacy; alter table systems add column group_list_privacy integer check (group_list_privacy in (1, 2)) not null default 1;
update systems set group_list_privacy = member_list_privacy;
update info set schema_version = 9; update info set schema_version = 9;

View File

@ -11,6 +11,9 @@ namespace PluralKit.Core
{ {
public static Task<IEnumerable<SystemFronter>> QueryCurrentFronters(this IPKConnection conn, SystemId system) => public static Task<IEnumerable<SystemFronter>> QueryCurrentFronters(this IPKConnection conn, SystemId system) =>
conn.QueryAsync<SystemFronter>("select * from system_fronters where system = @system", new {system}); conn.QueryAsync<SystemFronter>("select * from system_fronters where system = @system", new {system});
public static Task<IEnumerable<ListedGroup>> QueryGroupList(this IPKConnection conn, SystemId system) =>
conn.QueryAsync<ListedGroup>("select * from group_list where system = @System", new {System = system});
public static Task<IEnumerable<ListedMember>> QueryMemberList(this IPKConnection conn, SystemId system, MemberListQueryOptions opts) public static Task<IEnumerable<ListedMember>> QueryMemberList(this IPKConnection conn, SystemId system, MemberListQueryOptions opts)
{ {

View File

@ -0,0 +1,7 @@
namespace PluralKit.Core
{
public class ListedGroup : PKGroup
{
public int MemberCount { get; }
}
}

View File

@ -54,4 +54,10 @@ select members.*,
when members.description_privacy = 1 then members.description when members.description_privacy = 1 then members.description
-- Any other privacy (rn just '2'), return null description (missing case = null in SQL) -- Any other privacy (rn just '2'), return null description (missing case = null in SQL)
end as public_description end as public_description
from members; from members;
create view group_list as
select groups.*,
-- Find group member count
(select count(*) from group_members where group_id = groups.id) as member_count
from groups;

View File

@ -5,6 +5,7 @@
drop view if exists system_last_switch; drop view if exists system_last_switch;
drop view if exists system_fronters; drop view if exists system_fronters;
drop view if exists member_list; drop view if exists member_list;
drop view if exists group_list;
drop function if exists message_context; drop function if exists message_context;
drop function if exists proxy_members; drop function if exists proxy_members;

View File

@ -34,10 +34,7 @@ namespace PluralKit.Core
public static Task<PKGroup?> QueryGroupByHid(this IPKConnection conn, string hid) => public static Task<PKGroup?> QueryGroupByHid(this IPKConnection conn, string hid) =>
conn.QueryFirstOrDefaultAsync<PKGroup?>("select * from groups where hid = @hid", new {hid = hid.ToLowerInvariant()}); conn.QueryFirstOrDefaultAsync<PKGroup?>("select * from groups where hid = @hid", new {hid = hid.ToLowerInvariant()});
public static Task<IEnumerable<PKGroup>> QueryGroupsInSystem(this IPKConnection conn, SystemId system) =>
conn.QueryAsync<PKGroup>("select * from groups where system = @System", new {System = system});
public static Task<int> QueryGroupMemberCount(this IPKConnection conn, GroupId id, public static Task<int> QueryGroupMemberCount(this IPKConnection conn, GroupId id,
PrivacyLevel? privacyFilter = null) PrivacyLevel? privacyFilter = null)
{ {

View File

@ -5,20 +5,20 @@ namespace PluralKit.Core
{ {
public class PKGroup public class PKGroup
{ {
public GroupId Id { get; } public GroupId Id { get; private set; }
public string Hid { get; } = null!; public string Hid { get; private set; } = null!;
public SystemId System { get; } public SystemId System { get; private set; }
public string Name { get; } = null!; public string Name { get; private set; } = null!;
public string? DisplayName { get; } public string? DisplayName { get; private set; }
public string? Description { get; } public string? Description { get; private set; }
public string? Icon { get; } public string? Icon { get; private set; }
public PrivacyLevel DescriptionPrivacy { get; } public PrivacyLevel DescriptionPrivacy { get; private set; }
public PrivacyLevel IconPrivacy { get; } public PrivacyLevel IconPrivacy { get; private set; }
public PrivacyLevel ListPrivacy { get; } public PrivacyLevel ListPrivacy { get; private set; }
public PrivacyLevel Visibility { get; } public PrivacyLevel Visibility { get; private set; }
public Instant Created { get; } public Instant Created { get; private set; }
} }
} }