/// <summary> /// Posts the archived roleplay to the guild's archive channel, if it has one. /// </summary> /// <param name="guild">The guild.</param> /// <param name="serverService">The server service.</param> /// <param name="serverSettings">The server settings service.</param> /// <param name="roleplay">The roleplay.</param> /// <returns>A <see cref="Task"/> representing the asynchronous operation.</returns> private async Task PostArchivedRoleplayAsync ( SocketGuild guild, ServerService serverService, RoleplayServerSettingsService serverSettings, Roleplay roleplay ) { var getServer = await serverService.GetOrRegisterServerAsync(guild); if (!getServer.IsSuccess) { this.Log.LogWarning("Failed to get the server for the current guild. Bug?"); return; } var server = getServer.Entity; var getSettings = await serverSettings.GetOrCreateServerRoleplaySettingsAsync(server); if (!getSettings.IsSuccess) { this.Log.LogWarning("Failed to get the server settings for the current guild. Bug?"); return; } var settings = getSettings.Entity; if (settings.ArchiveChannel is null) { return; } var archiveChannel = guild.GetTextChannel((ulong)settings.ArchiveChannel); if (archiveChannel is null) { this.Log.LogWarning("Failed to get the archive channel for the current guild. Deleted?"); return; } var exporter = new PDFRoleplayExporter(guild); using var exportedRoleplay = await exporter.ExportAsync(roleplay); var eb = _feedback.CreateEmbedBase(); eb.WithTitle($"{exportedRoleplay.Title} - Archived"); eb.WithDescription(roleplay.Summary); eb.WithFooter($"Archived on {DateTime.Now:d}."); await archiveChannel.SendFileAsync ( exportedRoleplay.Data, $"{exportedRoleplay.Title}.{exportedRoleplay.Format.GetFileExtension()}", string.Empty, embed : eb.Build() ); }
private static async Task <Result> PostArchivedRoleplayAsync ( IServiceProvider services, FeedbackService feedback, RoleplayServerSettingsService serverSettings, Roleplay roleplay ) { var channelAPI = services.GetRequiredService <IDiscordRestChannelAPI>(); var getSettings = await serverSettings.GetOrCreateServerRoleplaySettingsAsync(roleplay.Server.DiscordID); if (!getSettings.IsSuccess) { return(Result.FromError(getSettings)); } var settings = getSettings.Entity; if (settings.ArchiveChannel is null) { return(new UserError("No archive channel has been set.")); } var exporter = new PDFRoleplayExporter(); using var exportedRoleplay = await exporter.ExportAsync(services, roleplay); var embed = new Embed { Colour = feedback.Theme.Secondary, Title = $"{exportedRoleplay.Title} - Archived", Description = roleplay.GetSummaryOrDefault(), Footer = new EmbedFooter($"Archived on {DateTimeOffset.UtcNow:d}.") }; var fileData = new FileData ( $"{exportedRoleplay.Title}.{exportedRoleplay.Format.GetFileExtension()}", exportedRoleplay.Data ); var send = await channelAPI.CreateMessageAsync ( settings.ArchiveChannel.Value, embeds : new[] { embed }, attachments : new List <OneOf <FileData, IPartialAttachment> > { fileData } ); return(send.IsSuccess ? Result.FromSuccess() : Result.FromError(send)); }