public static void UpdatePresence(ref RichPresence presence) { invoker.UpdatePresence(ref presence); }
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); }
public static extern void UpdatePresence(ref RichPresence presence);
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); }
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); }
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(); } }
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); } }
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); } }
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; }
// 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); }
#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); } }
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()); } }
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); } } }
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(); }
public static void UpdatePresence(RichPresence presence) { var presencestruct = presence.GetStruct(); UpdatePresenceNative(ref presencestruct); presence.FreeMem(); }
public static void SetPresence(RichPresence presence) { client?.SetPresence(presence); }
/// <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); }
/// <summary> /// Resets the presence to the generated base presence and invokes the DiscordRpc client /// </summary> public void ResetPresence() { _presence = GetBaseRichPresence(); }
public void ClearPresence() { _activePresence = null; _client?.SetPresence(_defaultPresence); }
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; }
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(); } } }
public static void SaveCurrentPresence() => _presence = _client.CurrentPresence;
public void Restore() { _presence = default; _client.SetPresence(_presence); }
private static extern void UpdatePresence(ref RichPresence presence);
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(); } }
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); }
public static extern void Discord_UpdatePresence(ref RichPresence presence);
public Discord() { m_Lock = new ReaderWriterLockSlim(); m_Presence = new RichPresence(); m_Timer = new Timer(TimerCallback, null, -1, -1); }
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); }