def reminder(phrase: str) -> None: """Passes hour, minute, am/pm and reminder message to Reminder class which initiates a thread for reminder. Args: phrase: Takes the voice recognized statement as argument and extracts the time and message from it. """ message = re.search(' to (.*) at ', phrase) or re.search(' about (.*) at ', phrase) or \ re.search(' to (.*) after ', phrase) or re.search(' about (.*) after ', phrase) or \ re.search(' to (.*) in ', phrase) or re.search(' about (.*) in ', phrase) or \ re.search(' to (.*)', phrase) or re.search(' about (.*)', phrase) if not message: speaker.speak( text= 'Reminder format should be::Remind me to do something, at some time.' ) return to_about = 'about' if 'about' in phrase else 'to' if 'minute' in phrase: if minutes := support.extract_nos(input_=phrase, method=int): min_ = 'minutes' if minutes > 1 else 'minute' hour, minute, am_pm = ( datetime.now() + timedelta(minutes=minutes)).strftime("%I %M %p").split() create_reminder(hour=hour, minute=minute, am_pm=am_pm, message=message.group(1).strip(), timer=f"{minutes} {min_}", to_about=to_about) return
def set_alarm(phrase: str) -> None: """Passes hour, minute and am/pm to ``Alarm`` class which initiates a thread for alarm clock in the background. Args: phrase: Takes the voice recognized statement as argument and extracts time from it. """ if 'minute' in phrase: if minutes := support.extract_nos(input_=phrase, method=int): hour, minute, am_pm = (datetime.now() + timedelta(minutes=minutes)).strftime("%I %M %p").split() create_alarm(hour=hour, minute=minute, am_pm=am_pm, phrase=phrase, timer=f"{minutes} minutes") return
def delay_calculator(phrase: str) -> Union[int, float]: """Calculates the delay in phrase (if any). Args: phrase: Takes the phrase spoken as an argument. Returns: int: Seconds of delay. """ if not (count := support.extract_nos(input_=phrase)): count = 1
def volume(phrase: str = None, level: int = None) -> None: """Controls volume from the numbers received. Defaults to 50%. See Also: SetVolume for Windows: https://rlatour.com/setvol/ Args: phrase: Takes the phrase spoken as an argument. level: Level of volume to which the system has to set. """ if not level: if 'mute' in phrase.lower(): level = 0 elif 'max' in phrase.lower() or 'full' in phrase.lower(): level = 100 else: level = support.extract_nos(input_=phrase, method=int) if level is None: level = env.volume support.flush_screen() if env.macos: os.system(f'osascript -e "set Volume {round((8 * level) / 100)}"') else: os.system(f'SetVol.exe {level}') support.flush_screen() if phrase: speaker.speak(text=f"{random.choice(conversation.acknowledgement)}!")
def car(phrase: str) -> None: """Controls the car to lock, unlock or remote start. Args: phrase: Takes the phrase spoken as an argument. See Also: API climate controls: 31 is LO, 57 is HOT Car Climate controls: 58 is LO, 84 is HOT """ if not all([env.car_email, env.car_pass, env.car_pin]): logger.warning("InControl email or password or PIN not found.") support.no_env_vars() return disconnected = f"I wasn't able to connect your car {env.title}! Please check the logs for more information." if "start" in phrase or "set" in phrase or "turn on" in phrase: if not shared.called_by_offline: playsound(sound=indicators.exhaust, block=False) extras = "" if target_temp := support.extract_nos(input_=phrase, method=int): if target_temp < 57: target_temp = 57 elif target_temp > 83: target_temp = 83 elif "high" in phrase or "highest" in phrase: target_temp = 83 elif "low" in phrase or "lowest" in phrase: target_temp = 57 else: if vehicle_position := vehicle(operation="LOCATE_INTERNAL"): current_temp, target_temp = get_current_temp( location=vehicle_position) extras += f"Your car is in {vehicle_position['city']} {vehicle_position['state']}, where the " \ f"current temperature is {current_temp}, so " else:
def brightness(phrase: str): """Pre-process to check the phrase received and call the appropriate brightness function as necessary. Args: phrase: Takes the phrase spoken as an argument. """ if not env.macos: support.missing_windows_features() return phrase = phrase.lower() speaker.speak(text=random.choice(conversation.acknowledgement)) if 'set' in phrase: level = support.extract_nos(input_=phrase, method=int) if level is None: level = 50 Thread(target=set_brightness, args=[level]).start() elif 'decrease' in phrase or 'reduce' in phrase or 'lower' in phrase or \ 'dark' in phrase or 'dim' in phrase: Thread(target=decrease_brightness).start() elif 'increase' in phrase or 'bright' in phrase or 'max' in phrase or \ 'brighten' in phrase or 'light up' in phrase: Thread(target=increase_brightness).start()
f"I've changed {len(host_ip)} {plural} to red!") for light_ip in host_ip: preset(host=light_ip, value=[ preset_values.PRESET_VALUES[_type] for _type in list(preset_values.PRESET_VALUES.keys()) if _type in phrase ][0]) elif 'set' in phrase or 'percentage' in phrase or '%' in phrase or 'dim' in phrase \ or 'bright' in phrase: if 'bright' in phrase: level = 100 elif 'dim' in phrase: level = 50 else: level = support.extract_nos(input_=phrase, method=int) if level is None: level = 100 speaker.speak(text=f"{random.choice(conversation.acknowledgement)}! " f"I've set {len(host_ip)} {plural} to {level}%!") level = round((255 * level) / 100) for light_ip in host_ip: lumen(host=light_ip, rgb=level) else: speaker.speak( text= f"I didn't quite get that {env.title}! What do you want me to do to your {plural}?" ) Thread(target=support.unrecognized_dumper, args=[{ 'LIGHTS': phrase }]).start()
speaker.speak( text=f'{random.choice(conversation.acknowledgement)}!') elif 'resume' in phrase_lower or 'play' in phrase_lower: shared.tv.play() speaker.speak( text=f'{random.choice(conversation.acknowledgement)}!') elif 'rewind' in phrase_lower: shared.tv.rewind() speaker.speak( text=f'{random.choice(conversation.acknowledgement)}!') elif 'forward' in phrase_lower: shared.tv.forward() speaker.speak( text=f'{random.choice(conversation.acknowledgement)}!') elif 'set' in phrase_lower and 'volume' in phrase_lower: vol = support.extract_nos(input_=phrase_lower, method=int) if vol is None: speaker.speak( text= f"Requested volume doesn't match the right format {env.title}!" ) else: shared.tv.set_volume(target=vol) speaker.speak( text=f"I've set the volume to {vol}% {env.title}.") elif 'volume' in phrase_lower: speaker.speak( text= f"The current volume on your TV is, {shared.tv.get_volume()}%") elif 'app' in phrase_lower or 'application' in phrase_lower: sys.stdout.write(f'\r{shared.tv.get_apps()}')
to_about = 'about' if 'about' in phrase else 'to' if 'minute' in phrase: if minutes := support.extract_nos(input_=phrase, method=int): min_ = 'minutes' if minutes > 1 else 'minute' hour, minute, am_pm = ( datetime.now() + timedelta(minutes=minutes)).strftime("%I %M %p").split() create_reminder(hour=hour, minute=minute, am_pm=am_pm, message=message.group(1).strip(), timer=f"{minutes} {min_}", to_about=to_about) return elif 'hour' in phrase: if hours := support.extract_nos(input_=phrase, method=int): hour_ = 'hours' if hours > 1 else 'hour' hour, minute, am_pm = ( datetime.now() + timedelta(hours=hours)).strftime("%I %M %p").split() create_reminder(hour=hour, minute=minute, am_pm=am_pm, message=message.group(1).strip(), timer=f"{hours} {hour_}", to_about=to_about) return if not (extracted_time := support.extract_time(input_=phrase)): if shared.called_by_offline: speaker.speak( text=