holder/lib/mithridate/option/attachment.ex

27 lines
697 B
Elixir

defmodule Mithridate.Option.Attachment do
alias Mithridate.Option
alias Nostrum.Constants.ApplicationCommandOptionType
@behaviour Option
@impl Option
def parse(value, interaction), do: Map.fetch!(interaction.data.resolved.attachments, value)
@impl Option
def new(name, description, options) do
%Option{
name: name,
description: description,
type: ApplicationCommandOptionType.attachment(),
required: Keyword.get(options, :required),
kind: __MODULE__
}
end
@impl Option
def to_discord(%Option{} = option) do
option
|> Map.take([:name, :description, :type, :required])
|> Map.replace_lazy(:name, &Atom.to_string/1)
end
end