Beispiel #1
0
        public static async Task TrackStarted(object sender, TrackStartedEventArgs e)
        {
            var player = e.Player as QueuedLavalinkPlayer;

            if (player.CurrentTrack.Title != null)
            {
                Console.WriteLine($"[TrackStarted] Queue has {player.Queue.Count} items");
                //await ReplyAsync($"Now playing {e.Player.CurrentTrack.Title}!");
            }
            else
            {
                Console.WriteLine("Track title was null on track start");
            }
            await Task.CompletedTask;
        }
 /// <summary>
 ///     Asynchronously triggered when a track started.
 /// </summary>
 /// <param name="eventArgs">the track event arguments</param>
 /// <returns>a task that represents the asynchronous operation</returns>
 public virtual Task OnTrackStartedAsync(TrackStartedEventArgs eventArgs)
 => Task.CompletedTask;
 /// <summary>
 ///     Dispatches the <see cref="TrackStarted"/> event asynchronously.
 /// </summary>
 /// <param name="eventArgs">the event arguments passed with the event</param>
 /// <returns>a task that represents the asynchronous operation</returns>
 protected virtual Task OnTrackStartedAsync(TrackStartedEventArgs eventArgs)
 => TrackStarted.InvokeAsync(this, eventArgs);
        /// <summary>
        ///     Handles an event payload asynchronously.
        /// </summary>
        /// <param name="payload">the payload</param>
        /// <returns>a task that represents the asynchronous operation</returns>
        /// <exception cref="ObjectDisposedException">thrown if the instance is disposed</exception>
        protected virtual async Task OnEventReceived(EventPayload payload)
        {
            EnsureNotDisposed();

            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));
            }

            // a track started
            if (payload is TrackStartEvent trackStartEvent)
            {
                var args = new TrackStartedEventArgs(player,
                                                     trackStartEvent.TrackIdentifier);

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

            // the voice web socket was closed
            if (payload is WebSocketClosedEvent webSocketClosedEvent)
            {
                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);

                var eventArgs = new WebSocketClosedEventArgs(
                    closeCode: webSocketClosedEvent.CloseCode,
                    reason: webSocketClosedEvent.Reason,
                    byRemote: webSocketClosedEvent.ByRemote);

                await OnWebSocketClosedAsync(eventArgs);
            }
        }
Beispiel #5
0
 public override async Task OnTrackStartedAsync(TrackStartedEventArgs e)
 {
     await base.OnTrackStartedAsync(e);
 }
 internal Task OnTrackStartedAsync(TrackStartedEventArgs eventArgs)
 => TrackStarted.InvokeAsync(this, eventArgs);
 /// <inheritdoc/>
 protected override Task OnTrackStartedAsync(TrackStartedEventArgs eventArgs)
 => Task.WhenAll(base.OnTrackStartedAsync(eventArgs), Cluster.OnTrackStartedAsync(eventArgs));