-
Notifications
You must be signed in to change notification settings - Fork 7
feat(action): add per-user volume control via dial #65
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
Add UserVolume action that allows adjusting individual user volumes while in a Discord voice channel using a Stream Deck+ dial. Features: - Dial rotation adjusts selected user's volume (±5% per tick, 0-200%) - Dial press cycles through users in the voice channel - Display shows channel name, username, and volume percentage - Real-time updates when users join/leave the channel Also fixes callback cleanup bug in main.py: DiscordCore.cleanup_callbacks() was calling remove_callback() but main.py defined clear_callbacks(). Renamed to remove_callback() for consistency with add_callback().
backend.py
Outdated
| return self._is_authed | ||
|
|
||
| def register_callback(self, key: str, callback: callable): | ||
| def register_callback(self, key: str, callback: callable, args: dict = None): |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I don't see anywhere this args argument is passed in, am I missing something?
|
One small note, you'll need to update the |
…d.py - Bump version from 1.9.2 to 1.10.0 in manifest.json - Revert callback rename (remove_callback -> clear_callbacks) to be handled in separate bug-fix PR
|
I haven't been able to test the functionality with more than 2 users in the voice chat yet. The expected behavior is that you can cycle between users by pressing the dial. I'm keeping this as a draft until I can verify this works, but happy to merge if you're able to test it or if you think it's okay to merge as-is. |
|
I don't have an SD+ to test with, but what you've done so far looks great. Feel free to remove draft status (you can ignore the GitHub actions error above) |
|
Thanks again! This is now published as 1.10.0 on the StreamController store |
Add per-user volume control via dial
Summary
This PR adds a new UserVolume action that allows Stream Deck+ users to adjust individual Discord user volumes directly from a dial while in a voice channel.
This feature is inspired by the Windows Stream Deck Discord plugin and solves a common pain point: Discord doesn't auto-level audio, so users with different microphone settings can have vastly different volume levels. This action allows quick per-user volume adjustments without leaving your current application/game or opening Discord settings.
Features
Usage
Technical Implementation
New Files:
actions/UserVolume.py- Complete action implementationModified Files:
backend.py- Added voice state subscription methods and user trackingdiscordrpc/asyncdiscord.py- Addedset_user_voice_settings()andget_channel()RPC methodsmain.py- Registered new action, fixed callback method naming bugKey Technical Details:
SET_USER_VOICE_SETTINGScommand for volume controlVOICE_STATE_CREATE/DELETE/UPDATEevents with channel-specific subscriptionsGET_CHANNELresponsesubscribe_voice_states()/unsubscribe_voice_states()backend methods to work around IPC serialization limitationsBug Fix Included
Also fixes callback cleanup bug where
DiscordCore.cleanup_callbacks()calledremove_callback()butmain.pydefinedclear_callbacks(). Renamed toremove_callback()for consistency withadd_callback().Testing Status
Completed:
Pending:
Full testing requires coordination with multiple users in a voice channel. Basic functionality has been verified, but additional testing with 3+ users is recommended before merge.