aboutsummaryrefslogtreecommitdiff
path: root/lib/command/meme.ex
blob: 5be4582bad9936f6127abf12d7cdcf6184a50910 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
alias Nostrum.Struct.Message

defmodule Thulani.Command.Meme do
  use GenServer

  @type audio_permission :: :unrestrict | boolean

  defmodule Request do
    alias Thulani.Command.Meme

    @type t ::
            %__MODULE__{
              name: :random,
              audio: Meme.audio_permission(),
              msg: Message.t()
            }
            | %__MODULE__{
                name: String.t(),
                audio: nil,
                msg: Message.t()
              }

    @enforce_keys [:msg]
    defstruct name: :random, audio: :unrestrict, msg: nil
  end

  @spec random_meme(Message.t()) :: GenServer.cast()
  def random_meme(msg) do
    GenServer.cast(__MODULE__, %Request{msg: msg})
  end

  @spec meme(Message.t(), String.t()) :: GenServer.cast()
  @spec meme(Message.t(), String.t(), audio_permission) :: GenServer.cast()
  def meme(msg, name, audio \\ :unrestrict) do
    GenServer.cast(__MODULE__, %Request{name: name, msg: msg, audio: audio})
  end

  def start_link(arg) do
    GenServer.start_link(__MODULE__, arg)
  end

  @impl true
  def init(_) do
    {:ok, %{}}
  end

  @impl true
  def handle_cast(%Request{name: :random, msg: _msg, audio: _audio}, state) do
    {:noreply, state}
  end

  @impl true
  def handle_cast(%Request{name: _name, msg: _msg}, state) do
    {:noreply, state}
  end
end