diff options
Diffstat (limited to 'lib/command/meme.ex')
| -rw-r--r-- | lib/command/meme.ex | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/lib/command/meme.ex b/lib/command/meme.ex new file mode 100644 index 0000000..3c51334 --- /dev/null +++ b/lib/command/meme.ex @@ -0,0 +1,58 @@ +alias Nostrum.Api +alias Nostrum.Struct.Message +alias Thulani.Command.Util + +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 |
