Ejemplo n.º 1
0
 public static void UpdatePresence(ref RichPresence presence)
 {
     invoker.UpdatePresence(ref presence);
 }
Ejemplo n.º 2
0
        internal void UpdatePresence()
        {
            //Construct rich presence
            var rp = new RichPresence();

            rp.Assets = new Assets();
            rp.Assets.LargeImageKey  = "rocksmith";
            rp.Assets.LargeImageText = "Rocksmith 2014 Remastered";

            //If we have a valid song and are playing a song
            if ((songdetails != null && readout != null) && (state == SnifferState.SONG_STARTING || state == SnifferState.SONG_PLAYING || state == SnifferState.SONG_ENDING))
            {
                //Get the arrangement based on the arrangement id
                var arrangement = songdetails.arrangements.FirstOrDefault(x => x.arrangementID == readout.arrangementID);

                //Add song name
                rp.Details = $"Playing {songdetails.songName}";

                //Add artist name
                rp.State = $"by {songdetails.artistName}";

                //Set song timer
                rp.Timestamps = new Timestamps(DateTime.UtcNow, DateTime.UtcNow.AddSeconds(songdetails.songLength - readout.songTimer));

                //Calculate accuracy
                float accuracy = readout.noteData.Accuracy;

                string accuracyText = FormattableString.Invariant($"{accuracy:F2}%");

                //Set accuracy as text for arrangement icon
                rp.Assets.SmallImageText = accuracyText;

                if (readout.mode == RSMode.SCOREATTACK)
                {
                    var sand = (ScoreAttackNoteData)readout.noteData;

                    rp.Assets.SmallImageText = $"{FormattableString.Invariant($"{sand.CurrentScore:n0}")} x{sand.CurrentMultiplier} | {rp.Assets.SmallImageText}";

                    if (sand.FailedPhrases > 0)
                    {
                        rp.Assets.SmallImageText = $"{new string('X', sand.FailedPhrases)} | {rp.Assets.SmallImageText}";
                    }
                }

                //When we got the arrangement
                if (arrangement != null)
                {
                    //Set arrangement icon
                    rp.Assets.SmallImageKey = arrangement.type.ToLower();

                    //Try to get section
                    var section = arrangement.sections.LastOrDefault(x => x.startTime < readout.songTimer);

                    //If we got a section
                    if (section != null)
                    {
                        //Add section to small image text
                        rp.Assets.SmallImageText = $"{section.name} | {rp.Assets.SmallImageText}";
                    }
                }
            }
            else
            {
                rp.Details = "Browsing Menus";

                if (readout != null)
                {
                    string gameStage = readout.gameStage.ToLowerInvariant().Trim();

                    string state = "";

                    if (gameStage.StartsWith("main"))
                    {
                        state = "Main Menu";
                    }
                    else if (gameStage.StartsWith("las"))
                    {
                        state = "Learn A Song";
                    }
                    else if (gameStage.StartsWith("sm"))
                    {
                        state = "Session Mode";
                    }
                    else if (gameStage.StartsWith("nsp"))
                    {
                        state = "Nonstop Play";
                    }
                    else if (gameStage.StartsWith("sa"))
                    {
                        state = "Score Attack";
                    }
                    else if (gameStage.StartsWith("guitarcade") || gameStage.StartsWith("gc_games"))
                    {
                        state = "Guitarcade";
                    }
                    else if (gameStage.StartsWith("gcade"))
                    {
                        rp.Details = "Playing Guitarcade";
                        state      = "";

                        if (gcadeGames.ContainsKey(readout.songID))
                        {
                            state = gcadeGames[readout.songID];
                        }
                    }
                    else if (gameStage.StartsWith("ge_"))
                    {
                        state = "Lessons";
                    }
                    else if (gameStage.StartsWith("mp_"))
                    {
                        state = "Multiplayer";
                    }
                    else if (gameStage.StartsWith("shop"))
                    {
                        state = "Shop";
                    }


                    rp.State = state;
                }

                rp.Timestamps = new Timestamps(appStartTime);
            }

            client.SetPresence(rp);
        }
Ejemplo n.º 3
0
 public static extern void UpdatePresence(ref RichPresence presence);
