Applescript to mute Discord

The name of the pictureThe name of the pictureThe name of the pictureClash Royale CLAN TAG#URR8PPP












3















Edit: My initial question does not appear to have a solution. Instead I used an alternate method. Scroll down to see the alternate method.



I'm looking for a solution to mute my mic in Discord that I can then add to my touchbar via bettertouchtool.



BTT cannot send key combos to Discord for whatever reason. As far as I can tell I have two options.



  1. Use applescript to activate the Discord window, send the key press, then hide the window. This works, but flashing the application up for a moment is annoying. Worse when it's on another desktop as it will flip desktops over and then back.


  2. Use applescript to click the top menu (this menu) to click the Discord menu, and work down through the UI elements to click the Mute button.


I'm not experienced enough with applescript to make the second option work, but I think it could work. Using UI browser I was able to get the path to the UI element:
enter image description here



How can I make this work? Any help is greatly appreciated. Thanks



Edit HR




ALTERNATE SOLUTION

What I am wanting to do here does not appear to be possible, so I'm just muting my mic at the OS level instead of Discord, and then adding a toggle button to my touchbar with BetterTouchTool. This has the added benefit of working system wide. Here's video of it in action:

GIF



Streamable



In case anyone else was wanting to do this these are the steps I took:



1. Create a new Applescript with the following script:



property storedInputLevel : missing value
if input volume of (get volume settings) is 0 then
set volume input volume storedInputLevel
return 1
else
tell application "System Events"
set storedInputLevel to input volume of (get volume settings)
end tell
set volume input volume 0
return 2
end if


Save the script somewhere.



2. Open up Better Touch Tool and create a new Touch Bar widget and set the widget to Run Apple Script and Show Return Value
enter image description here



3. In the window that pops up after selecting Run Apple Script and Show Return Value you'll want to erase the test line in the box and give your widget a name:
enter image description here



3.a Click the appearance and settings button



enter image description here



4. In the Appearance and Settings window you'll want to configure the following settings:
enter image description here



You don't need to set an alternate background color, but it helps to see you're muted at a glance.



For the icons you can use these:



enter image description hereenter image description here



Make sure that you set the Alternate color and icon if result matches regex setting to 2.



Click Save.



5. On the new widget you created click on the drop down for Predefined action and choose Run Apple Script (async in background).



enter image description here



6. In the window that popped up you'll want to click on Select Apple Script File and then Choose Apple Script file from Disk and browse to the script file you created earlier. Click save and you're done.



image13



That's it. Your widget should toggle your mic on and off and the change should be reflected in the icon on your touch bar.










share|improve this question
























  • By the way, with your first option, you mention "send[ing] the key press". To what does this refer ? What key press are you sending, what is it doing, and why is the application flashing up ?

    – CJK
    Dec 30 '18 at 19:47











  • @CJK I tried this: activate application "Discord" tell application "System Events" key code 46 using shift down, command down -- shift-command-left end tell. It switches to the application and sends the key press to mute my microphone, but doing activate pops up the application.

    – Spaisekraft
    Dec 30 '18 at 22:13












  • And what does ⌘⇧← do (I know it mutes the microphone) ? I suppose I mean, how does it do it: is it a menu shortcut in the app, or a builtin keybinding ?

    – CJK
    Dec 30 '18 at 22:31












  • Ah yes, it's a key combo set in Discord. And you're right in your edit that it works without focus on the app. I've been using the key combo to toggle mute, but I wanted to make it a button on my touchbar with BTT.

    – Spaisekraft
    Dec 30 '18 at 23:03











  • As your own tests have revealed, the simulated keypresses are not being picked up by the Discord keybindings. In theory, there'd be no need to target the Discord app itself, as its a systemwide keybinding. Therefore, telling System Events just to issue the appropriate keyevents should have, in my opinion, worked. But it didn't. I double-checked to make sure it wasn't an AppleScript bug, and wrote some Objective C code to simulate the keyevents and target Discord (which you can do with ObjC, but not AppleScript). It failed. Cont'd...

    – CJK
    Dec 30 '18 at 23:20















3















Edit: My initial question does not appear to have a solution. Instead I used an alternate method. Scroll down to see the alternate method.



I'm looking for a solution to mute my mic in Discord that I can then add to my touchbar via bettertouchtool.



BTT cannot send key combos to Discord for whatever reason. As far as I can tell I have two options.



  1. Use applescript to activate the Discord window, send the key press, then hide the window. This works, but flashing the application up for a moment is annoying. Worse when it's on another desktop as it will flip desktops over and then back.


  2. Use applescript to click the top menu (this menu) to click the Discord menu, and work down through the UI elements to click the Mute button.


I'm not experienced enough with applescript to make the second option work, but I think it could work. Using UI browser I was able to get the path to the UI element:
enter image description here



How can I make this work? Any help is greatly appreciated. Thanks



Edit HR




ALTERNATE SOLUTION

What I am wanting to do here does not appear to be possible, so I'm just muting my mic at the OS level instead of Discord, and then adding a toggle button to my touchbar with BetterTouchTool. This has the added benefit of working system wide. Here's video of it in action:

GIF



Streamable



In case anyone else was wanting to do this these are the steps I took:



1. Create a new Applescript with the following script:



property storedInputLevel : missing value
if input volume of (get volume settings) is 0 then
set volume input volume storedInputLevel
return 1
else
tell application "System Events"
set storedInputLevel to input volume of (get volume settings)
end tell
set volume input volume 0
return 2
end if


Save the script somewhere.



2. Open up Better Touch Tool and create a new Touch Bar widget and set the widget to Run Apple Script and Show Return Value
enter image description here



3. In the window that pops up after selecting Run Apple Script and Show Return Value you'll want to erase the test line in the box and give your widget a name:
enter image description here



