Merge branch 'dev'
This commit is contained in:
@@ -1,9 +1,12 @@
|
||||
using DSharpPlus.Entities;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using TomatenMusic;
|
||||
using TomatenMusic.Music;
|
||||
using TomatenMusic_Api;
|
||||
using TomatenMusic_Api.Auth.Helpers;
|
||||
using TomatenMusic_Api.Models;
|
||||
using TomatenMusic_Api.Models.EventArgs;
|
||||
using static TomatenMusic_Api.InProcessEventBus;
|
||||
|
||||
namespace TomatenMusic_Api.Controllers;
|
||||
|
||||
@@ -54,8 +57,9 @@ public class PlayerController : ControllerBase
|
||||
}
|
||||
|
||||
[HttpPost("connect")]
|
||||
public async Task<IActionResult> PostConnection(ChannelConnectRequest request)
|
||||
public async Task<IActionResult> PostConnect(ChannelConnectRequest request)
|
||||
{
|
||||
|
||||
try
|
||||
{
|
||||
await _tomatenMusicDataService.GetGuildAsync(request.Guild_Id);
|
||||
@@ -85,8 +89,58 @@ public class PlayerController : ControllerBase
|
||||
|
||||
|
||||
|
||||
_eventBus.OnConnectRequestEvent(new InProcessEventBus.ChannelConnectEventArgs(request.Guild_Id, channel));
|
||||
_eventBus.OnConnectRequestEvent(new ChannelConnectArgs(request.Guild_Id, channel));
|
||||
|
||||
return Ok();
|
||||
}
|
||||
|
||||
[HttpPost("disconnect")]
|
||||
public async Task<IActionResult> PostDisconnect(ChannelDisconnectRequest request)
|
||||
{
|
||||
try
|
||||
{
|
||||
await _tomatenMusicDataService.GetGuildAsync(request.GuildId);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
return NotFound("That Guild was not found");
|
||||
}
|
||||
|
||||
if (!await _tomatenMusicDataService.IsConnectedAsync(request.GuildId) == true)
|
||||
return BadRequest("The Bot is not connected.");
|
||||
|
||||
_eventBus.OnDisconnectRequestEvent(new ChannelDisconnectArgs(request.GuildId));
|
||||
return Ok();
|
||||
|
||||
}
|
||||
|
||||
[HttpPost("play")]
|
||||
public async Task<IActionResult> PostPlay(TrackPlayRequest request)
|
||||
{
|
||||
try
|
||||
{
|
||||
await _tomatenMusicDataService.GetGuildAsync(request.GuildId);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
return NotFound("That Guild was not found");
|
||||
}
|
||||
|
||||
if (!await _tomatenMusicDataService.IsConnectedAsync(request.GuildId) == true)
|
||||
return BadRequest("The Bot is not connected.");
|
||||
|
||||
MusicActionResponse response;
|
||||
|
||||
try
|
||||
{
|
||||
response = await _tomatenMusicDataService.TrackProvider.SearchAsync(request.TrackUri);
|
||||
}catch (Exception ex)
|
||||
{
|
||||
return NotFound(ex.Message + "\n" + ex.StackTrace);
|
||||
}
|
||||
|
||||
_eventBus.OnPlayRequestEvent(new TrackPlayArgs(response, request.GuildId, TimeSpan.FromSeconds(request.StartTimeSeconds), request.Now));
|
||||
|
||||
return Ok();
|
||||
}
|
||||
}
|
||||
|
7
TomatenMusic/Models/ChannelDisconnectRequest.cs
Normal file
7
TomatenMusic/Models/ChannelDisconnectRequest.cs
Normal file
@@ -0,0 +1,7 @@
|
||||
namespace TomatenMusic_Api.Models.EventArgs
|
||||
{
|
||||
public class ChannelDisconnectRequest
|
||||
{
|
||||
public ulong GuildId { get; set; }
|
||||
}
|
||||
}
|
18
TomatenMusic/Models/EventArgs/ChannelConnectArgs.cs
Normal file
18
TomatenMusic/Models/EventArgs/ChannelConnectArgs.cs
Normal file
@@ -0,0 +1,18 @@
|
||||
using DSharpPlus.Entities;
|
||||
using Emzi0767.Utilities;
|
||||
|
||||
namespace TomatenMusic_Api.Models.EventArgs
|
||||
{
|
||||
public class ChannelConnectArgs : AsyncEventArgs
|
||||
{
|
||||
public ulong Guild_Id { get; set; }
|
||||
|
||||
public DiscordChannel Channel { get; set; }
|
||||
|
||||
public ChannelConnectArgs(ulong guild_Id, DiscordChannel channel)
|
||||
{
|
||||
Guild_Id = guild_Id;
|
||||
Channel = channel;
|
||||
}
|
||||
}
|
||||
}
|
13
TomatenMusic/Models/EventArgs/ChannelDisconnectArgs.cs
Normal file
13
TomatenMusic/Models/EventArgs/ChannelDisconnectArgs.cs
Normal file
@@ -0,0 +1,13 @@
|
||||
using Emzi0767.Utilities;
|
||||
|
||||
namespace TomatenMusic_Api.Models.EventArgs
|
||||
{
|
||||
public class ChannelDisconnectArgs : AsyncEventArgs
|
||||
{
|
||||
public ulong GuildId { get; set; }
|
||||
|
||||
public ChannelDisconnectArgs(ulong guildId) { GuildId = guildId; }
|
||||
}
|
||||
|
||||
|
||||
}
|
22
TomatenMusic/Models/EventArgs/TrackPlayArgs.cs
Normal file
22
TomatenMusic/Models/EventArgs/TrackPlayArgs.cs
Normal file
@@ -0,0 +1,22 @@
|
||||
using Emzi0767.Utilities;
|
||||
using Lavalink4NET.Player;
|
||||
using TomatenMusic.Music;
|
||||
|
||||
namespace TomatenMusic_Api.Models.EventArgs
|
||||
{
|
||||
public class TrackPlayArgs : AsyncEventArgs
|
||||
{
|
||||
public MusicActionResponse Response { get; set; }
|
||||
public ulong GuildId { get; set; }
|
||||
public TimeSpan StartTime { get; set; }
|
||||
public bool Now { get; set; }
|
||||
|
||||
public TrackPlayArgs(MusicActionResponse response, ulong guildId, TimeSpan startTime, bool now)
|
||||
{
|
||||
Response = response;
|
||||
GuildId = guildId;
|
||||
StartTime = startTime;
|
||||
Now = now;
|
||||
}
|
||||
}
|
||||
}
|
10
TomatenMusic/Models/TrackPlayRequest.cs
Normal file
10
TomatenMusic/Models/TrackPlayRequest.cs
Normal file
@@ -0,0 +1,10 @@
|
||||
namespace TomatenMusic_Api.Models
|
||||
{
|
||||
public class TrackPlayRequest
|
||||
{
|
||||
public ulong GuildId { get; set; }
|
||||
public string TrackUri { get; set; }
|
||||
public bool Now { get; set; }
|
||||
public int StartTimeSeconds { get; set; }
|
||||
}
|
||||
}
|
@@ -2,29 +2,30 @@
|
||||
using Emzi0767.Utilities;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using TomatenMusic_Api.Models;
|
||||
using TomatenMusic_Api.Models.EventArgs;
|
||||
|
||||
namespace TomatenMusic_Api;
|
||||
|
||||
public class InProcessEventBus
|
||||
{
|
||||
public event AsyncEventHandler<InProcessEventBus, ChannelConnectEventArgs>? OnConnectRequest;
|
||||
public event AsyncEventHandler<InProcessEventBus, ChannelConnectArgs>? OnConnectRequest;
|
||||
|
||||
public void OnConnectRequestEvent(ChannelConnectEventArgs e)
|
||||
public event AsyncEventHandler<InProcessEventBus, ChannelDisconnectArgs>? OnDisconnectRequest;
|
||||
|
||||
public event AsyncEventHandler<InProcessEventBus, TrackPlayArgs> OnPlayRequest;
|
||||
public void OnConnectRequestEvent(ChannelConnectArgs e)
|
||||
{
|
||||
_ = OnConnectRequest?.Invoke(this, e);
|
||||
}
|
||||
|
||||
public class ChannelConnectEventArgs : AsyncEventArgs
|
||||
{
|
||||
public ulong Guild_Id { get; set; }
|
||||
public void OnDisconnectRequestEvent(ChannelDisconnectArgs e)
|
||||
{
|
||||
_ = OnDisconnectRequest?.Invoke(this, e);
|
||||
}
|
||||
|
||||
public DiscordChannel Channel { get; set; }
|
||||
|
||||
public ChannelConnectEventArgs(ulong guild_Id, DiscordChannel channel)
|
||||
{
|
||||
Guild_Id = guild_Id;
|
||||
Channel = channel;
|
||||
}
|
||||
public void OnPlayRequestEvent(TrackPlayArgs e)
|
||||
{
|
||||
_ = OnPlayRequest?.Invoke(this, e);
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -11,12 +11,14 @@ namespace TomatenMusic_Api
|
||||
public class TomatenMusicDataService : IHostedService
|
||||
{
|
||||
private ILogger<TomatenMusicDataService> _logger;
|
||||
public IServiceProvider _serviceProvider { get; set; } = TomatenMusicBot.ServiceProvider;
|
||||
private IServiceProvider _serviceProvider { get; set; } = TomatenMusicBot.ServiceProvider;
|
||||
public IAudioService _audioService { get; set; }
|
||||
public TrackProvider TrackProvider { get; set; }
|
||||
public TomatenMusicDataService(ILogger<TomatenMusicDataService> logger)
|
||||
{
|
||||
_logger = logger;
|
||||
_audioService = _serviceProvider.GetRequiredService<IAudioService>();
|
||||
TrackProvider = _serviceProvider.GetRequiredService<TrackProvider>();
|
||||
}
|
||||
|
||||
public async Task<PlayerConnectionInfo> GetConnectionInfoAsync(ulong guild_id)
|
||||
|
@@ -2,6 +2,7 @@
|
||||
using TomatenMusic;
|
||||
using TomatenMusic.Music;
|
||||
using TomatenMusic_Api.Models;
|
||||
using TomatenMusic_Api.Models.EventArgs;
|
||||
using static TomatenMusic_Api.InProcessEventBus;
|
||||
|
||||
namespace TomatenMusic_Api
|
||||
@@ -24,11 +25,48 @@ namespace TomatenMusic_Api
|
||||
private void Initialize()
|
||||
{
|
||||
_inProcessEventBus.OnConnectRequest += _inProcessEventBus_OnConnectRequest;
|
||||
_inProcessEventBus.OnDisconnectRequest += _inProcessEventBus_OnDisconnectRequest;
|
||||
_inProcessEventBus.OnPlayRequest += _inProcessEventBus_OnPlayRequest;
|
||||
}
|
||||
|
||||
private async Task _inProcessEventBus_OnConnectRequest(InProcessEventBus sender, ChannelConnectEventArgs e)
|
||||
private async Task _inProcessEventBus_OnPlayRequest(InProcessEventBus sender, TrackPlayArgs e)
|
||||
{
|
||||
GuildPlayer player = _audioService.GetPlayer<GuildPlayer>(e.GuildId);
|
||||
|
||||
if (e.Response.Tracks != null && e.Response.Tracks.Any())
|
||||
{
|
||||
if (e.Now)
|
||||
await player.PlayTracksNowAsync(e.Response.Tracks);
|
||||
else
|
||||
await player.PlayTracksAsync(e.Response.Tracks);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
if (e.Response.IsPlaylist)
|
||||
{
|
||||
if (e.Now)
|
||||
await player.PlayPlaylistNowAsync(e.Response.Playlist);
|
||||
else
|
||||
await player.PlayPlaylistAsync(e.Response.Playlist);
|
||||
}else
|
||||
{
|
||||
if (e.Now)
|
||||
await player.PlayNowAsync(e.Response.Track, e.StartTime);
|
||||
else
|
||||
await player.PlayAsync(e.Response.Track, e.StartTime);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private async Task _inProcessEventBus_OnDisconnectRequest(InProcessEventBus sender, ChannelDisconnectArgs e)
|
||||
{
|
||||
GuildPlayer player = _audioService.GetPlayer<GuildPlayer>(e.GuildId);
|
||||
player.DisconnectAsync();
|
||||
}
|
||||
|
||||
private async Task _inProcessEventBus_OnConnectRequest(InProcessEventBus sender, ChannelConnectArgs e)
|
||||
{
|
||||
_logger.LogInformation("Channel Connected!");
|
||||
GuildPlayer player = await _audioService.JoinAsync<GuildPlayer>(e.Guild_Id, e.Channel.Id, true);
|
||||
}
|
||||
|
||||
|
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"TOKEN": "Bot_Token",
|
||||
"TOKEN": "TOKEN",
|
||||
"LavaLinkPassword": " ",
|
||||
"SpotifyClientId": " ",
|
||||
"SpotifyClientSecret": " ",
|
||||
|
Reference in New Issue
Block a user