30 lines
833 B
Elixir
30 lines
833 B
Elixir
defmodule Mithridate.Option.Integer do
|
|
alias Mithridate.Option
|
|
alias Nostrum.Constants.ApplicationCommandOptionType
|
|
|
|
@behaviour Option
|
|
|
|
@impl Option
|
|
def parse(value, _interaction), do: value
|
|
|
|
@impl Option
|
|
def new(name, description, options) do
|
|
%Option{
|
|
name: name,
|
|
description: description,
|
|
type: ApplicationCommandOptionType.integer(),
|
|
required: Keyword.get(options, :required),
|
|
choices: Keyword.get(options, :choices),
|
|
autocomplete: Keyword.get(options, :autocomplete),
|
|
kind: __MODULE__
|
|
}
|
|
end
|
|
|
|
@impl Option
|
|
def to_discord(%Option{} = option) do
|
|
option
|
|
|> Map.take([:name, :description, :type, :required, :choices, :autocomplete])
|
|
|> Map.replace_lazy(:name, &Atom.to_string/1)
|
|
|> Map.replace_lazy(:choices, &Option.serialize_choices/1)
|
|
end
|
|
end
|