Mon 21 Jul 22:43:21 CEST 2025
This commit is contained in:
		
							parent
							
								
									c6a458c8a5
								
							
						
					
					
						commit
						b477779aba
					
				
							
								
								
									
										155
									
								
								js/ui/cordova/www/js/chat.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										155
									
								
								js/ui/cordova/www/js/chat.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							|  | @ -0,0 +1,155 @@ | |||
| // Chat bot moderator agent 
 | ||||
| function chat(options) { | ||||
|   this.delay        = options.delay||2000; | ||||
|   this.rememberCount= options.rememberCount||1000; | ||||
|   this.action       = null; | ||||
|   this.count        = 0; | ||||
|   this.busy         = false; | ||||
|   this.state        = 0; | ||||
|   this.retry        = 0; | ||||
|   this.verbose      = options.verbose||1; | ||||
|   this.timeout      = options.timeout||40000; | ||||
|   this.dialogs      = []; | ||||
|   this.version      = "1.1.7C"; | ||||
|    | ||||
|   this.act = { | ||||
|     // Initialize the moderator agent
 | ||||
|     init : function () { | ||||
|       var t; | ||||
|       log('Chat moderator agent V. '+this.version+' is starting..'); | ||||
|       this.retry  = 0; | ||||
|       this.state  = 0; | ||||
|       this.busy   = false; | ||||
|       negotiate('CPU',10000000); | ||||
|       out(['CHAT']); | ||||
|       // Some sensor API tests
 | ||||
|       t=rd.try(0,['SENSOR','CLOCK',_]); | ||||
|       if (t) log('Got SENSOR CLOCK='+t[2]); else log('NO SENSOR CLOCK'); | ||||
|       t=rd.try(0,['SENSOR','GPS',_]); | ||||
|       if (t) log('Got SENSOR GPS='+t[2]); else log('NO SENSOR GPS'); | ||||
|     }, | ||||
|      | ||||
|     // Get feedback from user: qilling to chat?
 | ||||
|     talk: function () { | ||||
|       var quest; | ||||
|       if (this.verbose) log('Chat moderator agent is talking..')  | ||||
|       if (this.state==0) message('Moderator','Hello, I am '+me()+', your moderator :-)'); | ||||
|       // Blocking operation (with timeout)
 | ||||
|       this.action=null; | ||||
|       this.busy=true; | ||||
|       switch (this.state) { | ||||
|         case 0:  | ||||
|         case 1: quest='What would you like to do?'; break; | ||||
|         case 2: quest='May I ask again?'; break; | ||||
|         case 3:  | ||||
|         case 4: quest='Do you want to change your decision?';  break; | ||||
|       } | ||||
|       question('Moderator',quest,[ | ||||
|         {text:'Chilling',value:'nothing'}, | ||||
|         {text:'Answer questions', value:'questions'}  | ||||
|       ],function (res) { | ||||
|         this.action=res; | ||||
|         if (this.verbose) log('Got answer '+res)  | ||||
|       },this.timeout); | ||||
|     }, | ||||
|      | ||||
|     process: function () { | ||||
|       alt.try(500,[ | ||||
|         ['MESSAGE',_,_], | ||||
|         ['QUESTION',_,_,_] | ||||
|       ], function (t) { | ||||
|         if (t) switch (t[0]) { | ||||
|            case 'MESSAGE':  this.dialogs.push({ | ||||
|              message: t[2], | ||||
|              from:    t[1]   | ||||
|            }); break; | ||||
|            case 'QUESTION': this.dialogs.push({ | ||||
|             question: t[2], | ||||
|             from:     t[1], | ||||
|             options:  t[3] | ||||
|            }); break; | ||||
|         } | ||||
|         if (this.verbose>1) log('process: have '+this.dialogs.length+' dialogs'); | ||||
|       }); | ||||
|     }, | ||||
|      | ||||
|     dodialog: function () { | ||||
|       var action; | ||||
|       if (this.busy) return; | ||||
|       var d=this.dialogs.shift(); | ||||
|       // q= ['QUESTION',id,question, {}]
 | ||||
|       // q= ['QUESTION',id,question, {type:'text'|'number',default?, value?:number|string}]
 | ||||
|       // q= ['QUESTION',id,question, {choices:(string|number|{text,value}) []}]
 | ||||
|   | ||||
|       if (d.message) { | ||||
|         this.busy=true; | ||||
|         message(d.from,d.message); | ||||
|         this.busy=false; | ||||
|       } else if (d.question) { | ||||
|         this.busy=true; | ||||
|         if (d.options.choices)  | ||||
|           action = d.options.choices; | ||||
|         else | ||||
|           action = { | ||||
|             // TODO
 | ||||
|             size:         14, | ||||
|             value:        d.options.value||'',  | ||||
|             sub_type:     d.options.type || 'text', | ||||
|             placeholder:  d.options.default||''  | ||||
|           }; | ||||
| 
 | ||||
|         question(d.from,d.question,action,function (res) { | ||||
|           log('Got answer '+res+' for '+d.from+' and Q '+d.question)  | ||||
|           if (res) out(['ANSWER',d.from,d.question,res]); | ||||
|           this.busy=false; | ||||
|         },this.timeout); | ||||
|       } | ||||
|     }, | ||||
| 
 | ||||
|     wait : function () { | ||||
|       this.busy=false; | ||||
|       if (this.state<4) { | ||||
|         notify('Now I will mediate questions from agents!'); | ||||
|         message('Moderator','Now I will mediate questions from agents!'); | ||||
|         message('Moderator','Hope you will answer their questions!'); | ||||
|       } | ||||
|       this.state=4; | ||||
|       if (this.count==0) log('Chat moderator agent is waiting for '+this.action)  | ||||
|       this.count++; | ||||
|       // maybe pause some time?
 | ||||
|       // maybe remembering?
 | ||||
|     }, | ||||
|      | ||||
|      | ||||
|     remember: function () { | ||||
|       if (this.verbose) log('Chat moderator agent is remembering ..')  | ||||
|       this.busy=false;  | ||||
|       this.count=0; | ||||
|       if (this.action) this.state=3; else this.state=1; | ||||
|       sleep(this.delay*5)     | ||||
|     }, | ||||
|      | ||||
|     end: function () { | ||||
|       log('Chat moderator agent is terminating.')  | ||||
|       kill() | ||||
|     } | ||||
|   } | ||||
|    | ||||
|   this.trans = { | ||||
|     init:talk, | ||||
|     talk:function () {  | ||||
|       return this.action=='questions'?process:remember  | ||||
|     }, | ||||
|     process: function () {  | ||||
|       if (this.dialogs.length) return dodialog; | ||||
|       else return wait  | ||||
|     }, | ||||
|     remember: talk, | ||||
|     dodialog: process, | ||||
|     wait:function () {  | ||||
|       return this.count==this.rememberCount?remember:process; | ||||
|     } | ||||
|   } | ||||
|    | ||||
|   this.next=init | ||||
| } | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user