Advertisement
GaztoofV2

sb

Mar 21st, 2020
361
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 14.61 KB | None | 0 0
  1. var Shoutbox=window.Shoutbox||{};if(window.jQuery===undefined)jQuery=$={};!function($,window,document)
  2. {"use strict";
  3. const events={ERROR:0x01,NEW_MESSAGE:0x02,DEL_MESSAGE:0x03,EDIT_MESSAGE:0x04,PIN_MESSAGE:0x05,SETTINGS:{VALUES:0x10,UPDATE:0x11},LEADERBOARD:0x20,BAN_USER:0x97,UNBAN_USER:0x98,USER_BANNED:0x99,BANNING_LIST:0x900};
  4. const months=['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'];
  5. const modTemplates={edit:'<a href class="mod edit">E</a>',delete:'<a href class="mod del">X</a>',pin:'<a href class="mod pin">P</a>'};
  6. const messageTemplate='<div class="entry {extraClasses}" data-id="{id}" data-user="{uid}" data-discord="{discord}" data-shouts="{shouts}">'+
  7. '<div class="avatar">'+
  8. '<img class="normal_avatar" src="{avatarLink}" alt="avatar" />'+
  9. '</div>'+
  10. '<div class="user" style="min-width: 110px;">'+
  11. '{username}'+
  12. '</div>'+
  13. '<div class="text">{message}</div>'+
  14. '<div class="info">'+
  15. '{editButton}'+
  16. '{deleteButton}'+
  17. '{pinButton}'+
  18. '<span class="date">{date}</span>'+
  19. '</div>'+
  20. '</div>';
  21. const banningMeta={template:'<tr class="banning-entry" data-id="{id}">'+
  22. '<td align="center">{username}</td>'+
  23. '<td align="center">{reason}</td>'+
  24. '<td align="center">{unbanDate}</td>'+
  25. '{unbanButton}'+
  26. '<td align="center">{mod}</td>'+
  27. '</tr>',unbanButton:'<td align="center"><input type="button" class="button unban-button" value="Unban" /></td>'};
  28. const leaderboardTemplate='<tr class="leaderboard-entry">'+
  29. '<td align="center">{username}</td>'+
  30. '<td align="center">{number}</td>'+
  31. '</tr>';
  32.  
  33. $.extend(Shoutbox,{server:null,socket:null,userRoom:'main',mentionSound:new Audio('msb_sound.mp3'),twitchMode:false,cooldown:{value:0,interval:null,placeholder:''},connect:function()
  34. {
  35. this.socket=io.connect('cracked-sh.herokuapp.com:443',{transports:['websocket'],query:'token='+this.userToken});
  36. setInterval(()=>{console.log(this.socket);},2000);
  37. },emit:function(event,message)
  38. {
  39. this.socket.emit(event,message);
  40. },handleEvents:function()
  41. {
  42. this.socket.on(events.NEW_MESSAGE,(data)=>
  43. {
  44. if(typeof data.message.twitch!=='undefined')
  45. {
  46. this.twitchMode=data.message.twitch;
  47. }
  48. $('#container-'+data.room).prepend(this.buildTemplate(data.message))
  49. });
  50. this.socket.on(events.DEL_MESSAGE,(id)=>
  51. {
  52. var message=$('[data-id="'+id+'"]');
  53. if(message.length>0)
  54. {
  55. message.fadeOut('slow',function()
  56. {
  57. $(this).remove();
  58. });
  59. }
  60. });
  61. this.socket.on(events.EDIT_MESSAGE,(data)=>
  62. {
  63. var entry=$('[data-id="'+data.id+'"]');
  64. if(entry.length>0)
  65. {
  66. entry.find('.text').html(data.message);
  67. }
  68. });
  69. this.socket.on(events.PIN_MESSAGE,(message)=>
  70. {
  71. $('.entry.pinned').remove();
  72. $('#shoutbox .body').prepend(this.buildTemplate(message,'pinned'))
  73. });
  74. this.socket.on(events.BAN_USER,(data)=>
  75. {
  76. $('#shoutbox_ban_modal .ban-error').show();
  77. if(data.success)
  78. {
  79. $('#shoutbox_ban_modal .ban-error .tcat').text('User successfully banned !');
  80. setTimeout(()=>
  81. {
  82. $('#shoutbox_ban_modal .close-modal').trigger('click');
  83. $('#shoutbox_ban_modal .ban-error').hide();
  84. },1000);
  85. }
  86. else if(data.error)
  87. {
  88. $('#shoutbox_ban_modal .ban-error .tcat').text(data.error);
  89. }
  90. });
  91. this.socket.on(events.USER_BANNED,(data)=>
  92. {
  93. $('#shoutbox .modal').remove();
  94. if(data.reason.length>0)
  95. {
  96. var banningMessage='You have been banned from the shoutbox for the following reason: '+data.reason+'.';
  97. }
  98. else
  99. {
  100. var banningMessage='You have been banned from the shoutbox.';
  101. }
  102. if(data.unban==-1)
  103. {banningMessage+=' You were permanently banned.';}
  104. else
  105. {
  106. var options={weekday:'long',year:'numeric',month:'long',day:'numeric'};
  107. banningMessage+=' Your banning will expire on '+new Date(data.unban).toLocaleDateString('en-US',options)+' at '+new Date(data.unban).toLocaleTimeString('en-US');
  108. }
  109. $('#shoutbox .panel').html('<div class="shoutbox-error">'+banningMessage+'</div>');
  110. });
  111. this.socket.on(events.BANNING_LIST,(data)=>
  112. {
  113. $('#banlist_users .banning-entry').remove();
  114. if(data)
  115. {
  116. if(!Shoutbox.permissions.mod)
  117. {
  118. $('#shoutbox_banlist_modal .tcat.unban').remove();
  119. }
  120. $('#banlist_users').append(this.buildBanningTemplate(data));
  121. }
  122. $('#shoutbox_banlist_modal').modal({keepelement:true});
  123. });
  124. this.socket.on(events.UNBAN_USER,(data)=>
  125. {
  126. $('[data-id="'+data._id+'"]').fadeOut(function()
  127. {
  128. $(this).remove();
  129. });
  130. });
  131. this.socket.on(events.LEADERBOARD,(data)=>
  132. {
  133. $('#leaderboard_users .leaderboard-entry').remove();
  134. if(data)
  135. {
  136. $('#leaderboard_users').append(this.buildLeaderboardTemplate(data));
  137. }
  138. $('#shoutbox_leaderboard_modal').modal({keepelement:true});
  139. });
  140. this.socket.on(events.SETTINGS.VALUES,(data)=>
  141. {
  142. this.twitchMode=data.twitch;
  143. this.initCooldown(data.cooldown);
  144. $('#shoutbox_settings_modal #sound').prop('checked',data.sound);
  145. $('#shoutbox_settings_modal #volume').val(data.volume*100);
  146. this.mentionSound.volume=data.volume;
  147. this.mentionSound.muted=data.sound?false:true;
  148. });
  149. },buildLeaderboardTemplate:function(users)
  150. {
  151. var content='';
  152. for(var user of users)
  153. {
  154. content+=leaderboardTemplate.replace('{username}',user.user).replace('{number}',user.total);
  155. }
  156. return content;
  157. },buildBanningTemplate:function(bannings)
  158. {
  159. var content='';
  160. for(var banning of bannings)
  161. {
  162. var date=new Date(banning.unban);
  163. var day=date.getDate(),month=date.getMonth(),year=date.getFullYear(),hours=String('0'+date.getHours()).slice(-2),minutes=String('0'+date.getMinutes()).slice(-2);
  164. content+=banningMeta.template.replace('{id}',banning._id).replace('{username}',banning.user).replace('{reason}',banning.reason).replace('{unbanDate}',day+' '+months[month]+' '+year+' - '+hours+':'+minutes).replace('{mod}',banning.mod);
  165. if(Shoutbox.permissions.mod)
  166. {
  167. content=content.replace('{unbanButton}',banningMeta.unbanButton);
  168. }
  169. else
  170. {
  171. content=content.replace('{unbanButton}','');
  172. }
  173. }
  174. return content;
  175. },prepareMessage:function(message,extraClass='')
  176. {
  177. message.date=new Date(message.date);var render=messageTemplate;
  178. if(Shoutbox.permissions.mod||(Shoutbox.permissions.mod_own&&message.uid==Shoutbox.userId))
  179. {
  180. render=render.replace('{editButton}',modTemplates.edit).replace('{deleteButton}',modTemplates.delete).replace('{pinButton}',Shoutbox.permissions.mod?modTemplates.pin:'');
  181. }
  182. else
  183. {
  184. render=render.replace('{editButton}','').replace('{deleteButton}','').replace('{pinButton}','');
  185. }
  186. if(message.item)
  187. {
  188. message.username+='<img width="14" height="14" class="item-icon" src="'+message.item+'" />';
  189. }
  190. var extraClasses=[];
  191. if(message.private)
  192. {
  193. extraClasses.push('private');
  194. message.username+=' whispers';
  195. }
  196. if(this.mentionRegex.test(message.content))
  197. {
  198. extraClasses.push('mention');
  199. }
  200. if(extraClass)
  201. {
  202. extraClasses.push(extraClass);
  203. }
  204. render=render.replace('{extraClasses}',extraClasses.join(' ')).replace('{id}',message.id).replace('{uid}',message.uid).replace('{discord}',message.discord).replace('{shouts}',message.shouts).replace('{avatarLink}',message.avatar).replace('{date}',message.date.getHours()+':'+String('0'+message.date.getMinutes()).slice(-2)).replace('{username}',message.username).replace('{message}',message.content);return render;},buildTemplate:function(message,extraClass='')
  205. {
  206. if(Array.isArray(message))
  207. {
  208. var finalMessage='';
  209. for(let _message of message)
  210. {
  211. finalMessage+=this.prepareMessage(_message);
  212. }
  213. return finalMessage;
  214. }
  215. else
  216. {
  217. if(this.mentionRegex.test(message.content))
  218. {
  219. this.mentionSound.play();
  220. }
  221. return this.prepareMessage(message,extraClass);
  222. }
  223. },processTagging:function(username)
  224. {
  225. if(/\s/.test(username))
  226. {
  227. $('#message_input').val($('#message_input').val()+'@['+username+'] ').focus();
  228. }
  229. else
  230. {
  231. $('#message_input').val($('#message_input').val()+'@'+username+' ').focus();
  232. }
  233. },processWhispering:function(username)
  234. {
  235. $('#message_input').val('/w @'+username+': ').focus();
  236. },initCooldown:function(cooldown)
  237. {
  238. this.cooldown.value=cooldown;
  239. if(this.cooldown.value>0)
  240. {
  241. this.cooldown.placeholder='Your next shout can be done in '+Math.trunc(this.cooldown.value/60000)+'-minutes';
  242. if(this.cooldown.value<60000)
  243. {
  244. this.cooldown.placeholder='Your next shout can be done in less than a minute';
  245. this.cooldown.interval=setTimeout(()=>{this.cooldown.interval=null;this.cooldown.placeholder='';},this.cooldown.value);
  246. }
  247. this.cooldown.interval=setInterval(()=>
  248. {
  249. if(this.cooldown.value<60000)
  250. {
  251. this.cooldown.placeholder='Your next shout can be done in less than a minute';
  252. this.cooldown.interval=setTimeout(()=>{this.cooldown.interval=null;this.cooldown.placeholder='';},this.cooldown.value);
  253. }
  254. else
  255. {
  256. this.cooldown.value-=60000;
  257. this.cooldown.placeholder='Your next shout can be done in '+Math.trunc(this.cooldown.value/60000)+'-minutes';
  258. }
  259. },60000);
  260. if(this.userRoom=='market')
  261. {
  262. $('#shoutbox #message_input').attr('placeholder',this.cooldown.placeholder).prop('disabled',true);
  263. }
  264. }
  265. }
  266. });
  267. $('.shoutbox-tabs .sh-tab').on('click',function(e)
  268. {
  269. if(!$(this).hasClass('at'))
  270. {
  271. $('.shoutbox-tabs .sh-tab').removeClass('at');
  272. $(this).addClass('at');
  273. var container=$(this).data('container');
  274. $('#shoutbox .shoutbox-messages').hide();
  275. $(container).fadeIn('fast');
  276. Shoutbox.userRoom=$(this).data('room');
  277. if(Shoutbox.userRoom=='market'&&Shoutbox.cooldown.placeholder)
  278. {
  279. $('#shoutbox #message_input').attr('placeholder',Shoutbox.cooldown.placeholder).prop('disabled',true);
  280. }
  281. else
  282. {
  283. $('#shoutbox #message_input').attr('placeholder','Enter message...').prop('disabled',false);
  284. }
  285. }
  286. });
  287. $(document).on('click','.normal_avatar',function(e)
  288. {
  289. var username=$(this).closest('.entry').find('.user a').text();
  290. Shoutbox.processTagging(username);
  291. });
  292. $(document).on('click','.mod.del',function(e)
  293. {
  294. e.preventDefault();
  295. var id=$(this).closest('.entry').data('id');
  296. Shoutbox.emit(events.DEL_MESSAGE,id);
  297. });
  298. $(document).on('click','.mod.pin',function(e)
  299. {
  300. e.preventDefault();
  301. var id=$(this).closest('.entry').data('id');
  302. Shoutbox.emit(events.PIN_MESSAGE,id);
  303. });
  304. $(document).on('click','.mod.edit',function(e)
  305. {
  306. e.preventDefault();
  307. var id=$(this).closest('.entry').data('id'),username=$(this).closest('.entry').find('.user').text(),message=$(this).closest('.entry').find('.text').text();
  308. $('#shoutbox_edit_modal .username').text(username);
  309. $('#shoutbox_edit_message').val(message);
  310. $('#shoutbox_edit_modal').attr('data-id',id);
  311. $('#shoutbox_edit_modal').modal({keepelement:true});
  312. });
  313. $('#message_input').on('keypress',function(e)
  314. {
  315. if(e.keyCode==13||e.which==13)
  316. {
  317. var message=$(this).val();
  318. if(message.trim().length>0)
  319. {
  320. if(Shoutbox.lastMsgDate==0||Shoutbox.lastMsgDate+Shoutbox.antiflood*1000<Date.now()||Shoutbox.twitchMode)
  321. {
  322. Shoutbox.emit(events.NEW_MESSAGE,{message:message,room:Shoutbox.userRoom});
  323. $(this).val('').focus();
  324. Shoutbox.lastMsgDate=Date.now();
  325. if(Shoutbox.userRoom=='market')
  326. {
  327. Shoutbox.initCooldown(1800000);
  328. }
  329. }
  330. }
  331. }
  332. });
  333. $('#shoutbox .sb_smilies').on('click',function(e)
  334. {
  335. e.preventDefault();
  336. e.stopPropagation();
  337. $('#message_input').focus();
  338. $.get($(this).attr('href'),function(html)
  339. {
  340. $(html).appendTo('body').modal({fadeDuration:250,zIndex:9999});
  341. $(document).on($.modal.CLOSE,function(){$('#message_input').focus();});
  342. });
  343. });
  344. $('#shoutbox_banlist').on('click',function(e)
  345. {
  346. e.preventDefault();
  347. Shoutbox.emit(events.BANNING_LIST);
  348. });
  349. $(document).on('click','#shoutbox_edit_ok',function()
  350. {
  351. var message=$('#shoutbox_edit_message').val().trim(),id=$('#shoutbox_edit_modal').data('id');
  352. if(id&&message.length>0)
  353. {
  354. Shoutbox.emit(events.EDIT_MESSAGE,{id:id,message:message});
  355. $('#shoutbox_edit_modal .close-modal').trigger('click');
  356. }
  357. });
  358. $(document).on('click','#shoutbox_ban_button',function()
  359. {
  360. var user=$('#shoutbox_ban_modal .username').val().trim(),reason=$('#shoutbox_ban_modal .reason').val().trim();
  361. var duration=$('#shoutbox_ban_modal .duration').val().trim(),period=$('#shoutbox_ban_modal .period').val();
  362. if(user.length>0)
  363. {
  364. Shoutbox.emit(events.BAN_USER,{username:user,reason:reason,duration:duration,period:period});
  365. }
  366. });
  367. $(document).on('click','.unban-button',function()
  368. {
  369. var banningId=$(this).closest('.banning-entry').data('id');
  370. if(banningId)
  371. {
  372. Shoutbox.emit(events.UNBAN_USER,{banningId:banningId});
  373. }
  374. });
  375. $('#shoutbox_leaderboard').on('click',function(e)
  376. {
  377. e.preventDefault();Shoutbox.emit(events.LEADERBOARD,true);
  378. });
  379. $('#shoutbox_settings').on('click',function(e)
  380. {
  381. e.preventDefault();
  382. $('#shoutbox_settings_modal').modal({keepelement:true});
  383. });
  384. $(document).on('click','#shoutbox_settings_button',function(e)
  385. {
  386. e.preventDefault();
  387. var sound=$('#shoutbox_settings_modal #sound').prop('checked');
  388. var volume=$('#shoutbox_settings_modal #volume').val()/100;
  389. Shoutbox.emit(events.SETTINGS.UPDATE,{sound:sound,volume:volume});
  390. Shoutbox.mentionSound.volume=volume;
  391. Shoutbox.mentionSound.muted=sound?false:true;
  392. $('#shoutbox_settings_modal .close-modal').trigger('click');
  393. });
  394. $(document).on('contextmenu','#shoutbox .entry .user a',function(e)
  395. {
  396. e.preventDefault();
  397. var entry=$(e.currentTarget).closest('.entry');
  398. if(entry.data('user')==Shoutbox.userId||!Shoutbox.permissions.mod)
  399. {
  400. $('.binding-menu .ban').hide();
  401. }
  402. else
  403. {
  404. $('.binding-menu .ban').show();
  405. }
  406. if(entry.data('discord').length>0)
  407. {
  408. $('.binding-menu .discord').show();
  409. $('.binding-menu .discord .value').text(entry.data('discord'));
  410. }
  411. else
  412. {
  413. $('.binding-menu .discord').hide();
  414. }
  415. $('.binding-menu .shouts .value').text(entry.data('shouts'));
  416. $('.binding-menu').finish().toggle(100).offset({top:e.pageY,left:e.pageX}).data('id',entry.data('id'));
  417. });
  418. $(document).on('mousedown',function(e)
  419. {
  420. if(!$(e.target).parents('.binding-menu').length>0)
  421. {
  422. $('.binding-menu').hide(100);
  423. }
  424. });
  425. $(document).on('click','.binding-menu li',function(e)
  426. {
  427. var action=$(e.target)[0].className.split(' ')[1];
  428. var messageId=$(this).closest('.binding-menu').data('id');
  429. var entry=$('[data-id="'+messageId+'"]').first();
  430. switch(action)
  431. {
  432. case 'whisper':
  433. Shoutbox.processWhispering(entry.find('.user a').text());
  434. break;
  435. case 'tag':Shoutbox.processTagging(entry.find('.user a').text());
  436. break;
  437. case 'ban':
  438. $('#shoutbox_ban_modal .username').val(entry.find('.user a').text());
  439. $('#shoutbox_ban_modal').modal({keepelement:true});
  440. break;
  441. }
  442. $('.binding-menu').hide(100);
  443. });
  444. $(document).ready(function()
  445. {
  446. Shoutbox.connect();
  447. Shoutbox.handleEvents();
  448. Shoutbox.mentionRegex=new RegExp('<a href=".+(uid='+Shoutbox.userId+')"');});}
  449. (window.jQuery,window,document);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement