/** * @licstart The following is the entire license notice for the * JavaScript code in this page. * * Copyright (C) 2015 Alicia ( https://ion.nu/ ) * * The JavaScript code in this page is free software: you can * redistribute it and/or modify it under the terms of the GNU * Affero General Public License (GNU AGPL) as published by the Free Software * Foundation, version 3 of the License. * The code is distributed WITHOUT ANY WARRANTY; * without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU AGPL for more details. * * As additional permission under GNU AGPL version 3 section 7, you * may distribute non-source (e.g., minimized or compacted) forms of * that code without the copy of the GNU AGPL normally required by * section 4, provided you include this license notice and a URL * through which recipients can access the Corresponding Source. * * @licend The above is the entire license notice * for the JavaScript code in this page. */ const PRIV_CLOSECAM=2; const PRIV_KICK=8; const PRIV_SETMODS=16; const PRIV_PASSWORD=32; const PRIV_NONOWNER=15; var bincmd=false; function handlecommands(data) { if(bincmd) { if(bincmd.substring(0,6)=='media:') { handlecamdata(finduser(bincmd.substring(6, bincmd.length)), data.data); } bincmd=false; return; } if(data.data.substring(0,5)=='join:') { var user=new User(data.data.substring(5,data.data.length)); if(user.nickname==nickname) { me=user; user.listlabel.style.fontWeight='bold'; // Distinguish ourselves user.listlabel.onclick=changenick; } userlist.push(user); chatnote(user.nickname+' entered the channel'); } else if(data.data.substring(0,4)=='msg:' || data.data.substring(0,3)=='pm:') { var pm=(data.data.substring(0,3)=='pm:'); data=data.data.substring(data.data.indexOf(':')+1, data.data.length); var sep=data.indexOf(':'); if(sep<0){alert("Error, no separator found");} var from=data.substring(0,sep); var msg=data.substring(sep+1, data.length); var tab; if(pm) { if(!(tab=findtab(from))){tabs.push((tab=new Tab(from)));} }else{ tab=tabs[0]; } if(from=finduser(from)){chatmsgon(from.nickname, msg, from.color, tab);} } else if(data.data.substring(0,5)=='nick:') { var sep=data.data.indexOf(':', 5); if(sep<0){alert("Error, no separator found");} var from=data.data.substring(5,sep); var to=data.data.substring(sep+1, data.data.length); if(nickname==from){nickname=to;} chatnote(from+' changed nickname to '+to); var tab; if(tab=findtab(from)) { tab.setname(to); chatnoteon(from+' changed nickname to '+to, tab); } if(from==nickname){nickname=to;} if(from=finduser(from)) { from.nickname=to; from.listlabel.textContent=from.nickname; } } else if(data.data.substring(0,10)=='startnick:') { nickname=data.data.substring(10, data.data.length); } else if(data.data.substring(0,6)=='color:') { var sep=data.data.indexOf(':', 6); if(sep<0){alert("Error, no separator found");} var user=data.data.substring(6,sep); var color=data.data.substring(sep+1, data.data.length); if(user=finduser(user)) { user.color=color; user.listlabel.style.color='#'+color; } } else if(data.data.substring(0,5)=='quit:') { var user=data.data.substring(5, data.data.length); chatnote(user+' quit'); var tab; if(tab=findtab(user)){tab.dead=true; chatnoteon(user+' quit', tab);} if(user=finduser(user)) { document.getElementById('userlist').removeChild(user.listlabel); userlist.splice(userlist.indexOf(user), 1); closecam(user); } } else if(data.data.substring(0,11)=='mediastart:') { var user=data.data.substring(11, data.data.length); chatnote(user+' started broadcasting'); user=finduser(user); user.broadcasting=true; opencam(user); } else if(data.data.substring(0,10)=='mediastop:') { var user=data.data.substring(10, data.data.length); chatnote(user+' stopped broadcasting'); user=finduser(user); user.broadcasting=false; closecam(user); } else if(data.data.substring(0,6)=='media:') { bincmd=data.data; } else if(data.data.substring(0,11)=='httpcamkey:') { var sep=data.data.indexOf(':', 11); if(sep<0){return;} var user=finduser(data.data.substring(11,sep)); var key=data.data.substring(sep+1, data.data.length); var i=0; while(i-1) { alert(data.data.substring(6,sep)+' is logged in as '+data.data.substring(sep+1,data.data.length)); }else{ alert(data.data.substring(6,data.data.length)+' is not logged in'); } } else if(data.data.substring(0,4)=='ban:') { var sep=data.data.indexOf(':', 4); if(sep<0){alert("Error, no separator found");} var banned=data.data.substring(4,sep); var banner=data.data.substring(sep+1,data.data.length); chatnote(banned+' was banned by '+banner); } else if(data.data=='banned') { chatnote('You are banned from this channel'); chatnote=function(){}; // Don't tell banned people to reconnect } else if(data.data.substring(0,9)=='listbans:') { document.getElementById('banlist_placeholder').style.display='none'; data=data.data.substring(9, data.data.length); var sep=data.indexOf(':'); if(sep<0){alert("Error, no separator found");} var name=data.substring(0,sep); var id=parseInt(data.substring(sep+1, data.length)); var listitem=document.createElement('div'); listitem.className='modlistitem'; listitem.textContent=name; listitem.banid=id; var button=document.createElement('button'); button.textContent='X'; button.onclick=function(){connection.send('unban:'+id);}; listitem.appendChild(button); document.getElementById('banlist_list').appendChild(listitem); } else if(data.data.substring(0,6)=='unban:') { var id=data.data.substring(6,data.data.length); var list=document.getElementById('banlist_list'); var i=0; while(i