var sml_img = { }; // Переменные голосовух var mediaRecorder var setIntervalSound var timerSecMessage = 0 var flagVoice = false var chunksVoice = [] Element.prototype.remove = function() { this.parentElement.removeChild(this); } NodeList.prototype.remove = HTMLCollection.prototype.remove = function() { for(var i = 0, len = this.length; i < len; i++) { if(this[i] && this[i].parentElement) { this[i].parentElement.removeChild(this[i]); } } } var chat = { key:'', room:'', count:0, time:0, t:null, //timer t2:null, //timer 2 t_all:{}, //time molch r:0, g:0, rtime:37, ct:{ '-1':0, '1':15, '2':30, '3':60, '4':300}, saveData:null, msg_id:0, nrg:0, nozpros:0, newmsg:0, sound:0, translit:0, filter:0, globalMsg:0, ignoreList:{x:0,nms:[]}, citySys:0, inObj:null, userSendMessage: false, efftxt:function(id,txt) { var r = txt; return r; }, ignore: function (login) { if (this.ignoreList[login] != undefined) { if ($('#ignr_alu').attr('id') != undefined) { $(`#ignr_u_${this.ignoreList[login]}`).remove(); } delete this.ignoreList.nms[this.ignoreList[login]]; delete this.ignoreList[login]; return //msg } this.ignoreList.x++; this.ignoreList[login] = this.ignoreList.x; this.ignoreList.nms[this.ignoreList.x] = login; if ($('#ignr_alu').attr('id') != undefined) { $('#ignr_alu').html(`${$('#ignr_alu').html()}
${login} Clear
`); } return }, getRandom: function (a, b) { return a + ((b - a) * Math.random()); }, feerverk_id:0, feerverk:function(name) { if( name == 'fw04' ) { var frc = { 'name':'fw04', 'x':19, 'top':this.getRandom(1,35), 'left':this.getRandom(0,365), 'width':135, 'sound':this.getRandom(8,10), 'height':99, 'zad':3 }; frc.left -= 35; } if( frc.name != undefined ) { this.sendSound( frc.sound ); var obj = top.frames.main.document.getElementById('frvrks'); if( obj != undefined ) { var newhtml = ''; var i = 1; while( i <= frc.x ) { newhtml += ``; i++; } newhtml = `
${newhtml}
`; $(obj).append(newhtml); this.feerverk_go( this.feerverk_id , frc.x-1 , frc.name , frc.x , frc.zad ); this.feerverk_id++; } } }, feerverk_go: function (id, time_back, img, x, zad) { if (zad > 0) { setTimeout(`chat.feerverk_go(${id},${time_back},"${img}",${x},0);`, 500 * zad); } else { time_back--; var obj = top.frames.main.document.getElementById(`frvanim_${id}`); if (time_back > 0) { var img1 = top.frames.main.document.getElementById(`frvanim_${id}_img${(x-time_back+1)}`); //текущая if (img1 != undefined) img1.style.display = 'none'; var img1 = top.frames.main.document.getElementById(`frvanim_${id}_img${(x-time_back+2)}`); //текущая if (img2 != undefined) img2.style.display = ''; setTimeout(`chat.feerverk_go(${id},${time_back},"${img}",${x},0);`, 50); } else top.frames.main.document.getElementById(`frvanim_${id}`).remove(); } }, ignorUn: function (x) { $(`#ignr_u_${x}`).remove(); this.ignore(this.ignoreList.nms[x]); }, ignorListOpen: function () { var date = '', i = 0; var j = 1; while (j <= this.ignoreList.x) { if (this.ignoreList[this.ignoreList.nms[j]] != undefined) { date += `
${this.ignoreList.nms[j]} Clear
`; } j++; } win.add('ignorListWin', 'Список игнорируемых', `
${date}
`, {}, 0, 1, 'min-width:200px;'); delete date; }, // смайлы addSmile: function (id) { $('#textmsg').val(`${$('#textmsg').val()} :${id}: `); $('#textmsg').focus(); }, lookSmiles: function () { if ($('#chbtn8').attr('class') == 'db cp chatBtn8_1') { return this.lookSmilesWork('', 'chatBtn8_2') } return this.lookSmilesWork('none', 'chatBtn8_1') }, lookSmilesWork: function (display, className) { $('#ttSmiles').css('display', display); $('#chbtn8').attr('class', `db cp ${className}`); }, // оптимизация всех кнопок greyButton_work: function (elemId, className, method, count ) { $(elemId).attr('class', `db cp ${className}`); this[method] = count; }, // кнопка лейки // 1 filterMsg: function () { if ($('#chbtn1').attr('class') == 'db cp chatBtn1_1') { return this.greyButton_work('#chbtn1', 'chatBtn1_2', "filter", 1) } return this.greyButton_work('#chbtn1', 'chatBtn1_1', "filter", 0) }, // кнопка системных сообщений // 2 systemMsg: function () { if ($('#chbtn4').attr('class') == 'db cp chatBtn4_1') { this.greyButton_work('#chbtn4', 'chatBtn4_2', "citySys", 1) $.cookie('citySys', 1); return } this.greyButton_work('#chbtn4', 'chatBtn4_1', "citySys", 0) $.cookie('citySys', 0); return }, // кнопка аудиосообщений // 3 soundChat: function () { if ($('#chbtn7').attr('class') == 'db cp chatBtn7_1') { return this.greyButton_work('#chbtn7', 'chatBtn7_2', "sound", 1) } else if ($('#chbtn7').attr('class') == 'db cp chatBtn7_2') { return this.greyButton_work('#chbtn7', 'chatBtn7_3', "sound", 2) } return this.greyButton_work('#chbtn7', 'chatBtn7_1', "sound", 0) }, // кнопка транслита // 4 translitChat: function () { if ($('#chbtn6').attr('class') == 'db cp chatBtn6_1') { return this.greyButton_work('#chbtn6', 'chatBtn6_2', "translit", 1) } return this.greyButton_work('#chbtn6', 'chatBtn6_1', "translit", 0) }, subValSend: '', subSend: async function () { if ($('#textmsg').val() != '') { if ($('#textmsg').val() != this.subValSend) { if (this.nozpros == 0) { this.trmb(); var textmsg = $('#textmsg').val(); if (cb_date[cb_select] == 7 && (textmsg.match(/to *\[(.*?)\].*/i) || textmsg.match(/private *\[(.*?)\].*/i))) { for (var cb in cb_date) { if (cb_date[cb] == 5) { open_cb(cb, null); } } } if (typeof window.online_send_jqxhr == "undefined" || window.online_jqxhr.readyState == 4) { window.online_send_jqxhr = $.post('online.php?r' + c.rnd + '&cas' + ((new Date().getTime()) + Math.random()), { msg: textmsg, key: this.key, mid: this.msg_id, rndo: c.rnd, cb: cb_date[cb_select] }, function (data) { chat.clearText(); chat.fc(); chat.genchatData(data, 1); chat.scrollNow(true) document.getElementById("textmsg").value = '' }); } } } } }, addto:function(login, type2) { var loginaddT = login; var s = ''; if($('#'+$(this.inObj).attr('id')).attr('id') == undefined) { $('#textmsg').focus(); s = $('#textmsg').val(); } else $(this.inObj).focus(); var reg555 = new RegExp("private\\s*\\[(.*?)\\]",""); var reg551 = new RegExp("to\\s*\\[(.*?)\\]",""); var test1 = s.match(reg555); if(s.match(reg555) == null) { type = "to"; } else if(s.match(reg551) == null) { type = "private"; } var type3 = 'to'; var reg2 = new RegExp(""+type+"(\\s*)\\[(.*?)\\]",""); var cs = s.replace(reg2,""+type+"$1[,$2,]"); var slogin = login.replace(/([\^.*{}$%?\[\]+|\/\(\)])/g,"\\$1"); var reg = new RegExp(""+type+"\\s*\\[.*,\\s*"+slogin+"\\s*,.*\\]",""); var result = ''; var reg3 = new RegExp(""+type+"\\s*\\[(.*?)\\]",""); while(res = s.match(reg3)) { result += `${res[1]},`; s = s.replace(reg3,''); } result = result.replace(/,$/,''); var prar = result.split(','); for(i = 0; i < prar.length; i++) { prar[i] = prar[i].replace(/^\s+/,''); prar[i] = prar[i].replace(/\s+$/,''); } var str = prar.join(', '); if(str) login += ', '; space = ''; if (!s.match(/^\s+/)) space = ' '; var prob = ''; if($('#'+$(this.inObj).attr('id')).attr('id') == undefined && (this.inObj == null || $('#main').contents().find('#'+this.inObj.id).attr('id') == undefined)) { if (!cs.match(reg)) { if (type2 == 'to') { if (test1 != null) type2 = 'private'; } if (loginaddT == 'klan' && type2 == 'private') { if (login == 'klan, ') { s = type2 + ' [klan] to [' + prob + '' + str + '' + prob + ']' + space + s; } else { s = type2 + ' [klan]' + space + s; } } else {s = type2+' ['+prob+''+login+str+''+prob+']'+space+s;} } else { if(type3 == 'to') type3 = "private"; s = type3+' ['+prob+''+str+''+prob+']'+space+s; } } else s = login+str; if (this.inObj != null && $('#main').contents().find(`#${this.inObj.id}`).attr('id') != undefined) { $('#main').contents().find(`#${this.inObj.id}`).val(s); } else if ($('#' + $(this.inObj).attr('id')).attr('id') == undefined) { $('#textmsg').val(s); } else $(this.inObj).val(s); }, clearText: function () { $('#textmsg').val(''); }, reflesh: function () { this.time = 0; this.testTimer(true); }, reMoney: function () { $('#moneyGM').html(`${c.money} кр.`); }, testTimer: function (n) { clearTimeout(this.t); if ($.cookie('btl') != this.btl) { if ($.cookie('btl') > 0) { this.sendSound(2); if (top.frames['main'].smnpty == undefined) { top.frames['main'].location.href = "main.php"; } } this.btl = $.cookie('btl'); } if (this.rtime != this.ct[$.cookie('chatCfg0')] && this.ct[$.cookie('chatCfg0')] != undefined) { this.rtime = this.ct[$.cookie('chatCfg0')]; if (this.time > this.rtime) this.time = this.rtime; } if (this.rtime >= 5 || this.r == 0) //was >- 30 lakris fix { if (this.time < 1) { var aot = { 0: 0, 1: 1, 2: 0 }; if ($('#chcf10').attr('checked') == true) aot[2] = 1; if ($('#autoRefOnline').attr('checked') == true || this.r == 0 || n != false) { aot[0] = 1; } if (this.nozpros == 0) { if (typeof window.online_jqxhr == "undefined" || window.online_jqxhr.readyState == 4) { window.online_jqxhr = $.getJSON(`online.php?r${c.rnd}&cas${((new Date().getTime()) + Math.random())}`, {key: this.key, mid: this.msg_id, r1: aot[0], r2: aot[1], r3: aot[2], rndo: c.rnd}, function (data) { if (data.rnd != null) { chat.genchatData(data); if (data.key != undefined) chat.saveData = data; this.g++; c.rnd = data.rnd; } }); } } this.time = 5; this.r++; } else this.time--; this.t = setTimeout('chat.testTimer(false);clearTimeout(this.t);', 1000); } }, gUser:function(data,ol) { var rt = ''; function data_work (count) { data[count] = this.replaceAll(data[count], "\\", '\\\\'); data[count] = this.replaceAll(data[count], "[s1;]", '"'); data[count] = this.replaceAll(data[count], "[s2;]", '`'); data[count] = this.replaceAll(data[count], "[s3;]", ''); data[count] = this.replaceAll(data[count], "[s4;]", ''); data[count] = this.replaceAll(data[count], "<", ''); data[count] = this.replaceAll(data[count], ">", ''); } if(data[1]!=undefined) { rt = data[1]; if( rt == 'Администратор' ) rt = this.efftxt('fire',rt); if (ol == true) { rt = `${rt}`; } else rt = `${rt}`; if(data[13]!=0) rt = `${rt}`; if (data[10] > 0) { rt = `${rt}`; } if (data[8] != 0) data_work(8) else if (data[9] != 0) data_work(9) // тут function rtData (count) { return rt = `${rt}`; } if(data[4]!=0) { rt = `${rt}`; } if( data[16] > 0 ) rtData(16) rtData(3) if(c.lvl>-1) { if(c.city==data[6]) { if (data[12] > 0) { rt = `${rt}`; } else { rt = `${rt}`; } }else{ rt = `${rt}`; } } rt += `[${data[2]}]`; if (data[11] > c.time) { rt += ` `; this.addRefMolch(data[0], data[11]); } if (data[14] != "") { rt += ` `; } if (data[13] > 0) { if (data[13] == 2) { rt += ` `; } else { rt += ` `; } } if( data[15] == 1 ) rt = `${rt}` } else rt = 'невидимка[??]' return rt; },mlch:{}, justRefMolch: function (id) { $(`#molch${id}`).html(this.timeOut(this.mlch[id])); }, addRefMolch: function (id, tm) { this.t_all[id] = setTimeout(`chat.refMolch(${id})`, 1000); this.mlch[id] = tm; }, refMolch: function (id) { clearTimeout(this.t_all[id]); if (this.mlch[id] > 0) { $(`#molch${id}`).html(this.timeOut(this.mlch[id])); this.t_all[id] = setTimeout(`chat.refMolch(${id})`, 1000); return } $(`#img_molch${id}`).remove(); return delete this.mlch[id], this.t_all; }, fc: function () { $('#textmsg').focus(); }, timeOut: function (v) { msPerDay = ''; dt = new Date(); dt.setTime((v - c.time) * 1000); m1 = dt.getUTCMonth(); d1 = dt.getUTCDay(); h1 = dt.getUTCHours(); min1 = dt.getUTCMinutes(); sec = dt.getUTCSeconds(); if (m1 > 0) msPerDay = `${m1} мес. `; if (d1 > 0 && Math.floor((v - c.time) / (60 * 60 * 24)) == d1) msPerDay = `${d1} д. `; if (h1 > 0) msPerDay += `${h1} ч. `; if (min1 > 0) msPerDay += `${min1} мин. `; if (sec > 0 && msPerDay != '') msPerDay += `${sec} сек. `; if (msPerDay == '') msPerDay = 'меньше минуты.'; delete m1, d1, h1, min1, sec; return msPerDay; }, deleteMessage: async function (id, fc) { if (fc == 1) top.msgdeleted(id) else { $(`#msg_${id}`).remove(); $(`#msg_${id}_sys`).remove(); if (c.admin > 0) { await fetch(`online.php?jack=${c.rnd}&cas${((new Date().getTime()) + Math.random())}`, { method: "POST", delMsg: id }) } } }, clear: function () { if ($('#textmsg').val() == '') { if (confirm('Очистить окно чата?')) { if (top.des == 1) { $(`#canal${cb_date[cb_select]}`).html(''); $('#textmsg').focus(); return } $('#canal5').html(''); $('#textmsg').focus(); return } } return $('#textmsg').val(''); }, scrollNow: function (userTrue) { var $chat_list = document.getElementById("chat_list") var $countChatList = $chat_list.scrollHeight - $chat_list.scrollTop if ($countChatList < $chat_list.offsetHeight + 100) { return $chat_list.scrollBy(0, $chat_list.scrollHeight) } if (userTrue) return $chat_list.scrollBy(0, $chat_list.scrollHeight) }, msgcount:0, sendMsg: function(data) { // Если системное сообщение от моба - длина массива == 10 // Иначе - длина массива == 17 // data[0] - какое-то число // data[1] - видимо номер сообщения в чате за всё время // data[2] - число от 1 до 6 как увидел // data[3] - ник, если покрашенный // data[4] - ник, если не покрашенный // data[5] - само сообщение в чате из инпута // data[6] - цвет покраски ника. Если цвета нет - пустая строка // data[7] - 0 // data[8] - 0 // data[9] - 0 // data[10] - 0 // data[11] - 0 // data[12] - 0 // data[13] - время // data[14] - полная дата // data[15] - пустая строка // data[16] - 0 var msg_see = 1; var global_type = 0; if( data[5] != undefined ) { if( data[5].substring(0,7) == 'global:' ) { global_type = 1; data[5] = data[5].substring(7); } } if (data[0] == 'new') { data[0] = `new_msg_ ${this.newmsg++}`; } if (data[2] == 'delete') this.deleteMessage(data[0]); else if (data['d'] > 0) this.deleteMessage(data['d']); else if (data['s'] > 0) this.deleteMessage(data['s']); else if (data[0] != undefined && top.document.getElementById(`msg_${data[0]}`) == undefined) { var msg = ''; if (data[0] != 0) { if (c.admin > 0) { if (data[12] == 1) { msg += ' unactive '; } } if (data[3] != '') { if (data[16] > 0) { msg += `[${data[3]}]`; } else { msg += `[${data[3]}]`; } if (chat.ignoreList[data[3]] != undefined) msg_see = 0; } if (data[4] != '') { var forYou = 0; //тот кто писал //кому написали, разбор массива if (data[4] != '') { var to = '',to2 = '',arr = data[4].split(','),i = 0,vl = ''; //тем кому писали while (i != -1) { if (arr[i] != undefined) { vl = this.trim(arr[i]); if (vl.toLowerCase() == c.login.toLowerCase()) { forYou++; } if (vl.toLowerCase() == c.login.toLowerCase()) { vl = this.trim(data[3]); } if (i > 0) { to += ', '; to2 += ', '; } if (data[3] != '') { to += `${this.trim(arr[i])}`; if (this.trim(arr[i].toLowerCase()) != c.login.toLowerCase()) { to2 += this.trim(arr[i]); } else { if (data[2] == 2) to2 += this.trim(arr[i]); else to2 += this.trim(vl); } } } else i = -2; i++; } } if(data[2] == 6 || data[2] == 8) { var zmlogin = new RegExp("\\[login:(.*?)\\]",""); var reflcd = new RegExp("\\[reflesh_main_zv_priem:(.*?)\\]",""); if (data[5].match(zmlogin) != null) { zmlogin = data[5].match(zmlogin)[1]; data[5] = data[5].replace(`[login:${zmlogin}]`, `${zmlogin}`); } if (data[5].match(reflcd) != null) { reflcd = data[5].match(reflcd)[1]; data[5] = data[5].replace(`[reflesh_main_zv_priem:${reflcd}]`, ''); } } //Собираем массив кому адресовано сообщение if (data[2] == 6) { //личная системка, внимание msg += ' Внимание! '; } else if (data[2] == 2) { if (forYou > 0) { msg += ` to [${to2}]`; } else { msg += ` to [${to2}]`; } } else if (data[2] == 3) { if (this.trim(data[3].toLowerCase()) == c.login.toLowerCase()) { forYou++; } if (data[3] != '') { if (data[4] == 'klan' && data[2] == 3) { msg += ' private [klan]'; } else if (data[4] == 'paladins' && data[2] == 3) { msg += ' private [paladins]'; } else if (data[4] == 'tarmans' && data[2] == 3) { msg += ' private [tarmans]'; } else { msg += ` private [ ${to} ]`; } } } } msg += ' '; } data[5] = this.replaceAll(data[5],"[s1;]",'"'); data[5] = this.replaceAll(data[5],"[s2;]",'\''); data[5] = this.replaceAll(data[5],"[s3;]",'<'); data[5] = this.replaceAll(data[5],"[s4;]",'>'); if ($.cookie('chatCfg2') != 0) { data[5] = chat.testSmile(data[5]); } if (data[6] != 'Black' && data[6] != '') { var voiceMessageReg = data[5].match(/audio_[0-9]{10}[.]mp3/g) if (voiceMessageReg != null) { msg += ` `; voiceMessageReg = "" } else { if (data.length == 10) { msg += `${data[5]}`; } else { msg += `${chat.regexpURL_true(data[5])}` } } } else { var voiceMessageReg = data[5].match(/audio_[0-9]{10}[.]mp3/g) if (voiceMessageReg != null) { msg += `` voiceMessageReg = "" } else { msg += chat.regexpURL_true(data[5]) } } if(data[2] == 21) { //e text var text = `[loginfrom] ${data[5]}`; var ftps = `${data[3]}`; var mblogin = new RegExp("\\[login:(.*?)\\]",""); text = text.replace('[loginfrom]',ftps); if(text.match(mblogin)!=null) { mblogin = text.match(mblogin)[1]; text = text.replace(`[login:${mblogin}]`,`${mblogin}`); } msg = `${text}`; } if(data[1]>0) { var td = new Date((parseInt(data[1]))*1000); td = [td,null,null,null]; td[1] = td[0].getHours(); td[2] = td[0].getMinutes(); td[3] = td[0].getSeconds(); td[4] = td[0].getDay(); td[5] = td[0].getMonth(); td[6] = td[0].getYear(); var j = 1; while (j < 6) { if (td[j] < 10) td[j] = `0${td[j]}`; j++; } var cls = forYou > 0 ? 'date2' : 'date' if (data[11] > 0) { msg = ` ! ${msg}`; } if (data[10] > 0) { msg = ` G ${msg}`; } var msg22 = ' 0) { msg22 += `oncontextmenu="chat.deleteMessage(${data[0]}); return false;" `; } // ОПТИМИЗАЦИЯ!!! if (data[8] == 2) { if (data[14] == undefined) { data[14] = '--:--'; } if (data[14] == '--:--' && data[1] > 0) { data[14] = data[1]; var date14 = new Date(data[14] * 1000); data[14] = `${date14.getHours()}:${date14.getMinutes()}`; } msg22 += `class="${cls}">${data[14]} `; } else { if (data[13] == undefined) { data[13] = '--:--'; } if (data[13] == '--:--' && data[1] > 0) { data[13] = data[1]; var date13 = new Date(data[13] * 1000); data[13] = `${date13.getHours()}:${date13.getMinutes()}`; } msg22 += `class="${cls}">${data[13]} `; } msg = msg22+msg; } this.msgcount++; msg = `${msg}
`; if (forYou > 0 && this.sound > 0 && this.trim(data[3].toLowerCase()) != c.login.toLowerCase()) { this.sendSound(1); } if(msg_see == 1) { if(this.trim(data[3].toLowerCase()) == c.login.toLowerCase() || forYou == 1 || this.filter == 0) { if( data[9] > 0 ) this.sendSound(data[9]); if( data[15] != undefined && data[15] != 0 ) { this.feerverk( data[15] ); this.feerverk( data[15] ); } if( top.des == 1 ) { if( data[2] < 4 || global_type == 1 ) { //Обычный чат chat.textColor_Work('#canal5', msg, 5) if( global_type == 1 ) { //Системный чат chat.textColor_Work('#canal4', msg, 4) } }else{ //Системный чат chat.textColor_Work('#canal4', msg, 4) chat.textColor_Work('#canal5', msg, 5) } } else { // var $htmlElementsMessage = new DOMParser().parseFromString(messg, "text/html").getElementsByTagName("span")[0] // document.getElementById('canal5').append($htmlElementsMessage) $('#canal5').html(`${$('#canal5').html()}${msg}`); } } } this.scrollNow(false); return delete forYou, cls, msg_see, msg, arr; } }, textColor_Work: function (canal ,messg, count) { var $htmlElementsMessage = new DOMParser().parseFromString(messg, "text/html").getElementsByTagName("span")[0] var $idCanal = canal.match(/canal[0-9]/) var $idCanal0 = document.getElementById($idCanal[0]) if (!$idCanal0) $(canal).html(`${$(canal).html()}${messg}`) else $idCanal0.append($htmlElementsMessage) // console.log(messg) // document.getElementById($idCanal[0]).append($htmlElementsMessage) top.blueTextSee(count); }, testKey: function (m, v) { var i = 0, r = v; v = false; while (i != -1) { if (m[i] != undefined) { if (m[i] == r) { v = i; i = -2; } } else i = -2; i++; } delete r, m; return v; }, isNumber: function (s) { return s = !isNaN(s) ? true : false }, testSmile: function (txt) { txr = txt.split(':'); var i = 1, j = 0, smid = 0; while (i <= txr.length) { if (txr[i] != undefined) { smid = this.testKey(top.sml, txr[i]); imsml = txr[i].split('-'); if (((smid != false || smid == 0) && this.isNumber(txr[i]) != true) || (imsml != undefined && imsml[0] == '%usersmile%')) { if (j < 3 && this.isNumber(top.sml[smid]) != true && (top.sml[smid] != undefined || imsml[0] == '%usersmile%')) { // тут if (imsml[0] == '%usersmile%') { txt = txt.replace(`\:%usersmile%-${imsml[1]}\:`, ``); } else { txt = txt.replace(`\:${txr[i]}\:`, ``); } j++; } } } i++; } return txt; }, trmb: function () { if (this.translit == 1) { $('#textmsg').val(this.convert2($('#textmsg').val())); } }, replaceAll: function (t, v, s) { return t.split(v).join(s); }, regexpURL_true (str) { var finallyStr = str var arrURL = str.match(/[-a-zA-Z0-9а-яА-я@:;%_\+.~#?&\/=]{2,256}\.[a-z]{2,4}\b(\/[-a-zA-Z0-9@:;%_\+.~#?&\/=]*)?/gi) var domainsRUS = str.match(/[a-zA-Z0-9а-яА-Я-]+[.,:;\/?!@#$%^&*()_+-`'"|]+(ком|ру|юа)+/gi) var domainsEN = str.match(/[a-zA-Z0-9а-яА-Я-]+[ .,:;\/?!@#$%^&*()_+-`'"|]+\b(c[o]+m|ua|r[u]{1,}|net|cc)+\b/gi) var regexpForbiddenWords = /\b(old|rebk|combatz|sbkru|urlidru|real|obk2com|bitly|owly|cruelbk|likebk|isgd|fightbk|my-|my-combatc|mbk|anti|ws|s3s|bakubk|idealbk|bespridel|perbk|online|cf|artovik|probk|twar|oyy|krbk|habk|timebk|sbi|eea|sokbk|inbk|refbk|s3s|bk20|analogbk|monstrbk|legendabk|awOev|cruelcity|tlgr|vntr|supbk|cu|tn|af|svel|kwn|krati|ohh|gHjq|ogw|lur|lmy|idz|hop|eee|bestbk|pixl|ssylka|f34r|exelendbk|9tl|qil|2t9|NjQ0|net|bishky|getl|ixz|nvm|prok|5char|tdl|pick|jj|FORM|zik|biz|sns|snsh|pnut|pb8|short|legendabk|prnt|utf|coombats|tiny|orDеNВК|nbk|orden|club|utf|ubit|clc|wocmaet|wiecej|ourl|3le|NikY|fia|iop|ordenbk|s3s|sW|sw|so|xcombat|world|death|legendbattles|plu|dbe|kombatz|over|dek|ci8|goldbk|Zeus|nxt|is|Ndpx|pw|kutt|JovdeT|cort|rexno|bly|tFXUQ|fyi|yf0ck|lst|numl|yx5ru|vhGyJ|GEROY|MOYEP|fuck|lnnk|dhaF|oko|x8b4q|3le|Ru2q|psce|yx5|bg9xH|Rich|Lands|yx|bgH|qil|huxoqM|bgxH|Nextbk|idea|PLAYBK|dance|coronabk|hitbk|ttpham|prnt|RСомbаts|dedmoroz|wmj9bz|king|ZEBK|urlgo|ZniD)+\b/g finallyStr = str.replace(regexpForbiddenWords, () => "") var allURL = new Set() if (domainsEN) for (var key of domainsEN) { if (!key.match(/^[a-zA-zа-яА-я0-9]+$/i)) allURL.add(key) } if (domainsRUS) for (var key of domainsRUS) { if (!key.match(/^[a-zA-zа-яА-я0-9]+$/i)) allURL.add(key) } if (arrURL) for (var key of arrURL) allURL.add(key) if (!allURL.size) return finallyStr var trueURL = [] var falseURL = false for (var key of allURL) { if (key.match(/vk\.com/i)) trueURL.push(key) else if (key.match(/youtube\.com/i)) trueURL.push(key) else if (key.match(/youtu\.be/i)) trueURL.push(key) else if (key.match(/twitch\.tv/i)) trueURL.push(key) else if (key.match(/new-combats\.com/i)) trueURL.push(key) else if (key.match(/https:\/\/rpgtop\.su\/vote\/26677/i)) trueURL.push(key) else if (key.match(/inf\.php/i)) trueURL.push(key) else falseURL = true } if (falseURL) return "В сообщении присутствуют запрещенные ссылки." finallyStr = finallyStr.replace( /(${match}` } else { return `${match}` } } ) finallyStr = finallyStr.replace(regexpForbiddenWords, () => "") return finallyStr }, convert2:function(txt) { var trn = new Array(); trn = txt.split(' '); for(var i=0;i= 0) str = str.replace(this.map_en[i], this.map_ru[i]); newstr += str; return newstr; }, sendSound: function (s) { var svolm = 100; if (this.sound == 0) svolm = 0 else if (this.sound == 1) svolm = 25; else if (this.sound == 2) svolm = 100; var isInternetExplorer = navigator.appName.indexOf("Microsoft") != -1; if (isInternetExplorer && window.document["Sound"] && typeof window.document["Sound"].SetVariable != "undefined") { window.document["Sound"].SetVariable("Volume", svolm); window.document["Sound"].SetVariable("Sndplay", s); } else if(document.getElementById('Sound2') && typeof document.getElementById('Sound2').SetVariable != "undefined") { document.getElementById('Sound2').SetVariable("Volume", svolm); document.getElementById('Sound2').SetVariable("Sndplay", s); } }, getSwf:function(val) { var M$ = navigator.appName.indexOf("Microsoft")!=-1 return (M$ ? window : document)[val] }, trim: function (s) { return this.rtrim(this.ltrim(s)); }, ltrim: function (s) { return s.replace(/^\s+/, ''); }, rtrim: function (s) { return s.replace(/\s+$/, ''); }, multiaddto: function (users, tp) { var arr = users.split(','); var i = arr.length; while (i >= 0) { if (arr[i] != undefined) { this.addto(arr[i], tp); } i--; } }, osize:function(obj) { var size = 0, key; for (key in obj) { if (obj.hasOwnProperty(key)) size++; } return size; }, //Генерируем данные genchatData:function(data,prs) { if (prs == 1) { // console.log("тут") data = $.parseJSON(data); } if (data == null && this.saveData != null) { data = this.saveData; data.js = ''; data.rn = undefined; data.key = undefined; } //Получаем сообщение if (data.msg != undefined) { var ms = $.parseJSON(data.msg); // console.log(ms) if (ms['ld'] > this.msg_id) this.msg_id = ms['ld']; var i = 0; while (i <= ms['id']) { if (ms[`m${i}`] != undefined) { // console.group(ms[`m${i}`]) this.sendMsg(ms[`m${i}`]); } i++; } } //Если есть JS if (data.js != '') eval(data.js); if(data.rnd!=undefined) c.rnd = data.rnd; if (data.rn != undefined) { if ($('#chcf10').attr('checked') == true) { $('#roomName').html(`${data.rn}
Общий онлайн: ${data.xu}`); } else $('#roomName').html(`${data.rn} (${data.xu})`); } if(data.key!=undefined) this.key = data.key; if(data.list!=undefined) { var i = 0, ji = $.parseJSON(data.list), onll = '', fSort = {}, flSort = {},flSortSee = '"Служба Поддержки"'; //сортируем данные while (i <= data.xu) { if (ji[i] != undefined) { jj = ji[i][1].toLowerCase(); //по логину fSort[jj] = i; flSort[i] = jj; flSortSee += `,"${flSort[i]}"`; } i++; } flSortSee = eval(`[${flSortSee}]`); if ($.cookie('chatCfg9') == 1) flSortSee.sort(game.sort2); else flSortSee.sort(game.sort1); //Выводим данные i = 0; var onll_alh = ''; while (i <= data.xu) { if (fSort[flSortSee[i]] != undefined) { if (ji[fSort[flSortSee[i]]][3] == 50) { onll_alh += `${this.gUser(ji[fSort[flSortSee[i]]],true)}`; } else { onll += `${this.gUser(ji[fSort[flSortSee[i]]],true)}`; } } i++; } $('#onlist').html(`${onll_alh}${onll}`); } }, voiceMessage: function () { flagVoice = !flagVoice if (flagVoice) return chat.startRecording(flagVoice) return chat.startRecording(flagVoice) }, startRecording: function (flag) { if (flag) { if (navigator.mediaDevices.getUserMedia) { var $pVoiceMessages = document.getElementById("timerVoiceMess") $pVoiceMessages.hidden = false var constraints = { audio: true } var onSuccess = function (stream) { mediaRecorder = new MediaRecorder(stream); mediaRecorder.start() timerSecMessage = 0 var timerMlSecMessage = 1 setIntervalSound = setTimeout(function tickMlsec() { if (timerSecMessage == 60) { flagVoice = !flagVoice chat.styleRecordButton({ textButt: "Запись", color: "", backgroundColor: "", allSetting: true }) return } if (timerSecMessage > 9) $pVoiceMessages.textContent = `00:${timerSecMessage},${timerMlSecMessage}` else $pVoiceMessages.textContent = `00:0${timerSecMessage},${timerMlSecMessage}` if (++timerMlSecMessage > 9) { timerMlSecMessage = 0 ++timerSecMessage } setIntervalSound = setTimeout(tickMlsec, 100) }, 100) chat.styleRecordButton({ textButt: "Завершить", color: "rgb(165, 0, 0)", backgroundColor: "rgba(255, 0, 0, 0.083)", allSetting: false }) mediaRecorder.ondataavailable = function (e) { chunksVoice.push(e.data) } } var onError = function (err) { console.log(`Ошибка: ${err}`) alert("Ошибка, проверьте подключение или работоспособность микрофона!") } navigator.mediaDevices.getUserMedia(constraints).then(onSuccess, onError) } else console.log("Аудиосообщения не поддерживаются вашим браузером!") return } chat.styleRecordButton({ textButt: "Запись", color: "", backgroundColor: "", allSetting: true }) return }, styleRecordButton: function (objArgs) { var { textButt, color, backgroundColor, allSetting } = objArgs var $buttonVoiceMess = document.getElementById("record") var $pVoiceMessages = document.getElementById("timerVoiceMess") if (allSetting) { clearInterval(setIntervalSound) $pVoiceMessages.textContent = "00:00,0" $buttonVoiceMess.textContent = textButt $buttonVoiceMess.style.color = color $buttonVoiceMess.style.backgroundColor = backgroundColor $pVoiceMessages.hidden = allSetting if (!mediaRecorder) return alert("Ошибка, проверьте подключение или работоспособность микрофона! Если Вы подключили микрофон и всё работает - перезагрузите страницу и попробуйте снова!") mediaRecorder.stop() mediaRecorder.onstop = function (e) { chat.mediaRecorderStop() } mediaRecorder.stream.getAudioTracks().forEach(function (track) { track.stop() }) return } var $footerTop = document.getElementsByClassName("allChat")[1].offsetTop var $tdLeft = $buttonVoiceMess.parentElement.offsetLeft var $VoiceWidth = $buttonVoiceMess.clientWidth var $pVoiceWidth = $pVoiceMessages.clientWidth $pVoiceMessages.style.top = `${$footerTop - 30}px` $pVoiceMessages.style.left = `${($tdLeft + 9) + (($VoiceWidth - $pVoiceWidth) / 2)}px` $buttonVoiceMess.textContent = textButt $buttonVoiceMess.style.color = color $buttonVoiceMess.style.backgroundColor = backgroundColor $pVoiceMessages.hidden = allSetting return }, mediaRecorderStop: function () { if (timerSecMessage < 2) { chunksVoice.pop() return } var blob = new Blob(chunksVoice, { 'type': 'audio/mp3; codecs=opus' }) chunksVoice.pop() var fileReader = new FileReader() fileReader.readAsArrayBuffer(blob) fileReader.onload = async function (event) { var $inputWindow = document.getElementById("textmsg") var arrayBuffer = fileReader.result var response = await fetch("/audio.php", { method: "POST", body: arrayBuffer }) var timeStampFile = await response.text() $inputWindow.value = `${$inputWindow.value} audio_${timeStampFile}.mp3` chat.subSend() } } }