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
|