mirror of
https://codeberg.org/godmaire/sergei.git
synced 2024-09-19 15:58:26 +00:00
Implement pause and resume
This commit is contained in:
parent
a8551a2ba7
commit
ae27515e1c
2 changed files with 68 additions and 0 deletions
|
@ -1,6 +1,7 @@
|
|||
defmodule Sergei.Consumer do
|
||||
use Nostrum.Consumer
|
||||
|
||||
require Logger
|
||||
alias Nostrum.Api
|
||||
|
||||
# Translate params to list of maps
|
||||
|
@ -15,6 +16,8 @@ defmodule Sergei.Consumer do
|
|||
|
||||
@slash_commands [
|
||||
{"ping", "Pong", []},
|
||||
{"pause", "Pause media playback", []},
|
||||
{"resume", "Resume media playback", []},
|
||||
{"play", "Play some tunes", @play_opts}
|
||||
]
|
||||
|
||||
|
@ -99,4 +102,28 @@ defmodule Sergei.Consumer do
|
|||
{:error, "You are not in a voice channel."}
|
||||
end
|
||||
end
|
||||
|
||||
# /pause
|
||||
def do_command(%{guild_id: guild_id, data: %{name: "pause"}}) do
|
||||
case Sergei.Player.pause(guild_id) do
|
||||
:ok ->
|
||||
{:ok, "Pausing..."}
|
||||
|
||||
{:error, err} ->
|
||||
Logger.error("Failed to pause media: #{err}")
|
||||
{:error, "This is embarrasing..."}
|
||||
end
|
||||
end
|
||||
|
||||
# /resume
|
||||
def do_command(%{guild_id: guild_id, data: %{name: "resume"}}) do
|
||||
case Sergei.Player.resume(guild_id) do
|
||||
:ok ->
|
||||
{:ok, "Resuming..."}
|
||||
|
||||
{:error, err} ->
|
||||
Logger.error("Failed to resume media: #{err}")
|
||||
{:error, "This is embarrasing..."}
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -20,6 +20,14 @@ defmodule Sergei.Player do
|
|||
GenServer.call(__MODULE__, {:play, guild_id, channel_id, url})
|
||||
end
|
||||
|
||||
def pause(guild_id) do
|
||||
GenServer.call(__MODULE__, {:pause, guild_id})
|
||||
end
|
||||
|
||||
def resume(guild_id) do
|
||||
GenServer.call(__MODULE__, {:resume, guild_id})
|
||||
end
|
||||
|
||||
# Server
|
||||
@impl true
|
||||
def handle_info(:tick, state) do
|
||||
|
@ -47,6 +55,39 @@ defmodule Sergei.Player do
|
|||
{:reply, res, state}
|
||||
end
|
||||
|
||||
@impl true
|
||||
def handle_call({_, guild_id}, _from, state) when not is_map_key(state, guild_id) do
|
||||
{:reply, {:error, "I'm not playing anything right now"}, state}
|
||||
end
|
||||
|
||||
@impl true
|
||||
def handle_call({:pause, guild_id}, _from, state) do
|
||||
%{url: url} = Map.fetch!(state, guild_id)
|
||||
Voice.pause(guild_id)
|
||||
|
||||
state =
|
||||
Map.put(state, guild_id, %{
|
||||
url: url,
|
||||
paused: true
|
||||
})
|
||||
|
||||
{:reply, :ok, state}
|
||||
end
|
||||
|
||||
@impl true
|
||||
def handle_call({:resume, guild_id}, _from, state) do
|
||||
%{url: url} = Map.fetch!(state, guild_id)
|
||||
Voice.resume(guild_id)
|
||||
|
||||
state =
|
||||
Map.put(state, guild_id, %{
|
||||
url: url,
|
||||
paused: false
|
||||
})
|
||||
|
||||
{:reply, :ok, state}
|
||||
end
|
||||
|
||||
def play_music(guild_id, channel_id, url) do
|
||||
cond do
|
||||
Voice.get_channel_id(guild_id) != channel_id ->
|
||||
|
|
Loading…
Reference in a new issue