defmodule Nostrum.Struct.Event.InviteCreate do @moduledoc """ Struct representing an Invite Create event """ alias Nostrum.Struct.{Channel, Guild, User} alias Nostrum.Util defstruct [ :channel_id, :code, :created_at, :guild_id, :inviter, :max_age, :max_uses, :target_user, :target_user_type, :temporary, :uses ] @typedoc """ Channel id of the channel this invite is for. """ @type channel_id :: Channel.id() @typedoc """ The unique invite code. """ @type code :: String.t() @typedoc """ The time at which the invite was created. """ @type created_at :: String.t() @typedoc """ Guild id of the guild this invite is for. """ @type guild_id :: Guild.id() | nil @typedoc """ The user that created the invite. """ @type inviter :: User.t() | nil @typedoc """ Duration (in seconds) after which the invite expires. """ @type max_age :: integer @typedoc """ Max number of times this invite can be used. """ @type max_uses :: integer @typedoc """ Partially populated user struct of the target user for this invite. """ @type target_user :: User.t() | nil @typedoc """ The type of user target for this invite. """ @type target_user_type :: integer | nil @typedoc """ Whether this invite only grants temporary membership. """ @type temporary :: boolean @typedoc """ Number of times this invite has been used. """ @type uses :: integer @type t :: %__MODULE__{ channel_id: channel_id, code: code, created_at: created_at, guild_id: guild_id, inviter: inviter, max_age: max_age, max_uses: max_uses, target_user: target_user, target_user_type: target_user_type, temporary: temporary, uses: uses } @doc false def to_struct(map) do atom_map = map |> Map.new(fn {k, v} -> {Util.maybe_to_atom(k), v} end) __MODULE__ |> struct(atom_map) |> Map.update(:inviter, nil, &Util.cast(&1, {:struct, User})) |> Map.update(:target_user, nil, &Util.cast(&1, {:struct, User})) end end