3.a Click the appearance and settings button



enter image description here



4. In the Appearance and Settings window you'll want to configure the following settings:
enter image description here



You don't need to set an alternate background color, but it helps to see you're muted at a glance.



For the icons you can use these:



enter image description hereenter image description here



Make sure that you set the Alternate color and icon if result matches regex setting to 2.



Click Save.



5. On the new widget you created click on the drop down for Predefined action and choose Run Apple Script (async in background).



enter image description here



6. In the window that popped up you'll want to click on Select Apple Script File and then Choose Apple Script file from Disk and browse to the script file you created earlier. Click save and you're done.



image13



That's it. Your widget should toggle your mic on and off and the change should be reflected in the icon on your touch bar.










share|improve this question
























  • By the way, with your first option, you mention "send[ing] the key press". To what does this refer ? What key press are you sending, what is it doing, and why is the application flashing up ?

    – CJK
    Dec 30 '18 at 19:47











  • @CJK I tried this: activate application "Discord" tell application "System Events" key code 46 using shift down, command down -- shift-command-left end tell. It switches to the application and sends the key press to mute my microphone, but doing activate pops up the application.

    – Spaisekraft
    Dec 30 '18 at 22:13












  • And what does ⌘⇧← do (I know it mutes the microphone) ? I suppose I mean, how does it do it: is it a menu shortcut in the app, or a builtin keybinding ?

    – CJK
    Dec 30 '18 at 22:31












  • Ah yes, it's a key combo set in Discord. And you're right in your edit that it works without focus on the app. I've been using the key combo to toggle mute, but I wanted to make it a button on my touchbar with BTT.

    – Spaisekraft
    Dec 30 '18 at 23:03











  • As your own tests have revealed, the simulated keypresses are not being picked up by the Discord keybindings. In theory, there'd be no need to target the Discord app itself, as its a systemwide keybinding. Therefore, telling System Events just to issue the appropriate keyevents should have, in my opinion, worked. But it didn't. I double-checked to make sure it wasn't an AppleScript bug, and wrote some Objective C code to simulate the keyevents and target Discord (which you can do with ObjC, but not AppleScript). It failed. Cont'd...

    – CJK
    Dec 30 '18 at 23:20













3












3








3








Edit: My initial question does not appear to have a solution. Instead I used an alternate method. Scroll down to see the alternate method.



I'm looking for a solution to mute my mic in Discord that I can then add to my touchbar via bettertouchtool.



BTT cannot send key combos to Discord for whatever reason. As far as I can tell I have two options.



  1. Use applescript to activate the Discord window, send the key press, then hide the window. This works, but flashing the application up for a moment is annoying. Worse when it's on another desktop as it will flip desktops over and then back.


  2. Use applescript to click the top menu (this menu) to click the Discord menu, and work down through the UI elements to click the Mute button.


I'm not experienced enough with applescript to make the second option work, but I think it could work. Using UI browser I was able to get the path to the UI element:
enter image description here



How can I make this work? Any help is greatly appreciated. Thanks



Edit HR




ALTERNATE SOLUTION

What I am wanting to do here does not appear to be possible, so I'm just muting my mic at the OS level instead of Discord, and then adding a toggle button to my touchbar with BetterTouchTool. This has the added benefit of working system wide. Here's video of it in action:

GIF



Streamable



In case anyone else was wanting to do this these are the steps I took:



1. Create a new Applescript with the following script:



property storedInputLevel : missing value
if input volume of (get volume settings) is 0 then
set volume input volume storedInputLevel
return 1
else
tell application "System Events"
set storedInputLevel to input volume of (get volume settings)
end tell
set volume input volume 0
return 2
end if


Save the script somewhere.



2. Open up Better Touch Tool and create a new Touch Bar widget and set the widget to Run Apple Script and Show Return Value
enter image description here



3. In the window that pops up after selecting Run Apple Script and Show Return Value you'll want to erase the test line in the box and give your widget a name:
enter image description here



3.a Click the appearance and settings button



enter image description here



4. In the Appearance and Settings window you'll want to configure the following settings:
enter image description here



You don't need to set an alternate background color, but it helps to see you're muted at a glance.



For the icons you can use these:



enter image description hereenter image description here



Make sure that you set the Alternate color and icon if result matches regex setting to 2.



Click Save.



5. On the new widget you created click on the drop down for Predefined action and choose Run Apple Script (async in background).



enter image description here



6. In the window that popped up you'll want to click on Select Apple Script File and then Choose Apple Script file from Disk and browse to the script file you created earlier. Click save and you're done.



image13



That's it. Your widget should toggle your mic on and off and the change should be reflected in the icon on your touch bar.










share|improve this question
















Edit: My initial question does not appear to have a solution. Instead I used an alternate method. Scroll down to see the alternate method.



I'm looking for a solution to mute my mic in Discord that I can then add to my touchbar via bettertouchtool.



BTT cannot send key combos to Discord for whatever reason. As far as I can tell I have two options.



  1. Use applescript to activate the Discord window, send the key press, then hide the window. This works, but flashing the application up for a moment is annoying. Worse when it's on another desktop as it will flip desktops over and then back.


  2. Use applescript to click the top menu (this menu) to click the Discord menu, and work down through the UI elements to click the Mute button.


I'm not experienced enough with applescript to make the second option work, but I think it could work. Using UI browser I was able to get the path to the UI element:
enter image description here



How can I make this work? Any help is greatly appreciated. Thanks



Edit HR




ALTERNATE SOLUTION

What I am wanting to do here does not appear to be possible, so I'm just muting my mic at the OS level instead of Discord, and then adding a toggle button to my touchbar with BetterTouchTool. This has the added benefit of working system wide. Here's video of it in action:

