From deafc0de799caf595fda5fc0eb456b947b76c32e Mon Sep 17 00:00:00 2001 From: Anthony Samms Date: Thu, 18 Dec 2025 23:32:50 -0500 Subject: [PATCH] add rpc --- PyTaiko.py | 27 +++++++++++++++++++++++++++ pyproject.toml | 1 + uv.lock | 11 +++++++++++ 3 files changed, 39 insertions(+) diff --git a/PyTaiko.py b/PyTaiko.py index e736c03..aebc7f7 100644 --- a/PyTaiko.py +++ b/PyTaiko.py @@ -21,6 +21,7 @@ from libs.song_hash import DB_VERSION from libs.tja import TJAParser from libs.utils import ( force_dedicated_gpu, + get_current_ms, global_data, global_tex ) @@ -42,8 +43,18 @@ from scenes.two_player.song_select import TwoPlayerSongSelectScreen from scenes.dan.dan_select import DanSelectScreen from scenes.dan.dan_result import DanResultScreen +from pypresence.presence import Presence + logger = logging.getLogger(__name__) +DISCORD_APP_ID = '1451423960401973353' +try: + RPC = Presence(DISCORD_APP_ID) + RPC.connect() + discord_connected = True +except Exception as e: + discord_connected = False + logger.warning(f"Could not connect to Discord: {e}") class Screens: TITLE = "TITLE" @@ -329,9 +340,23 @@ def main(): ray.hide_cursor() logger.info("Cursor hidden") last_fps = 1 + start_time = get_current_ms() last_color = ray.BLACK while not ray.window_should_close(): + if discord_connected: + if global_data.session_data[global_data.player_num].selected_song != Path(): + details = f"Playing Song: {global_data.session_data[global_data.player_num].song_title}" + else: + details = "Idling" + RPC.update( + state=f"In Screen {current_screen}", + details=details, + large_text="PyTaiko", + start=get_current_ms() - start_time, + buttons=[{"label": "Play Now", "url": "https://github.com/Yonokid/PyTaiko"}] + ) + if ray.is_key_pressed(global_data.config["keys"]["fullscreen_key"]): ray.toggle_fullscreen() logger.info("Toggled fullscreen") @@ -383,6 +408,8 @@ def main(): ray.close_window() audio.close_audio_device() + if discord_connected: + RPC.close() logger.info("Window closed and audio device shut down") if __name__ == "__main__": diff --git a/pyproject.toml b/pyproject.toml index 66d7771..4445dc8 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -6,6 +6,7 @@ readme = "README.md" requires-python = ">=3.13" dependencies = [ "av>=16.0.1", + "pypresence>=4.6.1", "raylib-sdl>=5.5.0.2", "tomlkit>=0.13.3", ] diff --git a/uv.lock b/uv.lock index 0c6714b..57d3f40 100644 --- a/uv.lock +++ b/uv.lock @@ -111,12 +111,22 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/13/a3/a812df4e2dd5696d1f351d58b8fe16a405b234ad2886a0dab9183fb78109/pycparser-2.22-py3-none-any.whl", hash = "sha256:c3702b6d3dd8c7abc1afa565d7e63d53a1d0bd86cdc24edd75470f4de499cfcc", size = 117552, upload-time = "2024-03-30T13:22:20.476Z" }, ] +[[package]] +name = "pypresence" +version = "4.6.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f6/6b/dedacb949ee73c3fd4a11992a4e9a70fc4cd1046ed6870f9138348293ded/pypresence-4.6.1.tar.gz", hash = "sha256:05199516a3b4e182b637b3cd5415aab7ba542707664f634f35a7220c4f10334f", size = 20419, upload-time = "2025-10-17T18:53:39.484Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/bd/0d/1c817c6769ce0b64cc0dcc20bc9d0edb4dc560e83a3b5f0d5cbda04c3d35/pypresence-4.6.1-py3-none-any.whl", hash = "sha256:33d4549fcdf4102f81935df4ba587bacb22193e0c50c541d1ab9329b21df33cd", size = 14033, upload-time = "2025-10-17T18:53:38.184Z" }, +] + [[package]] name = "pytaiko" version = "1.0" source = { virtual = "." } dependencies = [ { name = "av" }, + { name = "pypresence" }, { name = "raylib-sdl" }, { name = "tomlkit" }, ] @@ -129,6 +139,7 @@ dev = [ [package.metadata] requires-dist = [ { name = "av", specifier = ">=16.0.1" }, + { name = "pypresence", specifier = ">=4.6.1" }, { name = "raylib-sdl", specifier = ">=5.5.0.2" }, { name = "tomlkit", specifier = ">=0.13.3" }, ]