fix(bot): add callback to update message count after proxying
also re-add -with-last-message flag :D
This commit is contained in:
parent
8e0454a13b
commit
24db9f28c2
@ -63,8 +63,7 @@ public static class ContextListExt
|
|||||||
if (ctx.MatchFlag("with-last-switch", "with-last-fronted", "with-last-front", "wls", "wlf"))
|
if (ctx.MatchFlag("with-last-switch", "with-last-fronted", "with-last-front", "wls", "wlf"))
|
||||||
p.IncludeLastSwitch = true;
|
p.IncludeLastSwitch = true;
|
||||||
if (ctx.MatchFlag("with-last-message", "with-last-proxy", "wlm", "wlp"))
|
if (ctx.MatchFlag("with-last-message", "with-last-proxy", "wlm", "wlp"))
|
||||||
throw new PKError("Sorting by last message is temporarily disabled due to database issues, sorry.");
|
p.IncludeLastMessage = true;
|
||||||
// p.IncludeLastMessage = true;
|
|
||||||
if (ctx.MatchFlag("with-message-count", "wmc"))
|
if (ctx.MatchFlag("with-message-count", "wmc"))
|
||||||
p.IncludeMessageCount = true;
|
p.IncludeMessageCount = true;
|
||||||
if (ctx.MatchFlag("with-created", "wc"))
|
if (ctx.MatchFlag("with-created", "wc"))
|
||||||
@ -135,8 +134,8 @@ public static class ContextListExt
|
|||||||
ret += $"({count} messages)";
|
ret += $"({count} messages)";
|
||||||
else if (opts.IncludeLastSwitch && m.MetadataPrivacy.TryGet(lookupCtx, m.LastSwitchTime, out var lastSw))
|
else if (opts.IncludeLastSwitch && m.MetadataPrivacy.TryGet(lookupCtx, m.LastSwitchTime, out var lastSw))
|
||||||
ret += $"(last switched in: <t:{lastSw.Value.ToUnixTimeSeconds()}>)";
|
ret += $"(last switched in: <t:{lastSw.Value.ToUnixTimeSeconds()}>)";
|
||||||
// else if (opts.IncludeLastMessage && m.MetadataPrivacy.TryGet(lookupCtx, m.LastMessage, out var lastMsg))
|
else if (opts.IncludeLastMessage && m.MetadataPrivacy.TryGet(lookupCtx, m.LastMessageTimestamp, out var lastMsg))
|
||||||
// ret += $"(last message: <t:{DiscordUtils.SnowflakeToInstant(lastMsg.Value).ToUnixTimeSeconds()}>)";
|
ret += $"(last message: <t:{m.LastMessageTimestamp.Value.ToUnixTimeSeconds()}>)";
|
||||||
else if (opts.IncludeCreated && m.MetadataPrivacy.TryGet(lookupCtx, m.Created, out var created))
|
else if (opts.IncludeCreated && m.MetadataPrivacy.TryGet(lookupCtx, m.Created, out var created))
|
||||||
ret += $"(created at <t:{created.ToUnixTimeSeconds()}>)";
|
ret += $"(created at <t:{created.ToUnixTimeSeconds()}>)";
|
||||||
else if (opts.IncludeAvatar && m.AvatarFor(lookupCtx) is { } avatarUrl)
|
else if (opts.IncludeAvatar && m.AvatarFor(lookupCtx) is { } avatarUrl)
|
||||||
@ -181,8 +180,8 @@ public static class ContextListExt
|
|||||||
m.MessageCountFor(lookupCtx) is { } count && count > 0)
|
m.MessageCountFor(lookupCtx) is { } count && count > 0)
|
||||||
profile.Append($"\n**Message count:** {count}");
|
profile.Append($"\n**Message count:** {count}");
|
||||||
|
|
||||||
// if ((opts.IncludeLastMessage || opts.SortProperty == SortProperty.LastMessage) && m.MetadataPrivacy.TryGet(lookupCtx, m.LastMessage, out var lastMsg))
|
if ((opts.IncludeLastMessage || opts.SortProperty == SortProperty.LastMessage) && m.MetadataPrivacy.TryGet(lookupCtx, m.LastMessageTimestamp, out var lastMsg))
|
||||||
// profile.Append($"\n**Last message:** {DiscordUtils.SnowflakeToInstant(lastMsg.Value).FormatZoned(zone)}");
|
profile.Append($"\n**Last message:** {m.LastMessageTimestamp.Value.FormatZoned(ctx.Zone)}");
|
||||||
|
|
||||||
if ((opts.IncludeLastSwitch || opts.SortProperty == SortProperty.LastSwitch) &&
|
if ((opts.IncludeLastSwitch || opts.SortProperty == SortProperty.LastSwitch) &&
|
||||||
m.MetadataPrivacy.TryGet(lookupCtx, m.LastSwitchTime, out var lastSw))
|
m.MetadataPrivacy.TryGet(lookupCtx, m.LastSwitchTime, out var lastSw))
|
||||||
|
@ -130,11 +130,9 @@ public static class ListOptionsExt
|
|||||||
SortProperty.Birthdate => input
|
SortProperty.Birthdate => input
|
||||||
.OrderByDescending(m => m.AnnualBirthday.HasValue && m.BirthdayPrivacy.CanAccess(ctx))
|
.OrderByDescending(m => m.AnnualBirthday.HasValue && m.BirthdayPrivacy.CanAccess(ctx))
|
||||||
.ThenBy(m => m.BirthdayPrivacy.Get(ctx, m.AnnualBirthday), ReverseMaybe(Comparer<AnnualDate?>.Default)),
|
.ThenBy(m => m.BirthdayPrivacy.Get(ctx, m.AnnualBirthday), ReverseMaybe(Comparer<AnnualDate?>.Default)),
|
||||||
SortProperty.LastMessage => throw new PKError(
|
SortProperty.LastMessage => input
|
||||||
"Sorting by last message is temporarily disabled due to database issues, sorry."),
|
.OrderByDescending(m => m.LastMessageTimestamp.HasValue)
|
||||||
// SortProperty.LastMessage => input
|
.ThenByDescending(m => m.LastMessageTimestamp!.Value, ReverseMaybe(Comparer<Instant?>.Default)),
|
||||||
// .OrderByDescending(m => m.LastMessage.HasValue)
|
|
||||||
// .ThenByDescending(m => m.LastMessage, ReverseMaybe(Comparer<ulong?>.Default)),
|
|
||||||
SortProperty.LastSwitch => input
|
SortProperty.LastSwitch => input
|
||||||
.OrderByDescending(m => m.LastSwitchTime.HasValue && m.MetadataPrivacy.CanAccess(ctx))
|
.OrderByDescending(m => m.LastSwitchTime.HasValue && m.MetadataPrivacy.CanAccess(ctx))
|
||||||
.ThenByDescending(m => m.MetadataPrivacy.Get(ctx, m.LastSwitchTime), ReverseMaybe(Comparer<Instant?>.Default)),
|
.ThenByDescending(m => m.MetadataPrivacy.Get(ctx, m.LastSwitchTime), ReverseMaybe(Comparer<Instant?>.Default)),
|
||||||
|
@ -435,6 +435,9 @@ public class ProxyService
|
|||||||
await _redis.SetOriginalMid(triggerMessage.Id, proxyMessage.Id);
|
await _redis.SetOriginalMid(triggerMessage.Id, proxyMessage.Id);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Task UpdateMemberForSentMessage()
|
||||||
|
=> _repo.UpdateMemberForSentMessage(sentMessage.Member!.Value);
|
||||||
|
|
||||||
Task LogMessageToChannel() =>
|
Task LogMessageToChannel() =>
|
||||||
_logChannel.LogMessage(sentMessage, triggerMessage, proxyMessage).AsTask();
|
_logChannel.LogMessage(sentMessage, triggerMessage, proxyMessage).AsTask();
|
||||||
|
|
||||||
@ -474,6 +477,7 @@ public class ProxyService
|
|||||||
DeleteProxyTriggerMessage(),
|
DeleteProxyTriggerMessage(),
|
||||||
SaveMessageInDatabase(),
|
SaveMessageInDatabase(),
|
||||||
SaveMessageInRedis(),
|
SaveMessageInRedis(),
|
||||||
|
UpdateMemberForSentMessage(),
|
||||||
LogMessageToChannel(),
|
LogMessageToChannel(),
|
||||||
SaveLatchAutoproxy(),
|
SaveLatchAutoproxy(),
|
||||||
DispatchWebhook()
|
DispatchWebhook()
|
||||||
|
6
PluralKit.Core/Database/Migrations/32.sql
Normal file
6
PluralKit.Core/Database/Migrations/32.sql
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
-- database version 32
|
||||||
|
-- re-add last message timestamp to members
|
||||||
|
|
||||||
|
alter table members add column last_message_timestamp timestamp;
|
||||||
|
|
||||||
|
update info set schema_version = 32;
|
@ -97,4 +97,16 @@ public partial class ModelRepository
|
|||||||
new { member = id, account = userId }
|
new { member = id, account = userId }
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public async Task UpdateMemberForSentMessage(MemberId id)
|
||||||
|
{
|
||||||
|
var query = new Query("members")
|
||||||
|
.AsUpdate(new {
|
||||||
|
last_message_timestamp = new UnsafeLiteral("now()"),
|
||||||
|
message_count = new UnsafeLiteral("message_count + 1")
|
||||||
|
})
|
||||||
|
.Where("id", id);
|
||||||
|
|
||||||
|
await _db.ExecuteQuery(query);
|
||||||
|
}
|
||||||
}
|
}
|
@ -9,7 +9,7 @@ namespace PluralKit.Core;
|
|||||||
internal class DatabaseMigrator
|
internal class DatabaseMigrator
|
||||||
{
|
{
|
||||||
private const string RootPath = "PluralKit.Core.Database"; // "resource path" root for SQL files
|
private const string RootPath = "PluralKit.Core.Database"; // "resource path" root for SQL files
|
||||||
private const int TargetSchemaVersion = 31;
|
private const int TargetSchemaVersion = 32;
|
||||||
private readonly ILogger _logger;
|
private readonly ILogger _logger;
|
||||||
|
|
||||||
public DatabaseMigrator(ILogger logger)
|
public DatabaseMigrator(ILogger logger)
|
||||||
|
@ -6,7 +6,6 @@ namespace PluralKit.Core;
|
|||||||
// TODO: is inheritance here correct?
|
// TODO: is inheritance here correct?
|
||||||
public class ListedMember: PKMember
|
public class ListedMember: PKMember
|
||||||
{
|
{
|
||||||
// public ulong? LastMessage { get; }
|
|
||||||
public Instant? LastSwitchTime { get; }
|
public Instant? LastSwitchTime { get; }
|
||||||
|
|
||||||
public AnnualDate? AnnualBirthday =>
|
public AnnualDate? AnnualBirthday =>
|
||||||
|
@ -9,10 +9,6 @@ from systems
|
|||||||
|
|
||||||
create view member_list as
|
create view member_list as
|
||||||
select members.*,
|
select members.*,
|
||||||
-- Find last message ID
|
|
||||||
-- max(mid) does full table scan, order by/limit uses index (dunno why, but it works!)
|
|
||||||
-- (select mid from messages where messages.member = members.id order by mid desc nulls last limit 1) as last_message,
|
|
||||||
|
|
||||||
-- Find last switch timestamp
|
-- Find last switch timestamp
|
||||||
(
|
(
|
||||||
select max(switches.timestamp)
|
select max(switches.timestamp)
|
||||||
|
@ -50,6 +50,7 @@ public class PKMember
|
|||||||
public bool KeepProxy { get; private set; }
|
public bool KeepProxy { get; private set; }
|
||||||
public Instant Created { get; private set; }
|
public Instant Created { get; private set; }
|
||||||
public int MessageCount { get; private set; }
|
public int MessageCount { get; private set; }
|
||||||
|
public Instant? LastMessageTimestamp { get; }
|
||||||
public bool AllowAutoproxy { get; private set; }
|
public bool AllowAutoproxy { get; private set; }
|
||||||
|
|
||||||
public PrivacyLevel MemberVisibility { get; private set; }
|
public PrivacyLevel MemberVisibility { get; private set; }
|
||||||
|
Loading…
Reference in New Issue
Block a user