aboutsummaryrefslogtreecommitdiff
path: root/lib/command/meme.ex
diff options
context:
space:
mode:
Diffstat (limited to 'lib/command/meme.ex')
-rw-r--r--lib/command/meme.ex58
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