Skip to content

Choose a tag to compare

@Senophyx Senophyx released this 05 Aug 12:37
· 5 commits to main since this release

Overview

Discord-RPC 6.5 is the biggest update since 6.0, and the first release to introduce real-time event subscriptions. You can now subscribe to Rich Presence events (JOIN, JOIN_REQUEST, SPECTATE, INVITE) with the new Event enum and @rpc.on() decorator, and react to activity invites and join requests directly from your Python code.

Under the hood, the entire IPC layer was rebuilt for cross-platform reliability. A single background reader thread now handles all incoming frames and routes responses by nonce, so PING/PONG heartbeats no longer corrupt pending requests, handshake no longer requires a nonce, and Windows imports are loaded only on Windows (no more msvcrt or win32pipe). This fixes multiple long-standing import and blocking issues on Linux and macOS.

The release also adds the AssetManager (rpc.assets) for discovering uploaded assets with CDN URLs, client-side URL validation for buttons and image URLs, new User.avatar_decoration and Application.cover CDN attributes, and a proper test suite (60 tests) running on CI across Ubuntu, Windows, and macOS with Python 3.8 through 3.11. Python 3.8 is now the minimum supported version.

What's Changed

  • feat: add AssetManager with asset discovery and CDN URL support by @SuperZombi in #60
  • feat: add read only alias for ipc.connected by @SuperZombi in #63
  • feat: add event subscription with Event enum and @rpc.on() decorator by @SuperZombi in #66
  • feat: run event listener only when anyone subscribed by @SuperZombi in #66
  • feat: export event exceptions from package root by @Senophyx
  • feat: add cover image and avatar decoration by @SuperZombi in #67
  • feat: validate URLs and improve IPC requests by @SuperZombi in #65
  • refactor: use blocking reader and drop Windows polling by @Senophyx
  • refactor: make Windows imports conditional by @Senophyx
  • refactor: improve logging and disconnect cleanup by @Senophyx
  • fix: correct IPC method annotations preventing package import by @Senophyx
  • fix: centralize exact frame reads and preserve opcodes by @Senophyx
  • fix: route responses by nonce through a single reader by @Senophyx
  • fix: validate handshake and preserve error details by @Senophyx
  • fix: handle PING and PONG without corrupting requests by @Senophyx
  • fix: read handshake frame directly without nonce routing by @Senophyx
  • fix: track subscriptions separately and stop idle readers by @Senophyx
  • fix: release state lock during subscription requests by @Senophyx
  • fix: allow stacked handlers and mark pipe disconnected when idle by @Senophyx
  • fix: validate URL structure and required fields by @Senophyx
  • fix: validate button URLs in set_activity by @Senophyx
  • fix: use PEP 621 license table to unblock wheel builds by @Senophyx
  • style: fix indentation and str formatting by @Senophyx
  • docs: document event subscription API and update changelog by @Senophyx
  • docs: document party and secret requirements, add subscribe example by @Senophyx
  • docs: rename subscribe example to rpc-events by @Senophyx
  • docs: add AssetManager, connected property, and get_assets to DOCS.md by @Senophyx
  • docs: add initial commit link to README by @Senophyx
  • docs: document avatar decoration, cover, and URL utils by @Senophyx
  • docs(changelog): merge 6.5b2 and unreleased into 6.5 by @Senophyx
  • test: add minimal test runner by @Senophyx
  • test: add types tests for avatar decoration and cover by @Senophyx
  • ci: add Python compile and import checks by @Senophyx
  • ci: run test suite on all platforms by @Senophyx
  • build: require Python 3.8 or newer by @Senophyx
  • chore: bump GitHub Actions versions (checkout v6, setup-python v6) by @SuperZombi in #62
  • chore(release): bump version to 6.5 by @Senophyx

Full Changelog: 6.0...6.5