Implement Discord mute/deafen status detection and control via serial communication
This commit is contained in:
		
							parent
							
								
									110b0daebb
								
							
						
					
					
						commit
						2fdfa7d3df
					
				
							
								
								
									
										18
									
								
								colors.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								colors.py
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,18 @@ | ||||
| import keyboard | ||||
| import time | ||||
| import serial.tools.list_ports as list_ports | ||||
| import pygetwindow as gw | ||||
| import pyautogui | ||||
| 
 | ||||
| while True: | ||||
|     if keyboard.is_pressed('m'): | ||||
|         x, y = pyautogui.position() | ||||
|         time.sleep(1) | ||||
|         color = pyautogui.screenshot().getpixel((x, y)) | ||||
|         print(f"Coordinates: ({x}, {y}), Color: {color}") | ||||
|     if keyboard.is_pressed('d'): | ||||
|         x2, y2 = pyautogui.position() | ||||
|         time.sleep(1) | ||||
|         color2 = pyautogui.screenshot().getpixel((x2, y2)) | ||||
|         print(f"Coordinates: ({x2}, {y2}), Color: {color2}") | ||||
|     time.sleep(0.1) | ||||
							
								
								
									
										
											BIN
										
									
								
								deafen_screenshot.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								deafen_screenshot.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 69 B | 
							
								
								
									
										55
									
								
								main.py
									
									
									
									
									
								
							
							
						
						
									
										55
									
								
								main.py
									
									
									
									
									
								
							| @ -2,6 +2,11 @@ import serial | ||||
| import time | ||||
| import keyboard | ||||
| import serial.tools.list_ports as list_ports | ||||
| import pygetwindow as gw | ||||
| import pyautogui | ||||
| import mss | ||||
| import numpy as np | ||||
| 
 | ||||
| 
 | ||||
| def get_serial_port(): | ||||
|     ports = list(list_ports.comports()) | ||||
| @ -14,6 +19,43 @@ def get_serial_port(): | ||||
|     choice = int(input("Select a port by number: ")) | ||||
|     return ports[choice].device | ||||
| 
 | ||||
| x = -1772 | ||||
| y = 1059 | ||||
| x2 = -1745 | ||||
| y2 = 1064 | ||||
| width = 1 | ||||
| height = 1 | ||||
| expected_r = 242 | ||||
| expected_g = 63 | ||||
| expected_b = 67 | ||||
| 
 | ||||
| def get_discord_status(): | ||||
|     with mss.mss() as sct: | ||||
|         # Define the region where the mute and deafen icons are located | ||||
|         mute_region = {"top": y, "left": x, "width": width, "height": height} | ||||
|         deafen_region = {"top": y2, "left": x2, "width": width, "height": height} | ||||
|          | ||||
|         # Capture the screen region | ||||
|         mute_screenshot = sct.grab(mute_region) | ||||
|         deafen_screenshot = sct.grab(deafen_region) | ||||
|          | ||||
|         # Convert the screenshots to numpy arrays | ||||
|         mute_image = np.array(mute_screenshot) | ||||
|         deafen_image = np.array(deafen_screenshot) | ||||
|          | ||||
|         # Save the screenshots to files | ||||
|         mss.tools.to_png(mute_screenshot.rgb, mute_screenshot.size, output="mute_screenshot.png") | ||||
|         mss.tools.to_png(deafen_screenshot.rgb, deafen_screenshot.size, output="deafen_screenshot.png") | ||||
|          | ||||
|         # Check the pixel color at (0, 0) | ||||
|         mute_status = (mute_image[0, 0, 2] == expected_r and | ||||
|                        mute_image[0, 0, 1] == expected_g and | ||||
|                        mute_image[0, 0, 0] == expected_b) | ||||
|         deafen_status = (deafen_image[0, 0, 2] == expected_r and | ||||
|                          deafen_image[0, 0, 1] == expected_g and | ||||
|                          deafen_image[0, 0, 0] == expected_b) | ||||
|         return mute_status, deafen_status | ||||
| 
 | ||||
