Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
node_modules
1 change: 1 addition & 0 deletions bundle.min.mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
class MessageViewmodel{constructor(e){let t=e.getAttribute("data-pre-plain-text");if(!t){console.error("tried to create a MessageViewmodel with a wrong DIV:",e);throw"a MessageViewmodel must have sender, text and datetime"}this._sender=t.substr(0,t.length-2).split("] ")[1];let s=e.firstChild.firstChild.firstChild;this._text=[...s.childNodes].reduce((e,t)=>{let s=t.nodeValue;if(!s&&t.hasAttribute("data-app-text-template")){let e=t.getAttribute("data-app-text-template");let i=e.substr(0,e.indexOf("$"));s=i+t.textContent+i}return s?e.concat(s):e},"");this._datetime=new Date(t.substr(14,4),t.substr(8,2)-1,t.substr(11,2),t.substr(1,2),t.substr(4,2))}get datetime(){return this._datetime}get sender(){return this._sender}get text(){return this._text}set datetime(e){return this._datetime=e}set sender(e){return this._sender=e}set text(e){return this._text=e}}class MessagesViewmodel extends Array{constructor(...e){super();this.lastChecked=0;e.forEach(e=>this.push(e))}push(e){if(e.sender&&e.text){if(e.datetime>this.lastChecked)this.lastChecked=e.datetime;return super.push(e)}return false}remove(e){let t=[];let s=[...e];this.forEach(e=>{let i=s.findIndex(t=>e.sender==t.sender&&e.text==t.text&&Math.abs(e.datetime-t.datetime)<=6e4);if(i>-1)s.splice(i,1);else t.push(e)});return t}}class ChatView{constructor(e){this._id=e;this._messagesViewmodel=new MessagesViewmodel}querySelector(e,t,s=((e,t,s)=>t||e>=1e4),i=document){return new Promise(a=>{let h=[],r,n=null,l=0;(function o(){r=i.querySelector(e);if(h=s(l+=+t,r,n||r)){a(h===true?null:h)}else{n=r;setTimeout(o,t)}})()})}querySelectorAll(e,t,s=((e,t,s)=>t.length||e>=5e3?t:false),i=document){return new Promise(a=>{let h=[],r,n=null,l=0;(function o(){r=i.querySelectorAll(e);if(h=s(l+=+t,r,n||r)){a(h)}else{n=r;setTimeout(o,t)}})()})}get id(){return this._id}hasNewMessage(){return new Promise(async(e,t)=>{let s=this._messagesViewmodel.map(e=>JSON.stringify(e));e(!!(await this.getMessages()).filter(e=>e.datetime>=this._messagesViewmodel.lastChecked&&!s.includes(JSON.stringify(e))).length)})}popNewMessages(){return new Promise(async(e,t)=>{let s=(await this.getMessages()).remove(this._messagesViewmodel);s.forEach(e=>this._messagesViewmodel.push(e));e(s)})}async postMessage(e){document.querySelector('span._19RFN[title="'+this._id+'"]').dispatchEvent(new MouseEvent("mousedown",{bubbles:true,cancelable:true,view:window}));await this.querySelector('header span[title="'+this.id+'"]',1e3);let t=await this.querySelector("._3u328",1e3,(e,t)=>{if(t){if(t.textContent===""||e>=5e3)return t}return false});t.textContent=e;t.dispatchEvent(new Event("input",{bubbles:true,cancelable:true,view:window}));(await this.querySelector("._3M-N-",1e3)).click();let s;let i=new Date;await this.querySelectorAll("div.message-out div[data-pre-plain-text]",1e3,(t,a)=>{if(t>=5e3)return a;for(let t=a.length-1;t>=0;t--){let h=new MessageViewmodel(a[t]);console.log(h);if(e===h.text&&i-h.datetime<=6e4){s=h;return a}}return false});if(!!s)this._messagesViewmodel.push(s)}async getMessages(){document.querySelector('span._19RFN[title="'+this.id+'"]').dispatchEvent(new MouseEvent("mousedown",{bubbles:true,cancelable:true,view:window}));let e=0;return new MessagesViewmodel(...[...await this.querySelectorAll("div[data-pre-plain-text]",1e3,(t,s)=>{if(t>=5e3||e&&e==s.length)return s;else e=s.length;return false})].map(e=>new MessageViewmodel(e)))}}class ChatMapView extends Map{constructor(...e){super(e.map(e=>[e.id,e]))}async getNextUnansweredChat(){for(let e of this.values()){if(await e.hasNewMessage())return e}return null}static getAllChatsTitles(){return[...document.querySelectorAll("._19RFN[title]")].map(e=>e.title)}}const e="0123456789abcdef".split("");class Cryptography{static _f(t){let s="",i=0;for(;i<4;i++){s+=e[t>>i*8+4&15]+e[t>>i*8&15]}return s}static _d(e,t){return e+t&4294967295}static _j(e,t,s,i,a,h){t=this._d(this._d(t,e),this._d(i,h));return this._d(t<<a|t>>>32-a,s)}static _e(e,t,s,i,a,h,r){return this._j(t^s^i,e,t,a,h,r)}static _k(e,t,s,i,a,h,r){return this._j(s^(t|~i),e,t,a,h,r)}static _h(e,t,s,i,a,h,r){return this._j(t&i|s&~i,e,t,a,h,r)}static _a(e,t,s,i,a,h,r){return this._j(t&s|~t&i,e,t,a,h,r)}static _c(e,t){let s=e[0],i=e[1],a=e[2],h=e[3];s=this._a(s,i,a,h,t[0],7,-680876936);h=this._a(h,s,i,a,t[1],12,-389564586);a=this._a(a,h,s,i,t[2],17,606105819);i=this._a(i,a,h,s,t[3],22,-1044525330);s=this._a(s,i,a,h,t[4],7,-176418897);h=this._a(h,s,i,a,t[5],12,1200080426);a=this._a(a,h,s,i,t[6],17,-1473231341);i=this._a(i,a,h,s,t[7],22,-45705983);s=this._a(s,i,a,h,t[8],7,1770035416);h=this._a(h,s,i,a,t[9],12,-1958414417);a=this._a(a,h,s,i,t[10],17,-42063);i=this._a(i,a,h,s,t[11],22,-1990404162);s=this._a(s,i,a,h,t[12],7,1804603682);h=this._a(h,s,i,a,t[13],12,-40341101);a=this._a(a,h,s,i,t[14],17,-1502002290);i=this._a(i,a,h,s,t[15],22,1236535329);s=this._h(s,i,a,h,t[1],5,-165796510);h=this._h(h,s,i,a,t[6],9,-1069501632);a=this._h(a,h,s,i,t[11],14,643717713);i=this._h(i,a,h,s,t[0],20,-373897302);s=this._h(s,i,a,h,t[5],5,-701558691);h=this._h(h,s,i,a,t[10],9,38016083);a=this._h(a,h,s,i,t[15],14,-660478335);i=this._h(i,a,h,s,t[4],20,-405537848);s=this._h(s,i,a,h,t[9],5,568446438);h=this._h(h,s,i,a,t[14],9,-1019803690);a=this._h(a,h,s,i,t[3],14,-187363961);i=this._h(i,a,h,s,t[8],20,1163531501);s=this._h(s,i,a,h,t[13],5,-1444681467);h=this._h(h,s,i,a,t[2],9,-51403784);a=this._h(a,h,s,i,t[7],14,1735328473);i=this._h(i,a,h,s,t[12],20,-1926607734);s=this._e(s,i,a,h,t[5],4,-378558);h=this._e(h,s,i,a,t[8],11,-2022574463);a=this._e(a,h,s,i,t[11],16,1839030562);i=this._e(i,a,h,s,t[14],23,-35309556);s=this._e(s,i,a,h,t[1],4,-1530992060);h=this._e(h,s,i,a,t[4],11,1272893353);a=this._e(a,h,s,i,t[7],16,-155497632);i=this._e(i,a,h,s,t[10],23,-1094730640);s=this._e(s,i,a,h,t[13],4,681279174);h=this._e(h,s,i,a,t[0],11,-358537222);a=this._e(a,h,s,i,t[3],16,-722521979);i=this._e(i,a,h,s,t[6],23,76029189);s=this._e(s,i,a,h,t[9],4,-640364487);h=this._e(h,s,i,a,t[12],11,-421815835);a=this._e(a,h,s,i,t[15],16,530742520);i=this._e(i,a,h,s,t[2],23,-995338651);s=this._k(s,i,a,h,t[0],6,-198630844);h=this._k(h,s,i,a,t[7],10,1126891415);a=this._k(a,h,s,i,t[14],15,-1416354905);i=this._k(i,a,h,s,t[5],21,-57434055);s=this._k(s,i,a,h,t[12],6,1700485571);h=this._k(h,s,i,a,t[3],10,-1894986606);a=this._k(a,h,s,i,t[10],15,-1051523);i=this._k(i,a,h,s,t[1],21,-2054922799);s=this._k(s,i,a,h,t[8],6,1873313359);h=this._k(h,s,i,a,t[15],10,-30611744);a=this._k(a,h,s,i,t[6],15,-1560198380);i=this._k(i,a,h,s,t[13],21,1309151649);s=this._k(s,i,a,h,t[4],6,-145523070);h=this._k(h,s,i,a,t[11],10,-1120210379);a=this._k(a,h,s,i,t[2],15,718787259);i=this._k(i,a,h,s,t[9],21,-343485551);e[0]=this._d(s,e[0]);e[1]=this._d(i,e[1]);e[2]=this._d(a,e[2]);e[3]=this._d(h,e[3])}static _i(e){let t=e.length,s=[1732584193,-271733879,-1732584194,271733878],i;for(i=64;i<=e.length;i+=64){this._c(s,l(e.substring(i-64,i)))}e=e.substring(i-64);let a=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];for(i=0;i<e.length;i++){a[i>>2]|=e.charCodeAt(i)<<(i%4<<3)}a[i>>2]|=128<<(i%4<<3);if(i>55){this._c(s,a);for(i=0;i<16;i++){a[i]=0}}a[14]=t*8;this._c(s,a);return s}static _b(e){for(let t=0;t<e.length;t++){e[t]=this._f(e[t])}return e.join("")}static md5(e){return this._b(this._i(e))}static messageEncode(e){let t="",s="";for(let i=0;i<=e.length;i++){if(e.charCodeAt(i)>255){s=escape(e.charAt(i));if(s.substring(0,2)=="%u"){t+="|"+s.substring(2,s.length)}else{t+=s}}else{t+=e.charAt(i)}}t=t.replace("|201C","'").replace("|201D","'").replace("|2018","'").replace("|2019","'").replace("`","'").replace("%B4","'").replace("|FF20","").replace("|FE6B","");t=escape(t);return t}}class BotAPI{constructor(){this._sessionID;this._XAI;this._ns;this.language;this._messages;this.init()}init(){this._sessionID="";this._XAI="";this._ns=1;this.language="en";this._messages=[]}postMessage(e){return new Promise((t,s)=>{this._messages.push(e);let i="";let a=new XMLHttpRequest;a.withCredentials=true;let h="https://www."+"c"+"l"+"ev"+"er"+"bot.com/"+"webservice"+"min?uc=UseOfficial"+"C"+"l"+"e"+"ver"+"bot"+"API&";if(this._sessionID)h.concat(`out=${!!this._messages[this._messages.length-2]?Cryptography.messageEncode(this._messages[this._messages.length-2]):""}&in=${Cryptography.messageEncode(this._messages[this._messages.length-1])}&bot=c&cbsid=${this._sessionID}&xai=${this._sessionID.substr(0,3)},${this._XAI}&ns=${this._ns++}&al=&dl=${this.language}&flag=&user=&mode=1&alt=0&reac=&emo=&sou=website&xed=&`);a.open("POST",h);a.onload=e=>{console.log(e.target.responseText);const s=e.target.responseText.split("\r");this._messages.push(s[0]);this._sessionID=s[1];this._XAI=s[2];t(s[0])};let r=`stimulus=${[...this._messages].reverse().map((e,t)=>`${t?`vText${t+1}=`:""}${Cryptography.messageEncode(e)}`).join("&")}&cb_settings_language=${this.language}&cb_settings_scripting=no&sessionid=${this._sessionID}&islearning=1&icognoid=wsf`;i=Cryptography.md5(r.substring(7,33));console.log(r);a.send(r+"&icognocheck="+i)})}}class Bot{constructor(e){this._name=e;this._messagesToBeRead=[];this._messagesToBeSent=[];this._api=new BotAPI}get name(){return this._name}set name(e){return this._name=e}addMessageToBeRead(e){return this._messagesToBeRead.push(e)}addMessageToBeSent(e){this._sent=false;return this._messagesToBeSent.push("```["+this.name+"]``` "+e)}clearMessagesToBeSent(){this._messagesToBeSent.length=0}clearMessagesToBeRead(){this._messagesToBeRead.length=0}reply(){return new Promise((e,t)=>{console.log("Bot.reply()");console.log(this.name+"_messagesToBeRead",this._messagesToBeRead);if(!this._messagesToBeRead.length){e();return}this._api.postMessage(this._messagesToBeRead[this._messagesToBeRead.length-1]).then(t=>{this.addMessageToBeSent(t);this._messagesToBeRead.length=0;e()})})}getAnswer(){let e=[...this._messagesToBeSent];this._messagesToBeSent.length=0;return e.length?e[e.length-1]:""}}class Chat{constructor(e){this._id=e;this._messages=[];this._messagesToBeRead=[];this._messagesToBeSent=[];this._bots=new Map}bots(){return this._bots}addBot(e){this._bots.set(e.name,e)}get id(){return this._id}set id(e){this._id=e}get messages(){return[...this._messages]}addMessageToBeRead(e){if(e){this._messagesToBeRead.push(e);return this._messages.push(e)}}addMessageToBeSent(e){if(e){this._messagesToBeSent.push(e);return this._messages.push(e)}}clearMessagesToBeRead(){this._messagesToBeRead.length=0}popMessagesToBeSent(){const e=[...this._messagesToBeSent];this._messagesToBeSent.length=0;return e}reply(){return new Promise(async(e,t)=>{for(let e of this._bots.values()){this._messagesToBeRead.forEach(t=>{let s="";if(new RegExp(`\\b${e.name}\\b`,"i").test(t)){if(t.includes("[```"+e.name+"```:reset]"))return e.clearMessagesToBeRead();else if(t.includes("[```"+e.name+"```:listening]"))return;s=t.replace(new RegExp(`[^a-z|\\d|\\u00E0-\\u00FC]*\\b${e.name}\\b[^a-z|\\d|\\u00E0-\\u00FC]*`,"i"),"");if(/[a-z|\d]\s*$/i.test(s))s+="."}if(s.length>1)e.addMessageToBeRead(s)})}this.clearMessagesToBeRead();await Promise.all([...this._bots.values()].map(e=>e.reply()));this._bots.forEach(e=>{e.clearMessagesToBeRead();this.addMessageToBeSent(e.getAnswer())});e()})}}class ChatMap extends Map{constructor(...e){super(e.map(e=>[e.id,e]))}}class ChatController{constructor(e,t){this._chat=e;this._chatView=t}async hasNewMessage(){return await this._chatView.hasNewMessage()}update(){}messages(){this._chat.messages()}async addBot(e){this._chat.addBot(e);await this._chatView.postMessage("```["+e.name+":reset]```");await this._chatView.postMessage("```["+e.name+":listening]```")}}class ChatMapController extends Map{constructor(e,t){super();this._chatMap;this._chatMapView;this._intervalID;this._refreshInterval;this.init(e,t)}init(e,t){this._chatMap=e;this._chatMapView=t;this._intervalID=0;this._refreshInterval=3e3;if(this._chatMap.size!=this._chatMapView.size)throw"Number of models and views doesn't match.";this._chatMap.forEach(e=>{let t=this._chatMapView.get(e.id);if(!t)throw`There is no chatview called "${e.id}"`;this.set(e.id,new ChatController(e,t))})}listen(){if(this._intervalID)return false;this._intervalID=setInterval(this.update.bind(this),this.refreshInterval);return true}pauseListening(){if(this._intervalID)clearInterval(this._intervalID);this._intervalID=0}set refreshInterval(e=3e3){this._refreshInterval=e;if(this._intervalID){clearInterval(this._intervalID);this.listen()}}get refreshInterval(){return this._refreshInterval}async update(){this.pauseListening();let e=await this._chatMapView.getNextUnansweredChat();if(e){let t=await e.popNewMessages();let s=this._chatMap.get(e.id);console.log("newMessages",t);t.forEach(e=>s.addMessageToBeRead(e.text));s.reply().then(()=>{s.popMessagesToBeSent().forEach(t=>e.postMessage(t));this.listen()}).catch(console.log)}else{this.listen()}}}
Loading