From 08f5483df2c01eba7c764cdaec94fca71e4976b8 Mon Sep 17 00:00:00 2001 From: Rory& Date: Thu, 30 May 2024 09:31:29 +0000 Subject: Clarify LegacyEvent types --- .../State/Policy/PolicyRuleStateEventContent.cs | 107 +++++++++++++++++++++ 1 file changed, 107 insertions(+) create mode 100644 LibMatrix.LegacyEvents.EventTypes/Spec/State/Policy/PolicyRuleStateEventContent.cs (limited to 'LibMatrix.LegacyEvents.EventTypes/Spec/State/Policy/PolicyRuleStateEventContent.cs') diff --git a/LibMatrix.LegacyEvents.EventTypes/Spec/State/Policy/PolicyRuleStateEventContent.cs b/LibMatrix.LegacyEvents.EventTypes/Spec/State/Policy/PolicyRuleStateEventContent.cs new file mode 100644 index 0000000..c61f2bf --- /dev/null +++ b/LibMatrix.LegacyEvents.EventTypes/Spec/State/Policy/PolicyRuleStateEventContent.cs @@ -0,0 +1,107 @@ +using System.Text.Json.Serialization; +using ArcaneLibs.Attributes; + +namespace LibMatrix.LegacyEvents.EventTypes.Spec.State.Policy; + +//spec +[MatrixEvent(EventName = EventId)] //spec +[MatrixEvent(EventName = "m.room.rule.server", Legacy = true)] //??? +[MatrixEvent(EventName = "org.matrix.mjolnir.rule.server", Legacy = true)] //legacy +[FriendlyName(Name = "Server policy", NamePlural = "Server policies")] +public class ServerPolicyRuleEventContent : PolicyRuleEventContent { + public const string EventId = "m.policy.rule.server"; +} + +[MatrixEvent(EventName = EventId)] //spec +[MatrixEvent(EventName = "m.room.rule.user", Legacy = true)] //??? +[MatrixEvent(EventName = "org.matrix.mjolnir.rule.user", Legacy = true)] //legacy +[FriendlyName(Name = "User policy", NamePlural = "User policies")] +public class UserPolicyRuleEventContent : PolicyRuleEventContent { + public const string EventId = "m.policy.rule.user"; +} + +[MatrixEvent(EventName = EventId)] //spec +[MatrixEvent(EventName = "m.room.rule.room", Legacy = true)] //??? +[MatrixEvent(EventName = "org.matrix.mjolnir.rule.room", Legacy = true)] //legacy +[FriendlyName(Name = "Room policy", NamePlural = "Room policies")] +public class RoomPolicyRuleEventContent : PolicyRuleEventContent { + public const string EventId = "m.policy.rule.room"; +} + +public abstract class PolicyRuleEventContent : EventContent { + public PolicyRuleEventContent() => Console.WriteLine($"init policy {GetType().Name}"); + private string? _reason; + + /// + /// Entity this ban applies to, can use * and ? as globs. + /// Policy is invalid if entity is null + /// + [JsonPropertyName("entity")] + [FriendlyName(Name = "Entity")] + public string? Entity { get; set; } + + private bool init; + + /// + /// Reason this user is banned + /// + [JsonPropertyName("reason")] + [FriendlyName(Name = "Reason")] + public virtual string? Reason { + get => + // Console.WriteLine($"Read policy reason: {_reason}"); + _reason; + set => + // Console.WriteLine($"Set policy reason: {value}"); + // if(init) + // Console.WriteLine(string.Join('\n', Environment.StackTrace.Split('\n')[..5])); + // init = true; + _reason = value; + } + + /// + /// Suggested action to take + /// + [JsonPropertyName("recommendation")] + [FriendlyName(Name = "Recommendation")] + public string? Recommendation { get; set; } + + /// + /// Expiry time in milliseconds since the unix epoch, or null if the ban has no expiry. + /// + [JsonPropertyName("support.feline.policy.expiry.rev.2")] //stable prefix: expiry, msc pending + [TableHide] + public long? Expiry { get; set; } + + //utils + /// + /// Readable expiry time, provided for easy interaction + /// + [JsonPropertyName("gay.rory.matrix_room_utils.readable_expiry_time_utc")] + [FriendlyName(Name = "Expires at")] + public DateTime? ExpiryDateTime { + get => Expiry == null ? null : DateTimeOffset.FromUnixTimeMilliseconds(Expiry.Value).DateTime; + set { + if (value is not null) + Expiry = ((DateTimeOffset)value).ToUnixTimeMilliseconds(); + } + } +} + +public static class PolicyRecommendationTypes { + /// + /// Ban this user + /// + public static string Ban = "m.ban"; + + /// + /// Mute this user + /// + public static string Mute = "support.feline.policy.recommendation_mute"; //stable prefix: m.mute, msc pending +} + +// public class PolicySchemaDefinition { +// public required string Name { get; set; } +// public required bool Optional { get; set; } +// +// } \ No newline at end of file -- cgit 1.4.1