From a1500240ce6df281c9fca884a5a2f3538865eb9b Mon Sep 17 00:00:00 2001 From: Yoshman29 <81191621+YoshiCrafter29@users.noreply.github.com> Date: Sun, 22 Jan 2023 15:47:28 +0100 Subject: [PATCH] you can mess with discord rpc now --- assets/data/config.xml | 7 --- assets/data/config/discord.json | 4 ++ buildnumber.txt | 2 +- source/funkin/mods/ModsFolder.hx | 3 +- source/funkin/scripting/GlobalScript.hx | 7 +++ .../events/DiscordPresenceUpdateEvent.hx | 12 +++++ source/funkin/utils/DiscordUtil.hx | 47 +++++++++++++++---- 7 files changed, 64 insertions(+), 18 deletions(-) delete mode 100644 assets/data/config.xml create mode 100644 assets/data/config/discord.json create mode 100644 source/funkin/scripting/events/DiscordPresenceUpdateEvent.hx diff --git a/assets/data/config.xml b/assets/data/config.xml deleted file mode 100644 index ea264b4c..00000000 --- a/assets/data/config.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/assets/data/config/discord.json b/assets/data/config/discord.json new file mode 100644 index 00000000..9aa84b62 --- /dev/null +++ b/assets/data/config/discord.json @@ -0,0 +1,4 @@ +{ + "clientID": "1027994136193810442", + "logoKey": "logo" +} \ No newline at end of file diff --git a/buildnumber.txt b/buildnumber.txt index 52dddf25..efed77e1 100644 --- a/buildnumber.txt +++ b/buildnumber.txt @@ -1 +1 @@ -2149 \ No newline at end of file +2152 \ No newline at end of file diff --git a/source/funkin/mods/ModsFolder.hx b/source/funkin/mods/ModsFolder.hx index 49e7c822..03c18f8e 100644 --- a/source/funkin/mods/ModsFolder.hx +++ b/source/funkin/mods/ModsFolder.hx @@ -85,8 +85,9 @@ class ModsFolder { FlxG.sound.music.fadeOut(0.25, 0, function(t) { FlxG.sound.music.stop(); }); + DiscordUtil.reloadJsonData(); TitleState.initialized = false; - FlxG.switchState(new TitleState()); + FlxG.switchState(new TitleState()); } public static function unloadMod(mod:String) { diff --git a/source/funkin/scripting/GlobalScript.hx b/source/funkin/scripting/GlobalScript.hx index 957b24eb..4ec24c08 100644 --- a/source/funkin/scripting/GlobalScript.hx +++ b/source/funkin/scripting/GlobalScript.hx @@ -1,5 +1,6 @@ package funkin.scripting; +import funkin.scripting.events.CancellableEvent; import funkin.system.Conductor; import flixel.FlxG; import flixel.FlxState; @@ -80,6 +81,12 @@ class GlobalScript { onModSwitch(#if MOD_SUPPORT ModsFolder.currentModFolder #else null #end); } + public static function event(name:String, event:T):T { + if (script == null) return event; + script.call(name, [event]); + return event; + } + public static function call(name:String, ?args:Array) { if (script == null) return; script.call(name, args); diff --git a/source/funkin/scripting/events/DiscordPresenceUpdateEvent.hx b/source/funkin/scripting/events/DiscordPresenceUpdateEvent.hx new file mode 100644 index 00000000..67e21e00 --- /dev/null +++ b/source/funkin/scripting/events/DiscordPresenceUpdateEvent.hx @@ -0,0 +1,12 @@ +package funkin.scripting.events; + +#if DISCORD_RPC +import discord_rpc.DiscordRpc.DiscordPresenceOptions; +#end + +class DiscordPresenceUpdateEvent extends CancellableEvent { + /** + * Object containing all of the data for the presence. Can be altered. + */ + public var presenceData:#if DISCORD_RPC DiscordPresenceOptions #else Dynamic #end; +} \ No newline at end of file diff --git a/source/funkin/utils/DiscordUtil.hx b/source/funkin/utils/DiscordUtil.hx index 30ec025e..3438c417 100644 --- a/source/funkin/utils/DiscordUtil.hx +++ b/source/funkin/utils/DiscordUtil.hx @@ -1,5 +1,8 @@ package funkin.utils; +import funkin.scripting.events.DiscordPresenceUpdateEvent; +import haxe.Json; +import openfl.utils.Assets; #if DISCORD_RPC import discord_rpc.DiscordRpc; import sys.thread.Thread; @@ -12,16 +15,11 @@ class DiscordUtil { public static var currentID:String = null; public static var discordThread:#if DISCORD_RPC Thread #else Dynamic #end = null; public static var ready:Bool = false; - - /** - * CHANGE SETTINGS HERE FOR CUSTOM DISCORD RPC ON SOURCE - */ - public static final defaultClientID:String = "1027994136193810442"; - public static final logoKey:String = "icon"; + public static var data:DiscordJson = null; public static function init() { #if DISCORD_RPC - changeClientID(defaultClientID); + reloadJsonData(); discordThread = Thread.create(function() { while (true) { @@ -40,6 +38,26 @@ class DiscordUtil { #end } + public static function reloadJsonData() { + #if DISCORD_RPC + data = {}; + var jsonPath = Paths.json("config/discord"); + if (Assets.exists(jsonPath)) { + try { + data = Json.parse(Assets.getText(jsonPath)); + } catch(e) { + Logs.trace('Couldn\'t load Discord RPC configuration: ${e.toString()}', ERROR); + } + } + trace(data); + data.setFieldDefault("clientID", "1027994136193810442"); + data.setFieldDefault("logoKey", "icon"); + data.setFieldDefault("logoText", Application.current.meta.get('title')); + + changeClientID(data.clientID); + #end + } + public static function changePresence(details:String, state:String, ?smallImageKey : String) { #if DISCORD_RPC changePresenceAdvanced({ @@ -75,10 +93,15 @@ class DiscordUtil { if (data == null) return; if (data.largeImageKey == null) - data.largeImageKey = logoKey; + data.largeImageKey = DiscordUtil.data.logoKey; if (data.largeImageText == null) - data.largeImageText = Application.current.meta.get('title'); + data.largeImageText = DiscordUtil.data.logoText; + #if GLOBAL_SCRIPT + var event = funkin.scripting.GlobalScript.event("onDiscordPresenceUpdate", EventManager.get(DiscordPresenceUpdateEvent).recycle(data)); + if (event.cancelled) return; + + #end DiscordRpc.presence(data); #end } @@ -121,4 +144,10 @@ class DiscordUtil { Logs.trace('Discord RPC Disconnected: ${_message} (Code: $_code)', WARNING); } #end +} + +typedef DiscordJson = { + var ?clientID:String; + var ?logoKey:String; + var ?logoText:String; } \ No newline at end of file