!7 static long attnTimeout = 10000; sS denkmodulID = #1013938; sS friendlySound = #1009564; //#1013870 sS angrySound = #1013884; sS startUpSound = null; //#1013982; sS defaultText = "Sorry"; sS regexpActivator = "Katze|Katze|Katja|Qatar|Cookson|Captain|Cat|Kettle|Cut|Kurt|Computer"; static JTextArea ta; static IVar text; static Class recognizer; static Class denkmodul; static long attention, skipTill; sbool fullAttention; p-subst { javaSoundOnly(); loadLibrary(#1013975); autoRestart(10.0); bot("Katze."); recognizer = hotwire(#1009816); //denkmodul = run(denkmodulID); runInMCVarWithAutoRestart('denkmodul, denkmodulID, f denkmodulLoaded); //autoRestartModule('denkmodul, denkmodulID, true); text = persistentVar("Text"); ta = fontSize(20, bindTextAreaToVar(text, jwordwraptextarea())); moveCaretToEnd(ta); //showFrame(ta); consoleIcon(#1101168); consoleMainContainer(); // cache it before changing layout SingleComponentPanel scp = singleComponentPanel(); //JSplitPane sp = jhsplit(ta, scp); JPanel sp = jhgrid(ta, scp); JTextArea cta = consoleTextArea(); replaceAWTComponent(cta, sp); scp.setComponent(cta); //setSplitPaneLater(sp, 0.5); //addToWindowLeftHalf(consoleFrame(), ta); doubleWindowSizeToTheLeft(consoleFrame()); set(recognizer, onFirstWebSocket := r { playMP3Snippet(startUpSound); }); set(recognizer, onUtterance := voidfunc(S utterance) { if (match("turn off", utterance)) call(recognizer, 'stopRecognition); appendToTextAreaAndMoveCaret(ta, utterance + "\n"); callAnswerMethodVerbose(utterance); }); //set(recognizer, startRecognition := true); callMain(recognizer); //call(recognizer, 'switchToGerman); } sS answer(fS s) { if (sysNow() < skipTill) null; if (sysNow() >= attention+attnTimeout) attnOff(); if (attention != 0) { attnOff(); if "nichts|nix|vergiss es|nothing|forget it" { playWAVSnippet(#1013870); } try answer denk(s); } S reKatze; if (regexpICFind(reKatze = reKatze(), s)) { fullAttention = true; S rest = regexpICLastGroup("(" + reKatze + ")(.*)", s); // e.g. "Computer[ ]spiel George Michael" if (startsWithLetter(rest) && !swic(rest, "spiel")) rest = trim(substring(rest, indexOf(rest, ' '))); if (nempty(rest)) try answer denk(rest); else { if (isShit(s)) playMP3Snippet(angrySound); else playMP3Snippet(friendlySound); attention = sysNow(); fullAttention = true; print("attn"); ret "Yo"; } } L g = regexpGetGroups("(-?\\d+) x (-?\\d+)", s); if (g != null) ret speak_withBlip(str(parseLong(first(g))*parseLong(second(g)))); null; } sbool isShit(S s) { ret regexpICFind("scheiß", s); } sS denk(S s) { print(">> " + s); S a = "Fehler"; try { a = denk2(s); } catch e { if (eqic(getInnerMessage(e), "command stopped")) null; else printStackTrace(e); } if (empty(a)) { if (!fullAttention) null; a = defaultText; } else { attention = sysNow(); fullAttention = false; print("half attn"); } skipTill = sysNow()+60000; try { speak_withBlip(a); } finally { skipTill = sysNow()+1000; } ret a; } sS denk2(S s) { if "neu" { upgradeModuleVar('denkmodul, denkmodulID, true); ret "OK"; } ret callAnswerFunction(denkmodul, s); } svoid attnOff { if (attention == 0) ret; attention = 0; print("attn off"); } sS speak_withBlip(S s) { ret speakInRecognizerLanguage_withBlip(s); } svoid denkmodulLoaded { setOpt(denkmodul, actions := true); } sS reKatze() { ret or((S) get(denkmodul, 'regexpActivator), regexpActivator); }