GIF



Streamable



In case anyone else was wanting to do this these are the steps I took:



1. Create a new Applescript with the following script:



property storedInputLevel : missing value
if input volume of (get volume settings) is 0 then
set volume input volume storedInputLevel
return 1
else
tell application "System Events"
set storedInputLevel to input volume of (get volume settings)
end tell
set volume input volume 0
return 2
end if


Save the script somewhere.



2. Open up Better Touch Tool and create a new Touch Bar widget and set the widget to Run Apple Script and Show Return Value
enter image description here



3. In the window that pops up after selecting Run Apple Script and Show Return Value you'll want to erase the test line in the box and give your widget a name:
enter image description here



3.a Click the appearance and settings button



enter image description here



4. In the Appearance and Settings window you'll want to configure the following settings:
enter image description here



You don't need to set an alternate background color, but it helps to see you're muted at a glance.



For the icons you can use these:



enter image description hereenter image description here



Make sure that you set the Alternate color and icon if result matches regex setting to 2.



Click Save.



5. On the new widget you created click on the drop down for Predefined action and choose Run Apple Script (async in background).



enter image description here



6. In the window that popped up you'll want to click on Select Apple Script File and then Choose Apple Script file from Disk and browse to the script file you created earlier. Click save and you're done.



image13



That's it. Your widget should toggle your mic on and off and the change should be reflected in the icon on your touch bar.







applescript






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited Dec 31 '18 at 2:05







Spaisekraft

















asked Dec 30 '18 at 18:04









SpaisekraftSpaisekraft

1184




1184












  • By the way, with your first option, you mention "send[ing] the key press". To what does this refer ? What key press are you sending, what is it doing, and why is the application flashing up ?

    – CJK
    Dec 30 '18 at 19:47











  • @CJK I tried this: activate application "Discord" tell application "System Events" key code 46 using shift down, command down -- shift-command-left end tell. It switches to the application and sends the key press to mute my microphone, but doing activate pops up the application.

    – Spaisekraft
    Dec 30 '18 at 22:13












  • And what does ⌘⇧← do (I know it mutes the microphone) ? I suppose I mean, how does it do it: is it a menu shortcut in the app, or a builtin keybinding ?

    – CJK
    Dec 30 '18 at 22:31












  • Ah yes, it's a key combo set in Discord. And you're right in your edit that it works without focus on the app. I've been using the key combo to toggle mute, but I wanted to make it a button on my touchbar with BTT.

    – Spaisekraft
    Dec 30 '18 at 23:03











  • As your own tests have revealed, the simulated keypresses are not being picked up by the Discord keybindings. In theory, there'd be no need to target the Discord app itself, as its a systemwide keybinding. Therefore, telling System Events just to issue the appropriate keyevents should have, in my opinion, worked. But it didn't. I double-checked to make sure it wasn't an AppleScript bug, and wrote some Objective C code to simulate the keyevents and target Discord (which you can do with ObjC, but not AppleScript). It failed. Cont'd...

    – CJK
    Dec 30 '18 at 23:20

















  • By the way, with your first option, you mention "send[ing] the key press". To what does this refer ? What key press are you sending, what is it doing, and why is the application flashing up ?

    – CJK
    Dec 30 '18 at 19:47











  • @CJK I tried this: activate application "Discord" tell application "System Events" key code 46 using shift down, command down -- shift-command-left end tell. It switches to the application and sends the key press to mute my microphone, but doing activate pops up the application.

    – Spaisekraft
    Dec 30 '18 at 22:13












  • And what does ⌘⇧← do (I know it mutes the microphone) ? I suppose I mean, how does it do it: is it a menu shortcut in the app, or a builtin keybinding ?

    – CJK
    Dec 30 '18 at 22:31












  • Ah yes, it's a key combo set in Discord. And you're right in your edit that it works without focus on the app. I've been using the key combo to toggle mute, but I wanted to make it a button on my touchbar with BTT.

    – Spaisekraft
    Dec 30 '18 at 23:03











  • As your own tests have revealed, the simulated keypresses are not being picked up by the Discord keybindings. In theory, there'd be no need to target the Discord app itself, as its a systemwide keybinding. Therefore, telling System Events just to issue the appropriate keyevents should have, in my opinion, worked. But it didn't. I double-checked to make sure it wasn't an AppleScript bug, and wrote some Objective C code to simulate the keyevents and target Discord (which you can do with ObjC, but not AppleScript). It failed. Cont'd...

    – CJK
    Dec 30 '18 at 23:20
















By the way, with your first option, you mention "send[ing] the key press". To what does this refer ? What key press are you sending, what is it doing, and why is the application flashing up ?

– CJK
Dec 30 '18 at 19:47





By the way, with your first option, you mention "send[ing] the key press". To what does this refer ? What key press are you sending, what is it doing, and why is the application flashing up ?

– CJK
Dec 30 '18 at 19:47













@CJK I tried this: activate application "Discord" tell application "System Events" key code 46 using shift down, command down -- shift-command-left end tell. It switches to the application and sends the key press to mute my microphone, but doing activate pops up the application.

– Spaisekraft
Dec 30 '18 at 22:13






@CJK I tried this: activate application "Discord" tell application "System Events" key code 46 using shift down, command down -- shift-command-left end tell. It switches to the application and sends the key press to mute my microphone, but doing activate pops up the application.

– Spaisekraft
Dec 30 '18 at 22:13














And what does ⌘⇧← do (I know it mutes the microphone) ? I suppose I mean, how does it do it: is it a menu shortcut in the app, or a builtin keybinding ?

– CJK
Dec 30 '18 at 22:31






And what does ⌘⇧← do (I know it mutes the microphone) ? I suppose I mean, how does it do it: is it a menu shortcut in the app, or a builtin keybinding ?

