Uses 911K of libraries. Click here for Pure Java version (16823L/97K).
!7 cmodule Cruddie > DynPrintLogAndEnabled { !include #1027628 // HTTP+HTTPS servers transient S salt; transient WebChatBot chatBot; S myLink() { ret "https://cruddie.site/"; } S botLink() { ret "bot"; /*ret appendWithSlash(myLink(), "bot");*/ } switchable S frontendModuleLibID = "#1027675/ChatBotFrontend"; switchable S backendModuleLibID = "#1027591/DynamicClassesMultiCRUD"; transient S cmdsSnippetID = #1027616; start-thread { File saltFile = secretProgramFile("salt.txt"); S salt = trimLoadTextFile(saltFile); if (empty(salt)) { saveTextFile(saltFile, salt = randomID()); print("Made salt"); } dm_restartOnFieldChange enabled(); if (!enabled) ret; chatBot = new WebChatBot; chatBot.baseLink = botLink(); chatBot.thoughtBot = new ThoughtBot; chatBot.jsOnMsgHTML = "window.processNewStuff(src);"; chatBot.afterHeading = "` + ('webkitSpeechRecognition' in window ? ` " + tag("button", "...", onclick := "startOrStop()", type := 'button, class := 'speechOnBtn, disabled := 'disabled, display := 'inline) /*+ hjs([[console.log("Updating"); window.srUpdate();]])*/ + "` : ``) + `"; chatBot.moreStuff = "window.srUpdate();"; chatBot.start(); set redirectHttpToHttps; start_webServers(javaxSecretDir("cruddie.site/keystore.p12"), "botcompany"); } O webServe(S uri, SS params) { printVars("webServe", +uri); //S cookie = serveHttp_cookieHandling(); new Matches m; if (startsWith(appendSlash(uri), "/bot/", m)) ret chatBot.html("/" + m.rest(), params); S jsOnSpeech = "if (transcript != 'stop listening') window.submitAMsg(transcript);"; S sayScript = [[ window.processNewStuff = function(src) { if ($("#speechResults") == null) return; // no speech // we assume that webkit speech synthesis is present // when there is webkit speech recognition if (!bigOn) return; // not enabled console.log("Got speech"); var match = src.match(/\d+/); if (match == null) return; if (src.match(/NEW DIALOG -->/)) return; console.log("Got incremental"); var re = /bot-utterance">(.*?)</g; var match = re.exec(src); var lastUtterance = null; while (match != null) { lastUtterance = match[1]; match = re.exec(src); } // TODO: properly drop HTML tags/HTML-decode if (lastUtterance) say(lastUtterance); }; ]]; S speechUI = hdiv( "< Talk to me >", id := 'speechResults, style := "margin: 10px") /*+ p(tag("button", "...", onclick := "startOrStop()", type := 'button, id := 'speechOnBtn, disabled := 'disabled))*/; ret hhtml(hmobilefix() + hhead( htitle("CRUDDIE - I manage your anything") + hLoadJQuery2() + hJsMakeCookie()) + hbody(hfullcenter( p(hsnippetimage(#1102905)) + p("Chat bot is doing basic stuff. Documentation coming up.") + stats() + hWebKitSayFunction() + hjavascript(sayScript) + hSpeechRecognition(jsOnSpeech, true, "en-US", false, noWebKit := p("Use Chrome if you want speech recognition"), +speechUI) + hjs((S) chatBot.html("/", litmap(), returnJS := true)) ))); } S cookieToCaseID(S cookie) { ret md5(cookie + salt); } class Request { S cookie, caseID; S frontend, backend; // module IDs *(S *cookie) { caseID = cookieToCaseID(cookie); frontend = dm_makeModuleWithParams_systemQ(frontendModuleLibID, +caseID); backend = dm_makeModuleWithParams_systemQ(backendModuleLibID, +caseID); dm_call(frontend, 'connectToBackend, backend); dm_call(frontend, 'importCmdsFromSnippetIfEmpty, cmdsSnippetID); printVars(+caseID, +backend); } } class ThoughtBot { new ThreadLocal<Request> request; void setSession(S cookie, SS params) { //session.set(uniq_sync(Session, +cookie)); request.set(new Request(cookie)); } S initialMessage() { //ret "Hello from module " + request->backend; ret (S) dm_call(request->backend, 'answer, "stats"); } S answer(S s) { ret (S) dm_call(request->frontend, 'answer, s); } } S stats() { ret p(joinWithBR( "Server temperature is " + dm_cpuTemperature(), n2(numberOfCruddies(), "cruddie") + ", " + n2(vmBus_countResponses chatBotFrontend()) + " loaded", )); } int numberOfCruddies() { ret countDirsInDir(getProgramDir(beforeSlash(frontendModuleLibID))); } }
Began life as a copy of #1027610
download show line numbers debug dex old transpilations
Travelled to 7 computer(s): bhatertpkbcr, mqqgnosmbjvj, pyentgdyhuwx, pzhvpgtvlbxg, tvejysmllsmz, vouqrxazstgt, xrpafgyirdlv
No comments. add comment
Snippet ID: | #1027689 |
Snippet name: | Cruddie [backup before awesomplete] |
Eternal ID of this version: | #1027689/1 |
Text MD5: | 17a7e98ad824c1a5084dd37f7a163e91 |
Transpilation MD5: | aa38553a8feee7a5647fb0012f592e42 |
Author: | stefan |
Category: | |
Type: | JavaX source code (Dynamic Module) |
Public (visible to everyone): | Yes |
Archived (hidden from active list): | No |
Created/modified: | 2020-03-30 20:00:03 |
Source code size: | 4818 bytes / 145 lines |
Pitched / IR pitched: | No / No |
Views / Downloads: | 194 / 267 |
Referenced in: | [show references] |