added integrated CSGO DiscordRPC

This commit is contained in:
WeeXnes 2022-06-28 18:07:29 +02:00
parent b3def6bc6c
commit 5d14cdd185
8 changed files with 232 additions and 6 deletions

View file

@ -126,8 +126,10 @@ namespace Release_Tool
files.Add(new file(@"WeeXnes_UAC\bin\Release\WeeXnes_UAC.exe", "WeeXnes_UAC.exe")); files.Add(new file(@"WeeXnes_UAC\bin\Release\WeeXnes_UAC.exe", "WeeXnes_UAC.exe"));
files.Add(new file(@"WeeXnes\bin\Release\DiscordRPC.dll", "DiscordRPC.dll")); files.Add(new file(@"WeeXnes\bin\Release\DiscordRPC.dll", "DiscordRPC.dll"));
files.Add(new file(@"WeeXnes\bin\Release\Newtonsoft.Json.dll", "Newtonsoft.Json.dll")); files.Add(new file(@"WeeXnes\bin\Release\Newtonsoft.Json.dll", "Newtonsoft.Json.dll"));
files.Add(new file(@"WeeXnes\bin\Release\CSGSI.dll", "CSGSI.dll"));
files.Add(new file(@"Autostart\bin\Release\Autostart.exe", "Autostart.exe")); files.Add(new file(@"Autostart\bin\Release\Autostart.exe", "Autostart.exe"));
files.Add(new file(@"Update\bin\Release\Update.exe", "Update.exe")); files.Add(new file(@"Update\bin\Release\Update.exe", "Update.exe"));
} }
} }
} }

View file

@ -6,6 +6,7 @@ using System.Linq;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using System.Windows.Forms; using System.Windows.Forms;
using CSGSI;
using Nocksoft.IO.ConfigFiles; using Nocksoft.IO.ConfigFiles;
namespace WeeXnes.Core namespace WeeXnes.Core
@ -15,11 +16,11 @@ namespace WeeXnes.Core
public static string encryptionKey = "8zf5#RdyQ]$4x4_"; public static string encryptionKey = "8zf5#RdyQ]$4x4_";
public static string AppDataPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "WeeXnes"); public static string AppDataPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "WeeXnes");
public static string SettingsFileName = "settings.ini"; public static string SettingsFileName = "settings.ini";
public static string version = "3.3"; public static string version = "3.4";
public static bool info_isRpcRunning = false; public static bool info_isRpcRunning = false;
public static bool info_RpcAutoStart; public static bool info_RpcAutoStart;
public static string apiUrl = "http://www.weexnes.com:5169/"; public static string apiUrl = "http://www.weexnes.com:5169/";
public static UpdateVar<bool> settings_alwaysOnTop = new UpdateVar<bool>(); public static UpdateVar<bool> settings_alwaysOnTop = new UpdateVar<bool>();
public static UpdateVar<bool> settings_osxStyleControlls = new UpdateVar<bool>(); public static UpdateVar<bool> settings_osxStyleControlls = new UpdateVar<bool>();
@ -37,9 +38,10 @@ namespace WeeXnes.Core
public static UpdateVar<bool> settings_RpcShowElapsedTime = new UpdateVar<bool>(); public static UpdateVar<bool> settings_RpcShowElapsedTime = new UpdateVar<bool>();
public static UpdateVar<string> settings_RpcDefaultClientID = new UpdateVar<string>(); public static UpdateVar<string> settings_RpcDefaultClientID = new UpdateVar<string>();
public static UpdateVar<bool> settings_RpcAutoStart = new UpdateVar<bool>(); public static UpdateVar<bool> settings_RpcAutoStart = new UpdateVar<bool>();
public static UpdateVar<bool> settings_builtInCSGORpc = new UpdateVar<bool>();
public static GameStateListener gameStateListener = new GameStateListener(4169);
public static UpdateVar<string> searchbox_content = new UpdateVar<string>(); public static UpdateVar<string> searchbox_content = new UpdateVar<string>();
} }
@ -95,6 +97,8 @@ namespace WeeXnes.Core
Globals.settings_RpcDefaultClientID.Value = "605116707035676701"; Globals.settings_RpcDefaultClientID.Value = "605116707035676701";
} }
Globals.settings_builtInCSGORpc.Value = Convert.ToBoolean(SettingsFile.GetValue("rpc", "csgoPresence"));
} }
@ -182,6 +186,10 @@ namespace WeeXnes.Core
{ {
SettingsFile.SetValue("rpc","RpcAutoStart", Convert.ToString(Globals.settings_RpcAutoStart.Value)); SettingsFile.SetValue("rpc","RpcAutoStart", Convert.ToString(Globals.settings_RpcAutoStart.Value));
}; };
Globals.settings_builtInCSGORpc.ValueChanged += () =>
{
SettingsFile.SetValue("rpc","csgoPresence", Convert.ToString(Globals.settings_RpcAutoStart.Value));
};
} }
} }

View file