– CJK
Dec 30 '18 at 22:31














Ah yes, it's a key combo set in Discord. And you're right in your edit that it works without focus on the app. I've been using the key combo to toggle mute, but I wanted to make it a button on my touchbar with BTT.

– Spaisekraft
Dec 30 '18 at 23:03





Ah yes, it's a key combo set in Discord. And you're right in your edit that it works without focus on the app. I've been using the key combo to toggle mute, but I wanted to make it a button on my touchbar with BTT.

– Spaisekraft
Dec 30 '18 at 23:03













As your own tests have revealed, the simulated keypresses are not being picked up by the Discord keybindings. In theory, there'd be no need to target the Discord app itself, as its a systemwide keybinding. Therefore, telling System Events just to issue the appropriate keyevents should have, in my opinion, worked. But it didn't. I double-checked to make sure it wasn't an AppleScript bug, and wrote some Objective C code to simulate the keyevents and target Discord (which you can do with ObjC, but not AppleScript). It failed. Cont'd...

– CJK
Dec 30 '18 at 23:20





As your own tests have revealed, the simulated keypresses are not being picked up by the Discord keybindings. In theory, there'd be no need to target the Discord app itself, as its a systemwide keybinding. Therefore, telling System Events just to issue the appropriate keyevents should have, in my opinion, worked. But it didn't. I double-checked to make sure it wasn't an AppleScript bug, and wrote some Objective C code to simulate the keyevents and target Discord (which you can do with ObjC, but not AppleScript). It failed. Cont'd...

– CJK
Dec 30 '18 at 23:20










1 Answer
1






active

oldest

votes


















3














Firstly, well done for exploring and doing your own research with which you've come armed to ask how it can be applied to form a solution. It makes it so much easier to provide useful help.



With that in mind, the screenshot from UI Browser is immensely helpful, as it literally lays out the hierarchy of UI elements that we need to traverse in order to reach the target menu item and issue a click via AppleScript:



tell application "System Events"
tell application process "Discord"
tell menu bar 2
tell menu bar item 1
click

tell (a reference to menu 1)
repeat until it exists
delay 0.2
end repeat
tell menu item "Mute"
click
end tell
end tell
end tell
end tell
end tell
end tell


However, there is a known and well-queried/documented/complained-about phenomenon of an irritating 5-second inexplicable delay between the first click that shows the menu, and the second click that selects the menu item. This isn't specific to Discord, but seems to apply to menu bar icon menus.



Various solutions have been put forward to workaround this, but I won't go into them in detail because none of them are a) reliable, b) without side-effects, or c) clean to implement. You'll undoubtedly do a quick search yourself, and come upon the most common solution, which is to kill the System Events process between the first two click events. But you'll find upon further reading that later on, users report that this method stops working; and in the interrim, causes System Events to throw other, unrelated errors where it didn't before.



Therefore, this solution for you is bittersweet, I'm afraid. I've shown you how to AppleScript your way to the menu item you want; but the end result may not be any more appealing than your first option.



EDIT: Possible Non-AppleScript Solution



Having downloaded a copy of Discord myself to see what's what, I first note that my version of the application has no such menu bar icon to speak of. It must be a setting I haven't gleaned upon.



What I did glean upon, however, is the option to set a user-defined keybinding that triggers one of a selection of functions, one of which being a toggle for the mic mute:



Discord Keybindings in macOS



Here, I set up one to bind to Toggle Mute. As you'd expect, it works within the application. Surprisingly, it works outwith the application too, when it doesn't have focus, and even when it's minimised. Even more surprisingly, it worked when Discord was resident on a separate desktop (space), and at no point did the Discord app need to attain focus or the active desktop be switched away from.



I believe this is exactly the solution you're after - a hotkey that operates globally on your system to mute your Discord microphone.






share|improve this answer

























  • Thank you for your reply CJK. I'm running in to a problem with the script you wrote. When it reaches the following section: repeat until it exists delay 0.2 end repeat It waits until I click the menu myself. I'm guessing that's because the menu doesn't exist until I open it. Once I open the menu the script continues and clicks "Mute". Do you have any suggestions on how to solve this? Thanks again Edit: I see the comment reply ignores formatting. Sorry for the mess.

    – Spaisekraft
    Dec 30 '18 at 21:55












  • Are you saying that the menu won't materialise unless you physically click the menu bar icon yourself ? If so, this means the first click command had no effect. Try the following adjustments separately: 1. change the first click to click it; then 2. change click it to perform its action "AXPress"; then, in a new script, try tell app "System Events" to click menu bar item 1 of menu bar 2 of process "Discord". My hope is that (1) or (2) will solve the problem, but my feeling is it won't change anything. (3), I hope, will open the menu (but not click "Mute").

    – CJK
    Dec 30 '18 at 22:42











  • PS. Should none of those suggested changes work, it implies the problem lies with the Discord app and not the script. Somewhere in development, they haven't properly set the accessibility properties of the menu bar icon to allow simulated mouse events from outside sources, or something of parallel nature. As the script works as expected with other menu bar icons from other applications, I fear there's no immediate workaround. However, I have posted an edit to my answer that provides a possible second solution to your dilemma. Let me know if it works for you like it does for me.

    – CJK
    Dec 30 '18 at 23:03











  • Yes the script does work for other applications, but none of the other changes would work for Discord. I did just end up creating a script to toggle mute the mic in the OS, and then run the script on the touchbar using BTT. I'll add that to my original post in case anyone else ever ends up here trying to accomplish this. Thank you for all the help. I've learned a few more things about applescript today :)

    – Spaisekraft
    Dec 30 '18 at 23:21











  • I just noticed in your comment that you said I first note that my version of the application has no such menu bar icon to speak of. It must be a setting I haven't gleaned upon.. I should mention that the menu only appears when you're in a voice channel.

    – Spaisekraft
    Dec 31 '18 at 2:11










