Skip to content

Add Squad Up to Plugin Store#1046

Open
binaryj wants to merge 1 commit into
SteamDeckHomebrew:mainfrom
binaryj:add-squad-up
Open

Add Squad Up to Plugin Store#1046
binaryj wants to merge 1 commit into
SteamDeckHomebrew:mainfrom
binaryj:add-squad-up

Conversation

@binaryj
Copy link
Copy Markdown

@binaryj binaryj commented May 11, 2026

Add Squad Up to Plugin Store

This plugin brings Discord voice channel browsing, joining, moving, and disconnecting into the Steam Quick Access Menu, so users don't have to switch out of their game to manage their voice channel connection. Below is a feature-by-feature breakdown:

Core feature set:

  • Discord user authorization: The user will need to sign in to Discord and provide the plugin a 6-digit code for initial authorization for it to use the Discord API. The user can either type in the code themselves or click the "Send to Squad Up" button from the page that displays the 6-digit code that will post the code to the Squad Up Cloudflare Worker session, and the plugin's frontend polls that endpoint and auto-claims the code without the user ever copying or typing it.

  • Browse and sort your Discord servers: In the QAM, users see a list of their Discord servers (only those where the Squad Up bot has been invited and have at least one voice channel). Server display order can be manually rearranged via an in-plugin reorder mode (buttons appear next to each server when the sort icon is tapped).

  • See live voice activity: Each server tile shows a real-time count and stack of avatars of users currently in voice across that server's channels. Expanding a server reveals its individual voice channels and shows any users currently connected to those channels.

  • Open a voice channel in your browser: If the user isn't yet connected to voice in that server, tapping a channel opens Discord in their configured browser via a browser that is added as a non-Steam app. The plugin remembers the browser shortcut and reuses the existing window. Currently, joining a Discord voice channel requires the user to associate a browser as a non-Steam app because Discord requires the user to join through their app exclusively. You can get around this restriction by getting approved to use Discord's RPC IPC, which would allow the plugin to join the user to the voice channel directly without leaving the plugin, but this requires approval from Discord once the app is actively being used and is a lengthy approval process that has a high likelihood of being denied.

  • Move between voice channels in the same server: If the user is already connected to a voice channel in a server, tapping a different channel in that same server moves them there via Discord's API, without the need to revisit the browser.

  • Disconnect from voice: Tapping the channel the user is currently connected to disconnects them from the voice channel. This uses the same in-place API call without the need for the browser.

NOTE: There are two separate backend services used for this plugin to work properly. Both are available as public repos:

  • Squad Up Worker
    • What it does:
      • Discord OAuth handshake to handle authentication and authentication refreshing when expired.
      • Handles communication to Discord's REST API.
      • Handles communication to the Squad Up Bot (web sockets).
    • What it doesn't do:
      • No persistent user-data storage.
      • No logging of secrets or user identifiers.
      • No business logic about voice presence. This lives in the bot.
  • Squad Up Bot
    • What it does:
      • Maintains a Discord gateway WebSocket. Live voice channel occupancy is only available over Discord's gateway, not the REST API.
      • Receives voiceStateUpdate events as users join, move between, and leave voice channels.
      • Communicates with the Squad Up Worker.
    • What it doesn't do:
      • Does not send messages, read message history, or access DMs.
      • Does not handle Discord slash commands.
      • Does not store anything persistently.
      • Does not talk to the plugin directly.
squad-up-screenshot

Task Checklist

Developer

  • I am the original author or an authorized maintainer of this plugin.
  • I have abided by the licenses of the libraries I am utilizing, including attaching license notices where appropriate.
  • Generative AI was NOT used to write a majority of the code I am submitting.
    NOTE: I wrote the majority of the code, but I did use AI to do the following:
    - Refactor code to be more efficient/readable.
    - Write comments and thorough documentation throughout the codebase.
    - Create the TERMS.md and PRIVACY.md files.
    - Review and update the README.md to be more thorough and accurately reflect the codebase.

Plugin

  • I have verified that my plugin works properly on the Stable and Beta update channels of SteamOS.
  • I have verified my plugin is unique or provides more/alternative functionality to a plugin already on the store.

Backend

  • No: I am using a custom backend other than Python.
  • No: I am using a tool or software from a 3rd-party FOSS project that does not have its dependencies statically linked.
  • No: I am using a custom binary that has all of its dependencies statically linked.

Community

  • I have tested and left feedback on two other pull requests for new or updated plugins.
  • I have commented links to my testing report in this PR.

Testing

  • Tested by a third party on SteamOS Stable or Beta update channel.

@binaryj binaryj requested a review from a team as a code owner May 11, 2026 15:53
@github-actions github-actions Bot added the plugin-addition Adding a plugin to the Plugin Store label May 11, 2026
@github-actions
Copy link
Copy Markdown

Issues Found

No issues with your PR description were found.

Next Steps

  1. If we found any issues above, please edit your pull request description to resolve them and leave a comment saying you've done so.
  2. For the quickest review, please see the Community section of the pull request template for how you can help other developers.
  3. Once your description is correct, a maintainer will review your pull request as soon as possible.

Thank you for your contribution! If you need any help, please reach out on our Discord server. ❤️

@AAGaming00
Copy link
Copy Markdown
Member

does this work with the desktop discord app instead of a browser?

also you should apply for IPC anyway, they don't need an active userbase they just need a reasonable usecase

@binaryj
Copy link
Copy Markdown
Author

binaryj commented May 15, 2026

does this work with the desktop discord app instead of a browser?

also you should apply for IPC anyway, they don't need an active userbase they just need a reasonable usecase

For the IPC, I'll have to look into applying for it sooner if that's the case. As for desktop Discord, there is a weird limitation I ran into with the app on SteamOS where it would deeplink you to the app, but would never take you to the server and voice channel you chose to join from the quick access menu. The implemented flow ended up being the most convenient for now until I can get the IPC process implemented at a later date, which would eliminate the need for the browser completely. I would still support both browser and IPC for the plugin though, incase its needed.

@github-actions
Copy link
Copy Markdown

This pull request is stale as no updates or testing reports have been posted within the last 7 days. Please ensure you are actively recruiting testers or resolving the issues discussed. If you do not remove the stale label or comment, this will be closed in 7 days. Please close this pull request if you need more time to resolve issues so we can keep our repo healthy.

@github-actions github-actions Bot added the stale label May 23, 2026
@binaryj
Copy link
Copy Markdown
Author

binaryj commented May 26, 2026

Is there anyone willing to test this plugin?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

plugin-addition Adding a plugin to the Plugin Store stale

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants