feat(bot): -with-birthday flag for showing birthday in short member list
This commit is contained in:
parent
44fe3d538a
commit
a2b38c45e2
@ -78,8 +78,8 @@ public static class ContextListExt
|
|||||||
if (ctx.MatchFlag("with-birthday", "wbd", "wb"))
|
if (ctx.MatchFlag("with-birthday", "wbd", "wb"))
|
||||||
p.IncludeBirthday = true;
|
p.IncludeBirthday = true;
|
||||||
|
|
||||||
// Always show the sort property, too (unless this is the short list)
|
// Always show the sort property, too (unless this is the short list and we are already showing something else)
|
||||||
if (p.Type != ListType.Short)
|
if (p.Type != ListType.Short || p.includedCount == 0)
|
||||||
{
|
{
|
||||||
if (p.SortProperty == SortProperty.DisplayName) p.IncludeDisplayName = true;
|
if (p.SortProperty == SortProperty.DisplayName) p.IncludeDisplayName = true;
|
||||||
if (p.SortProperty == SortProperty.MessageCount) p.IncludeMessageCount = true;
|
if (p.SortProperty == SortProperty.MessageCount) p.IncludeMessageCount = true;
|
||||||
@ -131,89 +131,28 @@ public static class ContextListExt
|
|||||||
{
|
{
|
||||||
var ret = $"[`{m.Hid}`] **{m.NameFor(ctx)}** ";
|
var ret = $"[`{m.Hid}`] **{m.NameFor(ctx)}** ";
|
||||||
|
|
||||||
switch (opts.SortProperty)
|
if (opts.IncludeMessageCount && m.MessageCountFor(lookupCtx) is { } count)
|
||||||
|
ret += $"({count} messages)";
|
||||||
|
else if (opts.IncludeLastSwitch && m.MetadataPrivacy.TryGet(lookupCtx, m.LastSwitchTime, out var lastSw))
|
||||||
|
ret += $"(last switched in: <t:{lastSw.Value.ToUnixTimeSeconds()}>)";
|
||||||
|
// else if (opts.IncludeLastMessage && m.MetadataPrivacy.TryGet(lookupCtx, m.LastMessage, out var lastMsg))
|
||||||
|
// ret += $"(last message: <t:{DiscordUtils.SnowflakeToInstant(lastMsg.Value).ToUnixTimeSeconds()}>)";
|
||||||
|
else if (opts.IncludeCreated && m.MetadataPrivacy.TryGet(lookupCtx, m.Created, out var created))
|
||||||
|
ret += $"(created at <t:{created.ToUnixTimeSeconds()}>)";
|
||||||
|
else if (opts.IncludeAvatar && m.AvatarFor(lookupCtx) is { } avatarUrl)
|
||||||
|
ret += $"([avatar URL]({avatarUrl}))";
|
||||||
|
else if (opts.IncludePronouns && m.PronounsFor(lookupCtx) is { } pronouns)
|
||||||
|
ret += $"({pronouns})";
|
||||||
|
else if (opts.IncludeDisplayName && m.DisplayName != null && m.NamePrivacy.CanAccess(lookupCtx))
|
||||||
|
ret += $"({m.DisplayName})";
|
||||||
|
else if (opts.IncludeBirthday && m.BirthdayFor(lookupCtx) is { } birthday)
|
||||||
|
ret += $"(birthday: {m.BirthdayString})";
|
||||||
|
else if (m.HasProxyTags)
|
||||||
{
|
{
|
||||||
case SortProperty.Birthdate:
|
var proxyTagsString = m.ProxyTagsString();
|
||||||
{
|
if (proxyTagsString.Length > 100) // arbitrary threshold for now, tweak?
|
||||||
var birthday = m.BirthdayFor(lookupCtx);
|
proxyTagsString = "tags too long, see member card";
|
||||||
if (birthday != null)
|
ret += $"*(*{proxyTagsString}*)*";
|
||||||
ret += $"(birthday: {m.BirthdayString})";
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case SortProperty.DisplayName:
|
|
||||||
{
|
|
||||||
if (m.DisplayName != null && m.NamePrivacy.CanAccess(lookupCtx))
|
|
||||||
ret += $"({m.DisplayName})";
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case SortProperty.MessageCount:
|
|
||||||
{
|
|
||||||
if (m.MessageCountFor(lookupCtx) is { } count)
|
|
||||||
ret += $"({count} messages)";
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case SortProperty.LastSwitch:
|
|
||||||
{
|
|
||||||
if (m.MetadataPrivacy.TryGet(lookupCtx, m.LastSwitchTime, out var lastSw))
|
|
||||||
ret += $"(last switched in: <t:{lastSw.Value.ToUnixTimeSeconds()}>)";
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
// case SortProperty.LastMessage:
|
|
||||||
// {
|
|
||||||
// if (m.MetadataPrivacy.TryGet(lookupCtx, m.LastMessage, out var lastMsg))
|
|
||||||
// ret += $"(last message: <t:{DiscordUtils.SnowflakeToInstant(lastMsg.Value).ToUnixTimeSeconds()}>)";
|
|
||||||
// break;
|
|
||||||
// }
|
|
||||||
case SortProperty.CreationDate:
|
|
||||||
{
|
|
||||||
if (m.MetadataPrivacy.TryGet(lookupCtx, m.Created, out var created))
|
|
||||||
ret += $"(created at <t:{created.ToUnixTimeSeconds()}>)";
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
default:
|
|
||||||
{
|
|
||||||
if (opts.IncludeMessageCount && m.MessageCountFor(lookupCtx) is { } count)
|
|
||||||
{
|
|
||||||
ret += $"({count} messages)";
|
|
||||||
}
|
|
||||||
else if (opts.IncludeDisplayName && m.DisplayName != null && m.NamePrivacy.CanAccess(lookupCtx))
|
|
||||||
{
|
|
||||||
ret += $"({m.DisplayName})";
|
|
||||||
}
|
|
||||||
else if (opts.IncludeLastSwitch &&
|
|
||||||
m.MetadataPrivacy.TryGet(lookupCtx, m.LastSwitchTime, out var lastSw))
|
|
||||||
{
|
|
||||||
ret += $"(last switched in: <t:{lastSw.Value.ToUnixTimeSeconds()}>)";
|
|
||||||
}
|
|
||||||
// else if (opts.IncludeLastMessage && m.MetadataPrivacy.TryGet(lookupCtx, m.LastMessage, out var lastMsg))
|
|
||||||
// ret += $"(last message: <t:{DiscordUtils.SnowflakeToInstant(lastMsg.Value).ToUnixTimeSeconds()}>)";
|
|
||||||
else if (opts.IncludeCreated &&
|
|
||||||
m.MetadataPrivacy.TryGet(lookupCtx, m.Created, out var created))
|
|
||||||
{
|
|
||||||
ret += $"(created at <t:{created.ToUnixTimeSeconds()}>)";
|
|
||||||
}
|
|
||||||
else if (opts.IncludeAvatar && m.AvatarFor(lookupCtx) is { } avatarUrl)
|
|
||||||
{
|
|
||||||
ret += $"([avatar URL]({avatarUrl}))";
|
|
||||||
}
|
|
||||||
else if (opts.IncludePronouns && m.PronounsFor(lookupCtx) is { } pronouns)
|
|
||||||
{
|
|
||||||
ret += $"({pronouns})";
|
|
||||||
}
|
|
||||||
else if (opts.IncludeBirthday && m.BirthdayFor(lookupCtx) is {} birthday)
|
|
||||||
{
|
|
||||||
ret += $"(birthday: {m.BirthdayString})";
|
|
||||||
}
|
|
||||||
else if (m.HasProxyTags)
|
|
||||||
{
|
|
||||||
var proxyTagsString = m.ProxyTagsString();
|
|
||||||
if (proxyTagsString.Length > 100) // arbitrary threshold for now, tweak?
|
|
||||||
proxyTagsString = "tags too long, see member card";
|
|
||||||
ret += $"*(*{proxyTagsString}*)*";
|
|
||||||
}
|
|
||||||
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
|
@ -42,6 +42,18 @@ public class ListOptions
|
|||||||
public bool IncludeDisplayName { get; set; }
|
public bool IncludeDisplayName { get; set; }
|
||||||
public bool IncludeBirthday { get; set; }
|
public bool IncludeBirthday { get; set; }
|
||||||
|
|
||||||
|
// hacky but works, remember to update this when more include flags are added
|
||||||
|
public int includedCount => new[] {
|
||||||
|
IncludeMessageCount,
|
||||||
|
IncludeLastSwitch,
|
||||||
|
IncludeLastMessage,
|
||||||
|
IncludeCreated,
|
||||||
|
IncludeAvatar,
|
||||||
|
IncludePronouns,
|
||||||
|
IncludeDisplayName,
|
||||||
|
IncludeBirthday,
|
||||||
|
}.Sum(x => Convert.ToInt32(x));
|
||||||
|
|
||||||
public string CreateFilterString()
|
public string CreateFilterString()
|
||||||
{
|
{
|
||||||
var str = new StringBuilder();
|
var str = new StringBuilder();
|
||||||
@ -165,22 +177,8 @@ public static class ListOptionsExt
|
|||||||
|
|
||||||
public static void AssertIsValid(this ListOptions opts)
|
public static void AssertIsValid(this ListOptions opts)
|
||||||
{
|
{
|
||||||
if (opts.Type == ListType.Short)
|
if (opts.Type == ListType.Short && opts.includedCount > 1)
|
||||||
{
|
throw new PKError("The short list does not support showing items from multiple flags. Try using the full list instead.");
|
||||||
var hasMultipleIncluded = new[] {
|
|
||||||
opts.IncludeMessageCount,
|
|
||||||
opts.IncludeLastSwitch,
|
|
||||||
opts.IncludeLastMessage,
|
|
||||||
opts.IncludeCreated,
|
|
||||||
opts.IncludeAvatar,
|
|
||||||
opts.IncludePronouns,
|
|
||||||
opts.IncludeDisplayName,
|
|
||||||
opts.IncludeBirthday,
|
|
||||||
}.Sum(x => Convert.ToInt32(x)) > 1;
|
|
||||||
|
|
||||||
if (hasMultipleIncluded)
|
|
||||||
throw new PKError("The short list does not support showing items from multiple flags. Try using the full list instead.");
|
|
||||||
}
|
|
||||||
|
|
||||||
// the check for multiple *sorting* property flags is done in SortProperty setter
|
// the check for multiple *sorting* property flags is done in SortProperty setter
|
||||||
}
|
}
|
||||||
|
@ -65,6 +65,7 @@ You cannot look up private members or groups of another system.
|
|||||||
|-with-avatar|-wa, -wi, -ia, -ii, -img|Member, Group|Show each item's avatar URL|
|
|-with-avatar|-wa, -wi, -ia, -ii, -img|Member, Group|Show each item's avatar URL|
|
||||||
|-with-pronouns|-wp -wprns|Member|Show each member's pronouns in the short list (shown by default in full list)|
|
|-with-pronouns|-wp -wprns|Member|Show each member's pronouns in the short list (shown by default in full list)|
|
||||||
|-with-displayname|-wdn|Member, Group|Show each item's displayname|
|
|-with-displayname|-wdn|Member, Group|Show each item's displayname|
|
||||||
|
|-with-birthday|-wbd, -wb|Member|Show each member's birthday in the short list (shown by default in full list)|
|
||||||
|
|
||||||
## Miscellaneous flags
|
## Miscellaneous flags
|
||||||
|Command|Flag|Aliases|Description|
|
|Command|Flag|Aliases|Description|
|
||||||
|
Loading…
Reference in New Issue
Block a user