Exemplo n.º 1
0
        private async Task <LavalinkNodeConnection> ConnectLavaNodeAsync()
        {
            ConnectionEndpoint endpoint = new ConnectionEndpoint
            {
                Hostname = "server.local",
                Port     = 2333
            };

            LavalinkConfiguration lavalinkConfig = new LavalinkConfiguration
            {
                Password            = ReadConfig.Config.LavaLinkPass,
                RestEndpoint        = endpoint,
                SocketEndpoint      = endpoint,
                SocketAutoReconnect = false
            };

            LavalinkExtension lavalink = Client.UseLavalink();

            LavalinkNodeConnection res = null;

            try
            {
                res = await lavalink.ConnectAsync(lavalinkConfig);
            }
            catch (WebSocketException e)
            {
                SystemService.Instance.Logger.Log("Failed to start connection with Lavalink server:\n" + e.Message);
            }

            return(res);
        }
Exemplo n.º 2
0
        public LavaPlayer()
        {
            LavalinkConfiguration lavaConfig = global.botConfig.GetLavalinkConfiguration();
            LavalinkExtension     lavalink   = global.bot.UseLavalink();

            lavalink.ConnectAsync(lavaConfig).GetAwaiter().GetResult();
        }
Exemplo n.º 3
0
        private static async Task DiscordHeartbeated(DiscordClient client, HeartbeatEventArgs _)
        {
            if (_lavalinkNodeConnection?.IsConnected == true)
            {
                return;
            }

            if (_socketAutoReconnect && _wasConnectedToLavalink)
            {
                return;
            }

            _lavalinkNodeConnection = await _lavalink.ConnectAsync(_lavalinkConfiguration);

            if (!_wasConnectedToLavalink)
            {
                client.LogMessage("Successfully connected to Lavalink.");
            }
            else
            {
                client.LogMessage("The connection to Lavalink has been re-established.");
            }

            if (!_wasConnectedToLavalink)
            {
                _wasConnectedToLavalink = true;
            }
        }
Exemplo n.º 4
0
        public static async Task <LavalinkNodeConnection> GetNodeConnection(CommandContext ctx, bool newConnection = false)
        {
            LavalinkExtension      lavalink = ctx.Client.GetLavalink();
            LavalinkNodeConnection lavalinkNodeConnection = lavalink.GetNodeConnection(Program.GetLavalinkConnectionEndpoint());

            if (lavalinkNodeConnection == null)
            {
                lavalinkNodeConnection = await lavalink.ConnectAsync(Program.GetLavalinkConfiguration());
            }
            return(lavalinkNodeConnection);
        }
Exemplo n.º 5
0
        public async Task EnqueueTrack(CommandContext ctx, [RemainingText] string input)
        {
            _Cmdctx = ctx;

            if (ctx.Member?.VoiceState?.Channel == null)
            {
                await ctx.RespondAsync("You must be connected to a voice channel to use this command.");

                return;
            }

            var lavaconfig = new LavalinkConfiguration
            {
                Password = ""
            };

            if (_LavalinkNode == null || !_LavalinkNode.IsConnected)
            {
                _LavalinkNode = await _Lavalink.ConnectAsync(lavaconfig);
            }

            if ((_LavalinkGuild == null || !_LavalinkGuild.IsConnected))
            {
                _LavalinkGuild = await _LavalinkNode.ConnectAsync(ctx.Member.VoiceState.Channel);

                _LavalinkGuild.PlaybackFinished += PlayTrack;
            }

            var tracks = new LavalinkLoadResult();

            Uri uri;

            if (Uri.TryCreate(input, UriKind.Absolute, out uri))
            {
                tracks = await _LavalinkNode.GetTracksAsync(uri);
            }
            else
            {
                tracks = await _LavalinkNode.GetTracksAsync(input);
            }

            switch (tracks.LoadResultType)
            {
            case LavalinkLoadResultType.SearchResult:

            case LavalinkLoadResultType.TrackLoaded:
                _Playlist.Enqueue(tracks.Tracks.First());
                await ctx.RespondAsync($"**[Enqueued]** {tracks.Tracks.First().Title}");

                break;

            case LavalinkLoadResultType.PlaylistLoaded:
                foreach (LavalinkTrack track in tracks.Tracks)
                {
                    _Playlist.Enqueue(track);
                }
                await ctx.RespondAsync($"Playlist Loaded.");

                break;

            case LavalinkLoadResultType.LoadFailed:
                await ctx.RespondAsync($"Track could not be loaded.");

                break;

            case LavalinkLoadResultType.NoMatches:
                await ctx.RespondAsync($"Track Not Found.");

                break;

            default:
                await ctx.RespondAsync($"Error.");

                return;
            }

            if (string.IsNullOrEmpty(_LavalinkGuild.CurrentState.CurrentTrack.Title))
            {
                _LavalinkGuild.Play(_Playlist.Peek());
            }
        }