Your Answer








StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "118"
;
initTagRenderer("".split(" "), "".split(" "), channelOptions);

StackExchange.using("externalEditor", function()
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled)
StackExchange.using("snippets", function()
createEditor();
);

else
createEditor();

);

function createEditor()
StackExchange.prepareEditor(
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: false,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: null,
bindNavPrevention: true,
postfix: "",
imageUploader:
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
,
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
);



);













draft saved

draft discarded


















StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fapple.stackexchange.com%2fquestions%2f347057%2fapplescript-to-mute-discord%23new-answer', 'question_page');

);

Post as a guest















Required, but never shown

























1 Answer
1






active

oldest

votes








1 Answer
1






active

oldest

votes









active

oldest

votes






active

oldest

votes









3














Firstly, well done for exploring and doing your own research with which you've come armed to ask how it can be applied to form a solution. It makes it so much easier to provide useful help.



With that in mind, the screenshot from UI Browser is immensely helpful, as it literally lays out the hierarchy of UI elements that we need to traverse in order to reach the target menu item and issue a click via AppleScript:



tell application "System Events"
tell application process "Discord"
tell menu bar 2
tell menu bar item 1
click

tell (a reference to menu 1)
repeat until it exists
delay 0.2
end repeat
tell menu item "Mute"
click
end tell
end tell
end tell
end tell
end tell
end tell


However, there is a known and well-queried/documented/complained-about phenomenon of an irritating 5-second inexplicable delay between the first click that shows the menu, and the second click that selects the menu item. This isn't specific to Discord, but seems to apply to menu bar icon menus.



Various solutions have been put forward to workaround this, but I won't go into them in detail because none of them are a) reliable, b) without side-effects, or c) clean to implement. You'll undoubtedly do a quick search yourself, and come upon the most common solution, which is to kill the System Events process between the first two click events. But you'll find upon further reading that later on, users report that this method stops working; and in the interrim, causes System Events to throw other, unrelated errors where it didn't before.



Therefore, this solution for you is bittersweet, I'm afraid. I've shown you how to AppleScript your way to the menu item you want; but the end result may not be any more appealing than your first option.



EDIT: Possible Non-AppleScript Solution



Having downloaded a copy of Discord myself to see what's what, I first note that my version of the application has no such menu bar icon to speak of. It must be a setting I haven't gleaned upon.



What I did glean upon, however, is the option to set a user-defined keybinding that triggers one of a selection of functions, one of which being a toggle for the mic mute:



Discord Keybindings in macOS



Here, I set up one to bind to Toggle Mute. As you'd expect, it works within the application. Surprisingly, it works outwith the application too, when it doesn't have focus, and even when it's minimised. Even more surprisingly, it worked when Discord was resident on a separate desktop (space), and at no point did the Discord app need to attain focus or the active desktop be switched away from.



I believe this is exactly the solution you're after - a hotkey that operates globally on your system to mute your Discord microphone.






share|improve this answer

























  • Thank you for your reply CJK. I'm running in to a problem with the script you wrote. When it reaches the following section: repeat until it exists delay 0.2 end repeat It waits until I click the menu myself. I'm guessing that's because the menu doesn't exist until I open it. Once I open the menu the script continues and clicks "Mute". Do you have any suggestions on how to solve this? Thanks again Edit: I see the comment reply ignores formatting. Sorry for the mess.

    – Spaisekraft
    Dec 30 '18 at 21:55












  • Are you saying that the menu won't materialise unless you physically click the menu bar icon yourself ? If so, this means the first click command had no effect. Try the following adjustments separately: 1. change the first click to click it; then 2. change click it to perform its action "AXPress"; then, in a new script, try tell app "System Events" to click menu bar item 1 of menu bar 2 of process "Discord". My hope is that (1) or (2) will solve the problem, but my feeling is it won't change anything. (3), I hope, will open the menu (but not click "Mute").

    – CJK
    Dec 30 '18 at 22:42











  • PS. Should none of those suggested changes work, it implies the problem lies with the Discord app and not the script. Somewhere in development, they haven't properly set the accessibility properties of the menu bar icon to allow simulated mouse events from outside sources, or something of parallel nature. As the script works as expected with other menu bar icons from other applications, I fear there's no immediate workaround. However, I have posted an edit to my answer that provides a possible second solution to your dilemma. Let me know if it works for you like it does for me.

    – CJK
    Dec 30 '18 at 23:03











  • Yes the script does work for other applications, but none of the other changes would work for Discord. I did just end up creating a script to toggle mute the mic in the OS, and then run the script on the touchbar using BTT. I'll add that to my original post in case anyone else ever ends up here trying to accomplish this. Thank you for all the help. I've learned a few more things about applescript today :)

    – Spaisekraft
    Dec 30 '18 at 23:21











  • I just noticed in your comment that you said I first note that my version of the application has no such menu bar icon to speak of. It must be a setting I haven't gleaned upon.. I should mention that the menu only appears when you're in a voice channel.

    – Spaisekraft
    Dec 31 '18 at 2:11















3














Firstly, well done for exploring and doing your own research with which you've come armed to ask how it can be applied to form a solution. It makes it so much easier to provide useful help.



With that in mind, the screenshot from UI Browser is immensely helpful, as it literally lays out the hierarchy of UI elements that we need to traverse in order to reach the target menu item and issue a click via AppleScript:



tell application "System Events"
tell application process "Discord"
tell menu bar 2
tell menu bar item 1
click

tell (a reference to menu 1)
repeat until it exists
delay 0.2
end repeat
tell menu item "Mute"
click
end tell
end tell
end tell
end tell
end tell
end tell


