class AmelieProgramm: ''' CLI version of AmelieBot. This class is the programm itself. ''' _amelie: Amelie _dialog: Dialog _logger: Logger _console: Console _settingsFile: Settings _fileManager: FileManager _inputMode: object _exceptionStack: list def __init__(self): self._console = Console() self._console.printLogo() self._exceptionStack = list() self._fileManager = FileManager() self._logger = Logger() self._settingsFile = Settings() self._dialog = Dialog('en') if self._settingsFile.getLanguage( ) == '-' else Dialog(self._settingsFile.getLanguage()) #---------------------------------------------------------------------------------------------------------------# # FILLING THE SETTINGS FILE WITH USER INPUT # settingsMethods = self._settingsFile.getMethodsToResolveErrors() for methodname, method in settingsMethods.items(): if methodname == "lang": # print a list of supporting languages and get user input for language setting self._console.write(self._dialog.getMessageFor("chooseLang")) langs = self._settingsFile.getSupportingLangs() for key, value in langs.items(): self._console.write('[' + str(key) + ']') self._console.write(value.upper() + ' ') self._console.write('\n') while (True): langInput = int(self._console.readLine("\n--> ")) if langInput in langs.keys(): method(langs[langInput]) break else: self._console.writeLine( self._dialog.getMessageFor("wrongInput")) self._dialog.changeLanguage(self._settingsFile.getLanguage()) elif methodname == "username": # just get username fron input while (True): self._console.writeLine( self._dialog.getMessageFor("getName")) usernameInput = (self._console.readLine("\n--> ")) # checking the spelling of the username if len(sub('[\t, \n, \r \s]', '', usernameInput)) >= 2: method(usernameInput) break else: continue #---------------------------------------------------------------------------------------------------------------# self._amelie = Amelie(self._settingsFile.getLanguage()) return def __new__(cls): if not hasattr(cls, 'instance'): cls.instance = super(AmelieProgramm, cls).__new__(cls) return cls.instance return cls.instance def restart(self) -> None: restart() return def update(self): ''' Update all programm logic. ''' if len(self._exceptionStack) > 0: excpetion = self._exceptionStack.pop(0) raise excpetion self._amelie.update() return def writeToJournal(self, recordTitle: str, value: str) -> None: ''' Write an info-record to the journal of the program. ''' self._logger.addRecord(recordTitle, value) return def changeInputMode(self, enableVoice: bool): self._amelie.voice = enableVoice if self._amelie.voice: self._inputMode = voiceInput else: self._inputMode = self._console.readLine return def main(self): self._console.writeLine('\n' + self._dialog.getMessageFor("enableVoice")) enableVoice = self._console.readLine("--> ") while (True): if enableVoice == "Y" or enableVoice == "y": enableVoice = True elif enableVoice == "N" or enableVoice == "n": enableVoice = False else: self._console.writeLine( self._dialog.getMessageFor("wrongInput")) enableVoice = self._console.readLine("--> ") continue break username = str(self._settingsFile.getUsername()) userInput = "" if enableVoice == False: while (True): self._console.write('\n' + username + ": ") userInput = self._console.readLine() self._console.writeLine( "\t\t\tAmelie: " + self._amelie.conversation(enableVoice, userInput)) else: while (True): self._console.write('\n' + username + ": ") chatAnswer = self._amelie.conversation(enableVoice, userInput) self._console.write(self._amelie.getUserInput() + '\n') self._console.writeLine("\t\t\tAmelie: " + chatAnswer + '\n') self._console.write(self._dialog.getMessageFor("wait")) msvcrt.getch() return def __del__(self): self._amelie.__del__() self._fileManager.__del__()