Ejemplo n.º 1
0
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
Ejemplo n.º 2
0
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
Ejemplo n.º 3
0
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
Ejemplo n.º 4
0
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)}!")
Ejemplo n.º 5
0
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:
Ejemplo n.º 6
0
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()
Ejemplo n.º 7
0
                   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()
Ejemplo n.º 8
0
     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()}')
Ejemplo n.º 9
0
 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=