def run(self, event): if event.command_args.count(" ") == 0: number = event.command_args lang = "american" elif event.command_args.split()[1].lower() in ["british", "english"]: number = event.command_args.split()[0] lang = "english" elif event.command_args.split()[1].lower() in ["european", "french"]: number = event.command_args.split()[0] lang = "european" else: number = event.command_args.split()[0] lang = "american" if Commons.check_numbers(number): number = number elif Commons.check_calculation(number): function_dispatcher = event.server.hallo.function_dispatcher calc_func = function_dispatcher.get_function_by_name("calc") calc_obj = function_dispatcher.get_function_object( calc_func) # type: Calculate number = calc_obj.process_calculation(number) else: return event.create_response( "Error, you must enter a valid number or calculation.") return event.create_response(self.number_word(number, lang) + ".")
def passive_run(self, event, hallo_obj): """Replies to an event not directly addressed to the bot.""" if not isinstance(event, EventMessage): return # Check if fullLine is a calculation, and is not just numbers, and contains numbers. if not Commons.check_calculation(event.text): return None if Commons.check_numbers(event.text.replace(".", "")): return None if not any([ char in event.text for char in [str(x) for x in range(10)] + ["e", "pi"] ]): return None # Clean up the line and feed to the calculator. calc = event.text.replace(" ", "").lower() try: self.preflight_checks(calc) answer = self.process_calculation(calc) return event.create_response(answer) except Exception as e: logger.error("Passive calc failed: ", exc_info=e) return None
def test_check_numbers__invalid(calculation): assert not Commons.check_numbers(calculation), ( "Invalid string judged to be calculation, " + calculation)
def test_check_numbers__valid(calculation): assert Commons.check_numbers(calculation), ( "Valid string judged to be not calculation, " + calculation)