using OneOf; using Remora.Discord.API.Abstractions.Objects; using Remora.Discord.API.Abstractions.Rest; using Remora.Discord.API.Objects; using Remora.Rest.Core; using Remora.Results; namespace TeamOctolings.Octobot.Extensions; public static class ChannelApiExtensions { public static async Task<Result> CreateMessageWithEmbedResultAsync(this IDiscordRestChannelAPI channelApi, Snowflake channelId, Optional<string> message = default, Optional<string> nonce = default, Optional<bool> isTextToSpeech = default, Optional<Result<Embed>> embedResult = default, Optional<IAllowedMentions> allowedMentions = default, Optional<IMessageReference> messageReference = default, Optional<IReadOnlyList<IMessageComponent>> components = default, Optional<IReadOnlyList<Snowflake>> stickerIds = default, Optional<IReadOnlyList<OneOf<FileData, IPartialAttachment>>> attachments = default, Optional<MessageFlags> flags = default, Optional<bool> enforceNonce = default, Optional<IPollCreateRequest> poll = default, CancellationToken ct = default) { if (!embedResult.IsDefined() || !embedResult.Value.IsDefined(out var embed)) { return ResultExtensions.FromError(embedResult.Value); } return (Result)await channelApi.CreateMessageAsync(channelId, message, nonce, isTextToSpeech, new[] { embed }, allowedMentions, messageReference, components, stickerIds, attachments, flags, enforceNonce, poll, ct); } }