@ -20,6 +20,7 @@ using System.Windows.Navigation;
using System.Windows.Shapes; using System.Windows.Shapes;
using WeeXnes.Core; using WeeXnes.Core;
using WeeXnes.RPC; using WeeXnes.RPC;
using WeeXnes.RPC.CSGO;
namespace WeeXnes.MVVM.View namespace WeeXnes.MVVM.View
{ {
@ -101,6 +102,7 @@ namespace WeeXnes.MVVM.View
private void BackgroundWorker_DoWork(object sender, DoWorkEventArgs e) private void BackgroundWorker_DoWork(object sender, DoWorkEventArgs e)
{ {
CSGORPC csrpc = new CSGORPC("777202324145438812");
Globals.info_isRpcRunning = true; Globals.info_isRpcRunning = true;
writeLog(new customEvent("Thread Started", EventType.ProcessStartedEvent)); writeLog(new customEvent("Thread Started", EventType.ProcessStartedEvent));
bool runWorker = true; bool runWorker = true;
@ -116,12 +118,18 @@ namespace WeeXnes.MVVM.View
{ {
game.stop(); game.stop();
} }
csrpc.stop();
} }
Process[] processes = Process.GetProcesses(); Process[] processes = Process.GetProcesses();
foreach (Game game in Games) foreach (Game game in Games)
{ {
game.checkState(processes); game.checkState(processes);
} }
if (Globals.settings_builtInCSGORpc.Value)
{
csrpc.checkState(processes);
}
Thread.Sleep(delay); Thread.Sleep(delay);
} }
} }
@ -315,7 +323,6 @@ namespace WeeXnes.MVVM.View
private void UserControl_Unloaded(object sender, RoutedEventArgs e) private void UserControl_Unloaded(object sender, RoutedEventArgs e)
{ {
stopBackgroundWorker(); stopBackgroundWorker();
} }
private void ListViewVersions_OnLoaded(object sender, RoutedEventArgs e) private void ListViewVersions_OnLoaded(object sender, RoutedEventArgs e)

View file

@ -120,6 +120,23 @@
VerticalAlignment="Center" VerticalAlignment="Center"
FontSize="15" FontSize="15"
Foreground="White"/> Foreground="White"/>
</CheckBox>
<CheckBox VerticalAlignment="Top"
VerticalContentAlignment="Center"
HorizontalContentAlignment="Center"
Name="EnableBuiltInCSGO"
Checked="EnableBuiltInCSGO_OnChecked"
Unchecked="EnableBuiltInCSGO_OnUnchecked"
Margin="10,10,0,0">
<TextBlock
Text="Enable Built in CSGO DiscordRPC"
VerticalAlignment="Center"
FontSize="15"
Foreground="White"/>
</CheckBox> </CheckBox>

View file

@ -91,6 +91,11 @@ namespace WeeXnes.MVVM.View
CensorKeysSwitch.IsChecked = true; CensorKeysSwitch.IsChecked = true;
} }
if (Globals.settings_builtInCSGORpc.Value)
{
EnableBuiltInCSGO.IsChecked = true;
}
tb_DefaultClientID.Text = Globals.settings_RpcDefaultClientID.Value; tb_DefaultClientID.Text = Globals.settings_RpcDefaultClientID.Value;
} }
private void SetUiUpdateListeners() private void SetUiUpdateListeners()
@ -340,5 +345,15 @@ namespace WeeXnes.MVVM.View
{ {
Globals.settings_osxStyleControlls.Value = false; Globals.settings_osxStyleControlls.Value = false;
} }
private void EnableBuiltInCSGO_OnChecked(object sender, RoutedEventArgs e)
{
Globals.settings_builtInCSGORpc.Value = true;
}
private void EnableBuiltInCSGO_OnUnchecked(object sender, RoutedEventArgs e)
{
Globals.settings_builtInCSGORpc.Value = false;
}
} }
} }

172
WeeXnes/RPC/CSGO.cs Normal file
View file