Ejemplo n.º 4
0
        private void buttonUpdatePresence_Click(object sender, EventArgs e)
        {
            if (comboBoxApp.SelectedIndex == -1)
            {
                MessageBox.Show(this, "No application selected.", "", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                return;
            }


            string clientId = Program.Applications.Find(v => v.Name == (string)comboBoxApp.SelectedItem)?.Id ?? "";

            if (clientId == "")
            {
                return;
            }


            if (RpcClient == null || RpcClient.ApplicationID != clientId)
            {
                CreateRpcClient(clientId);
            }


            // Update presence
            RichPresence presence = new RichPresence
            {
                Details = textBoxDetails.Text,
                State   = textBoxState.Text,

                Assets = new Assets()
                {
                    LargeImageKey  = comboBoxImageLarge.SelectedIndex > 0 ? (string)comboBoxImageLarge.SelectedItem : "",
                    LargeImageText = textBoxImageLarge.Text,
                    SmallImageKey  = comboBoxImageSmall.SelectedIndex > 0 ? (string)comboBoxImageSmall.SelectedItem : "",
                    SmallImageText = textBoxImageSmall.Text
                },

                Timestamps = new Timestamps()
            };


            // Timestamps
            DateTime currentTime            = DateTime.UtcNow;
            int      DurationStartInMinutes = (int)numericUpDownStartHour.Value * 60 + (int)numericUpDownStartMinute.Value;
            int      DurationEndInMinutes   = (int)numericUpDownEndHour.Value * 60 + (int)numericUpDownEndMinute.Value;

            if (checkBoxHideElapsed.Checked)
            {
                presence.Timestamps.Start = null;
            }

            else if (timestampEdited)
            {
                // Start
                if (DurationStartInMinutes > 0)
                {
                    presence.Timestamps.Start = currentTime.AddMinutes(-DurationStartInMinutes);
                }
                else
                {
                    presence.Timestamps.Start = currentTime;
                }

                // End
                if (DurationEndInMinutes > 0)
                {
                    presence.Timestamps.End = currentTime.AddMinutes(DurationEndInMinutes);
                }

                lastTimestampStart = presence.Timestamps.Start;
                lastTimestampEnd   = presence.Timestamps.End;
                timestampEdited    = false;
            }

            else
            {
                presence.Timestamps.Start = lastTimestampStart;
                presence.Timestamps.End   = lastTimestampEnd;
            }


            RpcClient.SetPresence(presence);
        }
Ejemplo n.º 5
0
        private RichPresence GetPresence()
        {
            RichPresence presence = new RichPresence {
                Details = api.FormatText(Conf.Details),
                State   = api.FormatText(Conf.State)
            };
            Assets assets = new Assets {
                LargeImageKey  = "default_large",
                LargeImageText = api.FormatText(Conf.LargeImageText),
                SmallImageText = api.FormatText(Conf.SmallImageText)
            };

            if (Conf.ForceSmallImage)
            {
                assets.SmallImageKey = "default_small";
            }
            if (assets.SmallImageText != null)
            {
                assets.SmallImageKey = assets.SmallImageKey ?? "default_small";
            }

            if (Context.IsWorldReady)
            {
                GamePresence conf = (GamePresence)Conf;
                if (conf.ShowSeason)
                {
                    assets.LargeImageKey = $"{Game1.currentSeason}_{FarmTypeKey()}";
                }
                if (conf.ShowWeather)
                {
                    assets.SmallImageKey = "weather_" + WeatherKey();
                }
                if (conf.ShowPlayTime)
                {
                    presence.Timestamps = new Timestamps {
                        Start = timestampFarm
                    }
                }
                ;
                if (Context.IsMultiplayer && conf.ShowPlayerCount)
                {
                    try {
                        presence.Party = new Party {
                            ID   = Game1.MasterPlayer.UniqueMultiplayerID.ToString(),
                            Size = Game1.numberOfPlayers(),
                            Max  = Game1.getFarm().getNumberBuildingsConstructed("Cabin") + 1
                        };
                        presence.Secrets = new Secrets {
                            JoinSecret = Game1.server.getInviteCode()
                        };
                    } catch { }
                }
            }

            if (config.ShowGlobalPlayTime)
            {
                presence.Timestamps = new Timestamps {
                    Start = timestampSession
                }
            }
            ;
            presence.Assets = assets;

            return(presence);
        }
Ejemplo n.º 6
0
        protected override void OnMessage(MessageEventArgs e)
        {
            var     msg      = e.Data;
            JObject j        = JObject.Parse(msg);
            string  Site     = (string)j["site"];
            string  Name     = (string)j["name"];
            bool    Watching = (bool)j["watching"];
            int?    Shows    = (int?)j["shows"];
            string  Episode  = (string)j["episode"];

            switch (Site)
            {
            case "funimation":
                if (!Watching)
                {
                    string b = Shows > 0
                            ? $"{Shows} shows in their queue"
                            : $"Browsing {Name}";

                    RichPresence presence = new RichPresence()
                    {
                        Details = $"Looking at {Name}",
                        State   = b,
                        Assets  = new Assets()
                        {
                            LargeImageKey  = "funimation",
                            LargeImageText = $"Browsing {Name}"
                        }
                    };

                    client.SetPresence(presence);
                }
                else
                {
                    RichPresence presence = new RichPresence()
                    {
                        Details = $"Watching {Name}",
                        State   = Episode,
                        Assets  = new Assets()
                        {
                            LargeImageKey  = "funimation",
                            LargeImageText = Episode
                        }
                    };

                    client.SetPresence(presence);
                }
                break;

            case "youtube":
                if (!Watching)
                {
                    RichPresence presence = new RichPresence()
                    {
                        Details = $"Browsing {Name}",
                        State   = "Browsing",
                        Assets  = new Assets()
                        {
                            LargeImageKey  = "youtube",
                            LargeImageText = $"Browsing {Name}"
                        }
                    };

                    client.SetPresence(presence);
                }
                else
                {
                    RichPresence presence = new RichPresence()
                    {
                        Details = $"Watching {Name}",
                        State   = Episode,
                        Assets  = new Assets()
                        {
                            LargeImageKey  = "youtube",
                            LargeImageText = Episode
                        }
                    };

                    client.SetPresence(presence);
                }
                break;

            case "twitch":
                if (Watching)
                {
                    RichPresence presence = new RichPresence()
                    {
                        Details = $"Watching {Name}",
                        State   = Episode,
                        Assets  = new Assets()
                        {
                            LargeImageKey  = "twitch",
                            LargeImageText = Episode
                        }
                    };

                    client.SetPresence(presence);
                }
                break;
            }
        }
        private void StartDiscordRpc()
        {
            RichPresence presence = new RichPresence()
            {
                Details = "TestDetails",
                State   = "TestState",
                Assets  = new Assets()
            };

            using (client = new DiscordRpcClient("427501855191334924", true, 0))
            {
                //Set the loggers
                client.Logger = new DiscordRPC.Logging.ConsoleLogger()
                {
                    Level = DiscordRPC.Logging.LogLevel.Info
                };

                //Initialize the connection
                client.Initialize();

                //Send the presence
                client.SetPresence(presence);

                //CommandInterface(client);

                while (!stopRpc)
                {
                    //Invoke the clients events
                    if (client != null)
                    {
                        client.Invoke();
                    }


                    bool      streamFound = false;
                    Process[] processes   = Process.GetProcesses();

                    foreach (Process p in processes)
                    {
                        if (!String.IsNullOrEmpty(p.MainWindowTitle))
                        {
                            foreach (var browser in browsers)
                            {
                                Regex browserRegex = new Regex(browser.Regex);
                                if (browserRegex.IsMatch(p.MainWindowTitle))
                                {
                                    var s = browserRegex.Match(p.MainWindowTitle).Groups[1].Value;
                                    foreach (var st in streams)
                                    {
                                        Regex streamRegex = new Regex(st.Regex);
                                        if (streamRegex.IsMatch(s))
                                        {
                                            streamFound = true;
                                            noStream    = 0;

                                            var c = client.CurrentPresence;
                                            //var test = streamRegex.Match(s);
                                            c.Details = streamRegex.Match(s).Groups[1].Value;
                                            c.State   = st.Name;
                                            c.Assets.LargeImageKey = st.Icon;
                                            //c.Secrets.SpectateSecret = "http://" + s.Replace("Crunchyroll - Watch ", "");
                                            client.SetPresence(c);
                                        }
                                    }
                                }
                            }
                        }
                    }

                    if (!streamFound)
                    {
                        noStream++;
                    }

                    if (noStream > 10)
                    {
                        var c = client.CurrentPresence;
                        //var test = streamRegex.Match(s);
                        c.Details = "";
                        c.State   = "";
                        c.Assets.LargeImageKey = "";
                        //c.Secrets.SpectateSecret = "http://" + s.Replace("Crunchyroll - Watch ", "");
                        client.SetPresence(c);
                    }
                    Thread.Sleep(15000);
                }

                //Close everything
                client.Dispose();
                ExitThread();
            }
        }
Ejemplo n.º 8
0
        public static void UpdatePresence(dynamic json)
        {
            RichPresence presence = new RichPresence();

            if (json.player.activity == "menu")
            {
                Mode = "In menus";
            }

            if (Steam_ID == null)
            {
                Steam_ID = json.player.steamid;
            }


            if (json.map != null)
            {
                if (Mode == "In menus" && json.map.phase.ToString() != "live")
                {
                    Now = null;
                }
                else
                {
                    if (Now == null)
                    {
                        Now = DateTime.UtcNow;
                    }
                }
                switch (json.map.mode.ToString())
                {
                case "gungameprogressive":
                    Mode = "Arms Race";
                    break;

                case "gungametrbomb":
                    Mode = "Demolition";
                    break;

                case "scrimcomp2v2":
                    Mode = "Wingman";
                    break;

                case "survival":
                    Mode = "Danger Zone";
                    break;

                default:
                    Mode = char.ToUpper(json.map.mode.ToString().ToCharArray()[0]) + json.map.mode.ToString().Substring(1);
                    break;
                }
                switch (json.map.name.ToString())
                {
                case "de_cbble":
                    Map = "Cobblestone";
                    break;

                case "de_stmarc":
                    Map = "St. Marc";
                    break;

                case "de_dust2":
                    Map = "Dust II";
                    break;

                case "de_shortnuke":
                    Map = "Nuke";
                    break;

                default:
                    if (json.map.name.ToString().StartsWith("workshop"))
                    {
                        WorkShop = true;
                        Map      = json.map.name.ToString().Substring(json.map.name.ToString().Split('/')[1].Length + json.map.name.ToString().Split('/')[2].Length + 1);
                    }
                    else
                    {
                        WorkShop = false;
                        Map      = char.ToUpper(json.map.name.ToString().Substring(3).ToCharArray()[0]) + json.map.name.ToString().Substring(4);
                    }
                    break;
                }
            }

            if (json.player.team != null)
            {
                if (json.player.team.ToString() == "CT")
                {
                    TeamName = "Counter-Terrorists";
                }
                else
                {
                    TeamName = "Terrorists";
                }
                if (json.player.match_stats != null)
                {
                    if (json.player.steamid == Steam_ID)
                    {
                        string s = "";
                        if (Mode == "Deathmatch" || Mode == "Arms Race")
                        {
                            s = $"Score: {json.player.match_stats.score}";
                        }
                        else
                        {
                            s = json.player.team.ToString() == "T"
                               ? $"Score: {json.map.team_t.score}:{json.map.team_ct.score}"
                               : $"Score: {json.map.team_ct.score}:{json.map.team_t.score}";
                        }
                        presence.State = $"K: {json.player.match_stats.kills} / A: {json.player.match_stats.assists} / D: {json.player.match_stats.deaths}. {s}";
                    }
                    else
                    {
                        presence.State = $"Spectating. Score: T: {json.map.team_t.score} / CT: {json.map.team_ct.score}";
                    }
                }
                presence.Details = $"Playing {Mode}";
                if (Now != null)
                {
                    presence.Timestamps = new Timestamps()
                    {
                        Start = Now
                    };
                }
                if (!WorkShop)
                {
                    presence.Assets = new Assets()
                    {
                        LargeImageKey  = Map.ToLower().Replace(' ', '_'),
                        LargeImageText = Map,
                        SmallImageKey  = json.player.team.ToString().ToLower(),
                        SmallImageText = TeamName
                    };
                }
                else
                {
                    presence.Assets = new Assets()
                    {
                        LargeImageKey  = "workshop",
                        LargeImageText = Map,
                        SmallImageKey  = json.player.team.ToString().ToLower(),
                        SmallImageText = TeamName
                    };
                }
                client.SetPresence(presence);
            }
            else if (Mode == "In menus")
            {
                presence.Details = Mode;
                presence.Assets  = new Assets()
                {
                    LargeImageKey  = "idle",
                    LargeImageText = "In menus"
                };
                presence.Timestamps = new Timestamps()
                {
                    Start = Start
                };
                client.SetPresence(presence);
            }
        }
Ejemplo n.º 9
0
        public static void StartRPC()
        {
            RPC_Config.Load();

            MonoDevelop.Ide.IdeApp.Workspace.SolutionLoaded        += Workspace_SolutionLoaded;
            MonoDevelop.Ide.IdeApp.Workspace.SolutionUnloaded      += Workspace_SolutionUnloaded;
            MonoDevelop.Ide.IdeApp.Workbench.ActiveDocumentChanged += Workbench_ActiveDocumentChanged;
            MonoDevelop.Ide.IdeApp.Workspace.FileRenamedInProject  += Workspace_FileRenamedInProject;

            using (client = new DiscordRpcClient("595335536802267187"))
            {
                client.SetPresence(presence);

                client.Initialize();

                while (client != null)
                {
                    Thread.Sleep(250);

                    UpdatePresence();
                }
            }

            void Workspace_FileRenamedInProject(object sender, MonoDevelop.Projects.ProjectFileRenamedEventArgs e)
            {
                var document = MonoDevelop.Ide.IdeApp.Workbench.ActiveDocument;

                if (document != null)
                {
                    foreach (var item in e)
                    {
                        if (item.OldName.FileName == document.FileName.FileName)
                        {
                            presence.Assets.LargeImageKey = GetIcon(item.NewName);
                            presence.State = $"Editing {item.NewName.FileName}";
                            break;
                        }
                    }
                }
            }

            void Workbench_ActiveDocumentChanged(object sender, EventArgs e)
            {
                if (RPC_Config.Current.ResetTimeOnFileChange)
                {
                    presence.Timestamps = new Timestamps(DateTime.UtcNow);
                }
                var document = MonoDevelop.Ide.IdeApp.Workbench.ActiveDocument;

                if (document != null)
                {
                    presence.Assets.LargeImageKey = GetIcon(document.FileName);
                    presence.State = $"Editing {document.FileName.FileName}";
                }
            }

            void Workspace_SolutionLoaded(object sender, MonoDevelop.Projects.SolutionEventArgs e)
            {
                presence.Timestamps = new Timestamps(DateTime.UtcNow);

                presence.Details = e.Solution.Name;
            }

            void Workspace_SolutionUnloaded(object sender, MonoDevelop.Projects.SolutionEventArgs e)
            {
                presence = new RichPresence
                {
                    Details = "Home screen",
                    Assets  = new Assets()
                    {
                        LargeImageKey = "logo",
                        SmallImageKey = "logo",
                    }
                };
                client.SetPresence(presence);
            }
        }
Ejemplo n.º 10
0
        static async Task DiscordSetup()
        {
            var discordRpcClient = new DiscordRpcClient(ClientId);

            //Set the logger
            discordRpcClient.Logger = new ConsoleLogger()
            {
                Level = DiscordRPC.Logging.LogLevel.Info
            };

            //Subscribe to events
            discordRpcClient.OnReady += (sender, e) =>
            {
                Console.WriteLine("Received Ready from user {0}", e.User.Username);
            };

            discordRpcClient.OnPresenceUpdate += (sender, e) =>
            {
                Console.WriteLine("Received Update! {0}", e.Presence);
            };

            //Connect to the RPC
            discordRpcClient.Initialize();

            discordRpcClient.Authorize(DefaultScopes);

            while (string.IsNullOrWhiteSpace(discordRpcClient.AccessCode))
            {
                await Task.Delay(500, CancellableShellHelper.CancellationToken);
            }

            discordRpcClient.Authenticate(null);

            while (string.IsNullOrWhiteSpace(discordRpcClient.AccessToken))
            {
                await Task.Delay(500, CancellableShellHelper.CancellationToken);
            }

            discordRpcClient.RegisterUriScheme();

            discordRpcClient.GetVoiceSettings();

            var newPresence = new RichPresence()
            {
                State = "Accessing Named Pipes",
            };

            discordRpcClient.SetPresence(newPresence);

            discordRpcClient.Subscribe(EventType.VoiceSettingsUpdate);

            discordRpcClient.OnVoiceSettingsUpdate += ProcessDiscordVoiceStatus;

            while (!CancellableShellHelper.CancellationToken.WaitHandle.WaitOne(0))
            {
                await Task.Delay(500, CancellableShellHelper.CancellationToken);
            }

            discordRpcClient.ClearPresence();

            discordRpcClient.ShutdownOnly = true;
        }
Ejemplo n.º 11
0
        // Standard DiscordRpc presence method
        public static void SendFSOPresence(string activeSim, string lotName, int lotID, int players, int maxSize, int catID, bool isPrivate = false)
        {
            if (!Active)
            {
                return;
            }
            var presence = new RichPresence();

            if (!isPrivate)
            {
                if (lotName?.StartsWith("{job:") == true)
                {
                    var jobStr = "";
                    var split  = lotName.Split(':');
                    if (split.Length > 2)
                    {
                        switch (split[1])
                        {
                        case "0":     // Robot Factory
                            jobStr = GameFacade.Strings.GetString("f114", "2");
                            break;

                        case "1":     // Restaurant
                            jobStr = GameFacade.Strings.GetString("f114", "3");
                            break;

                        case "2":     // Nightclub
                            jobStr = GameFacade.Strings.GetString("f114", "4");
                            break;

                        default:     // Other
                            jobStr = GameFacade.Strings.GetString("f114", "1");
                            break;
                        }
                        jobStr += " | Level " + split[2].Trim('}');
                    }
                    else
                    {
                        jobStr = GameFacade.Strings.GetString("f114", "1");
                    }
                    if (activeSim != null)
                    {
                        presence.details = "Playing as " + activeSim;
                    }
                    presence.state = jobStr;
                }
                else
                {
                    if (activeSim == null)
                    {
                        presence.state   = lotName ?? "Idle in City";
                        presence.details = "";
                    }
                    else
                    {
                        presence.details = "Playing as " + activeSim;
                        presence.state   = lotName ?? "Idle in City";
                    }
                }
            }
            else
            {
                presence.state   = "Online";
                presence.details = "Privacy Enabled";
            }


            presence.largeImageKey  = "sunrise_crater";
            presence.largeImageText = "Sunrise Crater";

            if (lotName != null && !isPrivate)
            {
                presence.joinSecret = lotID + "#" + lotName;
                //presence.matchSecret = lotID + "#" + lotName+".";
                presence.spectateSecret = lotID + "#" + lotName + "..";
                presence.partyMax       = maxSize;
                presence.partySize      = players;
                presence.partyId        = lotID.ToString();

                presence.largeImageKey  = "cat_" + catID;
                presence.largeImageText = CapFirstWord(((LotCategory)catID).ToString());
            }

            UpdatePresence(ref presence);
        }
Ejemplo n.º 12
0
#pragma warning restore VSTHRD100 // Avoid async void methods

        /// <summary>
        /// Updates the presence with the document
        /// </summary>
        /// <param name="document"></param>
        /// <param name="overrideTimestampReset"></param>
        /// <returns></returns>
        internal async Task UpdatePresenceAsync(Document document, bool overrideTimestampReset = false)
        {
            try
            {
                await JoinableTaskFactory.SwitchToMainThreadAsync();

                if (Settings.enabled)
                {
                    Presence = new RichPresence();
                    if (Settings.secretMode)
                    {
                        Assets           = null;
                        Presence.Details = "I'm working on something you're";
                        Presence.State   = "not allowed to know about, sorry.";
                    }
                    else
                    {
                        string[] language = new string[] { };
                        if (document != null)
                        {
                            string filename = Path.GetFileName(document.FullName).ToLower();
                            string ext      = Path.GetExtension(filename);
                            List <KeyValuePair <string[], string[]> > list = Languages.Where(lang => Array.IndexOf(lang.Key, filename) > -1 || Array.IndexOf(lang.Key, ext) > -1).ToList();
                            language = list.Count > 0 ? list[0].Value : new string[] { };
                        }

                        bool supported = language.Length > 0;
                        Assets = new Assets()
                        {
                            LargeImageKey  = Settings.largeLanguage ? supported ? language[0] : "text" : $"vs{ideVersion}",
                            LargeImageText = Settings.largeLanguage ? supported ? language[1] : "Unrecognized extension" : ideVersion,
                            SmallImageKey  = Settings.largeLanguage ? $"vs{ideVersion}" : supported ? language[0] : "text",
                            SmallImageText = Settings.largeLanguage ? ideVersion : supported ? language[1] : "Unrecognized extension"
                        };

                        if (Settings.showSolutionName)
                        {
                            bool idling = ide.Solution == null || ide.Solution.FullName == string.Empty || ide.Solution.FullName == null;
                            if (idling)
                            {
                                Assets = new Assets()
                                {
                                    LargeImageKey  = $"vs{ideVersion}",
                                    LargeImageText = ideVersion
                                }
                            }
                            ;
                            Presence.Details = idling ? "Idling" : Path.GetFileNameWithoutExtension(ide.Solution.FileName);
                        }

                        if (Settings.showFileName && document != null)
                        {
                            FileInfo fileInfo = new FileInfo(document.FullName);
                            if (fileInfo.IsReadOnly)
                            {
                                Presence.State = $"Reading {fileInfo.Name}";
                            }
                            else
                            {
                                Presence.State = $"Editing {fileInfo.Name}";
                            }
                        }

                        if (Settings.showTimestamp && document != null)
                        {
                            if (!InitializedTimestamp)
                            {
                                Presence.Timestamps = new Timestamps()
                                {
                                    Start = DateTime.UtcNow
                                };
                                InitialTimestamps    = Presence.Timestamps;
                                InitializedTimestamp = true;
                            }

                            if (Settings.resetTimestamp && !overrideTimestampReset)
                            {
                                Presence.Timestamps = new Timestamps()
                                {
                                    Start = DateTime.UtcNow
                                }
                            }
                            ;
                            else if (Settings.resetTimestamp && overrideTimestampReset)
                            {
                                Presence.Timestamps = CurrentTimestamps;
                            }
                            else if (!Settings.resetTimestamp && !overrideTimestampReset)
                            {
                                Presence.Timestamps = InitialTimestamps;
                            }
                            CurrentTimestamps = Presence.Timestamps;
                        }
                    }

                    if (!discordClient.IsInitialized)
                    {
                        discordClient.Initialize();
                    }

                    Presence.Assets = Assets;
                    discordClient.SetPresence(Presence);
                }
                else if (!Settings.enabled && discordClient.IsInitialized)
                {
                    discordClient.Deinitialize();
                }
            }
            catch (Exception e)
            {
                ActivityLog.LogError(e.Source, e.Message);
            }
        }
Ejemplo n.º 13
0
        private void Tab_ChangeOrCreateEvent(object sender, TabChangeEventArgs e)
        {
            try
            {
                if (string.Equals(this.mPreviousAppPackage, e.PackageName, StringComparison.InvariantCulture) || !this.IsDiscordClientReady())
                {
                    return;
                }
                Logger.Info("Discord tab changed event. PkgName: {0}, AppName: {1}", (object)e.PackageName, (object)e.AppName);
                RichPresence presence = new RichPresence();
                switch (e.TabType)
                {
                case TabType.AppTab:
                    if (this.mSystemApps.Any <AppSuggestionPromotion>((Func <AppSuggestionPromotion, bool>)(_ => object.Equals((object)(_.AppPackage == e.PackageName), (object)StringComparison.InvariantCulture))))
                    {
                        presence.State   = "In Lobby";
                        presence.Details = "About to start a game";
                        presence.Assets  = new DiscordRPC.Assets()
                        {
                            LargeImageKey  = "bstk-logo",
                            LargeImageText = "BlueStacks",
                            SmallImageKey  = "",
                            SmallImageText = ""
                        };
                        break;
                    }
                    if (e.PackageName.Contains("android.vending"))
                    {
                        presence.State   = "Searching";
                        presence.Details = "Google Play Store";
                        presence.Assets  = new DiscordRPC.Assets()
                        {
                            LargeImageKey  = "bstk-logo",
                            LargeImageText = "BlueStacks",
                            SmallImageKey  = "com_android_vending",
                            SmallImageText = "Google Play"
                        };
                        break;
                    }
                    if (this.mAppStartTimestamp.ContainsKey(e.PackageName))
                    {
                        presence.Timestamps = this.mAppStartTimestamp[e.PackageName];
                    }
                    else
                    {
                        presence.Timestamps = Timestamps.Now;
                        this.mAppStartTimestamp.Add(e.PackageName, Timestamps.Now);
                    }
                    presence.State   = "Playing";
                    presence.Details = e.AppName;
                    presence.Assets  = new DiscordRPC.Assets()
                    {
                        LargeImageKey  = this.GetMD5HashFromPackageName(e.PackageName),
                        LargeImageText = e.AppName,
                        SmallImageKey  = "bstk-logo",
                        SmallImageText = "BlueStacks"
                    };
                    break;

                case TabType.WebTab:
                case TabType.HomeTab:
                    if (e.PackageName.Contains("bluestacks") && e.PackageName.Contains("appcenter"))
                    {
                        presence.State   = "Searching";
                        presence.Details = "Google Play Store";
                        presence.Assets  = new DiscordRPC.Assets()
                        {
                            LargeImageKey  = "bstk-logo",
                            LargeImageText = "BlueStacks",
                            SmallImageKey  = "com_android_vending",
                            SmallImageText = "Google Play"
                        };
                        break;
                    }
                    presence.State   = "In Lobby";
                    presence.Details = "About to start a game";
                    presence.Assets  = new DiscordRPC.Assets()
                    {
                        LargeImageKey  = "bstk-logo",
                        LargeImageText = "BlueStacks",
                        SmallImageKey  = "",
                        SmallImageText = ""
                    };
                    break;
                }
                this.SetPresence(presence);
                this.mPreviousAppPackage = e.PackageName;
            }
            catch (Exception ex)
            {
                Logger.Error("Error while setting presence in discord with exception : {0}", (object)ex.ToString());
            }
        }
Ejemplo n.º 14
0
        private void timer1_Tick(object sender, EventArgs e)
        {
            if (m_Client != null)
            {
                m_Client.Invoke();

                var has = false;
                var rp  = new RichPresence();

                if (checkBox_Details.Checked &&
                    textBox_Details.Text.Length >= 2)
                {
                    rp.Details = textBox_Details.Text;
                    has        = true;
                }

                if (checkBox_State.Checked &&
                    textBox_State.Text.Length >= 2)
                {
                    rp.State = textBox_State.Text;
                    has      = true;
                }

                if (checkBox_LargeImageKey.Checked ||
                    checkBox_LargeImageText.Checked ||
                    checkBox_SmallImageKey.Checked ||
                    checkBox_SmallImageText.Checked)
                {
                    var a = new Assets();
                    if (checkBox_LargeImageKey.Checked)
                    {
                        a.LargeImageKey = textBox_LargeImageKey.Text;
                    }
                    if (checkBox_LargeImageText.Checked)
                    {
                        a.LargeImageText = textBox_LargeImageText.Text;
                    }
                    if (checkBox_SmallImageKey.Checked)
                    {
                        a.SmallImageKey = textBox_SmallImageKey.Text;
                    }
                    if (checkBox_SmallImageText.Checked)
                    {
                        a.SmallImageText = textBox_SmallImageText.Text;
                    }
                    rp.Assets = a;
                    has       = true;
                }

                // Details나 State가 설정되어야 값이 나옴
                // PC는 상관이 없는데 MOBILE에서 그럼
                if (checkBox_Start.Checked ||
                    checkBox_End.Checked)
                {
                    var timestamps = new Timestamps();
                    if (checkBox_Start.Checked)
                    {
                        timestamps.Start = dtp_Start.Value.ToUniversalTime();
                    }
                    // Start가 설정되어야 함.
                    // 안그럼 디코가 터짐
                    if (checkBox_Start.Checked &&
                        checkBox_End.Checked)
                    {
                        timestamps.End = dtp_End.Value.ToUniversalTime();
                    }
                    rp.Timestamps = timestamps;
                    has           = true;
                }

                if (checkBox_Party.Checked &&
                    nud_PartySize.Value < nud_PartyMax.Value)
                {
                    rp.WithParty(new Party
                    {
                        ID   = "pypy",
                        Size = (int)nud_PartySize.Value,
                        Max  = (int)nud_PartyMax.Value
                    });
                    has = true;
                }

                if (has)
                {
                    m_Client.SetPresence(rp);
                }
                else
                {
                    m_Client.SetPresence(null);
                }
            }
        }
Ejemplo n.º 15
0
        static void Main(string[] args)
        {
            Console.Title = "Ryujinx Console";

            IGalRenderer renderer = new OglRenderer();

            IAalOutput audioOut = InitializeAudioEngine();

            Switch device = new Switch(renderer, audioOut);

            Configuration.Load(Path.Combine(ApplicationDirectory, "Config.jsonc"));
            Configuration.Configure(device);

            Profile.Initialize();

            AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;
            AppDomain.CurrentDomain.ProcessExit        += CurrentDomain_ProcessExit;

            if (device.System.State.DiscordIntegrationEnabled)
            {
                DiscordClient   = new DiscordRpcClient("568815339807309834");
                DiscordPresence = new RichPresence
                {
                    Assets = new Assets
                    {
                        LargeImageKey  = "ryujinx",
                        LargeImageText = "Ryujinx is an emulator for the Nintendo Switch"
                    }
                };

                DiscordClient.Initialize();
                DiscordClient.SetPresence(DiscordPresence);
            }

            if (args.Length == 1)
            {
                if (Directory.Exists(args[0]))
                {
                    string[] romFsFiles = Directory.GetFiles(args[0], "*.istorage");

                    if (romFsFiles.Length == 0)
                    {
                        romFsFiles = Directory.GetFiles(args[0], "*.romfs");
                    }

                    if (romFsFiles.Length > 0)
                    {
                        Logger.PrintInfo(LogClass.Application, "Loading as cart with RomFS.");
                        device.LoadCart(args[0], romFsFiles[0]);
                    }
                    else
                    {
                        Logger.PrintInfo(LogClass.Application, "Loading as cart WITHOUT RomFS.");
                        device.LoadCart(args[0]);
                    }
                }
                else if (File.Exists(args[0]))
                {
                    switch (Path.GetExtension(args[0]).ToLowerInvariant())
                    {
                    case ".xci":
                        Logger.PrintInfo(LogClass.Application, "Loading as XCI.");
                        device.LoadXci(args[0]);
                        break;

                    case ".nca":
                        Logger.PrintInfo(LogClass.Application, "Loading as NCA.");
                        device.LoadNca(args[0]);
                        break;

                    case ".nsp":
                    case ".pfs0":
                        Logger.PrintInfo(LogClass.Application, "Loading as NSP.");
                        device.LoadNsp(args[0]);
                        break;

                    default:
                        Logger.PrintInfo(LogClass.Application, "Loading as homebrew.");
                        device.LoadProgram(args[0]);
                        break;
                    }
                }
                else
                {
                    Logger.PrintWarning(LogClass.Application, "Please specify a valid XCI/NCA/NSP/PFS0/NRO file");
                }
            }
            else
            {
                Logger.PrintWarning(LogClass.Application, "Please specify the folder with the NSOs/IStorage or a NSO/NRO.");
            }

            if (device.System.State.DiscordIntegrationEnabled)
            {
                if (File.ReadAllLines(Path.Combine(ApplicationDirectory, "RPsupported.dat")).Contains(device.System.TitleID))
                {
                    DiscordPresence.Assets.LargeImageKey = device.System.TitleID;
                }

                string state = device.System.TitleID;

                if (state == null)
                {
                    state = "Ryujinx";
                }
                else
                {
                    state = state.ToUpper();
                }

                string details = "Idling";

                if (device.System.TitleName != null)
                {
                    details = $"Playing {device.System.TitleName}";
                }

                DiscordPresence.Details = details;
                DiscordPresence.State   = state;
                DiscordPresence.Assets.LargeImageText = device.System.TitleName;
                DiscordPresence.Assets.SmallImageKey  = "ryujinx";
                DiscordPresence.Assets.SmallImageText = "Ryujinx is an emulator for the Nintendo Switch";
                DiscordPresence.Timestamps            = new Timestamps(DateTime.UtcNow);

                DiscordClient.SetPresence(DiscordPresence);
            }

            using (GlScreen screen = new GlScreen(device, renderer))
            {
                screen.MainLoop();

                Profile.FinishProfiling();

                device.Dispose();
            }

            audioOut.Dispose();

            Logger.Shutdown();

            DiscordClient.Dispose();
        }
Ejemplo n.º 16
0
 public static void UpdatePresence(RichPresence presence)
 {
     var presencestruct = presence.GetStruct();
     UpdatePresenceNative(ref presencestruct);
     presence.FreeMem();
 }
Ejemplo n.º 17
0
 public static void SetPresence(RichPresence presence)
 {
     client?.SetPresence(presence);
 }
Ejemplo n.º 18
0
        /// <summary>
        /// Extracts needed information from the JSON gamestate-data and sends a created RichPresence to Discord
        /// </summary>
        /// <param name="jsondata"></param>
        private void UpdateDiscordPresence(dynamic jsondata)
        {
            RichPresence presence = new RichPresence()
            {
                Assets = new Assets()
            };

            if (jsondata.player.activity == "playing")
            {
                if (jsondata.player.team == "T")
                {
                    presence.State = $"(T) {jsondata.map.team_t.name} [{jsondata.map.team_t.score} - {jsondata.map.team_ct.score}] (CT)";
                    presence.Assets.SmallImageKey = "tcoin";
                }
                else
                {
                    presence.State = $"(CT) {jsondata.map.team_ct.name} [{jsondata.map.team_ct.score} - {jsondata.map.team_t.score}] (T)";
                    presence.Assets.SmallImageKey = "ctcoin";
                }

                string gamemode = jsondata.map.mode;
                switch (jsondata.map.mode.ToString())
                {
                case "gungameprogressive":
                    gamemode = "Arms Race";
                    break;

                case "gungametrbomb":
                    gamemode = "Demolition";
                    break;

                case "scrimcomp2v2":
                    gamemode = "Wingman";
                    break;

                default:
                    gamemode = char.ToUpper(jsondata.map.mode.ToString().ToCharArray()[0]) + jsondata.map.mode.ToString().Substring(1);
                    break;
                }

                string mapname = jsondata.map.name;
                if (mapname.StartsWith("workshop"))
                {
                    mapname = "Workshop Map";
                }

                presence.Details = $"{jsondata.map.mode} on {mapname}";
            }
            else if (jsondata.player.activity == "menu")
            {
                presence.Details = "In Menu";
                presence.State   = "Lobby";
            }
            else if (jsondata.player.activity == "textinput")
            {
                return;
            }
            else
            {
                presence.Details = jsondata.player.activity;
                presence.State   = "Unknown Activity";
            }
            presence.Assets.LargeImageKey = "csgologo";

            discordClient.SetPresence(presence);
        }
Ejemplo n.º 19
0
 /// <summary>
 /// Resets the presence to the generated base presence and invokes the DiscordRpc client
 /// </summary>
 public void ResetPresence()
 {
     _presence = GetBaseRichPresence();
 }
Ejemplo n.º 20
0
 public void ClearPresence()
 {
     _activePresence = null;
     _client?.SetPresence(_defaultPresence);
 }
Ejemplo n.º 21
0
        void SetStatus(DiscordState state, string details = null, string secret = null, int?players = null, int?slots = null)
        {
            if (currentState == state)
            {
                return;
            }

            if (instance == null)
            {
                return;
            }

            string   stateText;
            DateTime?timestamp = null;
            Party    party     = null;
            Secrets  secrets   = null;

            switch (state)
            {
            case DiscordState.InMenu:
                stateText = "In menu";
                break;

            case DiscordState.InMapEditor:
                stateText = "In Map Editor";
                break;

            case DiscordState.InSkirmishLobby:
                stateText = "In Skirmish Lobby";
                break;

            case DiscordState.InMultiplayerLobby:
                stateText = "In Multiplayer Lobby";
                timestamp = DateTime.UtcNow;
                party     = new Party
                {
                    ID   = Secrets.CreateFriendlySecret(new Random()),
                    Size = players.Value,
                    Max  = slots.Value
                };
                secrets = new Secrets
                {
                    JoinSecret = secret
                };
                break;

            case DiscordState.PlayingMultiplayer:
                stateText = "Playing Multiplayer";
                timestamp = DateTime.UtcNow;
                break;

            case DiscordState.PlayingCampaign:
                stateText = "Playing Campaign";
                timestamp = DateTime.UtcNow;
                break;

            case DiscordState.WatchingReplay:
                stateText = "Watching Replay";
                timestamp = DateTime.UtcNow;
                break;

            case DiscordState.PlayingSkirmish:
                stateText = "Playing Skirmish";
                timestamp = DateTime.UtcNow;
                break;

            default:
                throw new ArgumentOutOfRangeException("state", state, null);
            }

            var richPresence = new RichPresence
            {
                Details = details,
                State   = stateText,
                Assets  = new Assets
                {
                    LargeImageKey  = "large",
                    LargeImageText = Game.ModData.Manifest.Metadata.Title,
                },
                Timestamps = timestamp.HasValue ? new Timestamps(timestamp.Value) : null,
                Party      = party,
                Secrets    = secrets
            };

            client.SetPresence(richPresence);
            currentState = state;
        }
Ejemplo n.º 22
0
        public static void ProcessDiscordPresence(Frame frame)
        {
            if (SparkSettings.instance.discordRichPresence)
            {
                if (discordClient == null || discordClient.IsDisposed)
                {
                    //InitializeDiscord();
                    LogRow(LogType.Error, "Discord RP client disposed while in normal thread.");
                    return;
                }

                RichPresence rp = new RichPresence();

                if (frame == null)
                {
                    try
                    {
                        discordClient.SetPresence(null);
                        return;
                    }
                    catch (Exception)
                    {
                        LogRow(LogType.Error, "Discord RP client error when setting null presence.");
                        return;
                    }
                }

                StringBuilder details = new StringBuilder();
                switch (frame.map_name)
                {
                case "mpl_arena_a":
                {
                    if (frame.teams[2].players.Find(p => p.name == frame.client_name) != null)
                    {
                        details.Append("Spectating ");
                    }
                    else
                    {
                        details.Append("Playing ");
                    }

                    details.Append("Arena ");

                    if (frame.private_match)
                    {
                        details.Append("pvt.");

                        rp.WithSecrets(new Secrets
                            {
                                JoinSecret     = "spark://c/" + SecretKeys.Hash(frame.sessionid),
                                SpectateSecret = "spark://s/" + SecretKeys.Hash(frame.sessionid),
                            });
                    }
                    else
                    {
                        details.Append("pub.");
                    }

                    rp.State      = "Score: " + frame.orange_points + " - " + frame.blue_points;
                    rp.Timestamps = new Timestamps
                    {
                        End = frame.game_status == "post_match" ? DateTime.UtcNow : DateTime.UtcNow.AddSeconds(frame.game_clock)
                    };
                    rp.WithParty(new Party
                        {
                            ID   = frame.sessionid,
                            Size = frame.GetAllPlayers().Count,
                            Max  = frame.private_match ? 15 : 8
                        });
                    break;
                }

                case "mpl_lobby_b2":
                {
                    details.Append("in EchoVR Lobby");

                    // how long have we been in the lobby?
                    if (!inLobby)
                    {
                        inLobby        = true;
                        lobbyEntryTime = DateTime.UtcNow;
                    }
                    rp.Timestamps = new Timestamps
                    {
                        Start = lobbyEntryTime
                    };
                    break;
                }

                // if (frame.map_name == "whatever combat is")
                default:
                    details.Append("Playing Combat");
                    break;
                }

                rp.Details = details.ToString();
                rp.Assets  = new Assets
                {
                    LargeImageKey  = "echo_arena_store_icon",
                    LargeImageText = SparkSettings.instance.discordRichPresenceServerLocation &&
                                     !string.IsNullOrEmpty(Program.CurrentRound?.serverLocation)
                                                ? Program.CurrentRound.serverLocation
                                                : "Rich presence from Spark"
                };


                discordClient.SetPresence(rp);
            }
            else
            {
                if (discordClient != null && !discordClient.IsDisposed)
                {
                    discordClient.Dispose();
                }
            }
        }
Ejemplo n.º 23
0
 public static void SaveCurrentPresence() => _presence = _client.CurrentPresence;
 public void Restore()
 {
     _presence = default;
     _client.SetPresence(_presence);
 }
Ejemplo n.º 25
0
 private static extern void UpdatePresence(ref RichPresence presence);
Ejemplo n.º 26
0
        private void Form1_Load(object sender, EventArgs e)
        {
            try
            {
                Activate();
                CenterToScreen();

                if (Properties.Settings.Default.LastOpenFiles == null)
                {
                    Properties.Settings.Default.LastOpenFiles = new System.Collections.Specialized.StringCollection();
                }
                if (Properties.Settings.Default.LastOpenProjects == null)
                {
                    Properties.Settings.Default.LastOpenProjects = new System.Collections.Specialized.StringCollection();
                }
                Properties.Settings.Default.Save();

                Menu.Renderer = new MenuRenderer();

                standardMsg += ReCT.info.Version;
                standardMsg += "\r\npackage sys;";

                errorBox = new Error();
                SetCodeBoxColors();
                fileChanged = false;
                //updateWindowTitle();

                icons[0] = Play.BackgroundImage;
                icons[1] = Stop.BackgroundImage;
                icons[2] = Build.BackgroundImage;

                icons[3] = Image.FromFile("res/playIconHL.png");
                icons[4] = Image.FromFile("res/literally_just_a_fukin_SquareIconHL.png");
                icons[5] = Image.FromFile("res/gearIconHL.png");

                icons[6] = Image.FromFile("res/playIconLoad.png");

                autocompleteImageList.Images.Add(Image.FromFile("res/typeIcon.png"));
                autocompleteImageList.Images.Add(Image.FromFile("res/statementIcon.png"));
                autocompleteImageList.Images.Add(Image.FromFile("res/functionIcon.png"));
                autocompleteImageList.Images.Add(Image.FromFile("res/typefunctionIcon.png"));
                autocompleteImageList.Images.Add(Image.FromFile("res/flagIcon.png"));
                autocompleteImageList.Images.Add(Image.FromFile("res/variableIcon.png"));
                autocompleteImageList.Images.Add(Image.FromFile("res/classIcon.png"));

                setAC();

                TabPrefab = (System.Windows.Forms.Button)CtrlClone.ControlFactory.CloneCtrl(Tab);
                Tab.Dispose();
                Controls.Remove(Tab);

                var tab = makeNewTab();
                tabs.Add(tab);

                settings = new Settings(this);
                settings.Hide();

                settings.autosave.SelectedIndex = Properties.Settings.Default.Autosave;
                settings.checkBox2.Checked      = Properties.Settings.Default.MaximizeRect;

                dc = new Discord();
                dc.Initialize();

                presence = new RichPresence()
                {
                    Details    = "Working on Untitled...",
                    Timestamps = new Timestamps()
                    {
                        Start = DateTime.UtcNow
                    },
                    Assets = new Assets()
                    {
                        LargeImageKey  = "rect",
                        LargeImageText = "ReCT IDE",
                    }
                };

                presence.Details = "Working on " + tabs[currentTab].name + "...";
                dc.client.SetPresence(presence);

                OrderTabs();

                if (fileToOpen != "")
                {
                    OpenFile(fileToOpen);
                    fileToOpen = "";
                }
            }
            catch (Exception ex)
            {
                File.WriteAllText(Path.GetDirectoryName(Application.ExecutablePath) + "/logs/crash.log", ex.Message);
                new Crash().Show();
            }
        }
Ejemplo n.º 27
0
        public static RichPresence CreateDiscordPresence(Title title, Timestamps time, string largeImageKey = "", string largeImageText = "", string smallImageKey = "", string state = "", bool useProvidedTime = true)
        {
            RichPresence presence = new RichPresence()
            {
                State = state
            };

            Assets assets = new Assets
            {
                SmallImageKey = smallImageKey
            };

            assets.LargeImageText = title.Name;
            if (title.ProgramId != 0xffaadd23)
            {
                assets.SmallImageText = "SwitchPresence-Rewritten";

                if (!SwitchOverrides.ContainsKey($"0{title.ProgramId:x}"))
                {
                    assets.LargeImageKey = $"0{title.ProgramId:x}";
                    presence.Details     = $"Playing {title.Name}";
                }
                else
                {
                    OverrideInfo pkgInfo = SwitchOverrides[$"0{title.ProgramId:x}"];
                    assets.LargeImageKey = pkgInfo.CustomKey ?? $"0{title.ProgramId:x}";

                    presence.Details  = pkgInfo.CustomPrefix ?? "Playing";
                    presence.Details += $" {title.Name}";
                }
            }
            else
            {
                assets.SmallImageText = "QuestPresence";

                if (!QuestOverrides.ContainsKey(title.Name))
                {
                    assets.LargeImageKey = title.Name.ToLower().Replace(" ", "");
                    presence.Details     = $"Playing {title.Name}";
                }
                else
                {
                    OverrideInfo pkgInfo = QuestOverrides[title.Name];

                    assets.LargeImageKey = pkgInfo.CustomKey ?? title.Name.ToLower().Replace(" ", "");

                    presence.Details  = pkgInfo.CustomPrefix ?? "Playing";
                    presence.Details += $" {title.Name}";
                }
            }
            if (!string.IsNullOrEmpty(largeImageKey))
            {
                assets.LargeImageKey = largeImageKey;
            }

            if (!string.IsNullOrEmpty(largeImageText))
            {
                assets.LargeImageText = largeImageText;
            }

            presence.Assets = assets;
            if (useProvidedTime)
            {
                presence.Timestamps = time;
            }

            return(presence);
        }
Ejemplo n.º 28
0
 public static extern void Discord_UpdatePresence(ref RichPresence presence);
Ejemplo n.º 29
0
 public Discord()
 {
     m_Lock     = new ReaderWriterLockSlim();
     m_Presence = new RichPresence();
     m_Timer    = new Timer(TimerCallback, null, -1, -1);
 }
Ejemplo n.º 30
0
        partial void UpdateRichPresence(LevelInitialization?levelInit, string targetName)
        {
            if (discord == null)
            {
                return;
            }

            RichPresence richPresence;

            if (levelInit == null)
            {
                richPresence = new RichPresence {
                    State      = "Resting In Main Menu",
                    LargeImage = "main-transparent"
                };
            }
            else
            {
                string details, state, smallImage;
                if (levelInit.Value.PlayerCarryOvers.Length == 0 && levelInit.Value.Difficulty == GameDifficulty.Multiplayer)
                {
                    details    = "Playing Online Multiplayer";
                    smallImage = "playing-online";
                }
                else if (levelInit.Value.PlayerCarryOvers.Length == 1)
                {
                    if (levelInit.Value.EpisodeName != "unknown")
                    {
                        details = "Playing Story as ";
                    }
                    else
                    {
                        details = "Playing Custom Game as ";
                    }

                    switch (levelInit.Value.PlayerCarryOvers[0].Type)
                    {
                    default:
                    case PlayerType.Jazz: details += "Jazz"; smallImage = "playing-jazz"; break;

                    case PlayerType.Spaz: details += "Spaz"; smallImage = "playing-spaz"; break;

                    case PlayerType.Lori: details += "Lori"; smallImage = "playing-lori"; break;
                    }
                }
                else
                {
                    details    = "Playing Local Multiplayer";
                    smallImage = null;
                }

                if (!string.IsNullOrEmpty(targetName))
                {
                    state = "— on " + targetName;
                }
                else
                {
                    state = null;
                }

                richPresence = new RichPresence {
                    State             = state,
                    Details           = details,
                    LargeImage        = "main-transparent",
                    SmallImage        = smallImage,
                    SmallImageTooltip = state
                };
            }

            discord.SetRichPresence(richPresence);
        }