However, there is a known and well-queried/documented/complained-about phenomenon of an irritating 5-second inexplicable delay between the first click that shows the menu, and the second click that selects the menu item. This isn't specific to Discord, but seems to apply to menu bar icon menus.



Various solutions have been put forward to workaround this, but I won't go into them in detail because none of them are a) reliable, b) without side-effects, or c) clean to implement. You'll undoubtedly do a quick search yourself, and come upon the most common solution, which is to kill the System Events process between the first two click events. But you'll find upon further reading that later on, users report that this method stops working; and in the interrim, causes System Events to throw other, unrelated errors where it didn't before.



Therefore, this solution for you is bittersweet, I'm afraid. I've shown you how to AppleScript your way to the menu item you want; but the end result may not be any more appealing than your first option.



EDIT: Possible Non-AppleScript Solution



Having downloaded a copy of Discord myself to see what's what, I first note that my version of the application has no such menu bar icon to speak of. It must be a setting I haven't gleaned upon.



What I did glean upon, however, is the option to set a user-defined keybinding that triggers one of a selection of functions, one of which being a toggle for the mic mute:



Discord Keybindings in macOS



Here, I set up one to bind to Toggle Mute. As you'd expect, it works within the application. Surprisingly, it works outwith the application too, when it doesn't have focus, and even when it's minimised. Even more surprisingly, it worked when Discord was resident on a separate desktop (space), and at no point did the Discord app need to attain focus or the active desktop be switched away from.



I believe this is exactly the solution you're after - a hotkey that operates globally on your system to mute your Discord microphone.






share|improve this answer

























  • Thank you for your reply CJK. I'm running in to a problem with the script you wrote. When it reaches the following section: repeat until it exists delay 0.2 end repeat It waits until I click the menu myself. I'm guessing that's because the menu doesn't exist until I open it. Once I open the menu the script continues and clicks "Mute". Do you have any suggestions on how to solve this? Thanks again Edit: I see the comment reply ignores formatting. Sorry for the mess.

    – Spaisekraft
    Dec 30 '18 at 21:55












  • Are you saying that the menu won't materialise unless you physically click the menu bar icon yourself ? If so, this means the first click command had no effect. Try the following adjustments separately: 1. change the first click to click it; then 2. change click it to perform its action "AXPress"; then, in a new script, try tell app "System Events" to click menu bar item 1 of menu bar 2 of process "Discord". My hope is that (1) or (2) will solve the problem, but my feeling is it won't change anything. (3), I hope, will open the menu (but not click "Mute").

    – CJK
    Dec 30 '18 at 22:42











  • PS. Should none of those suggested changes work, it implies the problem lies with the Discord app and not the script. Somewhere in development, they haven't properly set the accessibility properties of the menu bar icon to allow simulated mouse events from outside sources, or something of parallel nature. As the script works as expected with other menu bar icons from other applications, I fear there's no immediate workaround. However, I have posted an edit to my answer that provides a possible second solution to your dilemma. Let me know if it works for you like it does for me.

    – CJK
    Dec 30 '18 at 23:03











  • Yes the script does work for other applications, but none of the other changes would work for Discord. I did just end up creating a script to toggle mute the mic in the OS, and then run the script on the touchbar using BTT. I'll add that to my original post in case anyone else ever ends up here trying to accomplish this. Thank you for all the help. I've learned a few more things about applescript today :)

    – Spaisekraft
    Dec 30 '18 at 23:21











  • I just noticed in your comment that you said I first note that my version of the application has no such menu bar icon to speak of. It must be a setting I haven't gleaned upon.. I should mention that the menu only appears when you're in a voice channel.

    – Spaisekraft
    Dec 31 '18 at 2:11













3












3








3







Firstly, well done for exploring and doing your own research with which you've come armed to ask how it can be applied to form a solution. It makes it so much easier to provide useful help.



With that in mind, the screenshot from UI Browser is immensely helpful, as it literally lays out the hierarchy of UI elements that we need to traverse in order to reach the target menu item and issue a click via AppleScript:



tell application "System Events"
tell application process "Discord"
tell menu bar 2
tell menu bar item 1
click

tell (a reference to menu 1)
repeat until it exists
delay 0.2
end repeat
tell menu item "Mute"
click
end tell
end tell
end tell
end tell
end tell
end tell


However, there is a known and well-queried/documented/complained-about phenomenon of an irritating 5-second inexplicable delay between the first click that shows the menu, and the second click that selects the menu item. This isn't specific to Discord, but seems to apply to menu bar icon menus.



Various solutions have been put forward to workaround this, but I won't go into them in detail because none of them are a) reliable, b) without side-effects, or c) clean to implement. You'll undoubtedly do a quick search yourself, and come upon the most common solution, which is to kill the System Events process between the first two click events. But you'll find upon further reading that later on, users report that this method stops working; and in the interrim, causes System Events to throw other, unrelated errors where it didn't before.



Therefore, this solution for you is bittersweet, I'm afraid. I've shown you how to AppleScript your way to the menu item you want; but the end result may not be any more appealing than your first option.



EDIT: Possible Non-AppleScript Solution



Having downloaded a copy of Discord myself to see what's what, I first note that my version of the application has no such menu bar icon to speak of. It must be a setting I haven't gleaned upon.



What I did glean upon, however, is the option to set a user-defined keybinding that triggers one of a selection of functions, one of which being a toggle for the mic mute:



Discord Keybindings in macOS



Here, I set up one to bind to Toggle Mute. As you'd expect, it works within the application. Surprisingly, it works outwith the application too, when it doesn't have focus, and even when it's minimised. Even more surprisingly, it worked when Discord was resident on a separate desktop (space), and at no point did the Discord app need to attain focus or the active desktop be switched away from.



