Ejemplo n.º 1
0
        private async Task HandleDeafen()
        {
            var voiceManager = DiscordManager.GetDiscord().GetVoiceManager();

            voiceManager.SetSelfDeaf(!voiceManager.IsSelfDeaf());

            var isDeafened = voiceManager.IsSelfDeaf();

            Console.WriteLine("Deafened changed to " + isDeafened);

            var msg = new WebsocketMessage()
            {
                Type = RichPresenceMessageTypes.VoiceStatus
            };

            msg.From(new VoiceStatusMessage {
                IsConnected = true, IsMuted = IsSelfMuted(voiceManager), IsDeafened = voiceManager.IsSelfDeaf()
            });
            await Send(msg);
        }
        private async Task HandleClickedConnect(VoiceLobbyMessage voiceLobbyMessage)
        {
            var lobbyManager = DiscordManager.GetDiscord().GetLobbyManager();

            // Search lobbies.
            var query = lobbyManager.GetSearchQuery();

            // Filter by a metadata value.
            query.Filter("metadata.FoundryRemoteIp", LobbySearchComparison.Equal, LobbySearchCast.String, voiceLobbyMessage.WorldUniqueIdentifier);
            // Only return 1 result max.
            query.Limit(1);

            Console.WriteLine("Searching for existing Lobbies with FoundryRemoteIp of " + voiceLobbyMessage.WorldUniqueIdentifier);

            lobbyManager.Search(query, (_) =>
            {
                Console.WriteLine("Search returned {0} lobbies", lobbyManager.LobbyCount());
                if (lobbyManager.LobbyCount() == 1)
                {
                    CurrentLobby = lobbyManager.GetLobby(lobbyManager.GetLobbyId(0));
                    Console.WriteLine("Sirst lobby secret: {0}", CurrentLobby.Value.Secret);

                    lobbyManager.ConnectLobby(CurrentLobby.Value.Id, CurrentLobby.Value.Secret, (Result result, ref Lobby connectedLobby) =>
                    {
                        CurrentLobby = connectedLobby;
                        Console.WriteLine("Connected to Lobby " + CurrentLobby.Value.Id + " ? " + result);

                        // Connect to voice chat.
                        lobbyManager.ConnectVoice(CurrentLobby.Value.Id, async(_) =>
                        {
                            Console.WriteLine("Connected to voice chat!");
                            var voiceManager = DiscordManager.GetDiscord().GetVoiceManager();
                            var msg          = new WebsocketMessage()
                            {
                                Type = RichPresenceMessageTypes.VoiceStatus
                            };
                            msg.From(new VoiceStatusMessage {
                                IsConnected = true, IsMuted = voiceManager.IsSelfMute(), IsDeafened = voiceManager.IsSelfDeaf()
                            });
                            await Send(msg);
                        });
                    });
                }
                else if (lobbyManager.LobbyCount() == 0)
                {
                    var transaction = lobbyManager.GetLobbyCreateTransaction();
                    transaction.SetCapacity((uint)voiceLobbyMessage.VoicePartySize);
                    transaction.SetType(LobbyType.Public);
                    transaction.SetMetadata("FoundryRemoteIp", voiceLobbyMessage.WorldUniqueIdentifier);

                    lobbyManager.CreateLobby(transaction, (Result result, ref Lobby createdLobby) =>
                    {
                        CurrentLobby = createdLobby;
                        Console.WriteLine("Created new Lobby " + CurrentLobby.Value.Id);
                        if (result != Result.Ok)
                        {
                            Console.WriteLine("Couldn't create new Discord lobby");
                            return;
                        }

                        // Connect to voice chat.
                        lobbyManager.ConnectVoice(CurrentLobby.Value.Id, async(_) =>
                        {
                            Console.WriteLine("Connected to voice chat!");
                            var voiceManager = DiscordManager.GetDiscord().GetVoiceManager();
                            var msg          = new WebsocketMessage()
                            {
                                Type = RichPresenceMessageTypes.VoiceStatus
                            };
                            msg.From(new VoiceStatusMessage {
                                IsConnected = true, IsMuted = voiceManager.IsSelfMute(), IsDeafened = voiceManager.IsSelfDeaf()
                            });
                            await Send(msg);
                        });
                    });
                }
            });
        }
Ejemplo n.º 3
0
        protected override async Task OnMessage(ModuleLaunchedMessage message)
        {
            var userManager = DiscordManager.GetDiscord().GetUserManager();

            userManager.OnCurrentUserUpdate += async() =>
            {
                var currentUser = userManager.GetCurrentUser();

                Console.WriteLine("User fetched: {0} ({1})", currentUser.Username, currentUser.Id);

                // Request users's avatar data.
                // This can only be done after a user is successfully fetched.
                var imageManager = DiscordManager.GetDiscord().GetImageManager();
                imageManager.Fetch(ImageHandle.User(currentUser.Id), async(result, handle) =>
                {
                    if (result == Result.Ok)
                    {
                        Console.WriteLine("Fetched Image, processing..");
                        // You can also use GetTexture2D within Unity.
                        // These return raw RGBA.
                        var data = imageManager.GetData(handle);

                        var rgbaList = new List <Rgba32>();

                        for (int x = 0; x < data.Length; x += 4)
                        {
                            rgbaList.Add(new Rgba32(data[x], data[x + 1], data[x + 2], data[x + 3]));
                        }

                        var image = Image.LoadPixelData <Rgba32>(data, 128, 128);

                        var base64 = image.ToBase64String(PngFormat.Instance);
#if DEBUG
                        Console.WriteLine(base64);
#endif
                        var discordProfileInfo = new DiscordProfileInfoMessage
                        {
                            AvatarBase64 = base64,
                            DiscordId    = currentUser.Id
                        };

                        Console.WriteLine("Sent avatar!");

                        var msg = new WebsocketMessage()
                        {
                            Type = RichPresenceMessageTypes.DiscordProfileInfo
                        };
                        msg.From(discordProfileInfo);

                        await Send(msg);
                    }
                    else
                    {
                        Console.WriteLine("Image error {0}", handle.Id);
                    }
                });

                var lobbyManager = DiscordManager.GetDiscord().GetLobbyManager();
                var voiceManager = DiscordManager.GetDiscord().GetVoiceManager();

                if (CurrentLobby.HasValue)
                {
                    var msg = new WebsocketMessage()
                    {
                        Type = RichPresenceMessageTypes.VoiceStatus
                    };
                    msg.From(new VoiceStatusMessage {
                        IsConnected = true, IsDeafened = voiceManager.IsSelfDeaf(), IsMuted = IsSelfMuted(voiceManager)
                    });
                    await Send(msg);
                }

                lobbyManager.OnSpeaking += HandleSpeaking;
            };

            void HandleSpeaking(long lobbyId, long userId, bool speaking)
            {
                var msg = new WebsocketMessage()
                {
                    Type = RichPresenceMessageTypes.Speaking
                };

                msg.From(new SpeakingMessage {
                    DiscordId = userId, IsSpeaking = speaking
                });
                Send(msg).GetAwaiter().GetResult();
            }
        }