2020-06-13 19:49:31 +00:00
|
|
|
|
using System.Collections.Generic;
|
2020-06-04 11:21:47 +00:00
|
|
|
|
|
|
|
|
|
using DSharpPlus.Entities;
|
|
|
|
|
|
|
|
|
|
using Humanizer;
|
|
|
|
|
|
2020-06-06 23:30:19 +00:00
|
|
|
|
using NodaTime;
|
|
|
|
|
|
2020-06-04 11:21:47 +00:00
|
|
|
|
using PluralKit.Core;
|
|
|
|
|
|
|
|
|
|
namespace PluralKit.Bot
|
|
|
|
|
{
|
|
|
|
|
public class LongRenderer: IListRenderer
|
|
|
|
|
{
|
|
|
|
|
public int MembersPerPage => 5;
|
|
|
|
|
|
|
|
|
|
private readonly MemberFields _fields;
|
|
|
|
|
public LongRenderer(MemberFields fields)
|
|
|
|
|
{
|
|
|
|
|
_fields = fields;
|
|
|
|
|
}
|
|
|
|
|
|
2020-06-17 19:31:39 +00:00
|
|
|
|
public void RenderPage(DiscordEmbedBuilder eb, DateTimeZone zone, IEnumerable<ListedMember> members, LookupContext ctx)
|
2020-06-04 11:21:47 +00:00
|
|
|
|
{
|
2020-06-13 19:49:31 +00:00
|
|
|
|
string FormatTimestamp(Instant timestamp) => DateTimeFormats.ZonedDateTimeFormat.Format(timestamp.InZone(zone));
|
|
|
|
|
|
2020-06-04 11:21:47 +00:00
|
|
|
|
foreach (var m in members)
|
|
|
|
|
{
|
|
|
|
|
var profile = $"**ID**: {m.Hid}";
|
2020-06-17 19:31:39 +00:00
|
|
|
|
if (_fields.ShowDisplayName && m.DisplayName != null && m.NamePrivacy.CanAccess(ctx)) profile += $"\n**Display name**: {m.DisplayName}";
|
2020-06-21 13:51:08 +00:00
|
|
|
|
if (_fields.ShowPronouns && m.PronounsFor(ctx) is {} pronouns) profile += $"\n**Pronouns**: {pronouns}";
|
|
|
|
|
if (_fields.ShowBirthday && m.BirthdayFor(ctx) != null) profile += $"\n**Birthdate**: {m.BirthdayString}";
|
2020-06-15 10:55:02 +00:00
|
|
|
|
if (_fields.ShowProxyTags && m.ProxyTags.Count > 0) profile += $"\n**Proxy tags:** {m.ProxyTagsString()}";
|
2020-06-21 13:51:08 +00:00
|
|
|
|
if (_fields.ShowMessageCount && m.MessageCountFor(ctx) is {} count && count > 0) profile += $"\n**Message count:** {count}";
|
|
|
|
|
if (_fields.ShowLastMessage && m.MetadataPrivacy.TryGet(ctx, m.LastMessage, out var lastMsg)) profile += $"\n**Last message:** {FormatTimestamp(DiscordUtils.SnowflakeToInstant(lastMsg.Value))}";
|
|
|
|
|
if (_fields.ShowLastSwitch && m.MetadataPrivacy.TryGet(ctx, m.LastSwitchTime, out var lastSw)) profile += $"\n**Last switched in:** {FormatTimestamp(lastSw.Value)}";
|
|
|
|
|
if (_fields.ShowDescription && m.DescriptionFor(ctx) is {} desc) profile += $"\n\n{desc}";
|
|
|
|
|
if (_fields.ShowPrivacy && m.MemberVisibility == PrivacyLevel.Private) profile += "\n*(this member is hidden)*";
|
2020-06-17 19:31:39 +00:00
|
|
|
|
|
2020-06-18 15:08:36 +00:00
|
|
|
|
eb.AddField(m.NameFor(ctx), profile.Truncate(1024));
|
2020-06-04 11:21:47 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
2020-06-13 19:49:31 +00:00
|
|
|
|
|
2020-06-04 11:21:47 +00:00
|
|
|
|
public class MemberFields
|
|
|
|
|
{
|
|
|
|
|
public bool ShowDisplayName = true;
|
2020-06-06 23:30:19 +00:00
|
|
|
|
public bool ShowCreated = false;
|
2020-06-04 11:21:47 +00:00
|
|
|
|
public bool ShowPronouns = true;
|
|
|
|
|
public bool ShowBirthday = true;
|
|
|
|
|
public bool ShowProxyTags = true;
|
|
|
|
|
public bool ShowDescription = true;
|
|
|
|
|
public bool ShowPrivacy = true;
|
|
|
|
|
|
2020-06-06 23:30:19 +00:00
|
|
|
|
public bool ShowMessageCount = false;
|
|
|
|
|
public bool ShowLastSwitch = false;
|
|
|
|
|
public bool ShowLastMessage = false;
|
|
|
|
|
|
2020-06-04 11:21:47 +00:00
|
|
|
|
public static MemberFields FromFlags(Context ctx)
|
|
|
|
|
{
|
2020-06-06 23:30:19 +00:00
|
|
|
|
var def = new MemberFields();
|
|
|
|
|
if (ctx.MatchFlag("with-last-switch", "with-last-fronted", "with-last-front", "wls", "wlf"))
|
|
|
|
|
def.ShowLastSwitch = true;
|
|
|
|
|
if (ctx.MatchFlag("with-message-count", "wmc"))
|
|
|
|
|
def.ShowMessageCount = true;
|
|
|
|
|
if (ctx.MatchFlag("with-last-message", "with-last-proxy", "wlm", "wlp"))
|
|
|
|
|
def.ShowLastMessage = true;
|
|
|
|
|
return def;
|
2020-06-04 11:21:47 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|