I believe this is exactly the solution you're after - a hotkey that operates globally on your system to mute your Discord microphone.






share|improve this answer















Firstly, well done for exploring and doing your own research with which you've come armed to ask how it can be applied to form a solution. It makes it so much easier to provide useful help.



With that in mind, the screenshot from UI Browser is immensely helpful, as it literally lays out the hierarchy of UI elements that we need to traverse in order to reach the target menu item and issue a click via AppleScript:



tell application "System Events"
tell application process "Discord"
tell menu bar 2
tell menu bar item 1
click

tell (a reference to menu 1)
repeat until it exists
delay 0.2
end repeat
tell menu item "Mute"
click
end tell
end tell
end tell
end tell
end tell
end tell


However, there is a known and well-queried/documented/complained-about phenomenon of an irritating 5-second inexplicable delay between the first click that shows the menu, and the second click that selects the menu item. This isn't specific to Discord, but seems to apply to menu bar icon menus.



Various solutions have been put forward to workaround this, but I won't go into them in detail because none of them are a) reliable, b) without side-effects, or c) clean to implement. You'll undoubtedly do a quick search yourself, and come upon the most common solution, which is to kill the System Events process between the first two click events. But you'll find upon further reading that later on, users report that this method stops working; and in the interrim, causes System Events to throw other, unrelated errors where it didn't before.



Therefore, this solution for you is bittersweet, I'm afraid. I've shown you how to AppleScript your way to the menu item you want; but the end result may not be any more appealing than your first option.



EDIT: Possible Non-AppleScript Solution



Having downloaded a copy of Discord myself to see what's what, I first note that my version of the application has no such menu bar icon to speak of. It must be a setting I haven't gleaned upon.



What I did glean upon, however, is the option to set a user-defined keybinding that triggers one of a selection of functions, one of which being a toggle for the mic mute:



Discord Keybindings in macOS



Here, I set up one to bind to Toggle Mute. As you'd expect, it works within the application. Surprisingly, it works outwith the application too, when it doesn't have focus, and even when it's minimised. Even more surprisingly, it worked when Discord was resident on a separate desktop (space), and at no point did the Discord app need to attain focus or the active desktop be switched away from.



I believe this is exactly the solution you're after - a hotkey that operates globally on your system to mute your Discord microphone.







share|improve this answer














share|improve this answer



share|improve this answer








edited Dec 30 '18 at 23:24

























answered Dec 30 '18 at 19:41









CJKCJK

2,688114




2,688114












  • Thank you for your reply CJK. I'm running in to a problem with the script you wrote. When it reaches the following section: repeat until it exists delay 0.2 end repeat It waits until I click the menu myself. I'm guessing that's because the menu doesn't exist until I open it. Once I open the menu the script continues and clicks "Mute". Do you have any suggestions on how to solve this? Thanks again Edit: I see the comment reply ignores formatting. Sorry for the mess.

    – Spaisekraft
    Dec 30 '18 at 21:55












  • Are you saying that the menu won't materialise unless you physically click the menu bar icon yourself ? If so, this means the first click command had no effect. Try the following adjustments separately: 1. change the first click to click it; then 2. change click it to perform its action "AXPress"; then, in a new script, try tell app "System Events" to click menu bar item 1 of menu bar 2 of process "Discord". My hope is that (1) or (2) will solve the problem, but my feeling is it won't change anything. (3), I hope, will open the menu (but not click "Mute").

    – CJK
    Dec 30 '18 at 22:42











  • PS. Should none of those suggested changes work, it implies the problem lies with the Discord app and not the script. Somewhere in development, they haven't properly set the accessibility properties of the menu bar icon to allow simulated mouse events from outside sources, or something of parallel nature. As the script works as expected with other menu bar icons from other applications, I fear there's no immediate workaround. However, I have posted an edit to my answer that provides a possible second solution to your dilemma. Let me know if it works for you like it does for me.

    – CJK
    Dec 30 '18 at 23:03











  • Yes the script does work for other applications, but none of the other changes would work for Discord. I did just end up creating a script to toggle mute the mic in the OS, and then run the script on the touchbar using BTT. I'll add that to my original post in case anyone else ever ends up here trying to accomplish this. Thank you for all the help. I've learned a few more things about applescript today :)

    – Spaisekraft
    Dec 30 '18 at 23:21











  • I just noticed in your comment that you said I first note that my version of the application has no such menu bar icon to speak of. It must be a setting I haven't gleaned upon.. I should mention that the menu only appears when you're in a voice channel.

    – Spaisekraft
    Dec 31 '18 at 2:11

















  • Thank you for your reply CJK. I'm running in to a problem with the script you wrote. When it reaches the following section: repeat until it exists delay 0.2 end repeat It waits until I click the menu myself. I'm guessing that's because the menu doesn't exist until I open it. Once I open the menu the script continues and clicks "Mute". Do you have any suggestions on how to solve this? Thanks again Edit: I see the comment reply ignores formatting. Sorry for the mess.

    – Spaisekraft
    Dec 30 '18 at 21:55












  • Are you saying that the menu won't materialise unless you physically click the menu bar icon yourself ? If so, this means the first click command had no effect. Try the following adjustments separately: 1. change the first click to click it; then 2. change click it to perform its action "AXPress"; then, in a new script, try tell app "System Events" to click menu bar item 1 of menu bar 2 of process "Discord". My hope is that (1) or (2) will solve the problem, but my feeling is it won't change anything. (3), I hope, will open the menu (but not click "Mute").

    – CJK
    Dec 30 '18 at 22:42











  • PS. Should none of those suggested changes work, it implies the problem lies with the Discord app and not the script. Somewhere in development, they haven't properly set the accessibility properties of the menu bar icon to allow simulated mouse events from outside sources, or something of parallel nature. As the script works as expected with other menu bar icons from other applications, I fear there's no immediate workaround. However, I have posted an edit to my answer that provides a possible second solution to your dilemma. Let me know if it works for you like it does for me.

    – CJK
    Dec 30 '18 at 23:03











  • Yes the script does work for other applications, but none of the other changes would work for Discord. I did just end up creating a script to toggle mute the mic in the OS, and then run the script on the touchbar using BTT. I'll add that to my original post in case anyone else ever ends up here trying to accomplish this. Thank you for all the help. I've learned a few more things about applescript today :)

    – Spaisekraft
    Dec 30 '18 at 23:21











  • I just noticed in your comment that you said I first note that my version of the application has no such menu bar icon to speak of. It must be a setting I haven't gleaned upon.. I should mention that the menu only appears when you're in a voice channel.

    – Spaisekraft
    Dec 31 '18 at 2:11
















