您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Tieba Chat | 这是一个实现在网页端使用贴吧客户端聊天功能的脚本。通过该脚本,您可以与使用贴吧客户端的好友聊天
当前为
// ==UserScript== // @name Tieba Chat // @version 1.8 // @description Tieba Chat | 这是一个实现在网页端使用贴吧客户端聊天功能的脚本。通过该脚本,您可以与使用贴吧客户端的好友聊天 // @match http://tieba.baidu.com/* // @include http://tieba.baidu.com/* // @author 864907600cc // @icon http://1.gravatar.com/avatar/147834caf9ccb0a66b2505c753747867 // @run-at document-end // @grant none // @noframes // @namespace http://ext.ccloli.com // ==/UserScript== // 本脚本基于 GPLv3 协议开源 http://www.gnu.org/licenses/gpl.html // (c) 86497600cc. Some Rights Reserved. var hex_md5 = (function(g, k) { function l(a) { return n(m(o(a))) }; function m(a) { return h(j(p(a), a.length * 8)) }; function n(e) { try {} catch(a) { g = 0 }; var b = g ? '0123456789ABCDEF': '0123456789abcdef'; var c = ''; var d; for (var a = 0; a < e.length; a++) d = e.charCodeAt(a), c += b.charAt(d >>> 4 & 15) + b.charAt(d & 15); return c }; function o(d) { var b = ''; var c = -1; var a, e; while (++c < d.length) a = d.charCodeAt(c), e = c + 1 < d.length ? d.charCodeAt(c + 1) : 0, 55296 <= a && a <= 56319 && 56320 <= e && e <= 57343 && (a = 65536 + ((a & 1023) << 10) + (e & 1023), c++), a <= 127 ? b += String.fromCharCode(a) : a <= 2047 ? b += String.fromCharCode(192 | a >>> 6 & 31, 128 | a & 63) : a <= 65535 ? b += String.fromCharCode(224 | a >>> 12 & 15, 128 | a >>> 6 & 63, 128 | a & 63) : a <= 2097151 && (b += String.fromCharCode(240 | a >>> 18 & 7, 128 | a >>> 12 & 63, 128 | a >>> 6 & 63, 128 | a & 63)); return b }; function p(c) { var b = Array(c.length >> 2); for (var a = 0; a < b.length; a++) b[a] = 0; for (var a = 0; a < c.length * 8; a += 8) b[a >> 5] |= (c.charCodeAt(a / 8) & 255) << a % 32; return b }; function h(c) { var b = ''; for (var a = 0; a < c.length * 32; a += 8) b += String.fromCharCode(c[a >> 5] >>> a % 32 & 255); return b }; function j(j, l) { j[l >> 5] |= 128 << l % 32, j[(l + 64 >>> 9 << 4) + 14] = l; var g = 1732584193; var h = -271733879; var i = -1732584194; var f = 271733878; for (var k = 0; k < j.length; k += 16) { var n = g; var o = h; var p = i; var m = f; g = a(g, h, i, f, j[k + 0], 7, -680876936), f = a(f, g, h, i, j[k + 1], 12, -389564586), i = a(i, f, g, h, j[k + 2], 17, 606105819), h = a(h, i, f, g, j[k + 3], 22, -1044525330), g = a(g, h, i, f, j[k + 4], 7, -176418897), f = a(f, g, h, i, j[k + 5], 12, 1200080426), i = a(i, f, g, h, j[k + 6], 17, -1473231341), h = a(h, i, f, g, j[k + 7], 22, -45705983), g = a(g, h, i, f, j[k + 8], 7, 1770035416), f = a(f, g, h, i, j[k + 9], 12, -1958414417), i = a(i, f, g, h, j[k + 10], 17, -42063), h = a(h, i, f, g, j[k + 11], 22, -1990404162), g = a(g, h, i, f, j[k + 12], 7, 1804603682), f = a(f, g, h, i, j[k + 13], 12, -40341101), i = a(i, f, g, h, j[k + 14], 17, -1502002290), h = a(h, i, f, g, j[k + 15], 22, 1236535329), g = b(g, h, i, f, j[k + 1], 5, -165796510), f = b(f, g, h, i, j[k + 6], 9, -1069501632), i = b(i, f, g, h, j[k + 11], 14, 643717713), h = b(h, i, f, g, j[k + 0], 20, -373897302), g = b(g, h, i, f, j[k + 5], 5, -701558691), f = b(f, g, h, i, j[k + 10], 9, 38016083), i = b(i, f, g, h, j[k + 15], 14, -660478335), h = b(h, i, f, g, j[k + 4], 20, -405537848), g = b(g, h, i, f, j[k + 9], 5, 568446438), f = b(f, g, h, i, j[k + 14], 9, -1019803690), i = b(i, f, g, h, j[k + 3], 14, -187363961), h = b(h, i, f, g, j[k + 8], 20, 1163531501), g = b(g, h, i, f, j[k + 13], 5, -1444681467), f = b(f, g, h, i, j[k + 2], 9, -51403784), i = b(i, f, g, h, j[k + 7], 14, 1735328473), h = b(h, i, f, g, j[k + 12], 20, -1926607734), g = c(g, h, i, f, j[k + 5], 4, -378558), f = c(f, g, h, i, j[k + 8], 11, -2022574463), i = c(i, f, g, h, j[k + 11], 16, 1839030562), h = c(h, i, f, g, j[k + 14], 23, -35309556), g = c(g, h, i, f, j[k + 1], 4, -1530992060), f = c(f, g, h, i, j[k + 4], 11, 1272893353), i = c(i, f, g, h, j[k + 7], 16, -155497632), h = c(h, i, f, g, j[k + 10], 23, -1094730640), g = c(g, h, i, f, j[k + 13], 4, 681279174), f = c(f, g, h, i, j[k + 0], 11, -358537222), i = c(i, f, g, h, j[k + 3], 16, -722521979), h = c(h, i, f, g, j[k + 6], 23, 76029189), g = c(g, h, i, f, j[k + 9], 4, -640364487), f = c(f, g, h, i, j[k + 12], 11, -421815835), i = c(i, f, g, h, j[k + 15], 16, 530742520), h = c(h, i, f, g, j[k + 2], 23, -995338651), g = d(g, h, i, f, j[k + 0], 6, -198630844), f = d(f, g, h, i, j[k + 7], 10, 1126891415), i = d(i, f, g, h, j[k + 14], 15, -1416354905), h = d(h, i, f, g, j[k + 5], 21, -57434055), g = d(g, h, i, f, j[k + 12], 6, 1700485571), f = d(f, g, h, i, j[k + 3], 10, -1894986606), i = d(i, f, g, h, j[k + 10], 15, -1051523), h = d(h, i, f, g, j[k + 1], 21, -2054922799), g = d(g, h, i, f, j[k + 8], 6, 1873313359), f = d(f, g, h, i, j[k + 15], 10, -30611744), i = d(i, f, g, h, j[k + 6], 15, -1560198380), h = d(h, i, f, g, j[k + 13], 21, 1309151649), g = d(g, h, i, f, j[k + 4], 6, -145523070), f = d(f, g, h, i, j[k + 11], 10, -1120210379), i = d(i, f, g, h, j[k + 2], 15, 718787259), h = d(h, i, f, g, j[k + 9], 21, -343485551), g = e(g, n), h = e(h, o), i = e(i, p), f = e(f, m) }; return Array(g, h, i, f) }; function f(a, b, c, d, f, g) { return e(i(e(e(b, a), e(d, g)), f), c) }; function a(b, a, c, d, e, g, h) { return f(a & c | ~a & d, b, a, e, g, h) }; function b(c, a, d, b, e, g, h) { return f(a & b | d & ~b, c, a, e, g, h) }; function c(b, a, c, d, e, g, h) { return f(a ^ c ^ d, b, a, e, g, h) }; function d(b, a, c, d, e, g, h) { return f(c ^ (a | ~d), b, a, e, g, h) }; function e(b, c) { var a = (b & 65535) + (c & 65535); var d = (b >> 16) + (c >> 16) + (a >> 16); return d << 16 | a & 65535 }; function i(a, b) { return a << b | a >>> 32 - b }; return g = 0, k = '', l } ()); var user_id=window.PageData.user.id||window.PageData.user.user_id; var _client_id='wappc_1398857293796_956', _client_type='2', _client_version='4.2.7', _phone_imei='092887406663530', net_type='3', sign_key='tiebaclient!!!'; /*if(document.cookie.match(/BDUSS=(.{192,}?);?/))var BDUSS=document.cookie.match(/BDUSS=(.{192,}?);?/)[1]; else if(GM_getValue('BDUSS',0)!=0)var BDUSS=GM_getValue('BDUSS'); else{ var BDUSS=prompt('无法获取 BDUSS,请尝试在移动版贴吧注销并登录(不可用)。\n\n1. 将浏览器 UA 设置为移动设备的 UA(例如 Chrome 可在开发者工具中点击右上角的“Show drawer.”,并在下方的 Emulation 里设置 UserAgent;Firefox 可安装 User Agent Overrider 等扩展);\n2. 访问 http://tieba.baidu.com/mo 进行登录(不可用)操作;\n3. 登录(不可用)后禁用 UA 设置,回到贴吧页检查是否可用。\n\n如果希望手动配置 BDUSS,请将 BDUSS 贴在下方并按确定键。'); if(BDUSS!=null&&BDUSS!=''&&BDUSS.match(/.{192,}?/)){ //document.cookie='BDUSS='+BDUSS.match(/.{192,}?/)+'; expires='+(new Date(new Date().getTime()+60*60*24*365*10*1000)).toGMTString()+'; path=/'; GM_setValue('BDUSS',BDUSS); var BDUSS=BDUSS; window.location.href=window.location.href; } throw 'Tieba Chat can\'t get BDUSS!!!'; }*/ var tb_chat_data=JSON.parse(window.localStorage.getItem('tb_chat_data'))||{}; var message_update_timestamp=window.localStorage.getItem('tb_chat_message_update_timestamp')||new Date().getTime(); var message_update_count=window.localStorage.getItem('tb_chat_message_update_count')||0; var user_portrait=''; var com_portrait=''; var chatting_list_page=1; var this_last_msg=0; var this_early_msg=0; var this_username=null; var this_userid=0; var this_msg_update=null; var model=0; if(tb_chat_data.first_install==null){ window.$.dialog.alert('<div style="font-size:14px"><p>欢迎使用 Tieba Chat ~~~ ヽ(//∇//)ノ♡</p><p>这是一个实现在网页端使用贴吧客户端的聊天功能的脚本。通过该脚本,您可以方便地与使用贴吧客户端的好友聊天。</p><p>使用说明:<br>1. 将鼠标划至网页右下角的“贴吧聊天”即可打开聊天界面;<br>2. 点击聊天列表中的用户或贴子楼层右下角“聊天”可以发起聊天,点击“点击加载下/上一页”可以进行翻页操作;<br>3. 在聊天界面下方文本框中输入聊天文字,点击右侧“发送”即可发送消息;<br>4. 在聊天界面点击信息列表最上方的“点击查看更多”即可查看之前的消息(如果存在的话);<br>5. 鼠标移出聊天界面后 0.5 秒可收起聊天界面。</p><p style="color:red">警告:<br>* 该脚本目前仍处于测试阶段,可能存在一些未知错误,请谨慎使用<br><del>* 该脚本需要获取 BDUSS,但并不会将其共享,如果您不信任,请卸载此脚本</del> 已确认不需要 BDUSS<br>* 该脚本目前只能发送和接收文字信息,对于图片、表情、语音等多媒体信息暂不支持(主要是 mini 客户端 api 没有提供)<br>* 本脚本目前只是为实现该功能而编写,暂未考虑效率问题,这可能导致浏览器运行缓慢<br>* 本脚本无缓存功能,所有操作均需要重新访问 api,这可能带来较多的带宽消耗<br>* 此脚本的设计可能比较简陋,暂时还没有设置界面……毕竟只是为了测试而已 OTL</p><p>如有疑问请在 firefox 吧相关贴子讨论……</p></div>',{title:"Tieba Chat 欢迎界面",width:800}) tb_chat_data.first_install=1; window.localStorage.setItem('tb_chat_data',JSON.stringify(tb_chat_data)); } function get_string(c){ var str=''; var str2=''; for(var i in c){ str+=i+'='+c[i]; str2+=i+'='+encodeURIComponent(c[i])+'&'; } var sign=hex_md5(str+sign_key); str2+='sign='+sign; return str2; } function get_message_update(){ var xhr=new XMLHttpRequest(); xhr.onreadystatechange=function(){ if(xhr.readyState==4&&xhr.status==200){ var t=JSON.parse(xhr.responseText); if(t.error_code=='0'){ if(t.error&&t.error.errno!='0'){ var s=show_error(t.error.errno,t.error.errmsg); var t=setTimeout(function(){s.parentElement.removeChild(s);},5000); s.onclick=function(){get_message_update();s.parentElement.removeChild(s);clearTimeout(t);}; throw 'Tieba Chat Error '+t.error.errno+': '+t.error.errmsg; } message_update_timestamp=new Date().getTime(); message_update_count=t.message.pletter; if(message_update_count!='0'){ document.title='【'+message_update_count+' 条新聊天】'+original_title; panel_top.style.color='orange'; } else{ document.title=original_title; panel_top.style.color='#000'; } window.localStorage.setItem('tb_chat_message_update_timestamp',message_update_timestamp); window.localStorage.setItem('tb_chat_message_update_count',t.message.pletter); } else{ var s=show_error(t.error_code,t.error_msg); var t=setTimeout(function(){s.parentElement.removeChild(s);},5000); s.onclick=function(){get_message_update();s.parentElement.removeChild(s);clearTimeout(t);}; throw 'Tieba Chat Error '+t.error_code+': '+t.error_msg; } } } xhr.open('POST','//tieba.baidu.com/c/s/msg?'+get_string()); xhr.send(); } function get_chatting_list(pn){ var xhr=new XMLHttpRequest(); xhr.onreadystatechange=function(){ if(xhr.readyState==4&&xhr.status==200){ var t=JSON.parse(xhr.responseText); if(t.error_code=='0'){ if(t.error&&t.error.errno!='0'){ var s=show_error(t.error.errno,t.error.errmsg); var t=setTimeout(function(){s.parentElement.removeChild(s);},5000); s.onclick=function(){get_chatting_list(pn);s.parentElement.removeChild(s);clearTimeout(t);}; throw 'Tieba Chat Error '+t.error.errno+': '+t.error.errmsg; } switch(model){ case 0: panel_head.textContent='贴吧聊天'; break; case 1: panel_head.textContent='贴吧聊天(标记阅读模式)'; break; case 2: panel_head.textContent='贴吧聊天(删除用户模式)'; break; } panel.setAttribute('model',model); panel_main.innerHTML=''; var panel_list=document.createElement('div'); panel_list.className='tb_chat_panel_list'; panel_main.appendChild(panel_list); chatting_list_page=pn; if(pn>1){ var msg_more=document.createElement('div'); msg_more.textContent='点击加载上一页'; msg_more.style.cssText='width:200px;margin:20px auto;text-align:center;font-size:13px;background:#0CF;padding:5px;-webkit-user-select:none;-moz-user-select:none;cursor:pointer;color:#FFF'; panel_list.appendChild(msg_more); msg_more.onclick=function(){get_chatting_list(pn-1);msg_more.textContent='正在载入......';}; } for(var c in t.record){ var p=document.createElement('div'); p.className='tb_chat_row'; p.setAttribute('user_id',t.record[c].user_id); p.setAttribute('user_name',t.record[c].user_name) p.innerHTML='<div class="tb_chat_pleft"><img class="tb_chat_avatar" src="http://tb.himg.baidu.com/sys/portrait/item/'+t.record[c].portrait+'" alt></div><div class="tb_chat_pright"><div class="tb_chat_username">'+t.record[c].user_name+'</div><div class="tb_chat_lasttext">'+(t.record[c].abstract.length>0?t.record[c].abstract[t.record[c].abstract.length-1].text:'')+'</div></div><div style="clear:both"></div>'; if(t.record[c].unread_count!='0'){ p.style.color='orange'; p.onclick=function(){ panel_top.style.color='#000'; switch(model){ case 0: this_userid=this.getAttribute('user_id'); this_username=this.getAttribute('user_name'); get_latest_msg(this.getAttribute('user_id')); break; case 1: get_latest_msg(this.getAttribute('user_id'),true); this.style.color='#000'; break; case 2: delete_user(this.getAttribute('user_id'),true); break; } } } else p.onclick=function(){ switch(model){ case 0: this_userid=this.getAttribute('user_id'); this_username=this.getAttribute('user_name'); get_latest_msg(this.getAttribute('user_id')); break; case 1: get_latest_msg(this.getAttribute('user_id'),true); break; case 2: delete_user(this.getAttribute('user_id'),true); break; } } panel_list.appendChild(p); } if(t.has_more==1){ var msg_more=document.createElement('div'); msg_more.textContent='点击加载下一页'; msg_more.style.cssText='width:200px;margin:20px auto;text-align:center;font-size:13px;background:#0CF;padding:5px;-webkit-user-select:none;-moz-user-select:none;cursor:pointer;color:#FFF'; panel_list.appendChild(msg_more); msg_more.onclick=function(){get_chatting_list(pn+1);msg_more.textContent='正在载入......';}; } panel_top_left.textContent='+'; panel_top_right.textContent='≡'; panel_top_left.onclick=function(){ var username=prompt('请输入用户名以发起聊天'); if(username!=null&&username!='')get_userid(username); } panel_top_right.onclick=function(){ switch(prompt('请键入以下数字并点击“确定”以完成对应操作:\n1. 进入标记已读模式\n2. 进入删除用户模式\n3. 回到聊天模式\n\n(比较简陋真是抱歉了 _(:з」∠)_ )')){ case '1': alert('现在你可以通过点击聊天面板上的用户来标记已读,标记已读的用户将不会再提醒以前的消息\n警告:该操作仅是方便标记已查阅的消息记录,请注意辨别未查阅的消息,标记过程将不会出现提醒,且操作不可逆\n如果需要回到聊天模式,请点击右上角的三道杠'); model=1; get_chatting_list(pn); break; case '2': alert('现在你可以通过点击聊天面板上的用户来删除该用户,删除的用户将不会再出现在聊天面板上\n警告:该操作仅是方便删除垃圾信息,请注意辨别消息发送用户,标记过程将不会出现提醒,且操作不可逆\n如果需要回到聊天模式,请点击右上角的三道杠'); model=2; get_chatting_list(pn); break; case '3': alert('已回到聊天模式'); model=0; get_chatting_list(pn); } } this_last_msg=0; this_early_msg=0; this_username=null; this_userid=0; } else{ var s=show_error(t.error_code,t.error_msg); var t=setTimeout(function(){s.parentElement.removeChild(s);},5000); s.onclick=function(){get_chatting_list(pn);s.parentElement.removeChild(s);clearTimeout(t);}; throw 'Tieba Chat Error '+t.error_code+': '+t.error_msg; } } } xhr.open('POST','//tieba.baidu.com/c/s/comlist?'+get_string({ //BDUSS:BDUSS, _client_id:_client_id, _client_type:_client_type, _client_version:_client_version, _phone_imei:_phone_imei, net_type:net_type, pn:pn })); xhr.send(); } function get_latest_msg(id,silent){ var silent=silent||false; var xhr=new XMLHttpRequest(); xhr.onreadystatechange=function(){ if(xhr.readyState==4&&xhr.status==200){ var t=JSON.parse(xhr.responseText); if(t.error_code=='0'){ if(t.error&&t.error.errno!='0'){ var s=show_error(t.error.errno,t.error.errmsg); var t=setTimeout(function(){s.parentElement.removeChild(s);},5000); s.onclick=function(){get_latest_msg(id);s.parentElement.removeChild(s);clearTimeout(t);}; throw 'Tieba Chat Error '+t.error.errno+': '+t.error.errmsg; } if(silent==false){ //console.log(this_early_msg+'|'+this_last_msg); if(id!=this_userid||document.getElementsByClassName('tb_chat_panel_list')[0])panel_main.innerHTML=''; panel_head.textContent=this_username; if(document.getElementsByClassName('tb_chat_panel_msg')[0])var panel_msg=document.getElementsByClassName('tb_chat_panel_msg')[0]; else{ var panel_msg=document.createElement('div'); panel_msg.className='tb_chat_panel_msg'; panel_main.appendChild(panel_msg); } com_portrait=t.com_portrait; user_portrait=t.user_portrait; if(t.has_more==1){ var msg_more=document.createElement('div'); msg_more.textContent='点击加载更多'; msg_more.style.cssText='width:200px;margin:20px auto;text-align:center;font-size:13px;background:#0CF;padding:5px;-webkit-user-select:none;-moz-user-select:none;cursor:pointer;color:#FFF'; panel_msg.appendChild(msg_more); msg_more.onclick=function(){get_early_msg(id,panel_msg,msg_more);}; } for(var c in t.message){ var p=document.createElement('div'); p.className='tb_chat_message'; if(t.message[c].from=='0'){ p.className+=' com'; p.innerHTML='<div class="tb_chat_pleft"><img class="tb_chat_avatar" src="http://tb.himg.baidu.com/sys/portrait/item/'+com_portrait+'" alt></div><div class="tb_chat_pright"><div class="tb_chat_message_inner">'+(t.message[c].content[0].text||'未知数据')+'</div></div><div style="clear:both"></div>'; } else{ p.className+=' user'; p.innerHTML='<div class="tb_chat_pleft"><img class="tb_chat_avatar" src="http://tb.himg.baidu.com/sys/portrait/item/'+user_portrait+'" alt></div><div class="tb_chat_pright"><div class="tb_chat_message_inner">'+(t.message[c].content[0].text||'未知数据')+'</div></div><div style="clear:both"></div>'; } p.setAttribute('msg_id',t.message[c].msg_id); p.title='Post @ '+new Date(t.message[c].time*1000); panel_msg.appendChild(p); if(parseInt(t.message[c].msg_id,10)<parseInt(this_early_msg,10)||this_early_msg==0)this_early_msg=t.message[c].msg_id; if(parseInt(t.message[c].msg_id,10)>parseInt(this_last_msg,10)||this_last_msg==0)this_last_msg=t.message[c].msg_id; //console.log(this_early_msg+'|'+this_last_msg); } panel_msg.scrollTop=panel_msg.scrollHeight; this_userid=id; if(!document.getElementsByClassName('tb_chat_msg_panel')[0]){ var msg_panel=document.createElement('div'); var msg_textarea=document.createElement('textarea'); var msg_send=document.createElement('div'); msg_panel.style.cssText='width:100%;height:50px;position:absolute;bottom:0;left:0'; msg_panel.className='tb_chat_msg_panel'; panel_main.appendChild(msg_panel); msg_textarea.style.cssText='width:320px;height:36px;font-size:12px;margin:7px;position:absolute;left:0;top:0;resize:none'; msg_textarea.className='tb_chat_msg_textarea'; msg_panel.appendChild(msg_textarea); msg_send.style.cssText='width:50px;height:25px;font-size:14px;line-height:25px;text-align:center;position:absolute;margin:15px 7px;right:0;top:0;background:#0CF;cursor:pointer;color:#FFF'; msg_send.textContent='发送'; msg_panel.appendChild(msg_send); msg_send.onclick=function(){add_message(id,this_last_msg,msg_textarea.value);}; msg_textarea.onfocus=function(event){ msg_textarea.onkeydown=function(event){if(event.ctrlKey==1&&event.keyCode==13)add_message(id,this_last_msg,msg_textarea.value);}; } msg_textarea.onblur=function(){ msg_textarea.onkeydown=null; } window.onfocus=function(){if(this_msg_update==null)this_msg_update=setInterval(function(){if(document.getElementsByClassName('tb_chat_msg_panel')[0]&&panel.hasAttribute('show'))get_latest_msg(id)},10000);}; window.onblur=function(){if(this_msg_update!=null){clearInterval(this_msg_update);this_msg_update=null;}}; panel_top_left.textContent='←'; panel_top_right.textContent='≡'; panel_top_right.onclick=function(){ switch(prompt('请键入以下数字并点击“确定”以完成对应操作:\n1. 清空当前用户全部聊天记录\n2. 从聊天列表内删除当前用户\n\n(比较简陋真是抱歉了 _(:з」∠)_ )')){ case '1': delete_msg(id); break; case '2': delete_user(id); break; } } panel_top_left.onclick=function(){ get_chatting_list(chatting_list_page); if(this_msg_update!=null){ clearInterval(this_msg_update); this_msg_update=null; } window.onfocus=null; window.onblur=null; }; } } get_message_update(); } else{ var s=show_error(t.error_code,t.error_msg); var t=setTimeout(function(){s.parentElement.removeChild(s);},5000); s.onclick=function(){get_latest_msg(id);s.parentElement.removeChild(s);clearTimeout(t);}; throw 'Tieba Chat Error '+t.error_code+': '+t.error_msg; } } }; xhr.open('POST','//tieba.baidu.com/c/s/recentmsg?'+get_string({ //BDUSS:BDUSS, _client_id:_client_id, _client_type:_client_type, _client_version:_client_version, _phone_imei:_phone_imei, com_id:id, msg_id:this_last_msg, net_type:net_type, user_id:user_id })); xhr.send(); } function get_early_msg(id,panel_msg,msg_more){ msg_more.textContent='正在载入......'; var scroll_top=panel_msg.scrollHeight-panel_msg.scrollTop; var xhr=new XMLHttpRequest(); xhr.onreadystatechange=function(){ if(xhr.readyState==4&&xhr.status==200){ var t=JSON.parse(xhr.responseText); if(t.error_code=='0'){ if(t.error&&t.error.errno!='0'){ var s=show_error(t.error.errno,t.error.errmsg); var t=setTimeout(function(){s.parentElement.removeChild(s);},5000); s.onclick=function(){get_early_msg(id,panel_msg,msg_more);s.parentElement.removeChild(s);clearTimeout(t);}; throw 'Tieba Chat Error '+t.error.errno+': '+t.error.errmsg; } var xxx=document.createElement('div'); //console.log(this_early_msg+'|'+this_last_msg); panel_msg.insertBefore(xxx,msg_more.nextElementSibling); for(var c in t.message){ var p=document.createElement('div'); p.className='tb_chat_message'; if(t.message[c].from=='0'){ p.className+=' com'; p.innerHTML='<div class="tb_chat_pleft"><img class="tb_chat_avatar" src="http://tb.himg.baidu.com/sys/portrait/item/'+com_portrait+'" alt></div><div class="tb_chat_pright"><div class="tb_chat_message_inner">'+(t.message[c].content[0].text||'未知数据')+'</div></div><div style="clear:both"></div>'; } else{ p.className+=' user'; p.innerHTML='<div class="tb_chat_pleft"><img class="tb_chat_avatar" src="http://tb.himg.baidu.com/sys/portrait/item/'+user_portrait+'" alt></div><div class="tb_chat_pright"><div class="tb_chat_message_inner">'+(t.message[c].content[0].text||'未知数据')+'</div></div><div style="clear:both"></div>'; } p.setAttribute('msg_id',t.message[c].msg_id); p.title='Post @ '+new Date(t.message[c].time*1000); if(parseInt(t.message[c].msg_id,10)<parseInt(this_early_msg,10)||this_early_msg==0)this_early_msg=t.message[c].msg_id; if(parseInt(t.message[c].msg_id,10)>parseInt(this_last_msg,10)||this_last_msg==0)this_last_msg=t.message[c].msg_id; xxx.appendChild(p); //console.log(this_early_msg+'|'+this_last_msg+'|'+t.message[c].msg_id); } if(t.has_more==1)msg_more.textContent='点击加载更多'; else msg_more.parentElement.removeChild(msg_more); panel_msg.scrollTop=panel_msg.scrollHeight-scroll_top; } else{ var s=show_error(t.error_code,t.error_msg); var t=setTimeout(function(){s.parentElement.removeChild(s);},5000); s.onclick=function(){get_early_msg(id,panel_msg,msg_more);s.parentElement.removeChild(s);clearTimeout(t);}; throw 'Tieba Chat Error '+t.error_code+': '+t.error_msg; } } } xhr.open('POST','//tieba.baidu.com/c/s/historymsg?'+get_string({ //BDUSS:BDUSS, _client_id:_client_id, _client_type:_client_type, _client_version:_client_version, _phone_imei:_phone_imei, com_id:id, msg_id:this_early_msg, net_type:net_type, user_id:user_id })); xhr.send(); } function add_message(id,last_msg_id,content){ var xhr=new XMLHttpRequest(); xhr.onreadystatechange=function(){ if(xhr.readyState==4&&xhr.status==200){ var t=JSON.parse(xhr.responseText); if(t.error_code=='0'){ if(t.error&&t.error.errno!='0'){ var s=show_error(t.error.errno,t.error.errmsg); var t=setTimeout(function(){s.parentElement.removeChild(s);},5000); s.onclick=function(){add_message(id,last_msg_id,content);s.parentElement.removeChild(s);clearTimeout(t);}; throw 'Tieba Chat Error '+t.error.errno+': '+t.error.errmsg; } var panel_msg=document.getElementsByClassName('tb_chat_panel_msg')[0]; for(var c in t.recent.message){ var p=document.createElement('div'); p.className='tb_chat_message'; if(t.recent.message[c].from=='0'){ p.className+=' com'; p.innerHTML='<div class="tb_chat_pleft"><img class="tb_chat_avatar" src="http://tb.himg.baidu.com/sys/portrait/item/'+com_portrait+'" alt></div><div class="tb_chat_pright"><div class="tb_chat_message_inner">'+(t.recent.message[c].content[0].text||'未知数据')+'</div></div><div style="clear:both"></div>'; } else{ p.className+=' user'; p.innerHTML='<div class="tb_chat_pleft"><img class="tb_chat_avatar" src="http://tb.himg.baidu.com/sys/portrait/item/'+user_portrait+'" alt></div><div class="tb_chat_pright"><div class="tb_chat_message_inner">'+(t.recent.message[c].content[0].text||'未知数据')+'</div></div><div style="clear:both"></div>'; } p.setAttribute('msg_id',t.recent.message[c].msg_id); p.title='Post @ '+new Date(t.recent.message[c].time*1000); panel_msg.appendChild(p); if(parseInt(t.recent.message[c].msg_id,10)<parseInt(this_early_msg,10)||this_early_msg==0)this_early_msg=t.recent.message[c].msg_id; if(parseInt(t.recent.message[c].msg_id,10)>parseInt(this_last_msg,10)||this_last_msg==0)this_last_msg=t.recent.message[c].msg_id; } var p=document.createElement('div'); p.className='tb_chat_message'; p.className+=' user'; p.innerHTML='<div class="tb_chat_pleft"><img class="tb_chat_avatar" src="http://tb.himg.baidu.com/sys/portrait/item/'+user_portrait+'" alt></div><div class="tb_chat_pright"><div class="tb_chat_message_inner">'+(t.message.content[0].text||'未知数据')+'</div></div><div style="clear:both"></div>'; p.setAttribute('msg_id',t.message.msg_id); panel_msg.appendChild(p); if(parseInt(t.message.msg_id,10)<parseInt(this_early_msg,10)||this_early_msg==0)this_early_msg=t.message.msg_id; if(parseInt(t.message.msg_id,10)>parseInt(this_last_msg,10)||this_last_msg==0)this_last_msg=t.message.msg_id; panel_msg.scrollTop=panel_msg.scrollHeight; document.getElementsByClassName('tb_chat_msg_textarea')[0].value=''; } else{ var s=show_error(t.error_code,t.error_msg); var t=setTimeout(function(){s.parentElement.removeChild(s);},5000); s.onclick=function(){add_message(id,last_msg_id,content);s.parentElement.removeChild(s);clearTimeout(t);}; throw 'Tieba Chat Error '+t.error_code+': '+t.error_msg; } } } xhr.open('POST','//tieba.baidu.com/c/s/addmsg?'+get_string({ //BDUSS:BDUSS, _client_id:_client_id, _client_type:_client_type, _client_version:_client_version, _phone_imei:_phone_imei, com_id:id, content:content, last_msg_id:last_msg_id, net_type:net_type, user_id:user_id })); xhr.send(); } function show_error(c,t){ var panel_error=document.createElement('div'); panel_error.className='tb_chat_error'; panel.appendChild(panel_error); panel_error.innerHTML='Tieba Chat Error!!!<br>Error Code: '+c+'<br>Error Message:'+t+'<br>Click this panel to retry....'; return panel_error; } function get_userid(username){ var xhr=new XMLHttpRequest(); xhr.onreadystatechange=function(){ if(xhr.readyState==4&&xhr.status==200){ var t=JSON.parse(xhr.responseText); if(t.no==0){ this_username=username; this_userid=t.data.id; get_latest_msg(t.data.id); } else{ var s=show_error(t.no,t.error); var t=setTimeout(function(){s.parentElement.removeChild(s);},5000); s.onclick=function(){get_userid(username);s.parentElement.removeChild(s);clearTimeout(t);}; throw 'Tieba Chat Error '+t.no+': '+t.error; } } }; xhr.open('POST','//tieba.baidu.com/home/get/panel?ie=utf-8&un='+encodeURIComponent(username)); xhr.send(); } function delete_msg(id){ var xhr=new XMLHttpRequest(); xhr.onreadystatechange=function(){ if(xhr.readyState==4&&xhr.status==200){ var t=JSON.parse(xhr.responseText); if(t.error.errno=="0"&&t.error_code=="0"){ alert('清除成功!'); document.getElementsByClassName('tb_chat_panel_msg')[0].innerHTML=''; } else{ var s=show_error(t.error_code,t.error_msg); var t=setTimeout(function(){s.parentElement.removeChild(s);},5000); s.onclick=function(){delete_msg(id);s.parentElement.removeChild(s);clearTimeout(t);}; throw 'Tieba Chat Error '+t.error_code+': '+t.error_msg; } } }; xhr.open('POST','//tieba.baidu.com/c/s/clearmsg?'+get_string({ _client_id:_client_id, _client_type:_client_type, _client_version:_client_version, _phone_imei:_phone_imei, com_id:id, net_type:net_type, user_id:user_id })); xhr.send(); } function delete_user(id,silent){ var silent=silent||false; var xhr=new XMLHttpRequest(); xhr.onreadystatechange=function(){ if(xhr.readyState==4&&xhr.status==200){ var t=JSON.parse(xhr.responseText); if(t.error.errno=="0"&&t.error_code=="0"){ if(silent==false){ alert('删除成功!'); if(this_msg_update!=null){ clearInterval(this_msg_update); this_msg_update=null; } window.onfocus=null; window.onblur=null; } get_chatting_list(chatting_list_page); } else{ var s=show_error(t.error_code,t.error_msg); var t=setTimeout(function(){s.parentElement.removeChild(s);},5000); s.onclick=function(){delete_msg(id);s.parentElement.removeChild(s);clearTimeout(t);}; throw 'Tieba Chat Error '+t.error_code+': '+t.error_msg; } } }; xhr.open('POST','//tieba.baidu.com/c/s/delcom?'+get_string({ _client_id:_client_id, _client_type:_client_type, _client_version:_client_version, _phone_imei:_phone_imei, com_id:id, net_type:net_type, tbs:PageData.tbs?PageData.tbs:get_tbs(), user_id:user_id })); xhr.send(); } function get_tbs(){ var xhr=new XMLHttpRequest(); xhr.onreadystatechange=function(){ if(xhr.readyState==4&&xhr.status==200)return JSON.parse(xhr.responseText).tbs; } xhr.open('GET','http://tieba.baidu.com/dc/common/tbs'); xhr.send(); } function insert_chat_button(event){ if(event.animationName=='nodeInserted'){ var button=document.createElement('a'); var node=event.target; button.className='btn_chat'; node.parentElement.insertBefore(button,node); button.onclick=function(){get_userid(JSON.parse(node.parentElement.parentElement.parentElement.parentElement.getAttribute('data-field')).un);panel.setAttribute('show','1');}; } } var message_update_timer=setInterval(function(){ if((new Date().getTime()-(window.localStorage.getItem('tb_chat_message_update_timestamp')||message_update_timestamp))>10000){ get_message_update(); } else if(window.localStorage.getItem('tb_chat_message_update_count')!='0'){ document.title='【'+window.localStorage.getItem('tb_chat_message_update_count')+' 条新聊天】'+original_title; panel_top.style.color='orange'; } else{ document.title=original_title; panel_top.style.color='#000'; } },1000); // ------------------------------------------------------------------------ var panel=document.createElement('div'); var panel_top=document.createElement('div'); var panel_head=document.createElement('div'); var panel_main=document.createElement('div'); var panel_top_left=document.createElement('div'); var panel_top_right=document.createElement('div'); var panel_ifshow=null; var original_title=document.title; var ss=document.createElement('style'); var stylesheet='.tb_chat_panel{width:400px;height:100%;position:fixed;top:calc(100% - 30px);right:0px;background:rgba(255,255,255,.75);z-index:200000;transition:all 0.5s ease-in;-webkit-user-select:none;-moz-user-select:none}.tb_chat_panel[show]{top:0px;transition:all 0.5s ease-out}.tb_chat_panel_top{font-size:14px;line-height:30px;text-align:center;width:100%;height:30px;-webkit-user-select:none;-moz-user-select:none}.tb_chat_panel_top_left{position:absolute;left:10px;top:0px;width:30px;height:30px;background:#0CF;visibility:hidden;color:#FFF;cursor:pointer;text-align:center}.tb_chat_panel[show] .tb_chat_panel_top_left{visibility:visible}.tb_chat_panel_top_right{position:absolute;right:10px;top:0px;width:30px;height:30px;background:#0CF;visibility:hidden;color:#FFF;cursor:pointer;text-align:center}.tb_chat_panel[show] .tb_chat_panel_top_right{visibility:visible}.tb_chat_panel_main{height:calc(100% - 30px);overflow:auto}.tb_chat_row{/*width:400px;*/height:60px;padding:10px;cursor:pointer}.tb_chat_row:hover{background:rgba(0,0,0,.1)}.tb_chat_pleft{float:left}.tb_chat_row .tb_chat_avatar{width:60px;height:60px}.tb_chat_pright{float:left;max-width:300px}.tb_chat_row .tb_chat_username{font-size:14px;padding:6px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.tb_chat_row .tb_chat_lasttext{padding:6px;font-size:12px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.tb_chat_next{font-size:14px;text-align:center;width:100%;height:30px;line-height:30px}.tb_chat_message{font-size:12px;line-height:14px;min-height:28px;padding:5px}.tb_chat_message .tb_chat_avatar{width:28px;height:28px}.tb_chat_message.user .tb_chat_pleft,.tb_chat_message.user .tb_chat_pright{float:right;text-align:right}.tb_chat_message .tb_chat_message_inner{margin:0 10px;padding:6px;background:#FFF;border:1px solid #CCC;border-radius:3px;-moz-user-select:text;-webkit-user-select:text}.tb_chat_panel_msg{margin-bottom:50px;height:calc(100% - 50px);overflow:auto}.tb_chat_error{background:rgba(255,0,0,.25);font-size:12px;line-height:16px;position:fixed;width:350px;margin:0 25px;top:50px;right:0px;box-shadow:rgba(255,0,0,0.25) 0 0 5px;color:#F00}.tb_chat_message_inner::selection,.tb_chat_message_inner::-moz-selection{background:rgba(255,255,255,0.5)}.tb_chat_panel[model="1"] .tb_chat_panel_top,.tb_chat_panel[model="2"] .tb_chat_panel_top,.tb_chat_panel[model="2"] .tb_chat_row{color:red!important}.btn_sendmsg{animation:nodeInserted 0.01s;-webkit-animation:nodeInserted 0.01s;-o-animation:nodeInserted 0.01s;-ms-animation:nodeInserted 0.01s}@keyframes nodeInserted{from{background-color:#FFF}to{background-color:#EEE}}@-webkit-keyframes nodeInserted{from{background-color:#FFF}to{background-color:#EEE}}@-o-keyframes nodeInserted{from{background-color:#FFF}to{background-color:#EEE}}@-ms-keyframes nodeInserted{from{background-color:#FFF}to{background-color:#EEE}}.btn_chat{cursor:pointer;margin-left:8px;background-image:url(http://imgsrc.baidu.com/forum/pic/item/fa5ca264034f78f03983b23b7b310a55b1191c9a.jpg)!important;background-position:0 0!important}.btn_chat:hover{background-position:-86px 0!important}.btn_chat:active{background-position:-172px 0!important}'; panel.className='tb_chat_panel'; document.body.appendChild(panel); ss.textContent=stylesheet; panel.appendChild(ss); panel_top.className='tb_chat_panel_top'; panel.appendChild(panel_top); panel_head.textContent='贴吧聊天'; panel_top.appendChild(panel_head); panel_top_left.className='tb_chat_panel_top_left'; panel_top_left.textContent='+'; panel_top.appendChild(panel_top_left); panel_top_right.className='tb_chat_panel_top_right'; panel_top_right.textContent='≡'; panel_top.appendChild(panel_top_right); panel_main.className='tb_chat_panel_main'; panel.appendChild(panel_main); panel_top.onmouseover=function(){ if(!panel.hasAttribute('show')){ if(this_userid==0)get_chatting_list(chatting_list_page); else get_latest_msg(this_userid); } panel.setAttribute('show','1'); }; panel.onmouseover=function(){if(panel_ifshow!=null)clearTimeout(panel_ifshow);}; panel.onmouseout=function(){ panel_ifshow=setTimeout(function(){ if(panel.hasAttribute('show'))panel.removeAttribute('show'); panel_ifshow=null; },500); }; panel_top_left.onclick=function(){ var username=prompt('请输入用户名以发起聊天'); if(username!=null&&username!='')get_userid(username); } get_chatting_list(chatting_list_page); document.addEventListener('animationstart',insert_chat_button,false); document.addEventListener('MSAnimationStart',insert_chat_button,false); document.addEventListener('webkitAnimationStart',insert_chat_button,false);
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址