Small fix (#6)

Co-authored-by: Myx <info@azaaxin.com>
This commit is contained in:
2024-08-13 03:24:29 +02:00
committed by GitHub
parent 1e2c10a7ea
commit 4ba01ed72b
4 changed files with 89 additions and 38 deletions

View File

@@ -5,7 +5,6 @@ using Lavalink4NET;
using Lavalink4NET.Events.Players;
using Lavalink4NET.Players.Queued;
using Lavalink4NET.Rest.Entities.Tracks;
using System.Threading;
namespace Lunaris2.Handler.MusicPlayer.PlayCommand;
@@ -17,6 +16,7 @@ public class PlayHandler : IRequestHandler<PlayCommand>
private readonly DiscordSocketClient _client;
private readonly IAudioService _audioService;
private SocketSlashCommand _context;
private const int MaxTrackDuration = 30;
public PlayHandler(
DiscordSocketClient client,
@@ -28,7 +28,7 @@ public class PlayHandler : IRequestHandler<PlayCommand>
_audioService = audioService;
_audioService.TrackStarted += OnTrackStarted;
}
private async Task OnTrackStarted(object sender, TrackStartedEventArgs eventargs)
{
var player = sender as QueuedLavalinkPlayer;
@@ -45,54 +45,67 @@ public class PlayHandler : IRequestHandler<PlayCommand>
async void PlayMusic()
{
var context = command.Message;
_context = context;
if ((context.User as SocketGuildUser)?.VoiceChannel == null)
try
{
await context.SendMessageAsync("You must be in a voice channel to use this command.", _client);
return;
}
await _audioService.StartAsync(cancellationToken);
await _audioService.StartAsync(cancellationToken);
var context = command.Message;
_context = context;
if ((context.User as SocketGuildUser)?.VoiceChannel == null)
{
await context.SendMessageAsync("You must be in a voice channel to use this command.", _client);
return;
}
var searchQuery = context.GetOptionValueByName(Option.Input);
var searchQuery = context.GetOptionValueByName(Option.Input);
if (string.IsNullOrWhiteSpace(searchQuery))
{
await context.SendMessageAsync("Please provide search terms.", _client);
return;
}
await context.SendMessageAsync("📻 Searching...", _client);
var player = await _audioService.GetPlayerAsync(_client, context, connectToVoiceChannel: true);
if (string.IsNullOrWhiteSpace(searchQuery))
{
await context.SendMessageAsync("Please provide search terms.", _client);
return;
}
var player = await _audioService.GetPlayerAsync(_client, context, connectToVoiceChannel: true);
if (player is null)
return;
if (player is null) return;
var trackLoadOptions = new TrackLoadOptions { SearchMode = TrackSearchMode.YouTube, };
var trackLoadOptions = new TrackLoadOptions { SearchMode = TrackSearchMode.YouTube, };
var track = await _audioService.Tracks.LoadTrackAsync(searchQuery, trackLoadOptions, cancellationToken: cancellationToken);
var track = await _audioService.Tracks.LoadTrackAsync(searchQuery, trackLoadOptions, cancellationToken: cancellationToken);
if (track is null)
{
await context.SendMessageAsync("😖 No results.", _client);
return;
}
if (player.CurrentTrack?.Duration.TotalMinutes > MaxTrackDuration)
{
await context.SendMessageAsync($"🔈 Sorry the track is longer than { MaxTrackDuration } minutes, to save resources this limit is active for now.", _client);
return;
}
if (track is null) await context.SendMessageAsync("😖 No results.", _client);
if (player.CurrentTrack is null)
{
await player.PlayAsync(track, cancellationToken: cancellationToken)
.ConfigureAwait(false);
if (player.CurrentTrack is null)
{
await player.PlayAsync(track, cancellationToken: cancellationToken)
.ConfigureAwait(false);
await _musicEmbed.NowPlayingEmbed(track, context, _client);
}
else
{
if (track != null)
await _musicEmbed.NowPlayingEmbed(track, context, _client);
}
else
{
var queueTracks = new[] { new TrackQueueItem(track) };
await player.Queue.AddRangeAsync(queueTracks, cancellationToken);
await context.SendMessageAsync($"🔈 Added to queue: {track.Title}", _client);
}
else
{
await context.SendMessageAsync($"Couldn't read song information", _client);
}
}
catch (Exception error)
{
throw new Exception("Error occured in the Play handler!", error);
}
}
}