public override void _Ready() { // System.Environment.SetEnvironmentVariable("DISCORD_INSTANCE_ID", "0"); discord = new Discord.Discord(763426273757495327, (ulong)CreateFlags.Default); activityManager = discord.GetActivityManager(); lobbyManager = discord.GetLobbyManager(); userManager = discord.GetUserManager(); activityManager.OnActivityJoin += (secret) => { lobbyManager.ConnectLobbyWithActivitySecret(secret, (Result result, ref Lobby lobby) => { if (result == Result.Ok) { GD.Print("Successfully joined a lobby: ", lobby.Id); lobbyId = lobby.Id; UpdateActivity("In lobby...", true, true); UpdateMemberList(); EmitSignal("JoinedLobby"); } else { GD.PrintErr("Failed to join a lobby: ", result); } }); }; lobbyManager.OnMemberConnect += (lobbyId, userId) => { UpdateActivity("In lobby...", false, true); UpdateMemberList(); }; lobbyManager.OnMemberDisconnect += (lobbyId, userId) => { UpdateActivity("In lobby...", false, true); UpdateMemberList(); }; lobbyManager.OnLobbyMessage += (lobbyId, userId, data) => { string message = Encoding.UTF8.GetString(data); string username = lobbyManager.GetMemberUser(lobbyId, userId).Username; EmitSignal("ReceivedMessage", username, message); }; UpdateActivity("In menu...", true, false); }
public void ConnectToLobbyWithActivitySecret(string activitySecret) { lobbyManager.ConnectLobbyWithActivitySecret(activitySecret, (Result result, ref Lobby lobby) => { //Debug.Log("ConnectToLobbyThroughSecret"); if (result == Result.Ok) { SetCurrent(lobby.Id, lobby.Secret, lobby.OwnerId); DiscordNetworkLayerService.INSTANCE.SetMyPeerId(); } else { Debug.Log(result); } }); }
void connect() { System.Environment.SetEnvironmentVariable("DISCORD_INSTANCE_ID", "0"); //System.Environment.SetEnvironmentVariable("DISCORD_INSTANCE_ID", "1"); discord = new Discord.Discord(AppClientId, (System.UInt64)Discord.CreateFlags.Default); UserManager userManager = discord.GetUserManager(); userManager.OnCurrentUserUpdate += () => { var currentUser = userManager.GetCurrentUser(); userLabel.text = currentUser.Username; disconnectButton.interactable = true; updateStateInput.interactable = true; updateDetailInput.interactable = true; updateButton.interactable = true; clearButton.interactable = true; dropDownFriends.interactable = true; inviteToJoinButton.interactable = true; inviteToSpectateButton.interactable = true; }; var relationshipManager = discord.GetRelationshipManager(); // Assign this handle right away to get the initial relationships update. // This callback will only be fired when the whole list is initially loaded or was reset // Wait for OnRefresh to fire to access a stable list // Filter a user's relationship list to be just friends // Use this list as your base relationships = new List <Relationship>(); relationshipManager.OnRefresh += () => { relationshipManager.Filter((ref Relationship relationship) => { return(relationship.Type == Discord.RelationshipType.Friend); }); // Loop over all friends a user has. List <Dropdown.OptionData> options = new List <Dropdown.OptionData>(); for (var i = 0; i < relationshipManager.Count(); i++) { // Get an individual relationship from the list var r = relationshipManager.GetAt((uint)i); relationships.Add(r); Dropdown.OptionData option = new Dropdown.OptionData(); option.text = r.User.Username; options.Add(option); } dropDownFriends.AddOptions(options); }; var activityManager = discord.GetActivityManager(); LobbyManager lobbyManager = discord.GetLobbyManager(); // Received when someone accepts a request to join or invite. // Use secrets to receive back the information needed to add the user to the group/party/match activityManager.OnActivityJoin += secret => { Debug.Log("OnJoin " + secret); lobbyManager.ConnectLobbyWithActivitySecret(secret, (Discord.Result result, ref Discord.Lobby lobby) => { Debug.Log("Connected to lobby: " + lobby.Id); // Connect to voice chat, used in this case to actually know in overlay if your successful in connecting. lobbyManager.ConnectVoice(lobby.Id, (Discord.Result voiceResult) => { if (voiceResult == Discord.Result.Ok) { Debug.Log("New User Connected to Voice! Say Hello! Result: " + voiceResult); } else { Debug.Log("Failed with Result: " + voiceResult); }; }); //Connect to given lobby with lobby Id lobbyManager.ConnectNetwork(lobby.Id); lobbyManager.OpenNetworkChannel(lobby.Id, 0, true); foreach (var user in lobbyManager.GetMemberUsers(lobby.Id)) { //Send a hello message to everyone in the lobby lobbyManager.SendNetworkMessage(lobby.Id, user.Id, 0, Encoding.UTF8.GetBytes(string.Format("Hello, " + user.Username + "!"))); } //Sends this off to a Activity callback named here as 'UpdateActivity' passing in the discord instance details and lobby details UpdateActivity(discord, lobby); }); }; void UpdateActivity(Discord.Discord discord, Discord.Lobby lobby) { //Creates a Static String for Spectate Secret. string discordSpectateSecret = "wdn3kvj320r8vk3"; string spectateActivitySecret = discordSpectateSecret; var activity1 = new Discord.Activity { State = "Playing Co-Op", Details = "In a Multiplayer Match!", Assets = { LargeImage = "matchimage1", LargeText = "Inside the Arena!", }, Party = { Id = lobby.Id.ToString(), Size = { CurrentSize = lobbyManager.MemberCount(lobby.Id), MaxSize = (int)lobby.Capacity, }, }, Secrets = { Spectate = spectateActivitySecret, Join = "123", }, Instance = true, }; activityManager.UpdateActivity(activity1, result => { Debug.Log("Updated to Multiplayer Activity: " + result); // Send an invite to another user for this activity. // Receiver should see an invite in their DM. // Use a relationship user's ID for this. // activityManager // .SendInvite( // 364843917537050624, // Discord.ActivityActionType.Join, // "", // inviteResult => // { // Console.WriteLine("Invite {0}", inviteResult); // } // ); }); } statusLabel.text = "Connected."; }