Thank you for your reply CJK. I'm running in to a problem with the script you wrote. When it reaches the following section: repeat until it exists delay 0.2 end repeat It waits until I click the menu myself. I'm guessing that's because the menu doesn't exist until I open it. Once I open the menu the script continues and clicks "Mute". Do you have any suggestions on how to solve this? Thanks again Edit: I see the comment reply ignores formatting. Sorry for the mess.

– Spaisekraft
Dec 30 '18 at 21:55






Thank you for your reply CJK. I'm running in to a problem with the script you wrote. When it reaches the following section: repeat until it exists delay 0.2 end repeat It waits until I click the menu myself. I'm guessing that's because the menu doesn't exist until I open it. Once I open the menu the script continues and clicks "Mute". Do you have any suggestions on how to solve this? Thanks again Edit: I see the comment reply ignores formatting. Sorry for the mess.

– Spaisekraft
Dec 30 '18 at 21:55














Are you saying that the menu won't materialise unless you physically click the menu bar icon yourself ? If so, this means the first click command had no effect. Try the following adjustments separately: 1. change the first click to click it; then 2. change click it to perform its action "AXPress"; then, in a new script, try tell app "System Events" to click menu bar item 1 of menu bar 2 of process "Discord". My hope is that (1) or (2) will solve the problem, but my feeling is it won't change anything. (3), I hope, will open the menu (but not click "Mute").

– CJK
Dec 30 '18 at 22:42





Are you saying that the menu won't materialise unless you physically click the menu bar icon yourself ? If so, this means the first click command had no effect. Try the following adjustments separately: 1. change the first click to click it; then 2. change click it to perform its action "AXPress"; then, in a new script, try tell app "System Events" to click menu bar item 1 of menu bar 2 of process "Discord". My hope is that (1) or (2) will solve the problem, but my feeling is it won't change anything. (3), I hope, will open the menu (but not click "Mute").

– CJK
Dec 30 '18 at 22:42













PS. Should none of those suggested changes work, it implies the problem lies with the Discord app and not the script. Somewhere in development, they haven't properly set the accessibility properties of the menu bar icon to allow simulated mouse events from outside sources, or something of parallel nature. As the script works as expected with other menu bar icons from other applications, I fear there's no immediate workaround. However, I have posted an edit to my answer that provides a possible second solution to your dilemma. Let me know if it works for you like it does for me.

– CJK
Dec 30 '18 at 23:03





PS. Should none of those suggested changes work, it implies the problem lies with the Discord app and not the script. Somewhere in development, they haven't properly set the accessibility properties of the menu bar icon to allow simulated mouse events from outside sources, or something of parallel nature. As the script works as expected with other menu bar icons from other applications, I fear there's no immediate workaround. However, I have posted an edit to my answer that provides a possible second solution to your dilemma. Let me know if it works for you like it does for me.

– CJK
Dec 30 '18 at 23:03













Yes the script does work for other applications, but none of the other changes would work for Discord. I did just end up creating a script to toggle mute the mic in the OS, and then run the script on the touchbar using BTT. I'll add that to my original post in case anyone else ever ends up here trying to accomplish this. Thank you for all the help. I've learned a few more things about applescript today :)

– Spaisekraft
Dec 30 '18 at 23:21





Yes the script does work for other applications, but none of the other changes would work for Discord. I did just end up creating a script to toggle mute the mic in the OS, and then run the script on the touchbar using BTT. I'll add that to my original post in case anyone else ever ends up here trying to accomplish this. Thank you for all the help. I've learned a few more things about applescript today :)

– Spaisekraft
Dec 30 '18 at 23:21













I just noticed in your comment that you said I first note that my version of the application has no such menu bar icon to speak of. It must be a setting I haven't gleaned upon.. I should mention that the menu only appears when you're in a voice channel.

– Spaisekraft
Dec 31 '18 at 2:11





I just noticed in your comment that you said I first note that my version of the application has no such menu bar icon to speak of. It must be a setting I haven't gleaned upon.. I should mention that the menu only appears when you're in a voice channel.

– Spaisekraft
Dec 31 '18 at 2:11

















draft saved

draft discarded
















































Thanks for contributing an answer to Ask Different!


  • Please be sure to answer the question. Provide details and share your research!

But avoid


  • Asking for help, clarification, or responding to other answers.

  • Making statements based on opinion; back them up with references or personal experience.

To learn more, see our tips on writing great answers.




draft saved


draft discarded














StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fapple.stackexchange.com%2fquestions%2f347057%2fapplescript-to-mute-discord%23new-answer', 'question_page');

);

Post as a guest















Required, but never shown





















































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown

































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown






Popular posts from this blog

How to check contact read email or not when send email to Individual?

Displaying single band from multi-band raster using QGIS

How many registers does an x86_64 CPU actually have?