def run(self, command: str, regex: str) -> str: try: params = get_params(command, regex, self.regexes.keys()) self._pick_action(command, params) self.await_next_command() except Exception as e: self.log_exception(e)
def run(self, command: str, regex) -> str: try: params = get_params(command, regex, self.regexes.keys()) if all([v == '' for v in params.values()]): if 'stop' in command or 'cancel' in command: if self.timer is not None: if not self.timer.finished.is_set(): self.timer.cancel() self.timer = None self.say('Timer has been cancelled') else: self.say('No timer has been set') else: now = datetime.datetime.now() self.say('It is {0:%I}:{0:%M} {0:%p}'.format(now)) elif any( [v == '' for v in [params['duration'], params['increment']]]): # They forgot one or both of the parameters pass elif self.timer is not None: self.say('You already have a timer set') else: seconds = self._complex_to_seconds(params) # subtract 1 from the total because the TTS call takes a second self._spawn_timer(seconds - 1) self.say('Timer set') self.await_next_command() except Exception as e: self.log_exception(e)
def run(self, command: str, regex) -> str: error = None result = None try: params = get_params(command, regex, self.regexes.keys()) if any([p is None for p in params.values()]) or \ params.keys() == []: return # one useful thing for temperature before_unit = self._strip_degrees(params['before_unit']) after_unit = self._strip_degrees(params['after_unit']) try: before = self.unit_reg(before_unit) after = self.unit_reg(after_unit) if params['after_count'] != '': result = self._convert( after, before, params['after_count'] ) elif params['before_count'] != '': result = self._convert( before, after, params['before_count'] ) except OffsetUnitCalculusError as err: error = f'Conversion Error: {err}' except UndefinedUnitError as err: error = f'Undefined unit: {err}' except DimensionalityError as err: error = f'Conversion Error: {err}' if error is not None: self.send_error(error) elif result is not None: self.say(result) except Exception as e: self.log_exception(e)
def run(self, command: str, regex) -> str: try: params = get_params(command, regex, self.regexes.keys()) action_fn = self._pick_action(params) action_fn() except Exception as e: self.log_exception(e)
def run(self, command: str, regex) -> str: try: params = get_params(command, regex, self.regexes.keys()) action_fn = self._pick_action(params) action_fn() self.finish_action(callback=self.acknowledge) except Exception as e: self.log_exception(e)
def run(self, command: str, regex) -> str: try: result = None params = get_params(command, regex, self.regexes.keys()) expression = params['expression'] if expression == '': return calculator = RPNCalculator() value = calculator.calculate(expression) if is_rounded_whole_number(value): result = f'{value.split(".")[0]}' else: result = f'about {trim_zeroes(f"{float(value):.6f}")}' if result is not None: self.say(result) except Exception as e: self.log_exception(e)
def run(self, command: str, regex) -> str: try: result = None params = get_params(command, regex, self.regexes.keys()) if command == 'flip a coin': result = random.choice(['heads', 'tails']) elif command == 'roll a dice': result = str(random.randint(1, 6)) else: # Dice expression result = self.parse_dice_expression(params['expression']) if is_rounded_whole_number(result): result = f'{result.split(".")[0]}' result = trim_zeroes(f'{float(result):.6f}') if result is not None: self.say(result) except Exception as e: self.log_exception(e)