Beispiel #1
0
        private async Task OnTrackExceptionAsync(TrackExceptionEventArgs args)
        {
            var builder = new EmbedBuilder()
                          .WithDescription($"\u26a0 {GuildUtils.Locate("PlayerError", args.Player.TextChannel)}:```{args.ErrorMessage}```")
                          .WithColor(FergunClient.Config.EmbedColor);
            await args.Player.TextChannel.SendMessageAsync(embed : builder.Build());

            // The current track is auto-skipped
        }
Beispiel #2
0
        /// <summary>
        ///     Handles an event payload asynchronously.
        /// </summary>
        /// <param name="payload">the payload</param>
        /// <returns>a task that represents the asynchronous operation</returns>
        protected virtual async Task OnEventReceived(EventPayload payload)
        {
            if (!Players.TryGetValue(payload.GuildId, out var player))
            {
                return;
            }

            // a track ended
            if (payload is TrackEndEvent trackEndEvent)
            {
                var args = new TrackEndEventArgs(player,
                                                 trackEndEvent.TrackIdentifier,
                                                 trackEndEvent.Reason);

                await Task.WhenAll(OnTrackEndAsync(args),
                                   player.OnTrackEndAsync(args));
            }

            // an exception occurred while playing a track
            if (payload is TrackExceptionEvent trackExceptionEvent)
            {
                var args = new TrackExceptionEventArgs(player,
                                                       trackExceptionEvent.TrackIdentifier,
                                                       trackExceptionEvent.Error);

                await Task.WhenAll(OnTrackExceptionAsync(args),
                                   player.OnTrackExceptionAsync(args));
            }

            // a track got stuck
            if (payload is TrackStuckEvent trackStuckEvent)
            {
                var args = new TrackStuckEventArgs(player,
                                                   trackStuckEvent.TrackIdentifier,
                                                   trackStuckEvent.Threshold);

                await Task.WhenAll(OnTrackStuckAsync(args),
                                   player.OnTrackStuckAsync(args));
            }

            // the voice web socket was closed
            if (payload is WebSocketClosedEvent webSocketClosedEvent)
            {
                await player.DisconnectAsync(PlayerDisconnectCause.WebSocketClosed);

                Players.Remove(payload.GuildId);
                player.Dispose();

                Logger?.Log(this, string.Format("Voice WebSocket was closed for player: {0}" +
                                                "\nClose Code: {1} ({2}, Reason: {3}, By Remote: {4}",
                                                payload.GuildId, webSocketClosedEvent.CloseCode,
                                                (int)webSocketClosedEvent.CloseCode, webSocketClosedEvent.Reason,
                                                webSocketClosedEvent.ByRemote ? "Yes" : "No"),
                            webSocketClosedEvent.ByRemote ? LogLevel.Warning : LogLevel.Debug);
            }
        }
