예제 #1
0
class IOHandler():
    def __init__(self, args, datastore):
        self.args = args
        self.datastore = datastore
        self.responder = Responder(args, datastore, self)

        if args.use_irc:
            self.ircbot = IRCBot(args)

    def get_message(self) -> str:
        '''Returns the next message from the user'''
        if self.args.use_irc:
            return self.ircbot.get_message()

        return input("> ")

    def send_message(self, message: str) -> None:
        '''Sends a message to the user'''
        if self.args.use_irc:
            return self.ircbot.send_message(message)

        print(f"{self.args.bot_name}: {message}\n")

    def ask_question(self, question: str) -> str:
        '''Prompts the user with question, returns their response'''
        self.send_message(question)
        return self.get_message()

    def listen(self) -> None:
        '''Main loop of the chatbot. Gets messages, prints response. Returns when program is over'''

        while True:
            try:
                message = self.get_message()

                #Exit condition
                if self.responder.is_signaling_exit(message):
                    self.send_message(self.responder.get_exit_phrase())
                    return

                self.send_message(self.responder.get_response(message))

            except KeyboardInterrupt:
                self.send_message(self.responder.get_exit_phrase())
                break
예제 #2
0
def log(text):
    print("[%s] %s" % (str(datetime.now()), text))


while True:
    pcm = audio_stream.read(porcupine.frame_length)
    pcm = struct.unpack_from("h" * porcupine.frame_length, pcm)

    result = porcupine.process(pcm)
    if result >= 0:
        log("Hotword Detected: %s" % KEYWORDS[result])
        in_fname = get_command_recording()
        _, out_fname = tempfile.mkstemp(".mp3", "tts_out")
        aud_file = open(in_fname, "rb")
        ai_response = rp.get_response("not_found", None)
        try:
            resp = ai.speech(aud_file, {"Content-Type": "audio/wav"})
            log("Utterance: %s" % resp["text"])
            intent = resp["intents"][0]["name"]
            log("Intent: %s" % intent)
            ai_response = rp.get_response(intent, resp["traits"])
        except Exception as error:
            print(error)
        finally:
            aud_file.close()
        os.unlink(in_fname)
        log("Response: %s" % ai_response)
        gtitties = gTTS(ai_response, lang="bn")
        gtitties.save(out_fname)
        log("DEBUG (TTS out): %s" % out_fname)