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