← All source files

V10 / 66cebf3528e0

CalendarCommands.cs

Lilith/Core/Calendar/CalendarCommands.cs

Changed in this version
CS
using System.Text.Json;
using Lilith.Core.Commands;

namespace Lilith.Core.Calendar;

public static class CalendarCommands
{
    public static void Register(ChatCommandRegistry commands, Func<ProviderClient> provider)
    {
        commands.Register("calendar", "Show today's agenda; pending; review <proposal-id>.", c =>
        {
            var calendar = provider().Calendar ?? throw new InvalidOperationException("Calendar unavailable.");
            return c.Arguments switch
            {
                "" => calendar.Execute(new("agenda")).ToReply(),
                "pending" => calendar.Execute(new("pending")).ToReply(),
                var value when value.StartsWith("review ", StringComparison.Ordinal) => JsonSerializer.Serialize(calendar.Review(value[7..].Trim())),
                _ => throw new ArgumentException("Use /calendar, /calendar pending or /calendar review <id>.")
            };
        });
        commands.Register("calendar-approve", "Approve one exact prepared calendar change.", c => provider().ApproveCalendar(c.Arguments));
        commands.Register("calendar-reject", "Reject one prepared calendar change.", c => { provider().RejectCalendar(c.Arguments); return "Calendar proposal rejected."; });
    }
}