using AltBot.Core.Exceptions; using Microsoft.AspNetCore.Diagnostics; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Logging; namespace AltBot.ServiceDefaults; internal sealed class HaltExceptionHandler(ILogger logger) : IExceptionHandler { public async ValueTask TryHandleAsync( HttpContext httpContext, Exception exception, CancellationToken cancellationToken) { if (exception is not HaltException haltException) { return false; } logger.LogCritical(haltException, "AltBot crash: {Message}", haltException.Message); var problemDetails = new ProblemDetails { Status = StatusCodes.Status500InternalServerError, Title = "AltBot Halted", Detail = haltException.Message }; httpContext.Response.StatusCode = problemDetails.Status.Value; await httpContext.Response.WriteAsJsonAsync(problemDetails, cancellationToken); return true; } }