Beispiel #3
0
        /// <summary>Method called when OnTrackException event is fired.
        /// </summary>
        private static async Task OnTrackException(TrackExceptionEventArgs arg)
        {
            var track = arg.Track;

            //For some reason Lavalink returns error messages with \n, so we remove them
            var errorMessage = arg.ErrorMessage.Replace("\\n", "");

            await arg.Player.TextChannel.SendMessageAsync(
                embed : CustomFormats.CreateErrorEmbed($"**An error occurred**\n Playback failed for {track.Title}\n{errorMessage}"));
        }
        private async Task LavalinkErrorHandler(LavalinkGuildConnection con, TrackExceptionEventArgs e)
        {
            if (e.Player?.Guild == null)
            {
                return;
            }

            if (!this.data.TryGetValue(e.Player.Guild.Id, out GuildMusicPlayer? gd))
            {
                return;
            }

            if (gd.CommandChannel is { })
Beispiel #5
0
        private async Task OnTrackException(TrackExceptionEventArgs e)
        {
            await Logs.Write("Music", $"Could not play track {e.Track.Title}. Reason: {e.Message}");

            await e.Player.TextChannel.SendMessageAsync(_localization.GetMessage("Music song exception", e.Track.Title));

            await Prepare(e.Player.VoiceChannel.Guild);

            var track = await _music.PlayNext();

            if (track == null)
            {
                return;
            }

            await track.TextChannel.SendMessageAsync(_localization.GetMessage("Music now playing", track.Track.Title,
                                                                              track.Requester.Nickname()));
        }
Beispiel #6
0
 public async Task PlayErr(TrackExceptionEventArgs ts)
 {
     Console.WriteLine("ErrorEvent");
     var con = Bot.guit[0].LLinkCon;
     var pos = Bot.guit.FindIndex(x => x.GID == ts.Player.Guild.Id);
     if (pos == -1)
     {
         await Task.CompletedTask;
         return;
     }
     if (Bot.guit[pos].playnow.LavaTrack.IsStream && !Bot.guit[pos].playnow.LavaTrack.IsStream)
     {
         var naet = await con.GetTracksAsync(new Uri(Bot.guit[pos].playnow.LavaTrack.Uri.OriginalString));
         Bot.guit[pos].queue.Insert(0, new Gsets2
         {
             LavaTrack = Bot.guit[pos].playnow.LavaTrack,
             requester = Bot.guit[pos].playnow.requester,
             addtime = Bot.guit[pos].playnow.addtime
         });
     }
     await Task.CompletedTask;
 }
        private async Task OnTrackException(TrackExceptionEventArgs e)
        {
            if (e.Player == null || e.Track == null)
            {
                return;
            }

            e.Player.Queue.Remove(e.Track);

            var eb = this.GetSimpleMusicEmbed("Track threw and exception. Attempting to play next track");

            string desc = $"**{e.Track.Title}**";

            if (!string.IsNullOrWhiteSpace(e.ErrorMessage))
            {
                desc += $"\n{e.ErrorMessage}";
            }
            eb.WithDescription(desc);

            await e.Player.TextChannel.SendMessageAsync(
                embed : eb.Build());
        }
Beispiel #8
0
        internal Task InternalTrackExceptionAsync(TrackExceptionData e)
        {
            var ea = new TrackExceptionEventArgs(this, e.Error, LavalinkUtilities.DecodeTrack(e.Track));

            return(this._trackException.InvokeAsync(ea));
        }
Beispiel #9
0
 private Task OnTrackException(TrackExceptionEventArgs arg)
 {
     _logger.ConsoleMusicLog($"Track exception received for {arg.Track.Title}.");
     return(Task.CompletedTask);
 }
Beispiel #10
0
        private async Task Lavalink_TrackExceptionThrown(LavalinkGuildConnection con, TrackExceptionEventArgs e)
        {
            if (e.Player?.Guild == null)
            {
                return;
            }

            if (!this.MusicData.TryGetValue(e.Player.Guild.Id, out var gmd))
            {
                return;
            }

            await gmd.CommandChannel.SendMessageAsync($"{DiscordEmoji.FromName(this.Discord, ":msfrown:")} A problem occured while playing {Formatter.Bold(Formatter.Sanitize(e.Track.Title))} by {Formatter.Bold(Formatter.Sanitize(e.Track.Author))}:\n{e.Error}");
        }
 private async Task LavalinkNode_TrackException(LavalinkGuildConnection con, TrackExceptionEventArgs e)
 {
     await this._trackException.InvokeAsync(con, e);
 }
Beispiel #12
0
 private async Task OnTrackExceptionAsync(TrackExceptionEventArgs arg)
 {
     Console.WriteLine($"{arg.Track} causes exception: {arg.ErrorMessage}.");
 }
Beispiel #13
0
 private Task OnTrackException(TrackExceptionEventArgs arg)
 {
     Console.WriteLine($"Track exception received for {arg.Track.Title}.");
     return(Task.CompletedTask);
 }
Beispiel #14
0
 /// <summary>
 ///     Invokes the <see cref="TrackException"/> event asynchronously. (Can be override for
 ///     event catching)
 /// </summary>
 /// <param name="eventArgs">the event arguments</param>
 /// <returns>a task that represents the asynchronous operation</returns>
 protected virtual Task OnTrackExceptionAsync(TrackExceptionEventArgs eventArgs)
 => TrackException.InvokeAsync(this, eventArgs);
 internal Task OnTrackExceptionAsync(TrackExceptionEventArgs eventArgs)
 => TrackException.InvokeAsync(this, eventArgs);
Beispiel #16
0
 private Task OnTrackException(TrackExceptionEventArgs arg)
 => this.LogAsync(new LogMessage(LogSeverity.Critical, "Victoria", $"Track exception received for {arg.Track.Title}.", null));
Beispiel #17
0
 private async Task OnTrackException(TrackExceptionEventArgs arg)
 {
     _logger.LogError($"Track {arg.Track.Title} threw an exception. Check Lavalink logs.");
     arg.Player.Queue.Enqueue(arg.Track);
     await arg.Player.TextChannel?.SendMessageAsync($"The song {arg.Track.Title} was re-added to the queue after an error.");
 }
 /// <inheritdoc/>
 protected override Task OnTrackExceptionAsync(TrackExceptionEventArgs eventArgs)
 => Task.WhenAll(base.OnTrackExceptionAsync(eventArgs), Cluster.OnTrackExceptionAsync(eventArgs));
Beispiel #19
0
 private Task OnTrackException(TrackExceptionEventArgs arg)
 {
     return(Task.CompletedTask);
 }
        private async Task OnTruckException(TrackExceptionEventArgs arg)
        {
            await arg.Player.TextChannel.SendMessageAsync($"{arg.ErrorMessage}");

            await arg.Player.SkipAsync();
        }
Beispiel #21
0
 private Task OnTrackException(TrackExceptionEventArgs arg)
 {
     this._logger.LogCritical($"Track exception received for {arg.Track.Title}.", arg.ErrorMessage);
     return(Task.CompletedTask);
 }
 /// <summary>
 ///     Asynchronously triggered when an exception occurred while playing a track.
 /// </summary>
 /// <param name="eventArgs">the track event arguments</param>
 /// <returns>a task that represents the asynchronous operation</returns>
 public virtual Task OnTrackExceptionAsync(TrackExceptionEventArgs eventArgs)
 => Task.CompletedTask;
Beispiel #23
0
 private async Task TrackExceptionAsync(TrackExceptionEventArgs arg) => await _logger.LogMessage(new LogMessage(LogSeverity.Critical,
                                                                                                                "AudioManager",
                                                                                                                $"Track exception received for \"{arg.Track.Title}\" in \"{arg.Player.VoiceChannel.Name}\" on {arg.Player.VoiceChannel.Guild.Name}\"."));