| def main(): | ||||
|     port = get_serial_port() | ||||
|     if not port: | ||||
| @ -24,6 +66,10 @@ def main(): | ||||
|         time.sleep(2)  # Wait for the connection to initialize | ||||
|         print("Listening for commands...") | ||||
|          | ||||
|         last_mute_status, last_deafen_status = get_discord_status() | ||||
|         print(f"Mute: {last_mute_status}, Deafen: {last_deafen_status}") | ||||
|         ser.write(f"Mute: {last_mute_status}, Deafen: {last_deafen_status}\n".encode('utf-8')) | ||||
|          | ||||
|         while True: | ||||
|             try: | ||||
|                 if ser.in_waiting > 0: | ||||
| @ -34,9 +80,18 @@ def main(): | ||||
|                         keyboard.send('ctrl+shift+f16') | ||||
|                     elif line == "deafen": | ||||
|                         keyboard.send('ctrl+shift+f15') | ||||
|                     elif line == "status": | ||||
|                         mute_status, deafen_status = get_discord_status() | ||||
|                         ser.write(f"Mute: {mute_status}, Deafen: {deafen_status}\n".encode('utf-8')) | ||||
|                     else: | ||||
|                         print(f"Unknown command: {line}") | ||||
|                      | ||||
|                 current_mute_status, current_deafen_status = get_discord_status() | ||||
|                 if current_mute_status != last_mute_status or current_deafen_status != last_deafen_status: | ||||
|                     ser.write(f"Mute: {current_mute_status}, Deafen: {current_deafen_status}\n".encode('utf-8')) | ||||
|                     print(f"Mute: {current_mute_status}, Deafen: {current_deafen_status}") | ||||
|                     last_mute_status, last_deafen_status = current_mute_status, current_deafen_status | ||||
|                  | ||||
|                 time.sleep(0.1) | ||||
|             except KeyboardInterrupt: | ||||
|                 print("Exiting program.") | ||||
|  | ||||
| @ -1,7 +1,12 @@ | ||||
| #define MUTE_PIN 18 | ||||
| #define DEAFEN_PIN 19 | ||||
| 
 | ||||
| void setup() | ||||
| { | ||||
|     pinMode(16, INPUT_PULLUP); // D16 for "mute" button
 | ||||
|     pinMode(16, INPUT_PULLUP);   // D16 for "mute" button
 | ||||
|     pinMode(17, INPUT_PULLUP); // D17 for "deafen" button
 | ||||
|     pinMode(MUTE_PIN, OUTPUT); | ||||
|     pinMode(DEAFEN_PIN, OUTPUT); | ||||
|     Serial.begin(115200); | ||||
| } | ||||
| 
 | ||||
| @ -18,4 +23,29 @@ void loop() | ||||
|         Serial.println("deafen"); | ||||
|         delay(200); // Debounce delay
 | ||||
|     } | ||||
| 
 | ||||
|     if (Serial.available() > 0) | ||||
|     { | ||||
|         String input = Serial.readStringUntil('\n'); | ||||
|         if (input == "Mute: True, Deafen: False") | ||||
|         { | ||||
|             digitalWrite(MUTE_PIN, HIGH); | ||||
|             digitalWrite(DEAFEN_PIN, LOW); | ||||
|         } | ||||
|         else if (input == "Mute: True, Deafen: True") | ||||
|         { | ||||
|             digitalWrite(MUTE_PIN, HIGH); | ||||
|             digitalWrite(DEAFEN_PIN, HIGH); | ||||
|         } | ||||
|         else if (input == "Mute: False, Deafen: False") | ||||
|         { | ||||
|             digitalWrite(MUTE_PIN, LOW); | ||||
|             digitalWrite(DEAFEN_PIN, LOW); | ||||
|         } | ||||
|         else if (input == "Mute: False, Deafen: True") | ||||
|         { | ||||
|             digitalWrite(MUTE_PIN, LOW); | ||||
|             digitalWrite(DEAFEN_PIN, HIGH); | ||||
|         } | ||||
|     } | ||||
| } | ||||
|  | ||||
							
								
								
									
										
											BIN
										
									
								
								mute_screenshot.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								mute_screenshot.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 69 B | 
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user