@ -0,0 +1,172 @@
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using CSGSI;
using CSGSI.Nodes;
using WeeXnes.Core;
using WeeXnes.MVVM.View;
using DiscordRPC;
using DiscordRPC.Message;
using EventType = WeeXnes.Core.EventType;
namespace WeeXnes.RPC.CSGO
{
class EventCache
{
public static string cache1 = "";
}
public class CSGORPC
{
public DiscordRpcClient client { get; set; }
public string ProcessName { get; set; }
public bool isRunning { get; set; }
public CSGORPC(string ClientID)
{
this.ProcessName = "csgo";
this.client = new DiscordRpcClient(ClientID);
Globals.gameStateListener.NewGameState += GameStateListenerOnNewGameState;
}
private void GameStateListenerOnNewGameState(GameState gs)
{
if (gs.Player.Activity == PlayerActivity.Menu)
{
this.client.UpdateLargeAsset("menu");
this.client.UpdateDetails("In Menu");
this.client.UpdateState("");
}
else if (gs.Player.Activity == PlayerActivity.Playing)
{
this.client.UpdateLargeAsset(gs.Map.Name);
this.client.UpdateDetails("Playing on " + gs.Map.Name);
if (gs.Player.Team == PlayerTeam.T)
{
this.client.UpdateSmallAsset("t_logo");
}else if(gs.Player.Team == PlayerTeam.CT)
{
this.client.UpdateSmallAsset("ct_logo");
}
else
{
this.client.UpdateSmallAsset("");
}
}
}
public void start()
{
Globals.gameStateListener.Start();
if (!client.IsInitialized)
{
client.Initialize();
}
client.OnReady += ClientOnOnReady;
client.OnPresenceUpdate += ClientOnOnPresenceUpdate;
client.SetPresence(new RichPresence()
{
Details = "Playing CSGO",
State = "Launching Game...",
Assets = new Assets()
{
LargeImageKey = "menu",
LargeImageText = "",
SmallImageKey = "",
SmallImageText = ""
}
});
if (Globals.settings_RpcShowElapsedTime.Value)
{
client.UpdateStartTime();
}
}
private void ClientOnOnPresenceUpdate(object sender, PresenceMessage args)
{
DiscordRpcView.logContent = new customEvent("[" + this.ProcessName + ".exe] ➜ Received Update on " + args.Name, EventType.RPCUpdateEvent);
DiscordRpcView.triggerLogupdate.Value = "nlejgmolegjog";
}
private void ClientOnOnReady(object sender, ReadyMessage args)
{
DiscordRpcView.logContent = new customEvent("[" + this.ProcessName + ".exe] ➜ Received Ready from user " + args.User.Username, EventType.RPCReadyEvent);
DiscordRpcView.triggerLogupdate.Value = "nlejgmolegjog";
}
public void stop()
{
Globals.gameStateListener.Stop();
if (this.client.IsInitialized)
{
client.ClearPresence();
client.OnReady -= ClientOnOnReady;
client.OnPresenceUpdate -= ClientOnOnPresenceUpdate;
}
}
public void checkState(Process[] processes)
{
if(!String.IsNullOrEmpty(this.ProcessName))
{
bool foundProcess = false;
foreach (Process process in processes)
{
if (process.ProcessName == this.ProcessName)
{
foundProcess = true;
}
}
if (!this.isRunning)
{
if (foundProcess)
{
//Do when Process is launched
//message.running(this.ProcessName);
start();
/*
Globals.logContent.Value = output;
Globals.logUpdateTrigger.Value = "mjfgoklemkgoeg";
*/
DiscordRpcView.logContent = new customEvent("↪ " + "CSGO" + " [" + this.ProcessName + ".exe] started", EventType.ProcessStartedEvent);
DiscordRpcView.triggerLogupdate.Value = "nlejgmolegjog";
this.isRunning = true;
}
}
if (this.isRunning)
{
if (!foundProcess)
{
//Do when Process is closed
//message.closed(this.ProcessName);
stop();
/*
Globals.logContent.Value = output;
Globals.logUpdateTrigger.Value = "mjfgoklemkgoeg";
*/
DiscordRpcView.logContent = new customEvent( "↩ " + "CSGO" + " [" + this.ProcessName + ".exe] closed", EventType.ProcessStoppedEvent);
DiscordRpcView.triggerLogupdate.Value = "nlejgmolegjog";
this.isRunning = false;
}
}
}
}
public override string ToString()
{
return "CSGO";
}
}
}

View file

@ -35,6 +35,9 @@
<WarningLevel>4</WarningLevel> <WarningLevel>4</WarningLevel>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<Reference Include="CSGSI, Version=1.3.1.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\CSGSI.1.3.1\lib\CSGSI.dll</HintPath>
</Reference>
<Reference Include="DiscordRPC, Version=1.0.175.0, Culture=neutral, processorArchitecture=MSIL"> <Reference Include="DiscordRPC, Version=1.0.175.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\DiscordRichPresence.1.0.175\lib\net35\DiscordRPC.dll</HintPath> <HintPath>..\packages\DiscordRichPresence.1.0.175\lib\net35\DiscordRPC.dll</HintPath>
</Reference> </Reference>
@ -64,6 +67,7 @@
<Compile Include="Misc\UpdateMessage.xaml.cs"> <Compile Include="Misc\UpdateMessage.xaml.cs">
<DependentUpon>UpdateMessage.xaml</DependentUpon> <DependentUpon>UpdateMessage.xaml</DependentUpon>
</Compile> </Compile>
<Compile Include="RPC\CSGO.cs" />
<Compile Include="RPC\Game.cs" /> <Compile Include="RPC\Game.cs" />
<Page Include="MainWindow.xaml"> <Page Include="MainWindow.xaml">
<Generator>MSBuild:Compile</Generator> <Generator>MSBuild:Compile</Generator>

View file

@ -1,5 +1,6 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<packages> <packages>
<package id="CSGSI" version="1.3.1" targetFramework="net48" />
<package id="DiscordRichPresence" version="1.0.175" targetFramework="net48" /> <package id="DiscordRichPresence" version="1.0.175" targetFramework="net48" />
<package id="Newtonsoft.Json" version="12.0.2" targetFramework="net48" /> <package id="Newtonsoft.Json" version="12.0.2" targetFramework="net48" />
</packages> </packages>