· 5 years ago · May 29, 2020, 02:26 PM
1// ==UserScript==
2// @name ChatBot
3// @namespace http://tampermonkey.net/
4// @version 0.2
5// @description ChatBot!
6// @author BadNintendo
7// @grant none
8// @icon https://tinychat.com/webrtc/2.0.0-81/images/favicon.png
9// @match https://tinychat.com/room/*
10// @match https://tinychat.com/*
11// @exclude https://tinychat.com/settings/*
12// @exclude https://tinychat.com/subscription/*
13// @exclude https://tinychat.com/promote/*
14// @exclude https://tinychat.com/coins/*
15// @exclude https://tinychat.com/gifts*
16// @run-at document-start
17// ==/UserScript==
18((ChatBot) => {
19 "use strict";
20 //API_KEY FOR YOUTUBE
21 var youtubekey = "AIzaSyAf1XXorjOLdjS2j5PGi3SLCGl7LhyxQXs";
22 window.DebugClear = true; // TRUE = CLEARS || FALSE = SHOWS
23 window.CTSVersion = {Major: 1, Minor: 6, Patch: 65};
24 var MainElement, ChatLogElement, VideoListElement, SideMenuElement, TitleElement, UserListElement,ModerationListElement, ChatListElement, UserContextElement, MicrophoneElement,
25 FeaturedCSS, VideoCSS, SideMenuCSS, MainCSS, RoomCSS, TitleCSS, ContextMenuCSS,ModeratorCSS, UserListCSS, ChatListCSS, NotificationCSS, ChatboxCSS;
26 //CTS MAIN VARIABLES
27 var CTS = {
28 Project: {Name: "CTS",Storage: "CTS_", isTouchScreen: false},
29 Chuck: {XHR: new XMLHttpRequest()}, Urb: {XHR: new XMLHttpRequest()}, Dad: {XHR: new XMLHttpRequest()}, Advice: {XHR: new XMLHttpRequest()},
30 YouTube: {API_KEY: youtubekey,XHR: new XMLHttpRequest(),Playing: false,MessageQueueList: [],NotPlayable: ["Private video", "Deleted video"],VideoID: undefined,Busy: false,DataReady: false,Clear: false,VideoReturn: false,SearchReturn: false,ListBuilt: true,PlayListCount: undefined,ShowQueue: false,CurrentTrack: {ID: undefined,duration: undefined,title: undefined,thumbnail: undefined}},
31 Me: [], Room: [],
32 ScriptInit: false,
33 MainBackground: undefined,
34 OGStyle: {HeightCounter: 3,WidthCounter: 1,SavedHeight: undefined,SavedWidth: undefined},NormalStyle: {ChatHide: false},FontSize: 20,ChatStyleCounter: 0,ChatHeight: 30,ChatWidth: 0,ChatDisplay: true,UserListDisplay: true,ChatStyles: undefined,MainBackgroundCounter: 0,
35 ChatLimit: 650,NotificationLimit: 100,
36 ChatScroll: true,NotificationScroll: true,NoGreet: false,Featured: true,Bot: true,AutoKick: false,AutoBan: false,GreetMode: false,PerformanceMode: false,CanTTS: false,VoteSystem: false,Popups: true,Avatar: true,Reminder: true,CanSeeGames: true,CanHostGames: false,imgur: true,Notification: true,UserYT: true,ThemeChange: true,TimeStampToggle: true,AutoMicrophone: false,GreenRoomToggle: true,PublicCommandToggle: true,
37 Game: {NoReset: false,Fish: {HighScore: ["BadNintendo", 13337],StartTimeout: undefined,RestockTimeout: undefined,ReCastTimeout: undefined,NotEnoughTimeout: undefined,Round: 0,Player: [],TypesOfFish: [["frog", 1, true],["sunfish", 2, true],["goldfish", 3, true],["fish swollowed hook", 4, false],["family of sardine", 5, true],["catfish", 6, true],["spotted bass", 7, true],["largemouth bass", 8, true],["family of shrimp", 9, true],["it pays to not drink,\ncrazy night however!", 10, false],["cisco", 11, true],["seaweed, still edible", 12, true],["snagged a tire and lost rod", 13, false],["snagged a tire and lost hook", 14, false],["lost their rod to a shark", 15, false],["rainbow trout", 16, true],["It's your turn for dinner", 80, false],["parrot fish", 17, true],["snagged a plastic bag,\n their hook is gone", 18, false],["walleye", 19, true],["Round Whitefish", 20, true],["family of clams", 21, true],["family of oyster", 22, true],["Round blackfish", 23, true],["dolphin", 24, true],["seagull,\n not a fish but will do", 25, true],["pufferfish", 26, true],["fined for smuggling\nmore than fish", 27, false],["lobster", 28, true],["tuna", 29, true],["electric eel", 30, true],["Eel electricuted you,\nrod is toast", 31, false],["swordfish", 32, true],["had bills at home to pay", 33, false],["slipped and lost equipment", 34, false],["bike, still good too", 35, true],["great white", 36, true],["octopus", 37, true],["serpeant", 38, true],["sea turtle", 39, true],["cleaned garbage from the lake", 40, true],["fined for capturing,\n a female whale", 41, false],["male whale", 42, true],["barracuda", 43, true],["pike", 44, true],["lochiness monster", 45, true],["anglerfish", 46, true],["small treasure chest", 47, true],["golden tuna", 48, true],["family of beautiful rims", 49, true],["red snapper", 50, true],["jaws", 51, true],["mermaid", 52, true],["holy grail,\nhow'd that get there?", 75, true],["secret formula", 100, true]]}},
38 TTS: {synth: undefined,voices: undefined},
39 hasGreetedWC: false,
40 Host: 0,HostAttempt: 0,HostWaiting: false,
41 WaitToVoteList: [],UserList: [],MentionList: [],TempIgnoreList: [],IgnoreList: [],BanList: [],KickList: [],BotOPList: [],BotModList: [],TTSList: [],BanKeywordList: [],KickKeywordList: [],HighlightList: [],GreetList: [],ReminderList: [],ReminderServerInList: [],Favorited: [],SafeList: [],GreenRoomIgnoreList: [],GreenRoomList: [],WatchList: [],KBQueue: [],
42 MessageCallback: [],Message: [[]],LastMessage: new Date(),ShowedSettings: false,SendQueue: [],MissedMsg: 0, ActiveMessage: 0,
43 Camera: {List: [],Sweep: false,SweepTimer: 5,clearRandom: undefined},
44 NotificationTimeOut: [],
45 };
46 //API_KEY SAVE (PLEASE ENTER YOUR KEY ABOVE NOT HERE)
47 if (CTS.YouTube.API_KEY !== "") Save("YouTubeAPI", CTS.YouTube.API_KEY);
48 //CTS SETTINGS
49 CTS.Game.Fish.HighScore = JSON.parse(Load("FishHighScore", JSON.stringify(["BadNintendo", 13337])));
50 CTS.PublicCommandToggle = JSON.parse(Load("PublicCommandToggle", JSON.stringify(true)));
51 CTS.CameraBorderToggle = JSON.parse(Load("CameraBorderToggle", JSON.stringify(true)));
52 CTS.OGStyle.SavedHeight = JSON.parse(Load("OGStyleHeight", "3"));
53 CTS.GreenRoomIgnoreList = JSON.parse(Load("GreenRoomIgnoreList", JSON.stringify([])));
54 CTS.OGStyle.SavedWidth = JSON.parse(Load("OGStyleWidth", "1"));
55 CTS.NotificationToggle = JSON.parse(Load("NotificationToggle", "0"));
56 CTS.ChatStyleCounter = JSON.parse(Load("ChatStyle", "0"));
57 CTS.KickKeywordList = JSON.parse(Load("KickKeywordList", JSON.stringify([])));
58 CTS.TimeStampToggle = JSON.parse(Load("TimeStampToggle", JSON.stringify(true)));
59 //API_KEY SAVE (PLEASE ENTER YOUR KEY ABOVE NOT HERE)
60 CTS.YouTube.API_KEY = Load("YouTubeAPI", "");
61 CTS.GreenRoomToggle = JSON.parse(Load("GreenRoomToggle", JSON.stringify(true)));
62 CTS.BanKeywordList = JSON.parse(Load("BanKeywordList", JSON.stringify([])));
63 CTS.GreenRoomList = JSON.parse(Load("GreenRoomList", JSON.stringify([])));
64 CTS.MainBackground = Load("MainBackground", "url(https://i.imgur.com/RC3bKe7.jpg) rgb(0, 0, 0) no-repeat");
65 CTS.HighlightList = JSON.parse(Load("HighlightList", JSON.stringify([])));
66 CTS.CanHostGames = JSON.parse(Load("CanHostGames", JSON.stringify(false)));
67 CTS.ReminderList = JSON.parse(Load("ReminderList", JSON.stringify([])));
68 CTS.MentionList = JSON.parse(Load("MentionList", JSON.stringify([])));
69 CTS.CanSeeGames = JSON.parse(Load("CanSeeGames", JSON.stringify(true)));
70 CTS.ThemeChange = JSON.parse(Load("ThemeChange", JSON.stringify(true)));
71 CTS.BotModList = JSON.parse(Load("BotModList", JSON.stringify([])));
72 CTS.IgnoreList = JSON.parse(Load("IgnoreList", JSON.stringify([])));
73 CTS.Favorited = JSON.parse(Load("Favorited", JSON.stringify([["stonercircle", "https://avatars.tinychat.com/da/838b96/5f/medium/phpKXAdEn.jpeg"], null, null, null, null])));
74 CTS.GreetList = JSON.parse(Load("GreetList", JSON.stringify([])));
75 CTS.BotOPList = JSON.parse(Load("BotOPList", JSON.stringify(["-ALL"])));
76 CTS.GreetMode = JSON.parse(Load("GreetMode", JSON.stringify(false)));
77 CTS.FontSize = JSON.parse(Load("FontSize", 20));
78 CTS.SafeList = JSON.parse(Load("AKB", JSON.stringify([])));
79 CTS.Featured = JSON.parse(Load("Featured", JSON.stringify(false)));
80 CTS.KickList = JSON.parse(Load("KickList", JSON.stringify([])));
81 CTS.Reminder = JSON.parse(Load("Reminder", JSON.stringify(true)));
82 CTS.TTSList = JSON.parse(Load("TTSList", JSON.stringify([])));
83 CTS.BanList = JSON.parse(Load("BanList", JSON.stringify([])));
84 CTS.UserYT = JSON.parse(Load("UserYT", JSON.stringify(true)));
85 CTS.Popups = JSON.parse(Load("Popups", JSON.stringify(true)));
86 CTS.Avatar = JSON.parse(Load("Avatar", JSON.stringify(true)));
87 CTS.imgur = JSON.parse(Load("imgur", JSON.stringify(true)));
88 CTS.Bot = JSON.parse(Load("Bot", JSON.stringify(true)));
89 //IS USER TOUCHSCREEN
90 CheckUserTouchScreen();
91
92 if (CTS.ThemeChange) {
93 FeaturedCSS = "#videos.column>.videos-items{background:#0000003b;height:20%}#videos.column>.videos-items+.videos-items{background:none;height:80%}#videos.row>.videos-items{background:#0000003b;width:20%}#videos.row>.videos-items+.videos-items{background:none;width:80%}#videos.row.featured-2>.videos-items{width:20%}#videos.row.featured-2>.videos-items+.videos-items{width:80%}#videos.column.featured-2>.videos-items{height:20%}#videos.column.featured-2>.videos-items+.videos-items{height:80%}#videos.row.featured-3>.videos-items{width:20%}#videos.row.featured-3>.videos-items+.videos-items{width:80%}#videos.column.featured-3>.videos-items{height:20%}#videos.column.featured-3>.videos-items+.videos-items{height:80%}";
94 ChatListCSS = "#chatlist{background:#00000075;}.list-item>span>img{top:6px;}.list-item>span.active>span{transition:none;box-shadow:none;background:transparent;visibility:hidden;}.list-item>span>span{top:-4px;background:transparent;box-shadow:none;}.list-item>span>span[data-messages]:before{background:#53b6ef;}.list-item>span[data-status=\"gold\"]:before,.list-item>span[data-status=\"extreme\"]:before,.list-item>span[data-status=\"pro\"]:before{top:5px;}#chatlist>#header>.list-item>span.active{background:#53b6ef;}#chatlist>#header{height:60px;top:30px}#chatlist>div>span{font-weight: 600;border-radius:unset;color:#FFFFFF;height:22px;line-height:22px;}#chatlist>div{height:22px;line-height:22px;}";
95 ChatboxCSS = "#chat-download:hover{cursor: pointer;-webkit-box-shadow: inset 0 0 20px #53b6ef;box-shadow: inset 0 0 20px 0 #53b6ef;}#chat-download{position: absolute;right: 0;height: 22px;width: 22px;background: url(\"https://i.imgur.com/Bb3fr6Q.png\") center;background-size: 22px;}#chatlog-button{display:none!important;}@media screen and (max-width: 1200px){#chat-hide{top: -46px!important;left: -1px!important;width: 100%!important;border-radius: 0!important;}}#chat-hide{top: calc(50% - 18px);position: absolute;display: block;height: 16px;width: 16px;left: -8px;margin-top: -20px;border-radius: 16px;font-size: 0;background:url(https://i.imgur.com/jFSLyDD.png) #000000 center no-repeat;background-size:16px;cursor: pointer;z-index: 1;-webkit-box-shadow: 0 0 6px #53b6ef;box-shadow: 0 0 6px #53b6ef;}#chat-instant.show{background:linear-gradient(0deg,rgb(0, 19, 29)0%,rgba(0, 0, 0, 0.85)50%,rgb(25, 29, 32)100%)!important;}#chat-wider:before{transition:.3s;margin: -4px 0 0 -4px;border-width: 6px 6px 6px 0;border-color: transparent #ffffff!important;}#chat-wider{-webkit-box-shadow: 0 0 6px #53b6ef;box-shadow: 0 0 6px #53b6ef;z-index: 2;background:#000000!important}#chat-wrapper{transition:none;}#fav-opt{display: inline-block;cursor: pointer;padding: 12px;background: #10131494;}#input-user:checked ~ #user-menu{display:inline-block;}#user-menu > a:hover #user-menu > span > a:hover{color: #FFFFFF}#user-menu > a, #user-menu > span > a {font-weight: 600;position: relative;display: inline-block;width:calc(100% - 30px);padding: 6px;box-sizing: border-box;font-size: 18px;color: #53b6ef;cursor: pointer;transition: .2s;}#user-menu {position: absolute;display: none;bottom: 50px;right: 0;border: 1px solid rgba(0, 0, 0, .06);box-sizing: border-box;border-radius: 3px;color: #FFFFFF;background: #101314;line-height: 1;box-shadow: 0 1px 4px 0 rgba(0, 0, 0, .09);z-index: 1;}#user-menu > span {display: inline-block;width: 100%;padding: 12px;box-sizing: border-box;font-size: 16px;font-weight: 500;white-space: nowrap;text-overflow: ellipsis;cursor: default;overflow: hidden;}#label-user > img {position: absolute;height: 100%;left: -8px;vertical-align: top;}#label-user{position: relative;display: inline-block;height: 48px;width: 48px;border-radius: 100%;overflow: hidden;cursor: pointer;}#header-user{text-shadow:-1px 0 black,0 1px black,1px 0 black,0 -1px black;position: absolute;top: 10px;right: 0;}#chat-wrapper.full-screen #chat-instant, #chatf-wrapper.full-screen #chat-instant>.avatar>.status-icon,#chat-wrapper.full-screen #chat-content>.message>.avatar>.status-icon {background:unset;}.cts-message-unread{display:block;border-radius:6px;padding:1px 6px 1px 6px;background:#53b6ef;text-shadow:-1px 0 black, 0 1px black, 1px 0 black, 0 -1px black;color:#FFF;font:bold 16px sans-serif;cursor:pointer}.ctstime{position:absolute;right:3px;top:3px;background: #101314;border: 1px solid black;border-radius: 6px;padding: 1px 6px;}#chat-instant>.avatar>div>img,#cts-chat-content>.message>.avatar>div>img{position:relative;height:100%;left:-7px}.message>#system_user{background:linear-gradient(0deg,rgb(0, 19, 29)0%,rgba(0, 0, 0, 0.85)50%,rgba(0, 0, 0, 0.72)100%);border: 1px solid black;border-radius: 6px;padding: 1px 6px 1px 6px;word-wrap: break-word;font-weight: 600;font-size: 16px;color: #FFF;text-decoration: none;overflow: hidden;text-overflow: ellipsis;}.message{color:#FFF;text-shadow:-1px 0 black, 0 1px black, 1px 0 black, 0 -1px black;font-family:sans-serif;font-weight:300;font-size:20px;white-space:pre-line;word-wrap:break-word}.message a, .message a:visited, .message a:hover, .message a:active{position:relative;transition:0.5s color ease;text-decoration:none;color:#53b6ef}.message a:hover{text-decoration:underline;}#chat{will-change: transform;min-height:unset;}#cts-chat-content{display:flex;flex-direction:column;justify-content:flex-end;min-height:100%}#cts-chat-content>.message{padding:3px 3px;background:#101314a8;position:relative;left:0;margin-bottom:3px;border-radius:6px}#cts-chat-content>.message.highlight,.message.common.highlight{background:#e24c05;-webkit-box-shadow: inset 0 0 20px #000000;box-shadow: inset 0 0 20px 0 #000000;}#cts-chat-content>.message.common{min-height: 50px;padding:3px 3px 3px 50px;box-sizing:border-box;text-align:left}#chat-instant>.avatar,#cts-chat-content>.message>.avatar{position:absolute;height:40px;width:40px;top:3px;left:3px;-webkit-transform:scale(1);-moz-transform:scale(1);-ms-transform:scale(1);-o-transform:scale(1);transform:scale(1);pointer-events:none;}#chat-instant>.avatar>div,#cts-chat-content>.message>.avatar>div{position:absolute;height:100%;width:100%;top:0;left:0;border-radius:100%;overflow:hidden}#notification-content .nickname{border-radius:6px;padding:1px 6px 1px 6px}.notification{padding:1px 0 1px 0;text-shadow:-1px 0 black, 0 1px black, 1px 0 black, 0 -1px black}.time{position:absolute;right:5px}.notifbtn:hover{background:linear-gradient(0deg,rgb(0, 135, 186)0%,rgba(0, 49, 64, 0.94)75%,rgba(0, 172, 255, 0.6)100%);}.notifbtn{cursor: pointer;border-radius: 0 0 12px 12px;outline: none;background:linear-gradient(0deg,rgba(0, 0, 0, 0)0%,rgba(37, 37, 37, 0.32)75%,rgba(255, 255, 255, 0.6)100%);border: none;color: white;width: 100%;}#notification-content.large{height:50%;}#notification-content{will-change: transform;top:0;position:relative;scrollbar-width:none;background:#101314;text-shadow:-1px 0 black, 0 1px black, 1px 0 black, 0 -1px black;height:20%;min-height:38px;font:bold 16px sans-serif;color:#FFF;overflow-y:scroll;overflow-wrap:break-word;padding:0 6px 0 6px}#notification-content::-webkit-scrollbar{width:0;background:transparent}#cts-chat-content{display:flex;flex-direction:column;justify-content:flex-end;min-height:100%}#chat-instant>.avatar>.status-icon,#cts-chat-content>.message>.avatar>.status-icon{left:0!important}#chat-instant>.nickname{color:#53b6ef;text-shadow:-1px 0 black, 0 1px black, 1px 0 black, 0 -1px black;font-size: 20px;font-weight: 800;} nm#chat-instant::after{background:none;}.on-white-scroll{scrollbar-width: none;overflow-wrap: break-word;}.on-white-scroll::-webkit-scrollbar{width:0;background:transparent}#cts-chat-content>.message>.nickname{border:1px solid black;border-radius:6px;padding:1px 6px 1px 6px;word-wrap:break-word;max-width:calc(100% - 115px);font-weight:600;font-size:16px;color:#FFF;display:inline-block;text-decoration:none;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}#input{padding-top:0}:host,#input>.waiting{background:#20262870}#input:before,#input:after{content:unset}#input>textarea::placeholder{color:#FFF}#input>textarea::-webkit-input-placeholder{color:#fff}#input>textarea:-moz-placeholder{color:#fff}#input>textarea{width: calc(100% - 57px);line-height:unset;min-height:65px;max-height:65px;border-radius:6px;scrollbar-width:none;background:#101314;text-shadow:-1px 0 black, 0 1px black, 1px 0 black, 0 -1px black;color:#FFF;font-size:" + (CTS.FontSize - 4) + "px;font-family:sans-serif;font-weight:300;}#chat-position{top:22px;left:6px;right:6px;bottom:5px;}.on-white-scroll::webkit-scrollbar{width:0;background:transparent;}";
96 MainCSS = "#mobile-app.show{display:none;}html{background:rgba(0,0,0,1);}#menu-icon{display:none;}body{background:" + CTS.MainBackground + ";background-position: center!important;background-size:cover!important;overflow:hidden;}#nav-static-wrapper {display:none;}#content{padding:0!important;}";
97 VideoCSS = "#videolist[data-mode=\"dark\"]{background-color:unset;}@media screen and (max-width: 1200px){#videos-footer{right: unset!important;bottom: -22px!important;top: unset!important;}}#videos-footer-broadcast-wrapper{margin-top:16px;}#youtube.video > div > .overlay, .video > div > .overlay{display:block!important}.tcsettings{display:none}#videos-header{background:#101314;}#videos-footer-broadcast-wrapper.active>#videos-footer-broadcast,#videos-footer-broadcast-wrapper.active>#videos-footer-submenu-button,#videos-footer-broadcast-wrapper.active>#videos-footer-submenu-button:focus{background-color:#2d373a!important;}.js-video.broken{display:none;}.videos-header-volume {border-color:#202627;}.tcsettings:hover{background:#008cda;}.tcsettings{cursor: pointer;outline: none;background:#101314;border: none;color: white;}.music-radio-info>.description{cursor:default;overflow-wrap: break-word;white-space: nowrap;overflow: hidden;text-overflow: ellipsis;}.music-radio-info>.volume{bottom: 0;position: absolute;background: #2a6a89;height: 6px;width: 100%;line-height: 24px;overflow-wrap: break-word;white-space: nowrap;overflow: hidden;text-overflow: ellipsis}.music-radio-info{top: -50px;position: absolute;background: #071c19f0;height: 50px;width: 336px;line-height: 24px;}.ctsdrop{position:fixed;display:inline-block;top:3px;left:4px;z-index:5;min-width: 46px;}.ctsdrop-content{position:absolute;top:28px;right:0;background:#101314;min-width:46px;width: 46px;padding:0;z-index:1;display:none;}.ctsdrop:hover .ctsdrop-content{display:block;}.ctsoptions:hover{background:#53b6ef}.ctsoptions{width:46px;height:28px;z-index: 2;cursor: pointer;top: 4px;background: #10131475;border: none;padding: 5% 0;display: inline-block;}#youtube{padding: unset}#grab{left: 0;background:#2d373a;border-radius: 12px;visibility: hidden;top: -36px;position: absolute;display: flex}#videos-footer #music-radio .music-radio-playpause{position:absolute;top:0;left:30px;height:100%;width:60px;}#videos-footer #music-radio .music-radio-vol{position: absolute;right: 0;top: 0;}#videos-footer #music-radio button{line-height: 14px;background: #101314;border: none;font-size: 18px;color: white;height: 50%;display: block;width: 30px;}#videos-footer #videos-footer-youtube{left: 120px;border-radius: 0;display:none;}#videos-footer #videos-footer-soundcloud{display:none;border-radius: 0;left: 240px}#videos-footer #videos-footer-youtube,#videos-footer #videos-footer-soundcloud,#videos-footer #music-radio{transition: .2s;line-height: 33px;bottom: -64px;visibility: hidden;height: 36px;margin: unset;width: 120px;position: absolute;z-index: 1;}#videos-footer-push-to-talk{border-radius: unset}#videos-footer-broadcast-wrapper>#videos-footer-submenu-button{border-radius: unset;}#videos-footer-broadcast-wrapper.moderation>#videos-footer-broadcast{padding: unset}#videos-footer #music-radio button:hover{background: #53b6ef;cursor: pointer;}#videos-footer #music-radio{left: 0;border-radius: 12px;background: #101314;}#videos-footer:hover #videos-footer-youtube,#videos-footer:hover #videos-footer-soundcloud,#videos-footer:hover #music-radio{visibility: visible}#videos-footer:hover{background:linear-gradient(0deg,rgba(255, 255, 255, 0)0%,rgba(24, 60, 62, 0.29)50%,rgb(83, 182, 239)100%);}#videos-footer{background: linear-gradient(0deg,rgba(255, 255, 255, 0)0%,rgba(24, 60, 62, 0.29)50%,rgba(200, 200, 200, 0.26)100%);cursor:pointer;top:0;display:block;padding: 2px 0 0 11px;text-shadow: -1px 0 black,0 1px black,1px 0 black,0 -1px black;font: 800 14px sans-serif;color: #FFFFFF;left: unset;right: -70px;height: 22px;min-height: 22px;z-index: 2;width: 70px;position: absolute}#videos-footer-broadcast{border-radius:unset;z-index: 1;padding: unset!important;white-space: pre}span[title=\"Settings\"]>svg{padding:4px;height:24px;width:24px}#seek-duration{pointer-events: none;text-shadow: -1px 0 black, 0 1px black, 1px 0 black, 0 -1px black;font: 600 20px sans-serif}#videos{bottom: 0;left: 0;right: 0;top: 0}:host,#videolist{background:unset!important;}.video:after{content: unset;border:unset;}#videos-header-mic>svg{padding: 2px 10px;}#videos-header>span{display:block;}#videos-header-sound>svg{padding: 4px}#videos-header-fullscreen > svg {padding: 7px 8px;}";
98 RoomCSS = "tc-title{display:flex!important;}#room-content{padding-top:0!important;background:unset!important;}";
99 TitleCSS = "#room-header-avatar{display:none}#room-header-gifts{display:none}#room-header-info-text{display:none}#room-header-info-details{display:none}#room-header-mobile-button{display:none}#room-header{display:none;}";
100 SideMenuCSS = "#sidemenu{left:0;}@media screen and (max-width: 1000px){#sidemenu{left:-270px;}}#sidemenu.full-screen{left:-270px;}#user-info{display:none;}#top-buttons-wrapper{display:none;}#sidemenu-content{scrollbar-width:none;padding-top:unset;}#sidemenu-wider:before{margin: -4px 0 0 -4px;border-width: 6px 6px 6px 0;border-color: transparent #ffffff;}#sidemenu-wider{-webkit-box-shadow: 0 0 6px #53b6ef;box-shadow: 0 0 6px #53b6ef;z-index: 2;display:block;background-color: #000000;}#sidemenu-content::-webkit-scrollbar{display: none;}#sidemenu.wider {left: -270px;}";
101 NotificationCSS = "#videos-header > span {background-color: unset!important;line-height: unset;}.PMTime{display:inline-block;padding:0 6px 0 0;margin:0 8px 0 0;border-right:4px groove #797979;}.PMName{display:inline-block;}#popup div{word-break:break-word;user-select: text;-webkit-user-select: text;-moz-user-select: text;color:#FFFFFF;text-shadow:-1px 0 black,0 1px black,1px 0 black,0 -1px black;font-weight: 300;font-size: 18px;font-family: sans-serif;z-index:1;}.PMOverlay{height: calc(100% - 92px);overflow: hidden;pointer-events:none;position:absolute;padding-top:12px;top:0;bottom:0;left:0;right:0;visibility:visible;}.PMPopup{pointer-events:all;margin:5px auto;width:50%;position:relative;color: #FFF;text-shadow: -1px 0 black, 0 1px black, 1px 0 black, 0 -1px black;}.PMPopup a, .PMPopup a:visited, .PMPopup a:hover, .PMPopup a:active{position:relative;transition:0.5s color ease;text-decoration:none;color:#53b6ef}.PMPopup a:hover{color:#FFFFFF;text-decoration:underline;}.PMPopup h2{border-radius:5px 5px 0 0;background:linear-gradient(0deg,rgb(24, 29, 30) 0%,rgb(24, 29, 30) 52%,rgb(60, 117, 148) 100%);margin:0;padding:5px;font-size:16px;}.PMPopup .PMContent {border-radius: 0 0 5px 5px;padding:5px;max-height:30%;overflow:hidden;word-break:break-all;background:#202628;}";
102 UserListCSS = ".list-item>span>span{padding: 0 8px;top:-2px}.list-item > span:hover > span{background-color:unset;box-shadow:unset;}#userlist{background: #00000075;}.js-user-list-item{background: linear-gradient(0deg,rgb(0, 0, 0) 2px,rgba(0, 0, 0, 0.25) 2px,rgba(0, 0, 0, 0.59) 32%);}.list-item>span>span[data-cam=\"1\"]:after{height:15px;width:15px;background-image:url(https://i.imgur.com/QKSbq8d.png);}.list-item>span>span[data-moderator=\"1\"]:before{margin-right:3px;width:15px;height:15px;background-image:url(https://i.imgur.com/CEA9aro.png);}.list-item>span>span{background:transparent;box-shadow:none;}.list-item>span>span>.send-gift{top:5px;}.list-item>span>img{top:6px;}#button-banlist{border-radius:unset;top:-1px;right:10px;}.list-item>span[data-status=\"gold\"]:before,.list-item>span[data-status=\"extreme\"]:before,.list-item>span[data-status=\"pro\"]:before{top:5px;}#userlist>div{height:22px;}#userlist>div>span{font-weight: 600;color:#FFFFFF;height:22px;line-height:22px;}#userlist>#header{height:40px;top:10px;}";
103 ModeratorCSS = ".video{min-width: 114px;max-width: 114px;}#moderatorlist:after{right:5px;color:#FFFFFF;background:#53b6ef;}#moderatorlist>#header>span>button>svg path{fill:#FFFFFF;}#moderatorlist>#header>span>button{top:-2px;background: #20262870;}#moderatorlist.show>#header>span>button>svg path{fill:#FFFFFF;}#moderatorlist{max-height:60px;background: #00000075;}#moderatorlist>#header{height:60px;font-size:16px;font-weight:600;font-family:sans-serif;color:#FFFFFF;text-shadow:-1px 0 black, 0 1px black, 1px 0 black, 0 -1px black;}#moderatorlist.show[data-videos-count=\"1\"], #moderatorlist.show[data-videos-count=\"2\"] {max-height:205px;}#moderatorlist.show[data-videos-count=\"3\"], #moderatorlist.show[data-videos-count=\"4\"] {max-height:290px;}#moderatorlist.show[data-videos-count=\"5\"], #moderatorlist.show[data-videos-count=\"6\"] {max-height:400px;}#moderatorlist.show[data-videos-count=\"7\"], #moderatorlist.show[data-videos-count=\"8\"] {max-height:460px;}#moderatorlist.show[data-videos-count=\"9\"], #moderatorlist.show[data-videos-count=\"10\"] {max-height:545px;}#moderatorlist.show[data-videos-count=\"11\"], #moderatorlist.show[data-videos-count=\"12\"] {max-height:630px;}";
104 } else {
105 //OG CTS
106 FeaturedCSS = "#videos.column>.videos-items{background:#0000003b;height:20%}#videos.column>.videos-items+.videos-items{background:none;height:80%}#videos.row>.videos-items{background:#0000003b;width:20%}#videos.row>.videos-items+.videos-items{background:none;width:80%}#videos.row.featured-2>.videos-items{width:20%}#videos.row.featured-2>.videos-items+.videos-items{width:80%}#videos.column.featured-2>.videos-items{height:20%}#videos.column.featured-2>.videos-items+.videos-items{height:80%}#videos.row.featured-3>.videos-items{width:20%}#videos.row.featured-3>.videos-items+.videos-items{width:80%}#videos.column.featured-3>.videos-items{height:20%}#videos.column.featured-3>.videos-items+.videos-items{height:80%}";
107 VideoCSS = "#videolist[data-mode=\"dark\"]{background-color:unset;}#youtube.video > div > .overlay, .video > div > .overlay{display:block!important}.js-video.broken{display:none;}#videos-footer-broadcast-wrapper.show-ptt > #videos-footer-submenu{right:0;}#videos-footer-submenu{width: calc(100% - 14px);right:0;bottom:-2px;}.videos-header-volume {border-color:#202627;}.tcsettings:hover{background:#008cda;}.tcsettings{cursor: pointer;outline: none;background:#101314;border: none;color: white;}.music-radio-info>.description{cursor:default;overflow-wrap: break-word;white-space: nowrap;overflow: hidden;text-overflow: ellipsis;}.music-radio-info>.volume{bottom: 0;position: absolute;background: #2a6a89;height: 6px;width: 100%;line-height: 24px;overflow-wrap: break-word;white-space: nowrap;overflow: hidden;text-overflow: ellipsis}.music-radio-info{top: -50px;position: absolute;background: #071c19f0;height: 50px;width: 336px;line-height: 24px;}.ctsdrop{position:fixed;display:inline-block;top:3px;right:4px;z-index:5;min-width: 46px;}.ctsdrop-content{position:absolute;top:28px;right:0;background:#101314;min-width:46px;width: 46px;padding:0;z-index:1;display:none;}.ctsdrop:hover .ctsdrop-content{display:block;}.ctsoptions:hover{background:#53b6ef}.ctsoptions{width:46px;height:28px;z-index: 2;cursor: pointer;top: 4px;background: #101314;border: none;padding: 5% 0;display: inline-block;}#youtube{padding: unset}#grab{left: 0;background:#2d373a;border-radius: 12px;visibility: hidden;top: -36px;position: absolute;display: flex}#videos-footer-broadcast-wrapper>.video{position: fixed;display: none;width: 5%;top: 0;left: 0}#videos-footer-broadcast-wrapper.active>#videos-footer-submenu-button:hover{background: #1f2223!important}#videos-footer-broadcast-wrapper.active>#videos-footer-submenu-button{background: #2d373a!important}#videos-footer #music-radio .music-radio-playpause{position:absolute;top:0;left:30px;height:100%;width:60px;}#videos-footer #music-radio .music-radio-vol{position: absolute;right: 0;top: 0;}#videos-footer #music-radio button{line-height: 14px;background: #101314;border: none;font-size: 18px;color: white;height: 50%;display: block;width: 30px;}#videos-footer #videos-footer-youtube{left: 120px;border-radius: 0;display:none;}#videos-footer #videos-footer-soundcloud{display:none;border-radius: 0;left: 240px}#videos-footer #videos-footer-youtube,#videos-footer #videos-footer-soundcloud,#videos-footer #music-radio{transition: .2s;line-height: 33px;bottom: 21px;visibility: hidden;height: 36px;margin: unset;width: 120px;position: absolute;z-index: 1;}#videos-footer-push-to-talk{border-radius: unset}#videos-footer-broadcast-wrapper>#videos-footer-submenu-button{border-radius: unset;}#videos-footer-broadcast-wrapper.moderation>#videos-footer-broadcast{padding: unset}#videos-footer #music-radio button:hover{background: #53b6ef;cursor: pointer;}#videos-footer #music-radio{left: 0;border-radius: 12px;background: #101314;}#videos-footer:hover #videos-footer-youtube,#videos-footer:hover #videos-footer-soundcloud,#videos-footer:hover #music-radio{visibility: visible}#videos-footer:hover{background:linear-gradient(0deg,rgba(255, 255, 255, 0)0%,rgba(24, 60, 62, 0.29)50%,rgb(83, 182, 239)100%);}#videos-footer{background: linear-gradient(0deg,rgba(255, 255, 255, 0)0%,rgba(24, 60, 62, 0.29)50%,rgba(200, 200, 200, 0.26)100%);cursor:pointer;top: calc(30% + 119px);display:block;padding: 2px 0 0 11px;text-shadow: -1px 0 black,0 1px black,1px 0 black,0 -1px black;font: 800 14px sans-serif;color: #FFFFFF;left: unset;right: -70px;height: 22px;min-height: 22px;z-index: 2;width: 70px;position: absolute}#videos-footer-broadcast{border-radius:unset;z-index: 1;padding: unset!important;white-space: pre}#videos-footer-broadcast-wrapper{z-index: 0;visibility: visible;height: 50px;min-height: 50px;width: 400px;padding: unset;right: 0;left: unset;position: fixed;top: calc(30% + 34px)}span[title=\"Settings\"]>svg{padding:4px;height:24px;width:24px}#seek-duration{pointer-events: none;text-shadow: -1px 0 black, 0 1px black, 1px 0 black, 0 -1px black;font: 600 20px sans-serif}#videos{bottom: 0;left: 0;right: 0;top: 0}:host,#videolist{background:unset!important;}.video:after{content: unset;border:unset;}#videos-header-mic>svg{padding: 2px 10px;}#videos-header{z-index: 3;background:#101314;transition: none;left: unset;right: 0;width: 400px;top: calc(30%);position: fixed;max-height: 34px;min-height: 34px;}#videos-header>span{display:block;line-height: unset;}#videos-header-sound>svg{padding: 4px}#videos-header-fullscreen > svg {padding: 7px 8px;}";
108 SideMenuCSS = "#close-users{display:none!important;}#user-info{display:none;}#top-buttons-wrapper{display:none;}@media screen and (max-width: 600px) {#sidemenu {top:unset;z-index:2;padding-bottom:0;margin-top:0;}}#sidemenu-wider{display:none;}#sidemenu-content::-webkit-scrollbar{width:0;background:transparent;}#sidemenu{text-shadow:-1px 0 black,0 1px black,1px 0 black,0 -1px black;font:300 20px sans-serif;left:unset!important;right:0!important;padding-bottom:0;height:30%!important;min-width:400px;max-width:400px;}#sidemenu-content{scrollbar-width:none;padding-top:unset;}";
109 MainCSS = "#mobile-app.show{display:none;}html{background:rgba(0,0,0,1);}#users-icon{display:none;}#menu-icon{display:none;}body{background:" + CTS.MainBackground + ";background-position: center!important;background-size:cover!important;overflow:hidden;}#content{width:calc(100% - 400px);padding:0!important;}#nav-static-wrapper, #nav-fixed-wrapper{display:none;}";
110 RoomCSS = "tc-title{display:flex!important;}#room{padding:0!important;}#room-content{padding-top:0!important;background:unset!important;}";
111 TitleCSS = "#room-header-avatar{display:none}#room-header-gifts{display:none}#room-header-info-text{display:none}#room-header-info-details{display:none}#room-header-mobile-button{display:none}#room-header{border:unset;z-index:1;min-height:36px!important;max-height:36px!important;min-width:400px;max-width:400px;top:calc(30% + 84px);right:0;position:fixed;background: linear-gradient(0deg,rgb(0, 19, 29)0%,rgba(0, 0, 0, 0.85)50%,rgb(9, 41, 57)100%);}#room-header-info>h1{height:100%;top: unset;left: unset;right: unset;text-transform:uppercase;text-shadow:-1px 0 black,0 1px black,1px 0 black,0 -1px black;font:600 20px sans-serif;color:#FFFFFF;}#room-header-info>h1:after{content:unset;}#room-header-info {padding: 7px 0 0 6px!important;box-sizing: border-box;width: 100%!important;top: 0!important;left: 0!important;right: 0!important;}#room-he#room-header-info>span{right: 8px;position: absolute;top:7px;margin-top:0!important;}";
112 ContextMenuCSS = ".context.show{height:100%;}.context:after{content:unset;}.context>span{text-shadow:-1px 0 black,0 1px black,1px 0 black,0 -1px black;font:800 14px sans-serif;color:#FFFFFF;display:inline-block;padding:1px 1%;line-height:17px;height:17px;}.context{background:#101314;position:unset;padding:0;height:0;transition:.25s;}";
113 ModeratorCSS = ".video{min-width: 114px;max-width: 114px;}#moderatorlist:after{right:5px;color:#FFFFFF;background:#53b6ef;}#moderatorlist>#header>span>button>svg path{fill:#FFFFFF;}#moderatorlist>#header>span>button{top:-2px;background: #20262870;}#moderatorlist.show>#header>span>button>svg path{fill:#FFFFFF;}#moderatorlist{max-height:60px;}#moderatorlist>#header{height:60px;font-size:16px;font-weight:600;font-family:sans-serif;color:#FFFFFF;text-shadow:-1px 0 black, 0 1px black, 1px 0 black, 0 -1px black;}#moderatorlist.show[data-videos-count=\"1\"], #moderatorlist.show[data-videos-count=\"2\"] {max-height:205px;}#moderatorlist.show[data-videos-count=\"3\"], #moderatorlist.show[data-videos-count=\"4\"] {max-height:290px;}#moderatorlist.show[data-videos-count=\"5\"], #moderatorlist.show[data-videos-count=\"6\"] {max-height:400px;}#moderatorlist.show[data-videos-count=\"7\"], #moderatorlist.show[data-videos-count=\"8\"] {max-height:460px;}#moderatorlist.show[data-videos-count=\"9\"], #moderatorlist.show[data-videos-count=\"10\"] {max-height:545px;}#moderatorlist.show[data-videos-count=\"11\"], #moderatorlist.show[data-videos-count=\"12\"] {max-height:630px;}";
114 UserListCSS = "#userlist{padding-bottom:40px;}.list-item>span>span[data-cam=\"1\"]:after{height:15px;width:15px;background-image:url(https://i.imgur.com/QKSbq8d.png);}.list-item>span>span[data-moderator=\"1\"]:before{margin-right:3px;width:15px;height:15px;background-image:url(https://i.imgur.com/CEA9aro.png);}.list-item>span>span{background:transparent;box-shadow:none;}.list-item>span>span>.send-gift{top:4px;}.list-item>span>img{top:6px;}#button-banlist{color:#53b6ef;transition:none;top:calc(30% + 89px);right:3px;position:fixed;}.list-item>span[data-status=\"gold\"]:before,.list-item>span[data-status=\"extreme\"]:before,.list-item>span[data-status=\"pro\"]:before{top:5px;}#userlist>div{height:22px;}#userlist>div>span{color:#FFFFFF;font:bold 16px sans-serif;height:22px;line-height:22px;}#userlist>#header{height:40px;top:10px;}#contextmenu {top:unset!important;bottom:0!important;right:0!important;left:0!important;}";
115 ChatListCSS = ".list-item>span>img{top:6px;}.list-item>span.active>span{transition:none;box-shadow:none;background:transparent;visibility:hidden;}.list-item>span>span{top:-4px;background:transparent;box-shadow:none;}.list-item>span>span[data-messages]:before{background:#53b6ef;}.list-item>span[data-status=\"gold\"]:before,.list-item>span[data-status=\"extreme\"]:before,.list-item>span[data-status=\"pro\"]:before{top:5px;}#chatlist>#header>.list-item>span.active{background:#53b6ef;}#chatlist>#header{height:60px;top:30px}#chatlist>div>span{color:#FFFFFF;font:bold 16px sans-serif;height:22px;line-height:22px;}#chatlist>div{height:22px;line-height:22px;}";
116 NotificationCSS = "#videos-header > span {background-color: unset!important;line-height: unset;}.PMTime{display:inline-block;padding:0 6px 0 0;margin:0 8px 0 0;border-right:4px groove #797979;}.PMName{display:inline-block;}#popup div{word-break:break-word;user-select: text;-webkit-user-select: text;-moz-user-select: text;color:#FFFFFF;text-shadow:-1px 0 black,0 1px black,1px 0 black,0 -1px black;font-weight: 300;font-size: 18px;font-family: sans-serif;z-index:1;}.PMOverlay{height: calc(100% - 92px);overflow: hidden;pointer-events:none;position:absolute;padding-top:12px;top:0;bottom:0;left:0;right:0;visibility:visible;}.PMPopup{pointer-events:all;margin:5px auto;width:50%;position:relative;color: #FFF;text-shadow: -1px 0 black, 0 1px black, 1px 0 black, 0 -1px black;}.PMPopup a, .PMPopup a:visited, .PMPopup a:hover, .PMPopup a:active{position:relative;transition:0.5s color ease;text-decoration:none;color:#53b6ef}.PMPopup a:hover{color:#FFFFFF;text-decoration:underline;}.PMPopup h2{border-radius:5px 5px 0 0;background:linear-gradient(0deg,rgb(24, 29, 30) 0%,rgb(24, 29, 30) 52%,rgb(60, 117, 148) 100%);margin:0;padding:5px;font-size:16px;}.PMPopup .PMContent {border-radius: 0 0 5px 5px;padding:5px;max-height:30%;overflow:hidden;word-break:break-all;background:#202628;}";
117 ChatboxCSS = "#chat-download:hover{cursor: pointer;-webkit-box-shadow: inset 0 0 20px #53b6ef;box-shadow: inset 0 0 20px 0 #53b6ef;}#chat-download{position: absolute;right: 0;height: 22px;width: 22px;background: url(\"https://i.imgur.com/Bb3fr6Q.png\") center;background-size: 22px;}#chatlog-button{display:none!important;}#chat-instant.show{background:linear-gradient(0deg,rgb(0, 19, 29)0%,rgba(0, 0, 0, 0.85)50%,rgb(25, 29, 32)100%)!important;}#chat-wider{display:none;}#fav-opt{display: inline-block;cursor: pointer;padding: 12px;background: #10131494;}#input-user:checked ~ #user-menu{display:inline-block;}#user-menu > a:hover #user-menu > span > a:hover{color: #FFFFFF}#user-menu > a, #user-menu > span > a {font-weight: 600;position: relative;display: inline-block;width:calc(100% - 30px);padding: 6px;box-sizing: border-box;font-size: 18px;color: #53b6ef;cursor: pointer;transition: .2s;}#user-menu {position: absolute;display: none;bottom: 50px;right: 0;border: 1px solid rgba(0, 0, 0, .06);box-sizing: border-box;border-radius: 3px;color: #FFFFFF;background: #101314;line-height: 1;box-shadow: 0 1px 4px 0 rgba(0, 0, 0, .09);z-index: 1;}#user-menu > span {display: inline-block;width: 100%;padding: 12px;box-sizing: border-box;font-size: 16px;font-weight: 500;white-space: nowrap;text-overflow: ellipsis;cursor: default;overflow: hidden;}#label-user > img {position: absolute;height: 100%;left: -8px;vertical-align: top;}#label-user{position: relative;display: inline-block;height: 48px;width: 48px;border-radius: 100%;overflow: hidden;cursor: pointer;}#header-user{text-shadow:-1px 0 black,0 1px black,1px 0 black,0 -1px black;position: absolute;top: 10px;right: 0;}#chat-wrapper.full-screen #chat-instant, #chatf-wrapper.full-screen #chat-instant>.avatar>.status-icon,#chat-wrapper.full-screen #chat-content>.message>.avatar>.status-icon {background:unset;}.cts-message-unread{display:block;border-radius:6px;padding:1px 6px 1px 6px;background:#53b6ef;text-shadow:-1px 0 black, 0 1px black, 1px 0 black, 0 -1px black;color:#FFF;font:bold 16px sans-serif;cursor:pointer}.ctstime{position:absolute;right:3px;top:3px;background: #101314;border: 1px solid black;border-radius: 6px;padding: 1px 6px;}#chat-instant>.avatar>div>img,#cts-chat-content>.message>.avatar>div>img{position:relative;height:100%;left:-7px}.message>#system_user{background:linear-gradient(0deg,rgb(0, 19, 29)0%,rgba(0, 0, 0, 0.85)50%,rgba(0, 0, 0, 0.72)100%);border: 1px solid black;border-radius: 6px;padding: 1px 6px 1px 6px;word-wrap: break-word;font-weight: 600;font-size: 16px;color: #FFF;text-decoration: none;overflow: hidden;text-overflow: ellipsis;}.message{color:#FFF;text-shadow:-1px 0 black, 0 1px black, 1px 0 black, 0 -1px black;font-family:sans-serif;font-weight:300;font-size:20px;white-space:pre-line;word-wrap:break-word}.message a, .message a:visited, .message a:hover, .message a:active{position:relative;transition:0.5s color ease;text-decoration:none;color:#53b6ef}.message a:hover{text-decoration:underline;}#chat{will-change: transform;min-height:unset;}#cts-chat-content{display:flex;flex-direction:column;justify-content:flex-end;min-height:100%}#cts-chat-content>.message{padding:3px 3px;background:#101314a8;position:relative;left:0;margin-bottom:3px;border-radius:6px}#cts-chat-content>.message.highlight,.message.common.highlight{background:#e24c05;-webkit-box-shadow:inset 0 0 20px #000000;box-shadow: inset 0 0 20px 0 #000000;}#cts-chat-content>.message.common{min-height: 50px;padding:3px 3px 3px 50px;box-sizing:border-box;text-align:left}#chat-instant>.avatar,#cts-chat-content>.message>.avatar{position:absolute;height:40px;width:40px;top:3px;left:3px;-webkit-transform:scale(1);-moz-transform:scale(1);-ms-transform:scale(1);-o-transform:scale(1);transform:scale(1);pointer-events:none;}#chat-instant>.avatar>div,#cts-chat-content>.message>.avatar>div{position:absolute;height:100%;width:100%;top:0;left:0;border-radius:100%;overflow:hidden}#notification-content .nickname{border-radius:6px;padding:1px 6px 1px 6px}.notification{padding:1px 0 1px 0;text-shadow:-1px 0 black, 0 1px black, 1px 0 black, 0 -1px black}.time{position:absolute;right:5px}.notifbtn:hover{background:linear-gradient(0deg,rgb(0, 135, 186)0%,rgba(0, 49, 64, 0.94)75%,rgba(0, 172, 255, 0.6)100%);}.notifbtn{cursor: pointer;border-radius: 0 0 12px 12px;outline: none;background:linear-gradient(0deg,rgba(0, 0, 0, 0)0%,rgba(37, 37, 37, 0.32)75%,rgba(255, 255, 255, 0.6)100%);border: none;color: white;width: 100%;}#notification-content.large{height:50%;}#notification-content{will-change: transform;top:0;position:relative;scrollbar-width:none;background:#101314;text-shadow:-1px 0 black, 0 1px black, 1px 0 black, 0 -1px black;height: 15%;min-height:38px;font:bold 16px sans-serif;color:#FFF;overflow-y:scroll;overflow-wrap:break-word;padding:0 6px 0 6px}#notification-content::-webkit-scrollbar{width:0;background:transparent}#cts-chat-content{display:flex;flex-direction:column;justify-content:flex-end;min-height:100%}#chat-instant>.avatar>.status-icon,#cts-chat-content>.message>.avatar>.status-icon{left:0!important}#chat-instant>.nickname{color:#53b6ef;text-shadow:-1px 0 black, 0 1px black, 1px 0 black, 0 -1px black;font-size: 20px;font-weight: 800;}#chat-instant::after{background:none;}.on-white-scroll{scrollbar-width: none;overflow-wrap: break-word;}.on-white-scroll::-webkit-scrollbar{width:0;background:transparent}#cts-chat-content>.message>.nickname{border:1px solid black;border-radius:6px;padding:1px 6px 1px 6px;word-wrap:break-word;max-width:calc(100% - 115px);font-weight:600;font-size:16px;color:#FFF;display:inline-block;text-decoration:none;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}#input{padding-top:0}:host,#input>.waiting{background:#20262870}#input:before,#input:after{content:unset}#input>textarea::placeholder{color:#FFF}#input>textarea::-webkit-input-placeholder{color:#fff}#input>textarea:-moz-placeholder{color:#fff}#input>textarea{width: calc(100% - 57px);line-height:unset;min-height:65px;max-height:65px;border-radius:6px;scrollbar-width:none;background:#101314;text-shadow:-1px 0 black, 0 1px black, 1px 0 black, 0 -1px black;color:#FFF;font-size:" + (CTS.FontSize - 4) + "px;font-family:sans-serif;font-weight:300;}#chat-wrapper{border:none;transition:none;bottom:0;right:0!important;max-height:calc(70% - 119px)!important;min-height:calc(70% - 119px)!important;position:fixed!important;min-width:400px;max-width:400px;}#chat-position{top:22px;left:6px;right:6px;bottom:5px;}.on-white-scroll::webkit-scrollbar{width:0;background:transparent;}";
118 }
119 //INITIATE
120 CTSInit();
121
122 function CTSInit() {
123 //INITIATE CTS
124 var err_out=0;
125 CTS.ScriptLoading = setInterval(function() {
126 err_out++;
127 if (document.querySelector("tinychat-webrtc-app")) {
128 if (document.querySelector("tinychat-webrtc-app").shadowRoot) CTSRoomInject();
129 debug("TINYCHAT::LOAD", "ROOM");
130 } else if (document.querySelector("#welcome-wrapper")) {
131 CTSHomeInject();
132 debug("TinyChat::LOAD", "HOME");
133 } else {
134 err_out++;
135 }
136 if (err_out == 50) {
137 clearInterval(CTS.ScriptLoading);
138 clearInterval(CTS.FullLoad);
139 }
140 }, 200);
141 //WEBSOCKET HOOK
142 if (!document.URL.match(/^https:\/\/tinychat.com(\/$|\/#)/i)) {
143 new MutationObserver(function() {
144 this.disconnect();
145 CTSWebSocket();
146 }).observe(document, {
147 subtree: true,
148 childList: true
149 });
150 }
151 //FULLY LOADED -> RUNALL
152 CTS.FullLoad = setInterval(function() {
153 if (CTS.ScriptInit && CTS.SocketConnected) {
154 clearInterval(CTS.FullLoad);
155 if (CTS.Me.mod) {
156 if (CTS.Bot) CheckHost();
157 if (CTS.Room.YT_ON) VideoListElement.querySelector("#videos-footer>#videos-footer-youtube").style.cssText = "display:block;";
158 if (CTS.Room.YT_ON && CTS.Project.isTouchScreen) VideoListElement.querySelector("#videos-footer>#videos-footer-youtube").classList.toggle("hidden");
159 //VideoListElement.querySelector("#videos-footer>#videos-footer-soundcloud").style.cssText = "display:block;";
160 }
161 //PTT AUTO
162 if (CTS.Room.PTT) {
163 VideoListElement.querySelector("#videos-footer-push-to-talk").addEventListener("mouseup", function(e) {
164 if (e.which == 1) CTS.AutoMicrophone = false;
165 if (e.which == 1 && e.ctrlKey === true) CTS.AutoMicrophone = !CTS.AutoMicrophone;
166 if (e.which == 2) CTS.AutoMicrophone = !CTS.AutoMicrophone;
167 }, {
168 passive: true
169 });
170 }
171 //FAVORITE ROOM
172 var favorited_rooms = "",
173 len = CTS.Favorited.length,
174 script = document.createElement("script"),
175 elem = document.getElementsByTagName("script")[0];
176 script.text = 'function AddFavorite(obj, index) {\n var val = JSON.parse(localStorage.getItem("' + CTS.Project.Storage + 'Favorited"));\n val[index]=["' + CTS.Room.Name + '","' + CTS.Room.Avatar + '"];\n localStorage.setItem("' + CTS.Project.Storage + 'Favorited", JSON.stringify(val));\n obj.href ="https://tinychat.com/room/' + CTS.Room.Name + '";\n obj.innerText = "' + CTS.Room.Name + '";\n obj.onclick = null;\n return false;\n}';
177 elem.parentNode.insertBefore(script, elem);
178 for (var i = 0; i < len; i++) favorited_rooms += CTS.Favorited[i] !== null ? "#" + (i + 1) + '<a href="https://tinychat.com/room/' + CTS.Favorited[i][0] + '">' + CTS.Favorited[i][0] + "</a>" : "#" + (i + 1) + '<a href="#" onclick="return AddFavorite(this,' + i + ');">ADD ROOM</a>';
179 ChatLogElement.querySelector("#input").insertAdjacentHTML("afterbegin", '<div id="header-user"><label id="label-user" for="input-user"><img class="switcher" src="' + (CTS.Me.avatar ? CTS.Me.avatar : "https://avatars.tinychat.com/standart/small/eyePink.png") + '"></label><input type="checkbox" id="input-user" hidden=""><div id="user-menu"><span id="nickname">FAVORITED ROOMS</span>' + favorited_rooms + '<span id="nickname">' + CTS.Me.username + '</span><a href="https://tinychat.com/settings/gifts"> My Gifts</a><a href="https://tinychat.com/settings/profile">Profile</a><a href="https://tinychat.com/room/' + CTS.Me.username + '">My Room</a><a href="https://tinychat.com/#">Directory</a></div></div>');
180 //RECENT GIFTS
181 var recent_gifts = "\n";
182 for (var g = 0; g < CTS.Room.Recent_Gifts.length; g++) recent_gifts += "<img src=\""+CTS.Room.Recent_Gifts[g]+"\" />";
183 //ALERT
184 Settings("<center><u>" + CTS.Room.Name.toUpperCase() + "</u>" + (CTS.Room.Avatar ? '\n<img src="' + CTS.Room.Avatar + '">' : "") + "\n" + CTS.Room.Bio + '\n<a href="' + CTS.Room.Website + '" target="_blank">' + CTS.Room.Website + "</a>"+((recent_gifts!="")?recent_gifts:"")+"\n\nROOM CONFIGURATION:\nYouTube Mode: " + ((CTS.Room.YT_ON) ? "ON" : "OFF") + "\n\n</center>");
185 CTS.ShowedSettings = true;
186 AddUserNotification(2, CTS.Me.namecolor, CTS.Me.nick, CTS.Me.username, false);
187 //FEATURE LAUNCH
188 SoundMeter();
189 Reminder();
190 }
191 }, 500);
192 }
193
194 function CTSHomeInject() {
195 var HomeCSS = '@media screen and (max-width: 1000px){.nav-menu {background-color: #181e1f;}}.nav-sandwich-menu-button{background-color:unset;}#modalfree-wrapper{display: none;}.tile-header > img {transition:unset;}.tile-favroom-opt{cursor:pointer;position: absolute;right: 0;top: 0;padding: 1px;background:#10131494;}.tile-favroom-opt:hover{background:#ff00008c;}#content{padding-bottom:unset;}.tile-content{height:180px;}.cts-footer-contents .tile-info{height:20px}.cts-footer-contents .tile-header>img{cursor:pointer;height: 220px;}.tile-header>img{height: 230px;width: 100%;max-width: 100%;}.cts-footer:hover .cts-footer-contents .tile{font-size: 18px;font-weight: 800;width:20%;display:inline-block;}.cts-footer-contents .tile {background: #00a2ff;text-align: center;border:unset;height:unset;display:none;margin: unset;}.cts-footer {background:#10131494;width: 100%;position: fixed;bottom: 0;left: 0;}#catalog > div {display: inline-block;padding: 5px;box-sizing: border-box;}.tile[data-status="pro"], .tile[data-status="extreme"], .tile[data-status="gold"] {margin-top: 12px;}.tile-header {border-radius: 12px 12px 0 0;}#promoted .tile-header > img{width:100%;}#navigation > label{border-radius:12px;}#welcome>div{padding-top:0}.tile-statistic{padding-top:0;padding-bottom:4px;background: #000000a6;}.tile-name{padding-top:unset;}#promote-button{border-radius: 12px 12px 0 0;}tile-name{padding-top:unset;}.tile-info{bottom:unset;top:0;height:28px;}.cts-footer > h2, #promoted-wrapper > h2, #trended-wrapper > h2, #header-for-all{text-align: center;font-size: 30px;font-weight: 800;}body{background:' + CTS.MainBackground + ';background-size:cover;background-attachment: fixed;}.tile-content-info-icon > img {display:none;}.tile-content-info{font-size: 14px;font-weight: 600;}#promoted .tile-content-info-text{word-break: break-word;max-height:95px;}.tile{border:2px solid #fff;margin-top: 13px;height:425px;}#loadmore-no-more {background:#101314;}.tile-content > img{display:none;}#welcome-wrapper{background: #10131494;border-bottom:unset;}#loadmore{background: #00a2ff;font-weight: 600;}#user-menu{background: #101314;}#nav-static-wrapper {-webkit-box-shadow: 0 0 20px 17px #53b6ef;box-shadow: 0 0 20px 17px #53b6ef;background:#101314;}#up-button:hover > #up-button-content {background: #10131459;}#nav-fixed{border-bottom:unset;}#nav-fixed-wrapper{-webkit-box-shadow: 0 0 20px 17px #53b6ef;box-shadow: 0 0 20px 17px #53b6ef;background: #101314;}#nav-static {border-bottom:unset;}#welcome{padding:12px 30px 24px;}.tile{border-radius: 12px;background: #101314b3;}div, span, a, h1, h2, h3, h4, h5, h6, p {text-shadow: -1px 0 black, 0 1px black, 1px 0 black, 0 -1px black;color: #FFFFFF!important;}#promoted-wrapper > div, #trended-wrapper > div {background: #00a2ff;border-radius: 12px;}.tile-content-info-text {word-break: break-word;width:100%;}.tile-content-info.with-icon {display: contents;}#navigation > label:not([for="input-catalog-navigation"]) {font-weight:600;background: #000000;}';
196 //INSERT HTML/CSS
197 document.body.querySelector("style").insertAdjacentHTML("beforeend", HomeCSS);
198 document.body.insertAdjacentHTML("beforeend", '<div class="cts-footer"><h2>FAVORITED ROOMS</h2><div class="cts-footer-contents"></div></div>');
199 //INSERT SCRIPT
200 var script = document.createElement("script"),
201 elem = document.getElementsByTagName("script")[0];
202 script.text = 'function RemoveFavorite(obj, index) {\n var val = JSON.parse(localStorage.getItem("' + CTS.Project.Storage + 'Favorited"));\n val[index]=null;\n localStorage.setItem("' + CTS.Project.Storage + 'Favorited", JSON.stringify(val));\n return obj.parentNode.parentNode.remove();\n}';
203 elem.parentNode.insertBefore(script, elem);
204 var len = CTS.Favorited.length;
205 for (var i = 0; i < len; i++) document.body.querySelector(".cts-footer-contents").insertAdjacentHTML("beforeend", CTS.Favorited[i] !== null ? '<div class="tile" data-room-name="' + CTS.Favorited[i][0] + '">Favorite #' + (i + 1) + ' <div class="tile-header"><img id="tile-header-image" src="' + (CTS.Favorited[i][1] ? CTS.Favorited[i][1] : "https://i.imgur.com/VnVFEv7.png") + '" onclick="locationTo(\'/room/' + CTS.Favorited[i][0] + '\');"><div class="tile-info"><div class="tile-favroom-opt" onclick="RemoveFavorite(this,' + i + ')">X</div><div class="tile-name">' + CTS.Favorited[i][0] + '</div></div></div></div>' : '<div class="tile">Favorite #' + (i + 1) + "</div>");
206 //SCRIPT INIT -> PREPARE()
207 clearInterval(CTS.ScriptLoading);
208 CTS.ScriptInit = true;
209 CTSHomePrepare();
210 }
211
212 function CTSHomePrepare() {
213 //FUNCTION BYPASS
214 window.ModalFreeTrialPro = function() {};
215 //REMOVE
216 Remove(document, "#footer");
217 Remove(document, ".nav-logo");
218 }
219
220 function CTSRoomInject() {
221 // PUBLIC / ADDON GRABBERS
222 window.CTSImages = [
223 "https://i.imgur.com/8M0NPCv.png", "https://i.imgur.com/6IAL4aM.png", "https://i.imgur.com/QdOTqIR.jpg", "https://i.imgur.com/qqFsein.jpg", "https://i.imgur.com/vVD5pUb.jpg", "https://i.imgur.com/Sux2Age.jpg", "https://i.imgur.com/cIKznlf.jpg", "https://i.imgur.com/iEMP5I6.jpg", "https://i.imgur.com/rEGy1tK.jpg", "https://i.imgur.com/JR6Ped5.jpg", "https://i.imgur.com/m3dX7yn.jpg", "https://i.imgur.com/2cJqV1K.jpg", "https://i.imgur.com/QL1M4yG.jpg", "https://i.imgur.com/Syy1mUU.jpg", "https://i.imgur.com/sRpDOp3.jpg", "https://i.imgur.com/Im7dWdM.jpg", "https://i.imgur.com/9uCdYyq.png", "https://i.imgur.com/X9Kp6ka.jpg", "https://i.imgur.com/TOZTx1M.jpg", "https://i.imgur.com/wcjxVjk.png", "https://i.imgur.com/UZfmih9.png", "https://i.imgur.com/mkauZUT.jpg", "https://i.imgur.com/GfPqv7d.jpg", "https://i.imgur.com/R7AOtjV.jpg", "https://i.imgur.com/Qso6n8k.jpg", "https://i.imgur.com/vVfj23z.jpg", "https://i.imgur.com/BYPsShX.jpg", "https://i.imgur.com/1EWYBQw.jpg", "https://i.imgur.com/Oaq0eip.jpg", "https://i.imgur.com/HVHaJ1r.jpg", "https://i.imgur.com/SImcSc2.png", "https://i.imgur.com/CgRDCdy.jpg", "https://i.imgur.com/VMtXsES.png", "https://i.imgur.com/oxHz9un.jpg", "https://i.imgur.com/VN6x9QA.jpg", "https://i.imgur.com/9KhjWvW.jpg", "https://i.imgur.com/fu0eiv4.jpg", "https://i.imgur.com/QgcvxZf.jpg", "https://i.imgur.com/2kz8Roz.jpg", "https://i.imgur.com/A2AdQd8.jpg", "https://i.imgur.com/zuNUJ4J.jpg", "https://i.imgur.com/CW4mVWE.jpg", "https://i.imgur.com/0NGecGX.jpg", "https://i.imgur.com/4IEcVlr.jpg", "https://i.imgur.com/JDnQzF4.jpg", "https://i.imgur.com/Ye6iIrw.jpg", "https://i.imgur.com/DVlwQFN.jpg", "https://i.imgur.com/G6Oa9s6.jpg", "https://i.imgur.com/cXpEHvX.jpg", "https://i.imgur.com/ANXRz54.jpg", "https://i.imgur.com/i7KvpAf.jpg", "https://i.imgur.com/kJ44IQQ.jpg", "https://i.imgur.com/5ONal5c.jpg", "https://i.imgur.com/nWuC5FK.jpg", "https://i.imgur.com/ZYNsEN6.jpg", "https://i.imgur.com/C3aVnBq.jpg", "https://i.imgur.com/8Kts9t7.jpg", "https://i.imgur.com/QiaDx3C.jpg", "https://i.imgur.com/wrt6zBN.jpg", "https://i.imgur.com/3YgGoV0.jpg", "https://i.imgur.com/HPsbhiF.jpg", "https://i.imgur.com/X4wSs8f.jpg", "https://i.imgur.com/cqeMox0.jpg", "https://i.imgur.com/apNgmSO.jpg", "https://i.imgur.com/YjYcyCn.jpg", "https://i.imgur.com/2hUFTDv.png", "https://i.imgur.com/7lDQKff.jpg", "https://i.imgur.com/yuQTkOy.png", "https://i.imgur.com/7zvCOpV.jpg", "https://i.imgur.com/L5v6bcs.jpg", "https://i.imgur.com/5h3N2HY.jpg", "https://i.imgur.com/AvhrIcv.jpg", "https://i.imgur.com/DsAMAG1.jpg", "https://i.imgur.com/dDvOwXi.jpg", "https://i.imgur.com/ii00Lnl.jpg",
224 "https://i.imgur.com/vHDQY7N.jpg", "https://i.imgur.com/czfeyXQ.jpg", "https://i.imgur.com/pHEAee2.jpg", "https://i.imgur.com/txu4z7B.jpg", "https://i.imgur.com/NOapG69.jpg", "https://i.imgur.com/cxA4ist.jpg", "https://i.imgur.com/2keIszu.jpg", "https://i.imgur.com/q2Kpinf.jpg", "https://i.imgur.com/nDiFD2D.jpg", "https://i.imgur.com/Lvk0Lql.jpg", "https://i.imgur.com/QcRIeBr.jpg", "https://i.imgur.com/GlBONNB.jpg", "https://i.imgur.com/jVmJ9Iz.jpg", "https://i.imgur.com/9h2N288.png", "https://i.imgur.com/q0Rm3dS.jpg", "https://i.imgur.com/1tTKfKM.png", "https://i.imgur.com/nEwJBan.jpg", "https://i.imgur.com/NgE4lXY.jpg", "https://i.imgur.com/I4Pv5Zc.jpg", "https://i.imgur.com/QVDBSEm.jpg", "https://i.imgur.com/N9KfkgT.jpg", "https://i.imgur.com/mLIDP8a.jpg", "https://i.imgur.com/C8fAtMn.jpg", "https://i.imgur.com/e2Pubr3.jpg", "https://i.imgur.com/6drF4lG.jpg", "https://i.imgur.com/JcFhmPT.jpg", "https://i.imgur.com/wQQlX06.jpg", "https://i.imgur.com/qPTFnVp.jpg", "https://i.imgur.com/KWto7ab.jpg", "https://i.imgur.com/DHEdXnE.jpg", "https://i.imgur.com/49vqbrB.jpg", "https://i.imgur.com/TK4I9DI.jpg", "https://i.imgur.com/o5QNrcQ.jpg", "https://i.imgur.com/49adw4l.jpg", "https://i.imgur.com/vyYOZkE.jpg", "https://i.imgur.com/sBaXCoY.jpg", "https://i.imgur.com/dH0M8aN.png", "https://i.imgur.com/aqZ4VDh.jpg", "https://i.imgur.com/hMpMR84.jpg", "https://i.imgur.com/5zR2i8W.jpg", "https://i.imgur.com/oUPXbGf.jpg", "https://i.imgur.com/YW5tv1t.jpg", "https://i.imgur.com/JgKwHXs.jpg", "https://i.imgur.com/2k9JihV.jpg", "https://i.imgur.com/V5MUGj4.jpg", "https://i.imgur.com/3dUgoAf.jpg", "https://i.imgur.com/Q6aJgBM.jpg", "https://i.imgur.com/gRSmljE.jpg", "https://i.imgur.com/nkhsbE9.jpg", "https://i.imgur.com/I6LMqZq.jpg", "https://i.imgur.com/7OzdeRk.jpg", "https://i.imgur.com/wW94Pvc.jpg", "https://i.imgur.com/jQrTdv2.jpg", "https://i.imgur.com/UDgQ2Fh.jpg", "https://i.imgur.com/qjdMmPf.jpg", "https://i.imgur.com/yh7QoUN.jpg", "https://i.imgur.com/XchwuKo.jpg", "https://i.imgur.com/fdPaQbz.jpg", "https://i.imgur.com/zNfKy8I.jpg", "https://i.imgur.com/TaOf7dX.jpg", "https://i.imgur.com/bZxfyu8.jpg", "https://i.imgur.com/ccZRfsA.jpg", "https://i.imgur.com/wlbmT74.jpg", "https://i.imgur.com/29ffHeU.jpg", "https://i.imgur.com/30HbBAA.jpg", "https://i.imgur.com/4pO8b0B.jpg", "https://i.imgur.com/kD6BveQ.jpg", "https://i.imgur.com/LrCsiQj.jpg", "https://i.imgur.com/QN5NcXK.jpg", "https://i.imgur.com/MWW5cOv.jpg", "https://i.imgur.com/7LvskAH.jpg", "https://i.imgur.com/S7kLNct.jpg", "https://i.imgur.com/rL0olge.jpg", "https://i.imgur.com/0Apm59C.jpg", "https://i.imgur.com/ZMRBVvO.jpg",
225 "https://i.imgur.com/xFNZTwS.jpg", "https://i.imgur.com/iqq8ECW.jpg", "https://i.imgur.com/xEth2qp.jpg", "https://i.imgur.com/8ijIZMj.jpg", "https://i.imgur.com/zSB1DOw.jpg", "https://i.imgur.com/6TzjZSd.jpg", "https://i.imgur.com/Gf9yAwP.jpg", "https://i.imgur.com/u5ifVZy.jpg", "https://i.imgur.com/4ibO4FN.jpg", "https://i.imgur.com/bDCygo7.jpg", "https://i.imgur.com/lqktMar.jpg", "https://i.imgur.com/b2jAXiC.jpg", "https://i.imgur.com/oPE32ni.jpg", "https://i.imgur.com/YRjfPjP.jpg", "https://i.imgur.com/1FRwNEb.jpg", "https://i.imgur.com/dzgvlEx.jpg", "https://i.imgur.com/3FCAMiu.jpg", "https://i.imgur.com/wF5k6Ux.jpg", "https://i.imgur.com/mkuNYYa.jpg", "https://i.imgur.com/Y2Yu3yA.jpg", "https://i.imgur.com/Zchlast.jpg", "https://i.imgur.com/2FbH2jq.jpg", "https://i.imgur.com/Bb4iyy0.jpg", "https://i.imgur.com/7rjAtTt.jpg", "https://i.imgur.com/g1rNC8Z.jpg", "https://i.imgur.com/RC3bKe7.jpg", "https://i.imgur.com/qloc683.jpg", "https://i.imgur.com/irmzqz7.jpg", "https://i.imgur.com/pvmhbwL.jpg", "https://i.imgur.com/Xti1aEf.jpg", "https://i.imgur.com/FqFYows.jpg", "https://i.imgur.com/92zz2Zu.jpg", "https://i.imgur.com/jWrqBga.jpg", "https://i.imgur.com/OMSQsDe.jpg", "https://i.imgur.com/bvTtaLQ.jpg", "https://i.imgur.com/vxt6B7Y.jpg", "https://i.imgur.com/siw7Ipn.jpg", "https://i.imgur.com/paQsmXk.jpg", "https://i.imgur.com/VLHs9cT.png", "https://i.imgur.com/6VSxbJY.jpg", "https://i.imgur.com/C3Xn1WD.jpg", "https://i.imgur.com/d6BBFfS.jpg", "https://i.imgur.com/HyK1BFP.jpg", "https://i.imgur.com/2InicOt.jpg", "https://i.imgur.com/IVM4luE.jpg", "https://i.imgur.com/VLE0zNA.jpg", "https://i.imgur.com/rfgwqVI.jpg", "https://i.imgur.com/GsTMYfk.jpg", "https://i.imgur.com/yMEdYBN.jpg", "https://i.imgur.com/LvrO8oB.jpg", "https://i.imgur.com/1VBNkJP.jpg", "https://i.imgur.com/beuJiKd.jpg", "https://i.imgur.com/61h9Twq.jpg", "https://i.imgur.com/mnszrZ3.jpg", "https://i.imgur.com/He8K7kF.jpg", "https://i.imgur.com/id5BSLh.jpg", "https://i.imgur.com/huazhWL.jpg", "https://i.imgur.com/ttc4EYq.jpg", "https://i.imgur.com/HTO5tGy.jpg", "https://i.imgur.com/Pg1NrT1.jpg", "https://i.imgur.com/HEubZeG.jpg", "https://i.imgur.com/yk4XVVu.jpg", "https://i.imgur.com/Q6xqV8U.jpg", "https://i.imgur.com/ROTOMPV.jpg", "https://i.imgur.com/5DBP49J.jpg", "https://i.imgur.com/1pafkRu.jpg", "https://i.imgur.com/ZYJW79s.jpg", "https://i.imgur.com/5hJnezu.jpg", "https://i.imgur.com/LHRwsur.jpg", "https://i.imgur.com/858hMb9.jpg", "https://i.imgur.com/WOtpN81.jpg", "https://i.imgur.com/ITCxNl1.jpg", "https://i.imgur.com/OvXfe6w.jpg", "https://i.imgur.com/EVYKONX.jpg", "https://i.imgur.com/9nP4KwW.jpg",
226 "https://i.imgur.com/1SaESYp.jpg", "https://i.imgur.com/xBQlQKh.jpg", "https://i.imgur.com/yonFqV5.jpg", "https://i.imgur.com/go0xMSw.png", "https://i.imgur.com/jJhFpGw.jpg", "https://i.imgur.com/fcULcZq.jpg", "https://i.imgur.com/66l2lHM.jpg", "https://i.imgur.com/bujMfoQ.jpg", "https://i.imgur.com/JdbenHz.jpg", "https://i.imgur.com/merXbme.jpg", "https://i.imgur.com/ogrqxoQ.jpg", "https://i.imgur.com/fCstr3I.jpg", "https://i.imgur.com/t4d6ngW.jpg", "https://i.imgur.com/QzTlCSw.png", "https://i.imgur.com/CjrvvRI.jpg", "https://i.imgur.com/Du0abK6.jpg", "https://i.imgur.com/fZxRbtq.jpg", "https://i.imgur.com/zJB8VZc.jpg", "https://i.imgur.com/5lFG1Bf.jpg", "https://i.imgur.com/hvGzGNb.png", "https://i.imgur.com/UHZ8gC6.jpg", "https://i.imgur.com/ZIlJIIZ.png", "https://i.imgur.com/H7SjU1N.jpg", "https://i.imgur.com/yxxQsmf.jpg", "https://i.imgur.com/1TBkVzd.jpg", "https://i.imgur.com/3WffDw4.jpg", "https://i.imgur.com/XQU3W19.png", "https://i.imgur.com/2YxUgbQ.jpg", "https://i.imgur.com/8TVSB7D.jpg", "https://i.imgur.com/lNfEZwF.jpg", "https://i.imgur.com/2CgZewR.jpg", "https://i.imgur.com/ZJMFXGM.jpg", "https://i.imgur.com/9pZLYVF.jpg", "https://i.imgur.com/i9KaWdK.jpg", "https://i.imgur.com/X0hUxMg.jpg", "https://i.imgur.com/cWNLBLC.jpg", "https://i.imgur.com/oVQ1qmK.jpg", "https://i.imgur.com/MFa4WPr.jpg", "https://i.imgur.com/QalYWeA.png", "https://i.imgur.com/bLAlVzX.jpg", "https://i.imgur.com/OEXO2kT.jpg", "https://i.imgur.com/MnK5lmL.jpg", "https://i.imgur.com/dVMdMZh.jpg", "https://i.imgur.com/nNfOFvX.png", "https://i.imgur.com/yzoTLrK.jpg", "https://i.imgur.com/b1mTB58.jpg", "https://i.imgur.com/uWMQpMV.jpg", "https://i.imgur.com/TVGqTdH.jpg", "https://i.imgur.com/GFfZk0L.jpg", "https://i.imgur.com/aS5RCaX.jpg", "https://i.imgur.com/TTWYjDg.png", "https://i.imgur.com/OKUbuLl.jpg", "https://i.imgur.com/FyIJb7S.jpg", "https://i.imgur.com/KVTNHKB.jpg", "https://i.imgur.com/G9cpqNM.jpg", "https://i.imgur.com/cFf5e30.jpg", "https://i.imgur.com/1Nok0ho.jpg", "https://i.imgur.com/ozEWuPz.jpg", "https://i.imgur.com/QhHTLxc.jpg", "https://i.imgur.com/YYto1AX.jpg", "https://i.imgur.com/1THGvEA.jpg", "https://i.imgur.com/Rt3mp6H.jpg", "https://i.imgur.com/M2tiiNS.jpg", "https://i.imgur.com/lRtAxDM.jpg", "https://i.imgur.com/dlqkyFg.jpg", "https://i.imgur.com/lSLHeHM.png", "https://i.imgur.com/wKBOEof.png", "https://i.imgur.com/0aF2Si4.jpg", "https://i.imgur.com/bPDtdqH.jpg", "https://i.imgur.com/wZ08FwN.jpg", "https://i.imgur.com/gEtlvpr.jpg", "https://i.imgur.com/sTrwc9U.jpg", "https://i.imgur.com/nPEjErr.png", "https://i.imgur.com/bRaK26l.jpg", "https://i.imgur.com/vwJe85N.jpg",
227 "https://i.imgur.com/F8RFA5t.jpg", "https://i.imgur.com/M08DwfB.jpg", "https://i.imgur.com/gvF4hmM.jpg", "https://i.imgur.com/vINAgNJ.jpg", "https://i.imgur.com/ZzIHnk7.png", "https://i.imgur.com/IaYE1SA.png", "https://i.imgur.com/h3uA809.jpg", "https://i.imgur.com/uSxy1TH.jpg", "https://i.imgur.com/ihUpL67.jpg", "https://i.imgur.com/JA5pSwV.jpg", "https://i.imgur.com/S5PaNRb.jpg", "https://i.imgur.com/vPKxrIj.jpg", "https://i.imgur.com/Zb2vtPA.jpg", "https://i.imgur.com/uUkxBYp.jpg", "https://i.imgur.com/fpsAui6.jpg", "https://i.imgur.com/Ns5gM3Y.jpg", "https://i.imgur.com/qUFLtvX.jpg", "https://i.imgur.com/JsVmBaH.jpg", "https://i.imgur.com/DUFEeDG.jpg", "https://i.imgur.com/VkT9WNe.jpg", "https://i.imgur.com/7rHa1t1.jpg", "https://i.imgur.com/6rt4Xsc.jpg", "https://i.imgur.com/1woJRNz.jpg", "https://i.imgur.com/DZizgSe.jpg", "https://i.imgur.com/WcPkq2p.jpg", "https://i.imgur.com/FWgshWM.jpg", "https://i.imgur.com/ce28KTw.jpg", "https://i.imgur.com/Z1kgLE9.jpg", "https://i.imgur.com/qmTDbVf.jpg", "https://i.imgur.com/Glfmlwk.jpg", "https://i.imgur.com/1ZlA3eI.jpg", "https://i.imgur.com/FyY9zQB.jpg", "https://i.imgur.com/5vION1i.jpg", "https://i.imgur.com/GN8VSLo.jpg", "https://i.imgur.com/fMHj9aD.png", "https://i.imgur.com/AZKVqlm.jpg", "https://i.imgur.com/N6yrNAp.jpg", "https://i.imgur.com/mzfGu1K.jpg", "https://i.imgur.com/PbDAvp8.jpg", "https://i.imgur.com/PeKxWNd.png", "https://i.imgur.com/q6HucmK.jpg", "https://i.imgur.com/PcpoEr9.jpg", "https://i.imgur.com/m8MKD34.jpg", "https://i.imgur.com/rEfHYFj.png", "https://i.imgur.com/YOnQC7m.jpg", "https://i.imgur.com/IKZ1dnz.png", "https://i.imgur.com/7dKl6GR.jpg", "https://i.imgur.com/7QTdYyC.jpg", "https://i.imgur.com/VY6CRU9.jpg", "https://i.imgur.com/JbbTXGZ.jpg", "https://i.imgur.com/LiWognc.jpg", "https://i.imgur.com/lAlCmCS.jpg", "https://i.imgur.com/tuoVfDz.jpg", "https://i.imgur.com/jDtr7VV.jpg", "https://i.imgur.com/Fmq1w0x.jpg", "https://i.imgur.com/SW9tEby.jpg", "https://i.imgur.com/OIeGtF1.jpg", "https://i.imgur.com/y28VX6l.jpg", "https://i.imgur.com/SmN01pH.jpg", "https://i.imgur.com/pYIHV3V.jpg", "https://i.imgur.com/4mefbZJ.jpg", "https://i.imgur.com/CrnksCn.jpg", "https://i.imgur.com/DqdQHU5.jpg", "https://i.imgur.com/Kyp7Mrq.jpg", "https://i.imgur.com/5uUI0FK.jpg", "https://i.imgur.com/nYyKnjc.jpg", "https://i.imgur.com/8yngY9r.png", "https://i.imgur.com/LXTztRk.jpg", "https://i.imgur.com/YW9f04H.jpg", "https://i.imgur.com/VEOTdF4.jpg", "https://i.imgur.com/CNcnljn.jpg", "https://i.imgur.com/cVyPQRQ.jpg", "https://i.imgur.com/QVnisWP.jpg", "https://i.imgur.com/xkOmSt2.jpg", "https://i.imgur.com/OWqkrGA.jpg",
228 "https://i.imgur.com/407ypHE.jpg", "https://i.imgur.com/q7CBMPA.jpg", "https://i.imgur.com/jLgvLEB.jpg", "https://i.imgur.com/ZgRybJZ.jpg", "https://i.imgur.com/BCiqZoY.jpg", "https://i.imgur.com/C4FCE08.jpg", "https://i.imgur.com/mwQMddH.jpg", "https://i.imgur.com/c9Na9m7.jpg", "https://i.imgur.com/rvkOyhW.jpg", "https://i.imgur.com/fXikj5n.jpg", "https://i.imgur.com/B9nwfN2.jpg", "https://i.imgur.com/NitZTxZ.jpg", "https://i.imgur.com/4U7Wc6E.jpg", "https://i.imgur.com/wk2byhf.jpg", "https://i.imgur.com/kmeF9zK.jpg", "https://i.imgur.com/fpOurZh.jpg", "https://i.imgur.com/A6t86N6.jpg", "https://i.imgur.com/CnGthdb.jpg", "https://i.imgur.com/FgCA3uK.jpg", "https://i.imgur.com/sCYYhqf.jpg", "https://i.imgur.com/2NopGqw.jpg", "https://i.imgur.com/fzYZGdC.jpg", "https://i.imgur.com/nZufx8p.jpg", "https://i.imgur.com/IjMMreD.jpg", "https://i.imgur.com/HEpf4Eb.jpg", "https://i.imgur.com/jZeIfAc.jpg", "https://i.imgur.com/ZxaX4j0.jpg", "https://i.imgur.com/DXetwFt.jpg", "https://i.imgur.com/euIXHlP.jpg", "https://i.imgur.com/U4Mo2Hn.jpg", "https://i.imgur.com/w4pR6Hp.jpg", "https://i.imgur.com/79GciEk.jpg", "https://i.imgur.com/WpDbcAA.jpg", "https://i.imgur.com/YODAe6Z.jpg", "https://i.imgur.com/4It1NIe.jpg", "https://i.imgur.com/ALkfNHF.jpg", "https://i.imgur.com/xJOaHZP.jpg", "https://i.imgur.com/nFCIuJo.jpg", "https://i.imgur.com/oXgFh2K.jpg", "https://i.imgur.com/Vcs3jXT.jpg", "https://i.imgur.com/XGtJE58.jpg", "https://i.imgur.com/q4WalQY.jpg", "https://i.imgur.com/WFIyruV.jpg", "https://i.imgur.com/sItJMKv.jpg", "https://i.imgur.com/LAQ3Wpl.jpg", "https://i.imgur.com/C64XPAR.jpg", "https://i.imgur.com/hyehxek.jpg", "https://i.imgur.com/4XYBWKu.jpg", "https://i.imgur.com/KU1adf4.jpg", "https://i.imgur.com/L3sbodb.png", "https://i.imgur.com/JPMfbL9.jpg", "https://i.imgur.com/ieae2zo.jpg", "https://i.imgur.com/VVswQpo.jpg", "https://i.imgur.com/fWUr6ic.jpg", "https://i.imgur.com/juRIj2L.jpg", "https://i.imgur.com/2Mq8ZR8.jpg", "https://i.imgur.com/ibC5gSl.jpg", "https://i.imgur.com/63uHgyR.jpg", "https://i.imgur.com/xs3yEut.jpg", "https://i.imgur.com/0SYzA7u.jpg", "https://i.imgur.com/hRKhVTS.jpg", "https://i.imgur.com/IGv4V1p.jpg", "https://i.imgur.com/hmlxgXG.jpg", "https://i.imgur.com/q97Z7Nc.jpg", "https://i.imgur.com/1A6NPKj.jpg", "https://i.imgur.com/y97L14a.jpg", "https://i.imgur.com/DPohLPu.jpg", "https://i.imgur.com/JvXJ74s.jpg", "https://i.imgur.com/mA5b8Y1.jpg", "https://i.imgur.com/FVNerO1.jpg", "https://i.imgur.com/KNsh665.jpg", "https://i.imgur.com/Z9b0Gme.jpg", "https://i.imgur.com/z90LZmp.jpg", "https://i.imgur.com/tfXYXr7.png", "https://i.imgur.com/atHkjXl.jpg",
229 "https://i.imgur.com/u1l34Vi.jpg", "https://i.imgur.com/X0yROLr.jpg", "https://i.imgur.com/EpHkJZI.jpg", "https://i.imgur.com/TIKipWb.jpg", "https://i.imgur.com/Lq4qnDF.jpg", "https://i.imgur.com/N1KmzQo.jpg", "https://i.imgur.com/pAReFTB.jpg", "https://i.imgur.com/ZKMQwxk.jpg", "https://i.imgur.com/aSDE7i4.jpg", "https://i.imgur.com/kabITqS.jpg", "https://i.imgur.com/W7oaDNe.jpg", "https://i.imgur.com/VHYmth8.jpg",
230 ];
231 window.CTSEightBall = ["It is certain.", "It is decidedly so.", "Without a doubt.", "Yes - definitely.", "You may rely on it.", "As I see it, yes.", "Most Likely.", "Outlook good.", "Yes.", "Signs point to yes.", "Reply hazy, try again.", "Ask again later.", "Better not tell you now.", "Cannot predict now.", "Concentrate and ask again.", "Don't count on it.", "My reply is no.", "My sources say no.", "Outlook not so good.", "Very doubtful."];
232 window.CTSWelcomes = ["Hey ", "What's crackin ", "Hello ", "Good to see you ", "Howdy ", "Hey there ", "Yo ", "What's up ", "Greetings ", "What's hangin' "];
233 window.CTSSound = {
234 C: new Audio("https://media.vocaroo.com/mp3/e3VIvvFqdHe"),
235 HIGHLIGHT: new Audio("https://media.vocaroo.com/mp3/mjS6tza4Tu4"),
236 GREET: new Audio("https://media.vocaroo.com/mp3/mjS6tza4Tu4"),
237 MENTION: new Audio("https://media.vocaroo.com/mp3/gsrjQNCdhlX"),
238 MSG: new Audio("https://tinychat.com"+window.rootDir+"/sound/pop.mp3"),
239 GIFT: new Audio("https://tinychat.com"+window.rootDir+"/sound/magic.mp3"),
240 PVTMSG: new Audio("https://media.vocaroo.com/mp3/1eX3L752VdQ")
241 };
242 window.CTSRadioStations = [
243 ["Flex 98.5FM", "https://edge1-b.exa.live365.net/a23768"],
244 ["The Loop 97.9", "https://16883.live.streamtheworld.com/WLUPFMAAC.aac"],
245 ["HOT899", "https://newcap.leanstream.co/CIHTFM"],
246 ["chillstep.info", "https://chillstep.info/listen.ogg"],
247 ["HOT997", "https://ice5.securenetsystems.net/KHHK"],
248 ["Dance365", "https://edge1-b.exa.live365.net/a93720"],
249 ["kexp.org", "https://kexp-mp3-128.streamguys1.com/kexp128.mp3"],
250 ["Classic Deep Cuts", "https://edge1-b.exa.live365.net/a72496"],
251 ["Divas Hustle Radio", "https://edge1-b.exa.live365.net/a72972"],
252 ["Retro 8089", "https://edge1-b.exa.live365.net/a53202"],
253 ["Teerex Radio Teerex", "https://edge1-b.exa.live365.net/a74387"],
254 ["NGI Radio", "https://edge1-b.exa.live365.net/a24650"],
255 ["Legend Oldies", "https://edge1-b.exa.live365.net/a88135"],
256 ["Music City Roadhouse", "https://edge1-b.exa.live365.net/a73754"],
257 ["Mashrup Reggae Radio", "https://edge1-b.exa.live365.net/a00564"],
258 ["97.5 Dance Hits", "https://edge1-b.exa.live365.net/a50365"]
259 ];
260 window.CTSNameColor = ["#3f69c0", "#b63fc0", "#001f3f", "#0074D9", "#7FDBFF", "#39CCCC", "#3D9970", "#26a635", "#00b34d", "#e6c700", "#FF851B", "#FF4136", "#c81e70", "#f00fbb", "#B10DC9", "#111111", "#AAAAAA", "#cc6600", "#009933", "#003366", "#660033", "#804000"];
261 window.CTSChatCSS = [
262 [ //STYLE #0
263 ["#chat-wrapper{background:linear-gradient(0deg,rgba(32,38,40,0.59)0%,rgba(16,14,14,0.76)calc(100% - 62px),rgba(45,55,58,0.72)100%)!important;}#cts-chat-content>.message{background:#101314a8;}.message{color:#FFF;text-shadow: -1px 0 black, 0 1px black, 1px 0 black, 0 -1px black;}"],
264 [".PMPopup .PMContent{background: #2d373ADB;}.PMPopup h2{background:linear-gradient(0deg,rgb(0, 0, 0)0%,rgba(19,19,19,0.73)8px,rgba(0,0,0,0.34)100%);}#videos-footer-broadcast-wrapper>.waiting{background:#53b6ef;}#videos-footer-broadcast-wrapper>#videos-footer-submenu-button{background:#53b6ef!important;}#videos-footer-broadcast-wrapper>#videos-footer-submenu-button:hover{background:#3d89b5!important;}#videos-footer-push-to-talk{background:#53b6ef}#videos-footer-push-to-talk:hover{background:#3d89b5}#videos-footer-broadcast:hover{background:#3d89b5}#videos-footer-broadcast{background:#53b6ef;}"],
265 ["#sidemenu{background: linear-gradient(0deg,rgb(0, 0, 0)0%,rgba(19,19,19,0.73)8px,rgba(0,0,0,0.34)100%);}"]
266 ],
267 [ //STYLE #1
268 ["#chat-wrapper{background:linear-gradient(0deg,rgb(255,255,255)0%,rgba(99,99,99)calc(100% - 62px),rgba(255,255,255)100%)!important;}#cts-chat-content>.message{background:#101314a8;}.message{color:#FFF;text-shadow: -1px 0 black, 0 1px black, 1px 0 black, 0 -1px black;}"],
269 [".PMPopup .PMContent{background: #2d373ADB;}.PMPopup h2{background:linear-gradient(0deg,rgb(0, 0, 0)0%,rgb(58, 58, 58)8px,rgb(30, 30, 30)100%);}#videos-footer-broadcast-wrapper>.waiting{background:#53b6ef;}#videos-footer-broadcast-wrapper>#videos-footer-submenu-button{background:#53b6ef!important;}#videos-footer-broadcast-wrapper>#videos-footer-submenu-button:hover{background:#3d89b5!important;}#videos-footer-push-to-talk{background:#53b6ef}#videos-footer-push-to-talk:hover{background:#3d89b5}#videos-footer-broadcast:hover{background:#3d89b5}#videos-footer-broadcast{background:#53b6ef;}"],
270 ["#sidemenu{background: linear-gradient(0deg,rgb(0, 0, 0)0%,rgb(25,25,25)8px,rgb(76,76,76)100%);}"]
271 ],
272 [ //STYLE #2
273 ["#chat-wrapper{background:linear-gradient(0deg,rgb(121,24,188)0%,rgb(36,15,45)calc(100% - 62px),rgb(121,24,188)100%)!important;}#cts-chat-content>.message{background:#101314a8;}.message{color:#FFF;text-shadow: -1px 0 black, 0 1px black, 1px 0 black, 0 -1px black;}"],
274 [".PMPopup .PMContent{background: #2d373ADB;}.PMPopup h2{background:linear-gradient(0deg,rgb(0, 0, 0)0%,rgb(83, 17, 128)8px,rgb(68, 15, 103)100%);}#videos-footer-broadcast-wrapper>.waiting{background:#7918bc;}#videos-footer-broadcast-wrapper>#videos-footer-submenu-button{background:#7918bc!important;}#videos-footer-broadcast-wrapper>#videos-footer-submenu-button:hover{background:#460b6f!important;}#videos-footer-push-to-talk{background:#7918bc}#videos-footer-push-to-talk:hover{background:#460b6f}#videos-footer-broadcast:hover{background:#460b6f}#videos-footer-broadcast{background:#7918bc;}"],
275 ["#sidemenu{background: linear-gradient(0deg,rgb(0, 0, 0)0%,rgb(13,5,15)8px,rgb(121,24,188)100%);}"]
276 ],
277 [ //STYLE #3
278 ["#chat-wrapper{background:linear-gradient(0deg,rgb(248,5,5)0%,rgb(81,22,22)calc(100% - 62px),rgba(204,0,0)100%)!important;}#cts-chat-content>.message{background:#101314a8;}.message{color:#FFF;text-shadow: -1px 0 black, 0 1px black, 1px 0 black, 0 -1px black;}"],
279 [".PMPopup .PMContent{background:#2d373ADB;}.PMPopup h2{background:linear-gradient(0deg,rgb(0, 0, 0)0%,rgb(121, 3, 3)8px,rgb(176, 2, 2)100%);}#videos-footer-broadcast-wrapper>.waiting{background:#c10101;}#videos-footer-broadcast-wrapper>#videos-footer-submenu-button{background:#c10101!important;}#videos-footer-broadcast-wrapper>#videos-footer-submenu-button:hover{background:#6b0f0f!important;}#videos-footer-push-to-talk{background:#c10101}#videos-footer-push-to-talk:hover{background:#6b0f0f}#videos-footer-broadcast:hover{background:#6b0f0f}#videos-footer-broadcast{background:#c10101;}"],
280 ["#sidemenu{background: linear-gradient(0deg,rgb(0, 0, 0)0%,rgb(15,5,5)8px,rgb(193,1,1)100%);}"]
281 ],
282 [ //STYLE #4
283 ["#chat-wrapper{background:linear-gradient(0deg,rgb(65,144,219)0%,rgb(7,69,97)calc(100% - 62px),rgb(37,179,222)100%)!important;}#cts-chat-content>.message{background:#101314a8;}.message{color:#FFF;text-shadow: -1px 0 black, 0 1px black, 1px 0 black, 0 -1px black;}"],
284 [".PMPopup .PMContent{background: #2d373ADB;}.PMPopup h2{background:linear-gradient(0deg,rgb(0, 0, 0)0%,rgb(26, 59, 75)8px,rgb(59, 130, 170)100%);}#videos-footer-broadcast-wrapper>.waiting{background:#53b6ef;}#videos-footer-broadcast-wrapper>#videos-footer-submenu-button{background:#53b6ef!important;}#videos-footer-broadcast-wrapper>#videos-footer-submenu-button:hover{background:#3d89b5!important;}#videos-footer-push-to-talk{background:#53b6ef}#videos-footer-push-to-talk:hover{background:#3d89b5}#videos-footer-broadcast:hover{background:#3d89b5}#videos-footer-broadcast{background:#53b6ef;}"],
285 ["#sidemenu{background: linear-gradient(0deg,rgb(0, 0, 0)0%,rgb(5,14,15)8px,rgb(83,182,239)100%);}"]
286 ],
287 [ //STYLE #5
288 ["#chat-wrapper{background:linear-gradient(0deg,rgb(0,158,5)0%,rgb(5,15,5)calc(100% - 62px),rgb(13,181,0)100%)!important;}#cts-chat-content>.message{background:#101314a8;}.message{color:#FFF;text-shadow: -1px 0 black, 0 1px black, 1px 0 black, 0 -1px black;}"],
289 [".PMPopup .PMContent{background:#2d373ADB;}.PMPopup h2{background:linear-gradient(0deg,rgb(0, 0, 0)0%,rgb(13, 96, 7)8px,rgb(8, 48, 6)100%);}#videos-footer-broadcast-wrapper>.waiting{background:#0cae00;}#videos-footer-broadcast-wrapper>#videos-footer-submenu-button{background:#0cae00!important;}#videos-footer-broadcast-wrapper>#videos-footer-submenu-button:hover{background:#054c00!important;}#videos-footer-push-to-talk{background:#0cae00}#videos-footer-push-to-talk:hover{background:#054c00}#videos-footer-broadcast:hover{background:#054c00}#videos-footer-broadcast{background:#0cae00;}"],
290 ["#sidemenu{background: linear-gradient(0deg,rgb(0, 0, 0)0%,rgb(5,15,5)8px,rgb(14,104,7)100%);}"]
291 ],
292 [ //STYLE #6
293 ["#chat-wrapper{background:linear-gradient(0deg,rgba(0, 0, 0, 0.69)0%,rgba(0, 0, 0, 0.56)calc(100% - 62px),rgb(13, 179, 0)100%)!important;}#cts-chat-content>.message{background:#101314a8;}.message{color:#FFF;text-shadow: -1px 0 black, 0 1px black, 1px 0 black, 0 -1px black;}"],
294 [".PMPopup .PMContent{background:#2d373ADB;}.PMPopup h2{background:linear-gradient(0deg,rgb(0, 0, 0)0%,rgb(13, 96, 7)8px,rgb(8, 48, 6)100%);}#videos-footer-broadcast-wrapper>.waiting{background:#0cae00;}#videos-footer-broadcast-wrapper>#videos-footer-submenu-button{background:#0cae00!important;}#videos-footer-broadcast-wrapper>#videos-footer-submenu-button:hover{background:#054c00!important;}#videos-footer-push-to-talk{background:#0cae00}#videos-footer-push-to-talk:hover{background:#054c00}#videos-footer-broadcast:hover{background:#054c00}#videos-footer-broadcast{background:#0cae00;}"],
295 ["#sidemenu{background: linear-gradient(0deg,rgb(0, 0, 0)0%,rgba(5, 15, 5, 0.72)8px,rgba(0, 0, 0, 0.42)100%);}"]
296 ],
297 [ //STYLE #7
298 ["#chat-wrapper{background: linear-gradient(0deg,rgb(255, 255, 255)0%,rgba(255, 255, 255, 0.82)calc(100% - 62px),rgb(255, 255, 255)100%)!important;}#cts-chat-content>.message{background:#101314a8;}.message{color:#FFF;text-shadow: -1px 0 black, 0 1px black, 1px 0 black, 0 -1px black;}"],
299 [".PMPopup .PMContent{background:#2d373ADB;}.PMPopup h2{background:linear-gradient(0deg,rgb(0, 0, 0)0%,rgba(255, 255, 255, 0.72)8px,rgba(255, 255, 255, 0.81)100%);}#videos-footer-broadcast-wrapper>.waiting{background:#53b6ef;}#videos-footer-broadcast-wrapper>#videos-footer-submenu-button{background:#53b6ef!important;}#videos-footer-broadcast-wrapper>#videos-footer-submenu-button:hover{background:#3d89b5!important;}#videos-footer-push-to-talk{background:#53b6ef}#videos-footer-push-to-talk:hover{background:#3d89b5}#videos-footer-broadcast:hover{background:#3d89b5}#videos-footer-broadcast{background:#53b6ef;}"],
300 ["#sidemenu{background: linear-gradient(0deg,rgb(0, 0, 0)0%,rgba(255, 255, 255, 0.72)8px,rgba(255, 255, 255, 0.81)100%);}"]
301 ],
302 [ //STYLE #8
303 ["#chat-wrapper{background: linear-gradient(0deg,rgba(255, 255, 0, 1)0%,rgba(255, 255, 0, 0.82)calc(100% - 62px),rgba(255, 255, 0, 1)100%)!important;}#cts-chat-content>.message{background:#101314a8;}.message{color:#FFF;text-shadow: -1px 0 black, 0 1px black, 1px 0 black, 0 -1px black;}"],
304 [".PMPopup .PMContent{background: #2d373ADB;}.PMPopup h2{background:linear-gradient(0deg,rgb(0, 0, 0)0%,rgb(234, 236, 5)8px,rgb(180, 187, 15)100%);}#videos-footer-broadcast-wrapper>.waiting{background:#53b6ef;}#videos-footer-broadcast-wrapper>#videos-footer-submenu-button{background:#53b6ef!important;}#videos-footer-broadcast-wrapper>#videos-footer-submenu-button:hover{background:#3d89b5!important;}#videos-footer-push-to-talk{background:#53b6ef}#videos-footer-push-to-talk:hover{background:#3d89b5}#videos-footer-broadcast:hover{background:#3d89b5}#videos-footer-broadcast{background:#53b6ef;}"],
305 ["#sidemenu{background: linear-gradient(0deg,rgb(56, 50, 6)0%,rgb(149, 158, 22)8px,rgba(255, 255, 0, 1)100%);}"]
306 ],
307 [ //STYLE #9
308 ["#chat-wrapper{background: linear-gradient(0deg,rgb(119, 45, 2) 0%,rgb(24, 29, 30) 52%,rgb(234, 129, 38) 100%)!important;}#cts-chat-content>.message{background:#101314a8;}.message{color:#FFF;text-shadow: -1px 0 black, 0 1px black, 1px 0 black, 0 -1px black;}"],
309 [".PMPopup .PMContent{background: #2d373ADB;}.PMPopup h2{background:linear-gradient(0deg,rgb(0, 0, 0)0%,rgb(226, 92, 19)8px,rgb(158, 73, 16)100%);}#videos-footer-broadcast-wrapper>.waiting{background:#53b6ef;}#videos-footer-broadcast-wrapper>#videos-footer-submenu-button{background:#53b6ef!important;}#videos-footer-broadcast-wrapper>#videos-footer-submenu-button:hover{background:#3d89b5!important;}#videos-footer-push-to-talk{background:#53b6ef}#videos-footer-push-to-talk:hover{background:#3d89b5}#videos-footer-broadcast:hover{background:#3d89b5}#videos-footer-broadcast{background:#53b6ef;}"],
310 ["#sidemenu{background: linear-gradient(0deg,rgb(154, 51, 1)0%,rgba(255, 125, 0, 1)8px,rgba(255, 125, 0, 1)100%);}"]
311 ],
312 [ //STYLE #10
313 ["#chat-wrapper{background: linear-gradient(0deg,rgb(141, 36, 95)0%,rgba(191, 0, 255, 0.82)calc(100% - 62px),rgb(255, 0, 202)100%)!important;}#cts-chat-content>.message{background:#101314a8;}.message{color:#FFF;text-shadow: -1px 0 black, 0 1px black, 1px 0 black, 0 -1px black;}"],
314 [".PMPopup .PMContent{background: #2d373ADB;}.PMPopup h2{background:linear-gradient(0deg,rgb(0, 0, 0)0%,rgb(150, 0, 175)8px,rgb(176, 0, 226)100%);}#videos-footer-broadcast-wrapper>.waiting{background:#53b6ef;}#videos-footer-broadcast-wrapper>#videos-footer-submenu-button{background:#53b6ef!important;}#videos-footer-broadcast-wrapper>#videos-footer-submenu-button:hover{background:#3d89b5!important;}#videos-footer-push-to-talk{background:#53b6ef}#videos-footer-push-to-talk:hover{background:#3d89b5}#videos-footer-broadcast:hover{background:#3d89b5}#videos-footer-broadcast{background:#53b6ef;}"],
315 ["#sidemenu{background: linear-gradient(0deg,rgb(94, 3, 62)0%,rgb(191, 0, 255)8px,rgb(71, 0, 20)100%);}"]
316 ],
317 [ //STYLE #11
318 ["#cts-chat-content>.message{background:#101314;}#chat-wrapper{background: repeating-linear-gradient(-45deg,rgb(0, 0, 0)1px,rgb(0, 186, 255)3px,rgba(0, 115, 255, 0.49)15px)!important;}#cts-chat-content>.message{background:#101314a8;}.message{color:#FFF;text-shadow: -1px 0 black, 0 1px black, 1px 0 black, 0 -1px black;}"],
319 [".PMPopup .PMContent{background: #2d373ADB;}.PMPopup h2{background:repeating-linear-gradient(-45deg,rgb(0, 0, 0)1px,rgb(0, 186, 255)3px,rgba(0, 115, 255, 0.49)15px);}#videos-footer-broadcast-wrapper>.waiting{background:#53b6ef;}#videos-footer-broadcast-wrapper>#videos-footer-submenu-button{background:#53b6ef!important;}#videos-footer-broadcast-wrapper>#videos-footer-submenu-button:hover{background:#3d89b5!important;}#videos-footer-push-to-talk{background:#53b6ef}#videos-footer-push-to-talk:hover{background:#3d89b5}#videos-footer-broadcast:hover{background:#3d89b5}#videos-footer-broadcast{background:#53b6ef;}"],
320 ["#sidemenu{background: repeating-linear-gradient(-45deg,rgb(0, 0, 0)1px,rgb(0, 186, 255)3px,rgba(0, 115, 255, 0.49)15px);}"]
321 ],
322 [ //STYLE #12
323 ["#chat-wrapper{background: #fff!important;}.message>#system_user{color:#FFFFFF}#cts-chat-content>.message{background:#00000000}.message{color:#000000;text-shadow: unset;}"],
324 [".PMPopup .PMContent{background:#2d373ADB;}.PMPopup h2{background:linear-gradient(0deg,rgb(0, 0, 0)0%,rgba(255, 255, 255, 0.72)8px,rgba(255, 255, 255, 0.81)100%);}#videos-footer-broadcast-wrapper>.waiting{background:#53b6ef;}#videos-footer-broadcast-wrapper>#videos-footer-submenu-button{background:#53b6ef!important;}#videos-footer-broadcast-wrapper>#videos-footer-submenu-button:hover{background:#3d89b5!important;}#videos-footer-push-to-talk{background:#53b6ef}#videos-footer-push-to-talk:hover{background:#3d89b5}#videos-footer-broadcast:hover{background:#3d89b5}#videos-footer-broadcast{background:#53b6ef;}"],
325 ["#sidemenu{background: #2d373a;}"]
326 ],
327 [ //STYLE #13
328 ["#chat-wrapper{background: url(https://i.imgur.com/ek4TEsz.jpg)!important;}#cts-chat-content>.message{background:#17951a8c;}.message{color:#FFF;text-shadow: -1px 0 black, 0 1px black, 1px 0 black, 0 -1px black;}"],
329 [".PMPopup .PMContent{background:#2d373ADB;}.PMPopup h2{background:linear-gradient(0deg,rgb(0, 0, 0)0%,rgb(37, 101, 27)8px,rgb(36, 98, 25)100%);}#videos-footer-broadcast-wrapper>.waiting{background:#53b6ef;}#videos-footer-broadcast-wrapper>#videos-footer-submenu-button{background:#53b6ef!important;}#videos-footer-broadcast-wrapper>#videos-footer-submenu-button:hover{background:#3d89b5!important;}#videos-footer-push-to-talk{background:#53b6ef}#videos-footer-push-to-talk:hover{background:#3d89b5}#videos-footer-broadcast:hover{background:#3d89b5}#videos-footer-broadcast{background:#53b6ef;}"],
330 ["#sidemenu{background: url(https://i.imgur.com/LCOulGB.png) repeat-x bottom;}"]
331 ],
332 [ //STYLE #14
333 ["#chat-wrapper{background:linear-gradient(0deg,rgba(32,38,40,0.59)0%,rgba(16,14,14,0.76)calc(100% - 62px),rgba(45,55,58,0.72)100%)!important;}#cts-chat-content>.message{background:#101314a8;}.message{color:#FFF;text-shadow: -1px 0 black, 0 1px black, 1px 0 black, 0 -1px black;}"],
334 [".PMPopup .PMContent{background: #2d373ADB;}.PMPopup h2{background:linear-gradient(0deg,rgb(0, 0, 0)0%,rgba(19,19,19,0.73)8px,rgba(0,0,0,0.34)100%);}#videos-footer-broadcast-wrapper>.waiting{background:#53b6ef;}#videos-footer-broadcast-wrapper>#videos-footer-submenu-button{background:#53b6ef!important;}#videos-footer-broadcast-wrapper>#videos-footer-submenu-button:hover{background:#3d89b5!important;}#videos-footer-push-to-talk{background:#53b6ef}#videos-footer-push-to-talk:hover{background:#3d89b5}#videos-footer-broadcast:hover{background:#3d89b5}#videos-footer-broadcast{background:#53b6ef;}"],
335 ["#sidemenu{background: linear-gradient(0deg,rgb(0, 0, 0)0%,rgba(19,19,19,0.73)8px,rgba(0,0,0,0.34)100%);}"]
336 ],
337 [ //STYLE #14
338 ["#chat-wrapper{background:linear-gradient(0deg,rgb(255,255,255)0%,rgba(99,99,99)calc(100% - 62px),rgba(255,255,255)100%)!important;}#cts-chat-content>.message{background:#101314a8;}.message{color:#FFF;text-shadow: -1px 0 black, 0 1px black, 1px 0 black, 0 -1px black;}"],
339 [".PMPopup .PMContent{background: #2d373ADB;}.PMPopup h2{background:linear-gradient(0deg,rgb(0, 0, 0)0%,rgb(58, 58, 58)8px,rgb(30, 30, 30)100%);}#videos-footer-broadcast-wrapper>.waiting{background:#53b6ef;}#videos-footer-broadcast-wrapper>#videos-footer-submenu-button{background:#53b6ef!important;}#videos-footer-broadcast-wrapper>#videos-footer-submenu-button:hover{background:#3d89b5!important;}#videos-footer-push-to-talk{background:#53b6ef}#videos-footer-push-to-talk:hover{background:#3d89b5}#videos-footer-broadcast:hover{background:#3d89b5}#videos-footer-broadcast{background:#53b6ef;}"],
340 ["#sidemenu{background: linear-gradient(0deg,rgb(0, 0, 0)0%,rgba(19,19,19,0.73)8px,rgba(0,0,0,0.34)100%);}"]
341 ],
342 [ //STYLE #15
343 ["#chat-wrapper{background:linear-gradient(0deg,rgb(121,24,188)0%,rgb(36,15,45)calc(100% - 62px),rgb(121,24,188)100%)!important;}#cts-chat-content>.message{background:#101314a8;}.message{color:#FFF;text-shadow: -1px 0 black, 0 1px black, 1px 0 black, 0 -1px black;}"],
344 [".PMPopup .PMContent{background: #2d373ADB;}.PMPopup h2{background:linear-gradient(0deg,rgb(0, 0, 0)0%,rgb(83, 17, 128)8px,rgb(68, 15, 103)100%);}#videos-footer-broadcast-wrapper>.waiting{background:#7918bc;}#videos-footer-broadcast-wrapper>#videos-footer-submenu-button{background:#7918bc!important;}#videos-footer-broadcast-wrapper>#videos-footer-submenu-button:hover{background:#460b6f!important;}#videos-footer-push-to-talk{background:#7918bc}#videos-footer-push-to-talk:hover{background:#460b6f}#videos-footer-broadcast:hover{background:#460b6f}#videos-footer-broadcast{background:#7918bc;}"],
345 ["#sidemenu{background: linear-gradient(0deg,rgb(0, 0, 0)0%,rgba(19,19,19,0.73)8px,rgba(0,0,0,0.34)100%);}"]
346 ],
347 [ //STYLE #16
348 ["#chat-wrapper{background:linear-gradient(0deg,rgb(248,5,5)0%,rgb(81,22,22)calc(100% - 62px),rgba(204,0,0)100%)!important;}#cts-chat-content>.message{background:#101314a8;}.message{color:#FFF;text-shadow: -1px 0 black, 0 1px black, 1px 0 black, 0 -1px black;}"],
349 [".PMPopup .PMContent{background:#2d373ADB;}.PMPopup h2{background:linear-gradient(0deg,rgb(0, 0, 0)0%,rgb(121, 3, 3)8px,rgb(176, 2, 2)100%);}#videos-footer-broadcast-wrapper>.waiting{background:#c10101;}#videos-footer-broadcast-wrapper>#videos-footer-submenu-button{background:#c10101!important;}#videos-footer-broadcast-wrapper>#videos-footer-submenu-button:hover{background:#6b0f0f!important;}#videos-footer-push-to-talk{background:#c10101}#videos-footer-push-to-talk:hover{background:#6b0f0f}#videos-footer-broadcast:hover{background:#6b0f0f}#videos-footer-broadcast{background:#c10101;}"],
350 ["#sidemenu{background: linear-gradient(0deg,rgb(0, 0, 0)0%,rgba(19,19,19,0.73)8px,rgba(0,0,0,0.34)100%);}"]
351 ],
352 [ //STYLE #17
353 ["#chat-wrapper{background:linear-gradient(0deg,rgb(65,144,219)0%,rgb(7,69,97)calc(100% - 62px),rgb(37,179,222)100%)!important;}#cts-chat-content>.message{background:#101314a8;}.message{color:#FFF;text-shadow: -1px 0 black, 0 1px black, 1px 0 black, 0 -1px black;}"],
354 [".PMPopup .PMContent{background: #2d373ADB;}.PMPopup h2{background:linear-gradient(0deg,rgb(0, 0, 0)0%,rgb(26, 59, 75)8px,rgb(59, 130, 170)100%);}#videos-footer-broadcast-wrapper>.waiting{background:#53b6ef;}#videos-footer-broadcast-wrapper>#videos-footer-submenu-button{background:#53b6ef!important;}#videos-footer-broadcast-wrapper>#videos-footer-submenu-button:hover{background:#3d89b5!important;}#videos-footer-push-to-talk{background:#53b6ef}#videos-footer-push-to-talk:hover{background:#3d89b5}#videos-footer-broadcast:hover{background:#3d89b5}#videos-footer-broadcast{background:#53b6ef;}"],
355 ["#sidemenu{background: linear-gradient(0deg,rgb(0, 0, 0)0%,rgba(19,19,19,0.73)8px,rgba(0,0,0,0.34)100%);}"]
356 ],
357 [ //STYLE #18
358 ["#chat-wrapper{background:linear-gradient(0deg,rgb(0,158,5)0%,rgb(5,15,5)calc(100% - 62px),rgb(13,181,0)100%)!important;}#cts-chat-content>.message{background:#101314a8;}.message{color:#FFF;text-shadow: -1px 0 black, 0 1px black, 1px 0 black, 0 -1px black;}"],
359 [".PMPopup .PMContent{background:#2d373ADB;}.PMPopup h2{background:linear-gradient(0deg,rgb(0, 0, 0)0%,rgb(13, 96, 7)8px,rgb(8, 48, 6)100%);}#videos-footer-broadcast-wrapper>.waiting{background:#0cae00;}#videos-footer-broadcast-wrapper>#videos-footer-submenu-button{background:#0cae00!important;}#videos-footer-broadcast-wrapper>#videos-footer-submenu-button:hover{background:#054c00!important;}#videos-footer-push-to-talk{background:#0cae00}#videos-footer-push-to-talk:hover{background:#054c00}#videos-footer-broadcast:hover{background:#054c00}#videos-footer-broadcast{background:#0cae00;}"],
360 ["#sidemenu{background: linear-gradient(0deg,rgb(0, 0, 0)0%,rgba(19,19,19,0.73)8px,rgba(0,0,0,0.34)100%);}"]
361 ],
362 [ //STYLE #19
363 ["#chat-wrapper{background: linear-gradient(0deg,rgb(255, 255, 255)0%,rgba(255, 255, 255, 0.82)calc(100% - 62px),rgb(255, 255, 255)100%)!important;}#cts-chat-content>.message{background:#101314a8;}.message{color:#FFF;text-shadow: -1px 0 black, 0 1px black, 1px 0 black, 0 -1px black;}"],
364 [".PMPopup .PMContent{background:#2d373ADB;}.PMPopup h2{background:linear-gradient(0deg,rgb(0, 0, 0)0%,rgba(255, 255, 255, 0.72)8px,rgba(255, 255, 255, 0.81)100%);}#videos-footer-broadcast-wrapper>.waiting{background:#53b6ef;}#videos-footer-broadcast-wrapper>#videos-footer-submenu-button{background:#53b6ef!important;}#videos-footer-broadcast-wrapper>#videos-footer-submenu-button:hover{background:#3d89b5!important;}#videos-footer-push-to-talk{background:#53b6ef}#videos-footer-push-to-talk:hover{background:#3d89b5}#videos-footer-broadcast:hover{background:#3d89b5}#videos-footer-broadcast{background:#53b6ef;}"],
365 ["#sidemenu{background: linear-gradient(0deg,rgb(0, 0, 0)0%,rgba(19,19,19,0.73)8px,rgba(0,0,0,0.34)100%);}"]
366 ],
367 [ //STYLE #20
368 ["#chat-wrapper{background: linear-gradient(0deg,rgba(255, 255, 0, 1)0%,rgba(255, 255, 0, 0.82)calc(100% - 62px),rgba(255, 255, 0, 1)100%)!important;}#cts-chat-content>.message{background:#101314a8;}.message{color:#FFF;text-shadow: -1px 0 black, 0 1px black, 1px 0 black, 0 -1px black;}"],
369 [".PMPopup .PMContent{background: #2d373ADB;}.PMPopup h2{background:linear-gradient(0deg,rgb(0, 0, 0)0%,rgb(234, 236, 5)8px,rgb(180, 187, 15)100%);}#videos-footer-broadcast-wrapper>.waiting{background:#53b6ef;}#videos-footer-broadcast-wrapper>#videos-footer-submenu-button{background:#53b6ef!important;}#videos-footer-broadcast-wrapper>#videos-footer-submenu-button:hover{background:#3d89b5!important;}#videos-footer-push-to-talk{background:#53b6ef}#videos-footer-push-to-talk:hover{background:#3d89b5}#videos-footer-broadcast:hover{background:#3d89b5}#videos-footer-broadcast{background:#53b6ef;}"],
370 ["#sidemenu{background: linear-gradient(0deg,rgb(0, 0, 0)0%,rgba(19,19,19,0.73)8px,rgba(0,0,0,0.34)100%);}"]
371 ],
372 [ //STYLE #21
373 ["#chat-wrapper{background: linear-gradient(0deg,rgb(119, 45, 2) 0%,rgb(24, 29, 30) 52%,rgb(234, 129, 38) 100%)!important;}#cts-chat-content>.message{background:#101314a8;}.message{color:#FFF;text-shadow: -1px 0 black, 0 1px black, 1px 0 black, 0 -1px black;}"],
374 [".PMPopup .PMContent{background: #2d373ADB;}.PMPopup h2{background:linear-gradient(0deg,rgb(0, 0, 0)0%,rgb(226, 92, 19)8px,rgb(158, 73, 16)100%);}#videos-footer-broadcast-wrapper>.waiting{background:#53b6ef;}#videos-footer-broadcast-wrapper>#videos-footer-submenu-button{background:#53b6ef!important;}#videos-footer-broadcast-wrapper>#videos-footer-submenu-button:hover{background:#3d89b5!important;}#videos-footer-push-to-talk{background:#53b6ef}#videos-footer-push-to-talk:hover{background:#3d89b5}#videos-footer-broadcast:hover{background:#3d89b5}#videos-footer-broadcast{background:#53b6ef;}"],
375 ["#sidemenu{background: linear-gradient(0deg,rgb(0, 0, 0)0%,rgba(19,19,19,0.73)8px,rgba(0,0,0,0.34)100%);}"]
376 ],
377 [ //STYLE #22
378 ["#chat-wrapper{background: linear-gradient(0deg,rgb(141, 36, 95)0%,rgba(191, 0, 255, 0.82)calc(100% - 62px),rgb(255, 0, 202)100%)!important;}#cts-chat-content>.message{background:#101314a8;}.message{color:#FFF;text-shadow: -1px 0 black, 0 1px black, 1px 0 black, 0 -1px black;}"],
379 [".PMPopup .PMContent{background: #2d373ADB;}.PMPopup h2{background:linear-gradient(0deg,rgb(0, 0, 0)0%,rgb(150, 0, 175)8px,rgb(176, 0, 226)100%);}#videos-footer-broadcast-wrapper>.waiting{background:#53b6ef;}#videos-footer-broadcast-wrapper>#videos-footer-submenu-button{background:#53b6ef!important;}#videos-footer-broadcast-wrapper>#videos-footer-submenu-button:hover{background:#3d89b5!important;}#videos-footer-push-to-talk{background:#53b6ef}#videos-footer-push-to-talk:hover{background:#3d89b5}#videos-footer-broadcast:hover{background:#3d89b5}#videos-footer-broadcast{background:#53b6ef;}"],
380 ["#sidemenu{background: linear-gradient(0deg,rgb(0, 0, 0)0%,rgba(19,19,19,0.73)8px,rgba(0,0,0,0.34)100%);}"]
381 ],
382 [ //STYLE #23
383 ["#cts-chat-content>.message{background:#101314;}#chat-wrapper{background: repeating-linear-gradient(-45deg,rgb(0, 0, 0)1px,rgb(0, 186, 255)3px,rgba(0, 115, 255, 0.49)15px)!important;}#cts-chat-content>.message{background:#101314a8;}.message{color:#FFF;text-shadow: -1px 0 black, 0 1px black, 1px 0 black, 0 -1px black;}"],
384 [".PMPopup .PMContent{background: #2d373ADB;}.PMPopup h2{background:repeating-linear-gradient(-45deg,rgb(0, 0, 0)1px,rgb(0, 186, 255)3px,rgba(0, 115, 255, 0.49)15px);}#videos-footer-broadcast-wrapper>.waiting{background:#53b6ef;}#videos-footer-broadcast-wrapper>#videos-footer-submenu-button{background:#53b6ef!important;}#videos-footer-broadcast-wrapper>#videos-footer-submenu-button:hover{background:#3d89b5!important;}#videos-footer-push-to-talk{background:#53b6ef}#videos-footer-push-to-talk:hover{background:#3d89b5}#videos-footer-broadcast:hover{background:#3d89b5}#videos-footer-broadcast{background:#53b6ef;}"],
385 ["#sidemenu{background: linear-gradient(0deg,rgb(0, 0, 0)0%,rgba(19,19,19,0.73)8px,rgba(0,0,0,0.34)100%);}"]
386 ]
387 ];
388 //INSERT SCRIPT
389 var script = document.createElement("script"),
390 elem = document.getElementsByTagName("script")[0];
391 script.text = 'var StationSelected = 0,\n StationPlay = false,\n StationVol = 1;\nfunction VolStation(elem, vol){\n var StationElem = elem.parentElement.nextSibling;\n var StationVolElem = elem.parentElement.querySelector(".music-radio-info>.volume");\nStationVol += vol;\n if (StationVol < 0){\n StationVol = 0;\n } else if (StationVol > 1) {\n StationVol = 1.0;\n }\n StationElem.volume = StationVol;\nStationVolElem.style.width=((StationVol * 100)+"%");}\nfunction PlayPauseStation(elem) {\n var StationPlayPauseBtn = elem.parentElement.querySelector(".music-radio-playpause");\n var StationElem=elem.parentElement.nextSibling;\nvar StationDescElem=elem.parentElement.querySelector(".music-radio-info>.description");\n StationPlay=!StationPlay;\n if (StationPlay) {\n StationElem.volume = StationVol;\n StationElem.play();\n StationPlayPauseBtn.innerText="❚❚"; StationDescElem.innerText = ("Playing: "+window.CTSRadioStations[StationSelected][0]+"\\nURL: "+window.CTSRadioStations[StationSelected][1]);\n} else {\n StationElem.pause();\nStationPlayPauseBtn.innerText="▶";\n StationDescElem.innerText = ("Paused: "+window.CTSRadioStations[StationSelected][0]+"\\nURL: "+window.CTSRadioStations[StationSelected][1]);}\n}\nfunction SeekStation(elem, direction) {\n var StationElem = elem.parentElement.nextSibling;\n var StationDescElem = elem.parentElement.querySelector(".music-radio-info>.description");\nvar StationPlayPauseBtn = elem.parentElement.querySelector(".music-radio-playpause");\n StationPlay = true;\n StationSelected += direction;\n \n if (StationSelected > window.CTSRadioStations.length-1) {\n StationSelected = 0;\n } else if (StationSelected < 0){\n StationSelected = window.CTSRadioStations.length-1;\n }\n StationElem.pause();\n StationElem.setAttribute("src", window.CTSRadioStations[StationSelected][1]);\n StationElem.load();\n StationElem.volume = StationVol;\nStationPlayPauseBtn.innerText="❚❚";\n StationElem.play();\nStationDescElem.innerText = ("Playing: "+window.CTSRadioStations[StationSelected][0]+"\\nURL: "+window.CTSRadioStations[StationSelected][1]);\n}';
392 elem.parentNode.insertBefore(script, elem);
393 //LOCALSETTINGS
394 CTS.enablePMs = (window.localStorage.tinychat_settings) ? JSON.parse(window.localStorage.tinychat_settings).enablePMs : true;
395 CTS.enableSound = (window.localStorage.tinychat_settings) ? JSON.parse(window.localStorage.tinychat_settings).enableSound : true;
396 //TTS (TEXT-TO-SPEECH)
397 if (CTS.enableSound === true && "speechSynthesis" in window) {
398 CTS.TTS.synth = window.speechSynthesis;
399 CTS.TTS.voices = CTS.TTS.synth.getVoices();
400 }
401 //ELEMENT DEFINE
402 MainElement = document.querySelector("tinychat-webrtc-app").shadowRoot;
403 ChatLogElement = MainElement.querySelector("tc-chatlog").shadowRoot;
404 VideoListElement = MainElement.querySelector("tc-videolist").shadowRoot;
405 MicrophoneElement = document.createEvent("MouseEvent");
406 SideMenuElement = MainElement.querySelector("tc-sidemenu").shadowRoot;
407 TitleElement = MainElement.querySelector("tc-title").shadowRoot;
408 UserListElement = SideMenuElement.querySelector("tc-userlist").shadowRoot;
409 ModerationListElement = SideMenuElement.querySelector("tc-video-moderation").shadowRoot;
410 ChatListElement = SideMenuElement.querySelector("tc-chatlist").shadowRoot;
411 UserContextElement = UserListElement.querySelector("tc-user-contextmenu").shadowRoot;
412 var insert = TitleElement.querySelector('span[title="Settings"]');
413 VideoListElement.querySelector("#videos-header").appendChild(insert);
414 //INSERT HTML/CSS
415 if (!CTS.Project.isTouchScreen) {
416 insert = VideoListElement.querySelector("#videos-footer-broadcast-wrapper");
417 VideoListElement.querySelector("#videolist").appendChild(insert);
418 VideoListElement.querySelector("#videos-footer").insertAdjacentHTML("afterbegin", "Media");
419 VideoListElement.querySelector("#videos-footer").insertAdjacentHTML("beforeend", '<div id="music-radio"><div class="music-radio-info"><div class="description">Playing: None<br>URL: None</div><div class="volume"></div></div><button class="music-radio-seek" onclick="SeekStation(this,-1);">←</button><button class="music-radio-seek" onclick="SeekStation(this,1);">→</button><button class="music-radio-playpause" onclick="PlayPauseStation(this);">▶</button><button class="music-radio-vol" onclick="VolStation(this,.05);">+</button><button class="music-radio-vol" style="top:50%" onclick="VolStation(this,-.05);">-</button></div><audio id="music-radio-audio" src="' + window.CTSRadioStations[0][1] + '"></audio>');
420 TitleCSS +="span[title=\"Follow\"], span[title=\"Share room\"]{display:none!important;}";
421 } else {
422 VideoCSS = "#videos-footer-broadcast{border-radius:unset!important;}#videos-footer-broadcast-wrapper > #videos-footer-submenu-button{border-radius:unset;}#videos-footer-push-to-talk{margin-left:0!important;border-radius:unset;}#videos-footer-youtube, #videos-footer-soundcloud{min-width:35px;border-radius:unset;margin-right: 0;}@media screen and (max-width: 600px){#videos-footer-broadcast, #videos-footer-broadcast-wrapper.hide-submenu > #videos-footer-broadcast {height:50px;line-height:50px;}#videos-footer{min-height: 50px;padding:0}}span[title=\"Settings\"]>svg{padding:7px 10px;height:24px;width:24px;}#videolist[data-mode=\"dark\"]{background-color:unset;}#videos-footer-broadcast-wrapper{display:contents;}.video:after{content: unset;border:unset;}#videos-header{padding:0;background:#181d1e;}.ctsdrop{position:fixed;display:inline-block;top:3px;left:4px;z-index:5;min-width: 46px;}.ctsdrop-content{position:absolute;top:28px;right:0;background:#181d1e;min-width:46px;width: 46px;padding:0;z-index:1;display:none;}.ctsdrop:hover .ctsdrop-content{display:block;}.ctsoptions:hover{background:#53b6ef}.ctsoptions{width:46px;height:28px;z-index: 2;cursor: pointer;top: 4px;background: #181d1e75;border: none;padding: 5% 0;display: inline-block;}";
423 MainCSS += "body{overflow:auto;}";
424 ContextMenuCSS = ".context.show{height:100%;}.context:after{content:unset;}.context>span{text-shadow:-1px 0 black,0 1px black,1px 0 black,0 -1px black;font:800 14px sans-serif;color:#FFFFFF;display:inline-block;padding:1px 1%;line-height:17px;height:17px;}.context{background:#101314;position:unset;padding:0;height:0;transition:.25s;}";
425 UserListCSS += "#contextmenu{top:unset;bottom:0;left:0;}";
426 }
427 ChatLogElement.querySelector("style").insertAdjacentHTML("beforeend", ChatboxCSS);
428 StyleSet();
429 document.body.querySelector("style").insertAdjacentHTML("beforeend", MainCSS);
430 MainElement.querySelector("style").insertAdjacentHTML("beforeend", RoomCSS);
431 VideoListElement.querySelector("style").insertAdjacentHTML("beforeend", NotificationCSS);
432 VideoListElement.querySelector("style").insertAdjacentHTML("beforeend", VideoCSS);
433 SideMenuElement.querySelector("style").insertAdjacentHTML("beforeend", SideMenuCSS);
434 UserListElement.querySelector("style").insertAdjacentHTML("beforeend", UserListCSS);
435 ChatListElement.querySelector("style").insertAdjacentHTML("beforeend", ChatListCSS);
436 ModerationListElement.querySelector("style").insertAdjacentHTML("beforeend", ModeratorCSS);
437 UserContextElement.querySelector("style").insertAdjacentHTML("beforeend", ContextMenuCSS);
438 TitleElement.querySelector("style").insertAdjacentHTML("beforeend", TitleCSS);
439 UserListElement.querySelector("#button-banlist").insertAdjacentHTML("beforebegin", "<span>1</span>");
440 VideoListElement.querySelector("#videos-header").insertAdjacentHTML("afterbegin", "<button style=\"display:"+((CTS.Project.isTouchScreen)?"none":"block")+"\" class=\"tcsettings\">⯇</button>");
441 VideoListElement.querySelector("#videos-content").insertAdjacentHTML("beforeend", '<div id="popup" class="PMOverlay"></div>');
442 VideoListElement.querySelector("#videolist").insertAdjacentHTML("afterbegin", '<div class="ctsdrop"><button class="ctsoptions" title="CTS Options"><img src="https://i.imgur.com/nvr9FjM.png" /></button><div class="ctsdrop-content"><div style="height:6px;background:#624482;"></div><button id="BackgroundUpdateRight" class="ctsoptions" title="Background"><img src="https://i.imgur.com/Zn97vqS.png" /></button><button id="BackgroundUpdateLeft" class="ctsoptions" title="Background"><img src="https://i.imgur.com/OAcfZRy.png" /></button><div style="height:6px;background:#624482;"></div><button id="FontSizeUpdate" class="ctsoptions" title="Font Size"><img src="https://i.imgur.com/eVc0N5A.png" /></button><div style="height:6px;background:#624482;"></div><button id="ChatColor" class="ctsoptions" title="Chat Style"><img src="https://i.imgur.com/62jpRbt.png" /></button><button id="CameraBorderToggled" class="ctsoptions" title="Camera Border"><img src="https://i.imgur.com/BXK3MR2.png" /></button><button id="FeaturedToggled" class="ctsoptions" title="YouTube/Featured Resize"><img src="https://i.imgur.com/u8mBZYJ.png" /></button>' + ((!CTS.ThemeChange) ? '<button id="ChatWidthToggled" class="ctsoptions" title="Chat Resize"><img src="https://i.imgur.com/G95jVFI.png" /></button><button id="ChatHeightToggled" class="ctsoptions" title="Chat Resize"><img src="https://i.imgur.com/AGc7mLN.png" /></button><div style="height:6px;background:#624482;"></div>' : '')+ '<button id="PerformanceModeToggled" class="ctsoptions" title="Performance Mode"><img src="https://i.imgur.com/qoKTU4y.png" /></button>' + ((!CTS.Project.isTouchScreen)?'<div style="height:6px;background:#624482;"></div><button id="ThemeChange" class="ctsoptions" title="Switch CTS Theme Mode"><img src="https://i.imgur.com/NF6U3Us.png" /></button></div></div>':''));
443 ChatLogElement.querySelector("#chat-position").insertAdjacentHTML("afterbegin", '<div id="notification-content"></div><button class="notifbtn">▼</button>');
444 ChatLogElement.querySelector("#chat").insertAdjacentHTML("beforeend", '<div id="cts-chat-content"></div>');
445 ChatLogElement.querySelector("#chat").insertAdjacentHTML("afterend", '<div class="cts-message-unread" style="display:none;">There are unread messages!</div>');
446 //SCRIPT INIT -> PREPARE()
447 clearInterval(CTS.ScriptLoading);
448 CTS.ScriptInit = true;
449 CTSRoomPrepare();
450 }
451
452 function CTSRoomPrepare() {
453 //FUNCTION BYPASS
454 window.TinychatApp.BLL.Videolist.prototype.blurOtherVids = function() {};
455 window.TinychatApp.BLL.SoundPlayer.playMessage = function() {};
456 window.TinychatApp.BLL.SoundPlayer.playGift = function() {};
457 window.TinychatApp.BLL.User.isSubscription = function() {return true;};
458 window.TinychatApp.BLL.User.canUseFilters = function() {return true;};
459 window.TinychatApp.BLL.MediaConnection.prototype.Close = function() {RTC(this);};
460 window.TinychatApp.BLL.ChatRoom.prototype.sendPushForUnreadPrivateMessage = function() {};
461 if (!CTS.Project.isTouchScreen) {
462 window.TinychatApp.BLL.ChatRoom.prototype.BroadcastStart = function(a) {
463 var b = this,
464 d = this.settings.getSettings();
465 if (d.video === null) {
466 return void this.app.MediaSettings(() => {
467 this.BroadcastStart();
468 });
469 }
470 this.videolist.AddingVideoSelf(this.self_handle);
471 var e = {};
472 if (!navigator.mediaDevices || !navigator.mediaDevices.enumerateDevices) {
473 e.audio = true;
474 e.video = {width: {min: 320,max: 4096},height: {min: 240,max: 2160},frameRate: {min: 15,ideal: 30,max: 60}};
475 } else {
476 navigator.mediaDevices.enumerateDevices().then(g => {
477 var h = false;
478 var len = g.length;
479 for (var c = 0; c < len; c++) {
480 if (g[c].kind === "videoinput") {
481 if (e.video === void 0) e.video = {width: {min: 320,max: 4096},height: {min: 240,max: 2160},frameRate: {min: 15,ideal: 30,max: 60}};
482 if (h) {
483 d.video = g[c];
484 h = false;
485 this.settings.saveSettings(d);
486 } else if (d.video === null) {
487 d.video = g[c];
488 this.settings.saveSettings(d);
489 } else if (d.video !== null && typeof d.video == "object" && d.video.deviceId == g[c].deviceId && d.video.deviceId !== a) {
490 e.video.deviceId = {
491 exact: d.video.deviceId
492 };
493 } else if (d.video.deviceId === a) {
494 h = true;
495 }
496 }
497 if (g[c].kind === "audioinput") {
498 if (e.audio === void 0) e.audio = {};
499 if (d.audio !== null && typeof d.audio == "object" && d.audio.deviceId == g[c].deviceId) {
500 e.audio = {
501 deviceId: {
502 exact: d.audio.deviceId
503 },
504 };
505 }
506 }
507 }
508 if (e.video !== null && d.video !== null && d.video.deviceId == b.id__miconly) delete e.video;
509 let i = navigator.mediaDevices.getSupportedConstraints();
510 for (let a in i) {
511 if (i.hasOwnProperty(a) && "echoCancellation" == a && e.audio) e.audio[a] = this.settings.isAcousticEchoCancelation();
512 }
513 if (!(e.audio || e.video)) {
514 b.onMediaFailedCallback(new Error("No media devices to start broadcast."));
515 } else if ("https:" === location.protocol || this.app.isDebug()) {
516 debug("BROADCAST", "Initiating Media...");
517 var m = new window.TinychatApp.BLL.BroadcastProgressEvent(window.TinychatApp.BLL.BroadcastProgressEvent.MEDIA_START);
518 this.EventBus.broadcast(window.TinychatApp.BLL.BroadcastProgressEvent.ID, m);
519 b.mediaLastConstraints = e;
520 navigator.mediaDevices.getUserMedia(e).then(m => {
521 b.onMediaSuccessCallback(m);
522 });
523 }
524 }).catch(er => {
525 debug("CAMERA::ERROR", er);
526 });
527 }
528 };
529 }
530 window.TinychatApp.BLL.Userlist.prototype.ignore = function(a) {
531 var b = a.isUsername ? a.username : a.nickname;
532 if (this.isIgnored(a) || this.ignored.push(b)) {
533 var c = new window.TinychatApp.BLL.IgnorelistUpdateUserEvent(a);
534 this.EventBus.broadcast(window.TinychatApp.BLL.IgnorelistUpdateUserEvent.ID, c);
535 this.app.showToast(b + " ignored successfully till they leave or you refresh!");
536 CTS.TempIgnoreList.push(b.toUpperCase());
537 Cameras();
538 }
539 };
540 window.TinychatApp.BLL.Userlist.prototype.unignore = function(a) {
541 var b = a.isUsername ? a.username : a.nickname,
542 len = this.ignored.length;
543 for (var TI = 0; TI < len; TI++) {
544 if (CTS.TempIgnoreList[TI] === b.toUpperCase()) {
545 this.ignored.splice(TI, 1);
546 break;
547 }
548 }
549 len = CTS.TempIgnoreList.length;
550 for (TI = 0; TI < len; TI++) {
551 if (CTS.TempIgnoreList[TI] === b.toUpperCase()) {
552 CTS.TempIgnoreList.splice(TI, 1);
553 break;
554 }
555 }
556 var e = new window.TinychatApp.BLL.IgnorelistUpdateUserEvent(a);
557 this.EventBus.broadcast(window.TinychatApp.BLL.IgnorelistUpdateUserEvent.ID, e);
558 this.app.showToast(a.username + " unignored");
559 };
560 //REMOVE
561 Remove(ChatLogElement, 'span[id="input-unread"]');
562 Remove(ChatLogElement, "#chat-content");
563 //PARAM REMOVE
564 if (CTS.enablePMs === false) Remove(ChatListElement, "#chatlist");
565 //LOAD
566 CTSRoomLoad();
567 }
568
569 function CTSRoomLoad() {
570 //EVENT LISTENERS
571 if (!CTS.ThemeChange) {
572 // BOOT UP OG THEME
573 var finishoff = false;
574 while (CTS.OGStyle.SavedHeight !== CTS.OGStyle.HeightCounter || CTS.OGStyle.SavedWidth !== CTS.OGStyle.WidthCounter) {
575 if (CTS.OGStyle.SavedHeight !== CTS.OGStyle.HeightCounter) {
576 ChatHeightToggled();
577 } else {
578 finishoff = true;
579 }
580 if (CTS.OGStyle.SaveWidth !== CTS.OGStyle.WidthCounter && finishoff) ChatWidthToggled();
581 }
582 VideoListElement.querySelector("#ChatHeightToggled").addEventListener("click", function() {
583 ChatHeightToggled();
584 Save("OGStyleHeight", CTS.OGStyle.HeightCounter);
585 }, {
586 passive: true
587 });
588 VideoListElement.querySelector("#ChatWidthToggled").addEventListener("click", function() {
589 ChatWidthToggled();
590 Save("OGStyleWidth", JSON.stringify(CTS.OGStyle.WidthCounter));
591 }, {
592 passive: true
593 });
594 } else {
595 if (!CTS.Project.isTouchScreen) {
596 ChatLogElement.querySelector("#chat-wider").insertAdjacentHTML("beforebegin", "<div id=\"chat-hide\"></div>");
597 ChatLogElement.querySelector("#chat-hide").addEventListener("click", function() {
598 ChatHide();
599 }, {
600 passive: true
601 });
602 }
603 }
604 if (!CTS.Project.isTouchScreen) {
605 ChatLogElement.querySelector("#chat-wrapper").insertAdjacentHTML("afterbegin", "<div id=\"chat-download\"></div>");
606 ChatLogElement.querySelector("#chat-download").addEventListener("click", function() {
607 var len = CTS.UserList.length,
608 t = "Users : "+len+"\n",
609 c;
610 for (c = 0; c < len; c++) {
611 if (c){ // 0 = false
612 t+= ", ";
613 if (c % 10 === 0) t += "\n";
614 }
615 t += CTS.UserList[c].username +" ("+CTS.UserList[c].nick+")";
616 }
617 t += "\n\n";
618 len = CTS.Message[CTS.ActiveMessage].length;
619 for (c = 0; c < len; c++) t += "["+CTS.Message[CTS.ActiveMessage][c].time+"]["+CTS.Message[CTS.ActiveMessage][c].username+"("+CTS.Message[CTS.ActiveMessage][c].nick+")]: "+(CTS.Message[CTS.ActiveMessage][c].msg.replace(/(\r\n|\n|\r)/gm,"")+"\n");
620 Download("TinyChat_"+CTS.Room.Name.toUpperCase()+" "+DateTime()+".log", "Room : "+CTS.Room.Name+"\n"+t);
621 }, {
622 passive: true
623 });
624 VideoListElement.querySelector("#ThemeChange").addEventListener("click", function() {
625 CTS.ThemeChange = !CTS.ThemeChange;
626 Save("ThemeChange", JSON.stringify(CTS.ThemeChange));
627 location.reload();
628 }, {
629 passive: true
630 });
631 }
632 VideoListElement.querySelector("#PerformanceModeToggled").addEventListener("click", function() {
633 if (CTS.ChatDisplay) {
634 CTS.PerformanceMode = !CTS.PerformanceMode;
635 PerformanceModeInit(CTS.PerformanceMode);
636 }
637 }, {
638 passive: true
639 });
640 VideoListElement.querySelector("#FeaturedToggled").addEventListener("click", function() {
641 CTS.Featured = !CTS.Featured;
642 Save("Featured", JSON.stringify(CTS.Featured));
643 FeaturedCameras(CTS.Featured);
644 Resize();
645 }, {
646 passive: true
647 });
648 VideoListElement.querySelector("#CameraBorderToggled").addEventListener("click", function() {
649 CTS.CameraBorderToggle = !CTS.CameraBorderToggle;
650 Save("CameraBorderToggle", JSON.stringify(CTS.CameraBorderToggle));
651 Cameras();
652 Resize();
653 }, {
654 passive: true
655 });
656 VideoListElement.querySelector("#ChatColor").addEventListener("click", function() {
657 CTS.ChatStyleCounter++;
658 Remove(VideoListElement, "style[id=\"" + (CTS.ChatStyleCounter - 1) + "\"]");
659 Remove(ChatLogElement, "style[id=\"" + (CTS.ChatStyleCounter - 1) + "\"]");
660 Remove(SideMenuElement, "style[id=\"" + (CTS.ChatStyleCounter - 1) + "\"]");
661 var len = window.CTSChatCSS.length - 1;
662 if (CTS.ChatStyleCounter > len) CTS.ChatStyleCounter = 0;
663 StyleSet();
664 Save("ChatStyle", CTS.ChatStyleCounter);
665 }, {
666 passive: true
667 });
668 ChatLogElement.querySelector(".cts-message-unread").addEventListener("click", function() {
669 UpdateScroll(1, true);
670 CheckUnreadMessage();
671 }, {
672 passive: true
673 });
674 ChatLogElement.querySelector("#chat").addEventListener("scroll", function(event) {
675 var element = event.target;
676
677 if (Math.floor(element.scrollTop + 50) >= (element.scrollHeight - element.offsetHeight)) CheckUnreadMessage(true);
678 }, {
679 passive: true
680 });
681 ChatLogElement.querySelector("#notification-content").addEventListener("scroll", function(event) {
682 var element = event.target;
683 if (Math.floor(element.scrollTop + 50) >= (element.scrollHeight - element.offsetHeight)) CTS.NotficationScroll = true;
684 }, {
685 passive: true
686 });
687 if (CTS.NotificationToggle === 0) {
688 ChatLogElement.querySelector(".notifbtn").addEventListener("click", NotificationResize, {
689 passive: true
690 });
691 }
692 VideoListElement.querySelector(".tcsettings").addEventListener("click", function(event) {
693 var arg;
694 if (this.innerText === "⯈") {
695 this.innerText = "⯇";
696 arg = "block";
697 } else {
698 this.innerText = "⯈";
699 arg = "none";
700 }
701 VideoListElement.querySelector("#videos-header-sound").style.display = arg;
702 if (CTS.Room.PTT === false) VideoListElement.querySelector("#videos-header-mic").style.display = arg;
703 //VideoListElement.querySelector("#videos-header-snapshot").style.display = arg;
704 VideoListElement.querySelector("#videos-header-fullscreen").style.display = arg;
705 VideoListElement.querySelector("span[title=\"Settings\"]").style.display = arg;
706 }, {
707 passive: true
708 });
709 VideoListElement.querySelector("button[id=\"BackgroundUpdateLeft\"]").addEventListener("click", function() {
710 if (!Addon.active("BGIMG")) {
711 CTS.MainBackgroundCounter++;
712 if (CTS.MainBackgroundCounter === window.CTSImages.length) CTS.MainBackgroundCounter = 0;
713 var background = "url(\"" + window.CTSImages[CTS.MainBackgroundCounter] + "\") rgb(0, 0, 0) no-repeat";
714 document.body.style.background = background;
715 Save("MainBackground", background);
716 }
717 }, {
718 passive: true
719 });
720 VideoListElement.querySelector("button[id=\"BackgroundUpdateRight\"]").addEventListener("click", function() {
721 if (!Addon.active("BGIMG")) {
722 CTS.MainBackgroundCounter--;
723 if (CTS.MainBackgroundCounter === -1) CTS.MainBackgroundCounter = window.CTSImages.length - 1;
724 var background = "url(\"" + window.CTSImages[CTS.MainBackgroundCounter] + "\") rgb(0, 0, 0) no-repeat";
725 document.body.style.background = background;
726 Save("MainBackground", background);
727 }
728 }, {
729 passive: true
730 });
731 VideoListElement.querySelector("button[id=\"FontSizeUpdate\"]").addEventListener("click", function() {
732 CTS.FontSize += 5;
733 if (CTS.FontSize >= 40) CTS.FontSize = 15;
734 Save("FontSize", CTS.FontSize);
735 ChatLogElement.querySelector("#textarea").style.fontSize = (CTS.FontSize - 4) + "px";
736 }, {
737 passive: true
738 });
739 //MUTATION OBSERVERS
740 new MutationObserver(function() {
741 LoadMessage();
742 }).observe(ChatLogElement.querySelector("#chat-instant"), {
743 attributes: true,
744 attributeFilter: ["class"],
745 childList: false,
746 characterData: false
747 });
748 new MutationObserver(function() {
749 Cameras();
750 }).observe(VideoListElement.querySelector(".videos-items:first-child"), {
751 childList: true
752 });
753 new MutationObserver(function() {
754 Cameras();
755 }).observe(VideoListElement.querySelector(".videos-items:last-child"), {
756 childList: true
757 });
758 new MutationObserver(function() {
759 if (CTS.AutoMicrophone) {
760 OpenMicrophone();
761 }
762 }).observe(VideoListElement.querySelector("#videos-footer-broadcast-wrapper"), {
763 attributes: true,
764 attributeFilter: ["class"]
765 });
766 //BOOT UP - FIRST START
767 NotificationDisplay();
768 FeaturedCameras(CTS.Featured);
769 Cameras();
770 }
771 //YOUTUBE FUNCTIONS
772 function CheckHost() {
773 if (CTS.Host === 0) {
774 Send("msg", "!whoisbot");
775 CTS.HostAttempt = 0;
776 CTS.HostWaiting = true;
777 }
778 }
779
780 function SetBot() {
781 if (arguments[0]) CTS.Game.NoReset = true;
782 Send("msg", "!bot");
783 CTS.HostWaiting = false;
784 }
785
786 function CheckYouTube() {
787 //CHECK YOUTUBE LINK VIA REGEX (NEARLY EVERY LINK ALLOWED SOME FORMATTING REQUIRED ON PLAYLIST)
788 if (arguments[3] === undefined) arguments[3] = true;
789 CTS.YouTube.XHR.type = arguments[1];
790 var videoid = arguments[0].match(/http(?:s)?(?:\:\/\/)(?:w{1,3}\.)?(?:youtu(?:\.be|be.com))(?:\/v\/|\/)?(?:watch\?|playlist\?|embed\/|user\/|v\/|\/)(list\=[a-z0-9\-\_]{1,34}|(?:v\=)?[a-z0-9\-\_]{1,11})/i);
791 if (videoid !== null) {
792 videoid = videoid[1].replace(/v\=/g, "");
793 //LINK IS PLAYLIST
794 if (videoid.match(/list\=/i)) {
795 if (arguments[3]) {
796 videoid = videoid.replace(/list\=/, "");
797 debug("YOUTUBE::PLAYLIST LINK GATHERER", videoid);
798 CTS.YouTube.XHR.open("GET", "https://www.googleapis.com/youtube/v3/playlistItems?playlistId=" + videoid + "&part=snippet&maxResults=25" + ((arguments[2] !== undefined) ? "&pageToken=" + arguments[2] : "") + "&type=video&eventType=completed&key=" + CTS.YouTube.API_KEY);
799 CTS.YouTube.XHR.send();
800 }
801 } else {
802 //LINK IS REGULAR
803 CTS.YouTube.XHR.videoid = videoid;
804 CTS.YouTube.VideoReturn = true;
805 CTS.YouTube.XHR.open("GET", "https://www.googleapis.com/youtube/v3/videos?id=" + CTS.YouTube.XHR.videoid + "&type=video&eventType=completed&part=contentDetails,snippet&fields=items/snippet/title,items/snippet/thumbnails/medium,items/contentDetails/duration&eventType=completed&key=" + CTS.YouTube.API_KEY);
806 CTS.YouTube.XHR.send();
807 debug("YOUTUBE::LINK SEARCH", CTS.YouTube.XHR.videoid);
808 }
809 } else {
810 //KEYWORD SEARCH
811 if (CTS.YouTube.MessageQueueList.length <= 0) {
812 arguments[0] = arguments[0].replace(/^(!yt )/, "");
813 CTS.YouTube.SearchReturn = true;
814 CTS.YouTube.XHR.open("GET", "https://www.googleapis.com/youtube/v3/search?key=" + CTS.YouTube.API_KEY + "&maxResults=1&q=" + encodeURI(arguments[0]) + "&type=video&part=snippet");
815 CTS.YouTube.XHR.send();
816 debug("YOUTUBE::KEYWORD SEARCH", arguments[0]);
817 }
818 }
819 }
820
821 function YouTubePlayList() {
822 CTS.YouTube.ShowQueue = (arguments[0] !== undefined) ? true : false;
823 if ((!CTS.YouTube.Playing && CTS.Host == CTS.Me.handle) || CTS.YouTube.Clear === true || CTS.YouTube.ShowQueue === true) Send("yut_playlist");
824 }
825
826 function YouTubeTrackAdd() {
827 if (CTS.YouTube.MessageQueueList[0] !== undefined) {
828 if (CTS.YouTube.Busy === false) {
829 if (CTS.YouTube.MessageQueueList.length > 0) {
830 debug("YOUTUBE::ID", CTS.YouTube.MessageQueueList[0].snippet.resourceId.videoId);
831 CTS.YouTube.XHR.open("GET", "https://www.googleapis.com/youtube/v3/videos?id=" + CTS.YouTube.MessageQueueList[0].snippet.resourceId.videoId + "&type=video&eventType=completed&part=contentDetails,snippet&fields=items/snippet/title,items/snippet/thumbnails/medium,items/contentDetails/duration&eventType=completed&key=" + CTS.YouTube.API_KEY);
832 CTS.YouTube.XHR.videoid = CTS.YouTube.MessageQueueList[0].snippet.resourceId.videoId;
833 CTS.YouTube.XHR.send();
834 CTS.YouTube.MessageQueueList.shift();
835 }
836 }
837 }
838 }
839
840 function YouTubePlayListItems() {
841 var len = arguments[0].length;
842 for (var i = 0; i < len; i++) {
843 if (CTS.YouTube.NotPlayable.includes(arguments[0][i].snippet.title) === false) {
844 CTS.YouTube.MessageQueueList.push(arguments[0][i]);
845 }
846 }
847 }
848
849 function YouTubeTimeConvert() {
850 //TIME CONVERSION FOR APPROPRIATE YOUTUBE DURATION TO SEND BACK
851 var a = arguments[0].match(/\d+/g);
852 if (arguments[0].indexOf("M") >= 0 && arguments[0].indexOf("H") == -1 && arguments[0].indexOf("S") == -1) a = [0, a[0], 0];
853 if (arguments[0].indexOf("H") >= 0 && arguments[0].indexOf("M") == -1) a = [a[0], 0, a[1]];
854 if (arguments[0].indexOf("H") >= 0 && arguments[0].indexOf("M") == -1 && arguments[0].indexOf("S") == -1) a = [a[0], 0, 0];
855 var len = a.length;
856 arguments[0] = 0;
857 if (len == 3) {
858 arguments[0] = arguments[0] + parseInt(a[0]) * 3600;
859 arguments[0] = arguments[0] + parseInt(a[1]) * 60;
860 arguments[0] = arguments[0] + parseInt(a[2]);
861 }
862 if (len == 2) {
863 arguments[0] = arguments[0] + parseInt(a[0]) * 60;
864 arguments[0] = arguments[0] + parseInt(a[1]);
865 }
866 if (len == 1) arguments[0] = arguments[0] + parseInt(a[0]);
867 return arguments[0];
868 }
869
870 function BotCommandCheck() {
871 //USER COMMANDS TO HOST
872 if (isCommand(arguments[1])) {
873 if (arguments[1].match(/^!whoisbot$/i)) BotCommand(5, arguments[0]);
874 if (arguments[1].match(/^!vote\s/i)) Vote(arguments[0], arguments[1]);
875 // PUBLIC COMMANDS
876 if (CTS.PublicCommandToggle) {
877 if (arguments[1].match(/^!8ball\s.*\??/i)) Send("msg", "[8BALL]\n" + window.CTSEightBall[Rand(0, window.CTSEightBall.length - 1)]);
878 if (arguments[1].match(/^!coin$/i)) Send("msg", "[COIN FLIP]\nThe coin landed on " + ((Rand(0, 1) == 1) ? "heads" : "tails") + "!");
879 if (arguments[1].match(/^!chuck$/i)) Chuck();
880 if (arguments[1].match(/^!urb\s/i)) Urb(arguments[1]);
881 if (arguments[1].match(/^!dad$/i)) Dad();
882 if (arguments[1].match(/^!advice$/i)) Advice();
883 }
884 //MOD/JR.MOD
885 if (CTS.BotModList.includes(CTS.UserList[arguments[0]].username) || CTS.UserList[arguments[0]].mod) {
886 if (arguments[1].match(/^!kick\s/i)) ModCommand("kick", arguments[1]);
887 if (arguments[1].match(/^!ban\s/i)) ModCommand("ban", arguments[1]);
888 if (arguments[1].match(/^!close\s/i)) ModCommand("stream_moder_close", arguments[1]);
889 }
890 //ROOM IS PAID AND YOUTUBE IS ONLINE (TC SET)
891 if (CTS.Room.YT_ON) {
892 if (arguments[1].match(/^!play$/i)) YouTubePlayList();
893 if (arguments[1].match(/^!yt\s/i)) BotCommand(1, arguments[0], arguments[1]);
894 if (arguments[1].match(/^!ytbypass\s/i)) BotCommand(6, arguments[0], arguments[1]);
895 if (arguments[1].match(/^!ytclear$/i)) BotCommand(2, arguments[0]);
896 if (arguments[1].match(/^!ytskip$/i)) BotCommand(3, arguments[0]);
897 if (arguments[1].match(/^!ytqueue$/i)) BotCommand(4, arguments[0]);
898 }
899 }
900 //USER CAN GAME THEY'VE BEEN VERIFIED
901 if (CTS.UserList[arguments[0]].canGame) FishCommandCheck(arguments[0], arguments[1]);
902 }
903
904 function BotCheck() {
905 if (CTS.UserList[arguments[0]].mod) {
906 //CHECK HOST
907 if (arguments[1].match(/^!bot$/i)) {
908 //SET HOST
909 CTS.Host = arguments[2].handle;
910 CTS.HostWaiting = false;
911 //RESET GAMES
912 if (CTS.Host != CTS.Me.handle && CTS.Game.NoReset) CTS.Game.NoReset = false;
913 if (arguments[2].handle === CTS.Host && CTS.HostWaiting === false && !CTS.Game.NoReset) {
914 if (CTS.Me.handle !== arguments[2].handle) {
915 CTS.Game.NoReset = false;
916 Fish.reset(true);
917 }
918 }
919 //IF CLIENT(ME) BECOMES HOST CHECK YOUTUBE IF ENABLED
920 if (CTS.Me.handle == arguments[2].handle && CTS.Room.YT_ON) YouTubePlayList();
921 //ELSE KEEP ON UNLESS HOSTWAITING (!WHOISBOT)
922 } else if (CTS.HostWaiting === true) {
923 CTS.HostAttempt++;
924 //SET BOT IF NO RESPONSE IN 10 MESSAGES or 10 SECONDS
925 if (CTS.HostAttempt == 1) {
926 setTimeout(function() {
927 //CHECK WAITING STATE OR IF HOST HAS CHANGED
928 if (CTS.HostWaiting === true && CTS.Host === 0) SetBot(false);
929 }, 10000);
930 }
931 //SETS BOT FORCEFULLY ON 10 MESSAGES CANCELING TIMER EVENT WHEN IT QUEUES
932 if (CTS.HostAttempt == 10) SetBot(false);
933 }
934 }
935 }
936
937 function Chuck() {
938 //OPEN REQUEST
939 CTS.Chuck.XHR.open("GET", "https://api.chucknorris.io/jokes/random");
940 CTS.Chuck.XHR.send();
941 }
942
943 function Urb() {
944 //CHECK TERM
945 var urban = arguments[0].match(/\!urb\s(.*)/i);
946 if (urban !== null) {
947 //OPEN REQUEST
948 CTS.Urb.XHR.open("GET", "https://api.urbandictionary.com/v0/define?term=" + urban[1]);
949 CTS.Urb.XHR.send();
950 }
951 }
952
953 function Dad() {
954 //OPEN REQUEST
955 CTS.Dad.XHR.open("GET", "https://icanhazdadjoke.com/");
956 CTS.Dad.XHR.setRequestHeader("Accept", "application/json");
957 CTS.Dad.XHR.send();
958 }
959
960 function Advice() {
961 //OPEN REQUEST
962 CTS.Advice.XHR.open("GET", "https://api.adviceslip.com/advice");
963 CTS.Advice.XHR.setRequestHeader("Accept", "application/json");
964 CTS.Advice.XHR.send();
965 }
966 //MESSAGE FUNCTION
967 function CreateMessage() {
968 //SCROLLED UP? MISSED A MESSAGE?
969 CheckUnreadMessage();
970 // POST NEW CHAT ITEM AND IF ACTIVECHAT IS OUR CURRENT
971 if (arguments[7] == GetActiveChat()) ChatLogElement.querySelector("#cts-chat-content").insertAdjacentHTML("beforeend", "<div class=\"message" + ((CTS.Avatar) ? " common " : " ") + ((CTS.HighlightList.includes(arguments[3]) || arguments[6]) ? "highlight" : "") + "\" " + ((arguments[2] === "") ? "style=\"padding-left:3px;\"" : "") + ">" + ((arguments[2]=="")?"":((CTS.Avatar) ? "<a href=\"#\" class=\"avatar\"><div><img src=\"" + arguments[2] + "\"></div></a>" : "")) + "<div class=\"nickname\" style=\"background:" + arguments[1] + ";\">" + arguments[4] + (CTS.TimeStampToggle ? "<div class=\"ctstime\"> " + arguments[0] + " </div>" : "") + "</div><div class=\"content\"><cts-message-html><span id=\"html\" class=\"message common\"style=\"font-size:" + CTS.FontSize + "px;\">" + arguments[5] + "</span></CTS-message-html></div></div>");
972 //CHAT CLEANUP
973 var Chat = ChatLogElement.querySelectorAll("#cts-chat-content>.message");
974 var len = Chat.length;
975 if (len > CTS.ChatLimit + 50) {
976 CTS.ChatScroll = true;
977 //REMOVE 50 MESSAGES (CAN BE DONE CLEANER BUT NO BIG DEAL FOR OUR USE)
978 len = Chat.length - CTS.ChatLimit;
979 var ChatIndex = 0;
980 for (ChatIndex; ChatIndex < len; ChatIndex++) {
981 Chat[ChatIndex].parentNode.removeChild(Chat[ChatIndex]);
982 CTS.Message[arguments[7]].shift();
983 //CLEANING TC ITEMS THAT FILL UP OVERTIME
984 window.TinychatApp.getInstance().defaultChatroom._chatlog.items = [];
985 }
986 }
987 UpdateScroll(1, false);
988 }
989
990 function AKB() {
991 //WATCH OR REMOVE USERS
992 if ((CTS.AutoKick === false && CTS.AutoBan === false) && arguments[0] === true) {
993 CTS.WatchList.push([arguments[2], arguments[1], new Date()]);
994 debug("WATCHLIST::ADDED", arguments[2] + ":" + arguments[1]);
995 } else {
996 if (CTS.Me.mod) {
997 if (CTS.AutoKick === true) {
998 CTS.NoGreet = true;
999 Send("kick", arguments[1]);
1000 } else if (CTS.AutoBan === true) {
1001 CTS.NoGreet = true;
1002 Send("ban", arguments[1]);
1003 }
1004 }
1005 }
1006 }
1007
1008 function AKBS() {
1009 if (arguments[0].username !== "") {
1010 //EXTENDED SAFELIST
1011 var temp = [];
1012 if (Addon.active("AKB")) temp = Addon.get("AKB");
1013 //DEFAULT SAFELIST
1014 if (!isSafeListed(arguments[0].username.toUpperCase())) {
1015 if (arguments[0].giftpoints > 0 || arguments[0].subscription > 0 || arguments[0].mod === true) {
1016 if (CTS.SafeList.length < 2500) {
1017 CTS.SafeList.push(arguments[0].username.toUpperCase());
1018 Save("AKB", JSON.stringify(CTS.SafeList));
1019 debug("SAFELIST::ADDED", arguments[0].username.toUpperCase() + ":" + arguments[0].handle);
1020 }
1021 } else {
1022 if (arguments[0].lurker === false) {
1023 AKB(true, arguments[0].handle, arguments[0].username.toUpperCase());
1024 } else {
1025 AKB(false, arguments[0].handle);
1026 }
1027 }
1028 }
1029 } else {
1030 AKB(false, arguments[0].handle);
1031 }
1032 }
1033
1034 function CheckSafeList() {
1035 var target = User(arguments[0]);
1036 if (target !== -1) {
1037 var a = CTS.SafeList.indexOf(CTS.UserList[target].username);
1038 if (a !== -1) {
1039 //REMOVE
1040 if (arguments[1]) {
1041 debug("SAFELIST::", "REMOVE USER " + CTS.UserList[target].username + " FROM SAFELIST");
1042 Alert(GetActiveChat(), "?Removing "+CTS.UserList[target].username+" from safelist!");
1043 CommandList.saferemove(a);
1044 } else {
1045 //GETID
1046 return a;
1047 }
1048 }
1049 }
1050 }
1051
1052 function LoadMessage() {
1053 var ChatIndex, index, Chat = ChatLogElement.querySelector("#cts-chat-content");
1054 CTS.ChatScroll = true;
1055 if (!CTS.MessageCallback[CTS.ActiveMessage]) CTS.MessageCallback[CTS.ActiveMessage] = [];
1056 CTS.MessageCallback[CTS.ActiveMessage].html = Chat.innerHTML;
1057 CTS.MessageCallback[CTS.ActiveMessage].len = (Chat.innerHTML === "") ? 0 : CTS.Message[CTS.ActiveMessage].length;
1058 Chat.innerHTML = "";
1059 CheckUnreadMessage();
1060 CTS.ActiveMessage = GetActiveChat();
1061 if (CTS.Message[CTS.ActiveMessage]) {
1062 index = (CTS.MessageCallback[CTS.ActiveMessage]) ? CTS.MessageCallback[CTS.ActiveMessage].len : 0;
1063 if (index > 0) Chat.innerHTML = CTS.MessageCallback[CTS.ActiveMessage].html;
1064 var len = CTS.Message[CTS.ActiveMessage].length;
1065 for (ChatIndex = index; ChatIndex < len; ChatIndex++) ChatLogElement.querySelector("#cts-chat-content").insertAdjacentHTML("beforeend", "<div class=\"message" + ((CTS.Avatar) ? " common " : " ") + ((CTS.HighlightList.includes(CTS.Message[CTS.ActiveMessage][ChatIndex].username) || CTS.Message[CTS.ActiveMessage][ChatIndex].mention) ? "highlight" : "") + "\" " + ((CTS.Message[CTS.ActiveMessage][ChatIndex].avatar === "") ? "style=\"padding-left:3px;\"" : "") + ">" + ((CTS.Avatar) ? "<a href=\"#\" class=\"avatar\"><div><img src=\"" + (CTS.Message[CTS.ActiveMessage][ChatIndex].avatar) + "\"></div></a>" : "") + "<div class=\"nickname\" style=\"-webkit-box-shadow: 0 0 6px " + CTS.Message[CTS.ActiveMessage][ChatIndex].namecolor + ";box-shadow: 0 0 6px " + CTS.Message[CTS.ActiveMessage][ChatIndex].namecolor + ";background:" + CTS.Message[CTS.ActiveMessage][ChatIndex].namecolor + ";\">" + CTS.Message[CTS.ActiveMessage][ChatIndex].nick + (CTS.TimeStampToggle ? "<div class=\"ctstime\"> " + CTS.Message[CTS.ActiveMessage][ChatIndex].time + " </div>" : "") + "</div><div class=\"content\"><cts-message-html><span id=\"html\" class=\"message common\" style=\"font-size:" + CTS.FontSize + "px;\">" + CTS.Message[CTS.ActiveMessage][ChatIndex].msg + "</span></CTS-message-html></div></div>");
1066 } else {
1067 CTS.Message[CTS.ActiveMessage] = [];
1068 }
1069 UpdateScroll(1, false);
1070 UpdateScroll(2, false);
1071 }
1072
1073 function CheckUnreadMessage() {
1074 if ((Math.floor(ChatLogElement.querySelector("#chat").scrollTop + 50) >= (ChatLogElement.querySelector("#chat").scrollHeight - ChatLogElement.querySelector("#chat").offsetHeight)) || arguments[0] !== undefined) {
1075 CTS.MissedMsg = 0;
1076 CTS.ChatScroll = true;
1077 ChatLogElement.querySelector(".cts-message-unread").style.display = "none";
1078 } else {
1079 CTS.MissedMsg++;
1080 CTS.ChatScroll = false;
1081 ChatLogElement.querySelector(".cts-message-unread").style.display = "block";
1082 ChatLogElement.querySelector(".cts-message-unread").innerHTML = "There are " + CTS.MissedMsg + " unread message(s)!";
1083 }
1084 }
1085
1086 function GetActiveChat() {
1087 var elem = ChatListElement.querySelector(".active");
1088 if (elem) return elem.getAttribute("data-chat-id");
1089 return 0;
1090 }
1091
1092 function CheckImgur() {
1093 if (CTS.imgur) {
1094 var i = arguments[0].match(/https?:\/\/i\.imgur\.com\/[a-zA-Z0-9]*\.(jpeg|jpg|gif|png|mp4)/);
1095 if (i !== null) {
1096 arguments[0] = (i[1] == "mp4") ? "<center>(Video Below)\n<video onclick=\"if (this.paused) {this.play();}else{this.pause();}\" oncontextmenu=\"return false;\" width=\"288px\" height=\"162px\"><source src=\"" + i[0] + "\" type=\"video/mp4\" /><source src=\"https://i.imgur.com/qLOIgom.mp4\" type=\"video/mp4\" /></video>\n<a href=\"" + i[0] + "\" target=\"_blank\">Direct Link</a></center>" : "<center><img src=\"" + i[0] + "\" width=\"320px\" height=\"240px\" />\n<a href=\"" + i[0] + "\" target=\"_blank\">Direct Link</a></center>";
1097 }
1098 }
1099 return arguments[0];
1100 }
1101
1102 function TTS() {
1103 var utter = new window.SpeechSynthesisUtterance(arguments[0]);
1104 utter.voice = CTS.TTS.voices[0];
1105 utter.rate = 1.0;
1106 utter.pitch = 0.5;
1107 CTS.TTS.synth.speak(utter);
1108 }
1109
1110 function isCommand() {
1111 return arguments[0].match(/^!/);
1112 }
1113
1114 function RoomUsers() {
1115 if (CTS.ScriptInit) UserListElement.querySelector("#header>span>span").innerText = " : " + CTS.UserList.length;
1116 }
1117
1118 function SpamPrevention() {
1119 var LineBreaks = (arguments[0].match(/\n|\r/g) || []).length;
1120 if (LineBreaks >= 14 && arguments[1] === false) return true;
1121 return false;
1122 }
1123
1124 function GamePrevention() {
1125 if (!CTS.CanSeeGames && arguments[1] && arguments[0].match(/^\[(?:FISHING\sBOAT)\]/i)) return false;
1126 return true;
1127 }
1128
1129 function UpdateScroll() {
1130 if (arguments[0] === 1 && (CTS.ChatScroll || arguments[1] === true)) ChatLogElement.querySelector("#chat").scrollTop = ChatLogElement.querySelector("#chat").scrollHeight;
1131 if (arguments[0] === 2 && (CTS.NotificationScroll || arguments[1] === true) && CTS.NotificationToggle == 0) ChatLogElement.querySelector("#notification-content").scrollTop = ChatLogElement.querySelector("#notification-content").scrollHeight;
1132 }
1133
1134 function DecodeTXT() {
1135 var txt = document.createElement("textarea");
1136 txt.innerHTML = arguments[0];
1137 return txt.value;
1138 }
1139
1140 function HTMLtoTXT() {
1141 var p = document.createElement("p");
1142 p.appendChild(document.createTextNode(arguments[0]));
1143 return p.innerHTML.replace(/(?:(?:(?:https?|ftps?):)?\/\/)(?:\S+(?::\S*)?@)?(?:(?!(?:10|127)(?:\.\d{1,3}){3})(?!(?:169\.254|192\.168)(?:\.\d{1,3}){2})(?!172\.(?:1[6-9]|2\d|3[0-1])(?:\.\d{1,3}){2})(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:(?:[a-z0-9\u00a1-\uffff][a-z0-9\u00a1-\uffff_-]{0,62})?[a-z0-9\u00a1-\uffff]\.)+(?:[a-z\u00a1-\uffff]{2,}\.?))(?::\d{2,5})?(?:[/?#]\S*)?/igm, "<a href=\"$&\" target=\"_blank\">$&</a>").replace(/[\u2680-\u2685]/g, "<span style=\"font-size:275%;\">$&</span>").replace(/\n|\r/g,"<br>");
1144 }
1145
1146 function IgnoreText() {
1147 if (arguments[0] !== "") {
1148 if (arguments[0].match(/^(\r|\n|\s).*/)) return false;
1149 return true;
1150 }
1151 }
1152
1153 function TimeToDate() {
1154 if (arguments[1] === undefined) arguments[1] = new Date();
1155 var match = arguments[0].trim().match(/(\d+):(\d+)\s?((am|AM|aM|Am)|(pm|PM|pM|Pm))/);
1156 var t = {
1157 hours: parseInt(match[1]),
1158 minutes: parseInt(match[2]),
1159 period: match[3].toLowerCase()
1160 };
1161 if (t.hours === 12) {
1162 if (t.period === "am") arguments[1].setHours(t.hours - 12, t.minutes, 0);
1163 if (t.period === "pm") arguments[1].setHours(t.hours, t.minutes, 0);
1164 } else {
1165 if (t.period === "am") arguments[1].setHours(t.hours, t.minutes, 0);
1166 if (t.period === "pm") arguments[1].setHours(t.hours + 12, t.minutes, 0);
1167 }
1168 return arguments[1];
1169 }
1170
1171 function PushPM() {
1172 var list = (arguments[2] !== undefined) ? CTS.UserList[arguments[2]] : CTS.Me;
1173
1174 CTS.Message[arguments[0]].push({
1175 "time": Time(),
1176 "namecolor": list.namecolor,
1177 "avatar": list.avatar,
1178 "username": list.username,
1179 "nick": list.nick,
1180 "msg": CheckImgur(HTMLtoTXT(arguments[1])),
1181 "mention": false
1182 });
1183
1184 if (arguments[0] == GetActiveChat()) {
1185 var msg = CTS.Message[arguments[0]][CTS.Message[arguments[0]].length - 1];
1186 CreateMessage(msg.time, list.namecolor, list.avatar, list.username, list.nick, msg.msg, msg.mention, arguments[0]);
1187 UpdateScroll(1, false);
1188 }
1189 }
1190
1191 function Time() {
1192 return (new Date().toLocaleString("en-US", {
1193 hour: "numeric",
1194 minute: "numeric",
1195 second: "numeric",
1196 hour12: true
1197 }));
1198 }
1199 function DateTime() {
1200 return (new Date().toLocaleString("en-US", {
1201 year: 'numeric',
1202 month: 'numeric',
1203 day: 'numeric',
1204 hour: "numeric",
1205 minute: "numeric",
1206 second: "numeric",
1207 hour12: true
1208 }));
1209 }
1210 //FEATURES
1211 function Download() {
1212 var element = document.createElement('a');
1213 element.setAttribute('href', 'data:text/plain;charset=utf-8,' + encodeURIComponent(arguments[1]));
1214 element.setAttribute('download', arguments[0]);
1215 element.style.display = 'none';
1216 document.body.appendChild(element);
1217 element.click();
1218 document.body.removeChild(element);
1219 }
1220
1221 function StyleSet() {
1222 var style = document.createElement('style');
1223 style.setAttribute('id', CTS.ChatStyleCounter);
1224 style.innerHTML = window.CTSChatCSS[CTS.ChatStyleCounter][0]+":host, #videolist {background-color:unset;}";
1225 ChatLogElement.appendChild(style);
1226
1227 style = document.createElement('style');
1228 style.setAttribute('id', CTS.ChatStyleCounter);
1229 style.innerHTML = window.CTSChatCSS[CTS.ChatStyleCounter][1]+":host, #videolist {background-color:unset;}";
1230 VideoListElement.appendChild(style);
1231
1232 style = document.createElement('style');
1233 style.setAttribute('id', CTS.ChatStyleCounter);
1234 style.innerHTML = window.CTSChatCSS[CTS.ChatStyleCounter][2]+":host, #videolist {background-color:unset;}";
1235 SideMenuElement.appendChild(style);
1236 }
1237
1238 function ChatHeightToggled() {
1239 CTS.OGStyle.HeightCounter++;
1240 if (!CTS.ChatDisplay) {
1241 CTS.ChatWidth += 5;
1242 CTS.ChatDisplay = true;
1243 }
1244 CTS.ChatHeight -= 5;
1245 CTS.UserListDisplay = true;
1246 if (CTS.ChatHeight == 20) {
1247 CTS.ChatHeight = 45;
1248 CTS.UserListDisplay = false;
1249 CTS.OGStyle.HeightCounter = 0;
1250 }
1251
1252 ChatLogElement.querySelector("#chat-wrapper").style.cssText = "min-width:400px;width:calc(400px + " + CTS.ChatWidth + "%);max-width:calc(400px + " + CTS.ChatWidth + "%);" + (CTS.UserListDisplay ? "top:unset;min-height:calc(100% - " + CTS.ChatHeight + "% - 119px)!important;max-height:calc(100% - " + CTS.ChatHeight + "% - 119px)!important;" : "bottom:0;min-height:calc(100% - 120px)!important;max-height: calc(100% - 120px)!important;");
1253 TitleElement.querySelector("#room-header").style.cssText = "min-width:400px;width:calc(400px + " + CTS.ChatWidth + "%);max-width:calc(400px + " + CTS.ChatWidth + "%)!important;top:" + (CTS.UserListDisplay ? "calc(" + CTS.ChatHeight + "% + 84px);" : "84px;");
1254 VideoListElement.querySelector("#videos-footer-broadcast-wrapper").style.cssText = "bottom:unset;min-width:400px;width:calc(400px + " + CTS.ChatWidth + "%);max-width:calc(400px + " + CTS.ChatWidth + "%);top:" + (CTS.UserListDisplay ? "calc(" + CTS.ChatHeight + "% + 34px);" : "unset;top:34px;");
1255 VideoListElement.querySelector("#videos-header").style.cssText = !CTS.UserListDisplay ? "top:0;right: 54px;" : "bottom:unset;top:" + CTS.ChatHeight + "%;";
1256 SideMenuElement.querySelector("#sidemenu").style.cssText = !CTS.UserListDisplay ? "display:none" : "min-width:400px;width:calc(400px + " + CTS.ChatWidth + "%);max-width:calc(400px + " + CTS.ChatWidth + "%)!important;height:" + CTS.ChatHeight + "%!important;";
1257 UserListElement.querySelector("#button-banlist").style.cssText = "top:calc(" + CTS.ChatHeight + "% + 89px);";
1258 document.querySelector("#content").style.cssText = "width:calc(100% " + (CTS.ChatDisplay ? "- (400px + " + CTS.ChatWidth + "%)" : "") + ")";
1259 VideoListElement.querySelector("#videos-footer").style.cssText = "display:block;top:" + (CTS.UserListDisplay ? "calc(" + CTS.ChatHeight + "% + 119px);" : "119px;") + "right:-70px;display:block;";
1260 PerformanceModeInit(CTS.PerformanceMode);
1261 UpdateScroll(1, true);
1262 UpdateScroll(2, true);
1263 Resize();
1264 }
1265
1266 function ChatWidthToggled() {
1267 CTS.OGStyle.WidthCounter++;
1268 CTS.ChatWidth += 5;
1269 CTS.ChatDisplay = true;
1270 if (CTS.ChatWidth == 25) {
1271 CTS.ChatWidth = -5;
1272 CTS.ChatDisplay = false;
1273 CTS.OGStyle.WidthCounter = 0;
1274 }
1275 ChatLogElement.querySelector("#chat-wrapper").style.cssText = (!CTS.ChatDisplay) ? "display:none" : "min-width:400px;width:calc(400px + " + CTS.ChatWidth + "%);max-width:calc(400px + " + CTS.ChatWidth + "%);" + ((CTS.UserListDisplay) ? "top:unset;min-height:calc(100% - " + CTS.ChatHeight + "% - 119px)!important;max-height:calc(100% - " + CTS.ChatHeight + "% - 119px)!important;" : "bottom:0;;min-height:calc(100% - 120px)!important;max-height: calc(100% - 120px)!important;");
1276 TitleElement.querySelector("#room-header").style.cssText = (!CTS.ChatDisplay) ? "display:none" : "min-width:400px;width:calc(400px + " + CTS.ChatWidth + "%);max-width:calc(400px + " + CTS.ChatWidth + "%)!important;top:" + ((CTS.UserListDisplay) ? "calc(" + CTS.ChatHeight + "% + 84px);" : "84px;");
1277 VideoListElement.querySelector("#videos-footer-broadcast-wrapper").style.cssText = (!CTS.ChatDisplay) ? "bottom:0;top:unset;width:100%;position:relative;" : "bottom:unset;min-width:400px;width:calc(400px + " + CTS.ChatWidth + "%);max-width:calc(400px + " + CTS.ChatWidth + "%);top:" + ((CTS.UserListDisplay) ? "calc(" + CTS.ChatHeight + "% + 34px);" : "34px;bottom:unset;");
1278 VideoListElement.querySelector("#videos-header").style.cssText = (!CTS.ChatDisplay) ? "display:none" : ((CTS.UserListDisplay) ? "bottom:unset;top:" + CTS.ChatHeight + "%;" : "bottom:unset;top: 0;right: 54px;");
1279 SideMenuElement.querySelector("#sidemenu").style.cssText = (!CTS.ChatDisplay || !CTS.UserListDisplay) ? "display:none" : "min-width:400px;width:calc(400px + " + CTS.ChatWidth + "%);max-width:calc(400px + " + CTS.ChatWidth + "%)!important;height:" + CTS.ChatHeight + "%!important;";
1280 UserListElement.querySelector("#button-banlist").style.cssText = (!CTS.ChatDisplay) ? "display:none" : "top:calc(" + CTS.ChatHeight + "% + 89px);";
1281 document.querySelector("#content").style.cssText = "width:calc(100% " + ((CTS.ChatDisplay) ? "- (400px + " + CTS.ChatWidth + "%)" : "") + ")";
1282 VideoListElement.querySelector("#videos-footer").style.cssText = "display:block;top:" + ((CTS.UserListDisplay) ? "calc(" + CTS.ChatHeight + "% + 119px);" : "119px;") + "right:-70px;display:block;";
1283 CTS.PerformanceMode = false;
1284 PerformanceModeInit(CTS.PerformanceMode);
1285 UpdateScroll(1, true);
1286 UpdateScroll(2, true);
1287 Resize();
1288 }
1289
1290 function ChatHide() {
1291 CTS.NormalStyle.ChatHide = !CTS.NormalStyle.ChatHide;
1292 ChatLogElement.querySelector("#chat-wrapper").style.display = (CTS.NormalStyle.ChatHide ? "none" : "block");
1293 UpdateScroll(1, true);
1294 UpdateScroll(2, true);
1295 Resize();
1296 }
1297
1298 function SoundMeter() {
1299 //MICROPHONE INDICATOR
1300 setTimeout(function() {
1301 var Camera = VideoListElement.querySelectorAll(".videos-items tc-video-item"),
1302 Featured = VideoListElement.querySelectorAll(".videos-items:first-child tc-video-item"),
1303 TCCameraList = window.TinychatApp.getInstance().defaultChatroom._videolist.items.length,
1304 CameraLen = Camera.length,
1305 users;
1306 if (Featured.length > 0) {
1307 for (var x = 0; x < TCCameraList; x++) {
1308 if (CameraLen < 1) break;
1309 for (users = 0; users < CameraLen; users++) {
1310 if (Camera[users].shadowRoot.querySelector(".video > div > video").getAttribute("data-video-id") == window.TinychatApp.getInstance().defaultChatroom._videolist.items[x].userentity.path) {
1311 Camera[users].shadowRoot.querySelector(".video > div > .overlay").setAttribute("data-mic-level", window.TinychatApp.getInstance().defaultChatroom._videolist.items[x].audiolevel);
1312 Camera[users].shadowRoot.querySelector(".video > div > svg").setAttribute("data-mic-level", 0);
1313 break;
1314 }
1315 }
1316 }
1317 } else {
1318 for (users = 0; users < CameraLen; users++) {
1319 Camera[users].shadowRoot.querySelector(".video > div > .overlay").setAttribute("data-mic-level", window.TinychatApp.getInstance().defaultChatroom._videolist.items[users].audiolevel);
1320 Camera[users].shadowRoot.querySelector(".video > div > svg").setAttribute("data-mic-level", 0);
1321 }
1322 }
1323 //REPEAT
1324 SoundMeter();
1325 }, 200);
1326 }
1327
1328 function RTC() {
1329 if (null != arguments[0].rtc) {
1330 let a = arguments[0].rtc;
1331 arguments[0].rtc = null;
1332 MS(arguments[0], a);
1333 }
1334 }
1335
1336 function Vote() {
1337 var ChecksOut = CTS.VoteSystem,
1338 len = CTS.WaitToVoteList.length;
1339 if (len > 0 && ChecksOut) {
1340 for (var i = 0; i < len; i++) {
1341 if (CTS.WaitToVoteList[i][0] === CTS.UserList[arguments[0]].username.toUpperCase()) {
1342 Send("msg", "Please wait several minutes till you can cast your vote again!");
1343 ChecksOut = false;
1344 break;
1345 }
1346 }
1347 }
1348 if (ChecksOut) {
1349 if (isSafeListed(CTS.UserList[arguments[0]].username.toUpperCase())) {
1350 var targetname = arguments[1].match(/\!vote\s(guest-[0-9]{1,26}|[a-z0-9_]{1,32})$/i);
1351 if (targetname !== null) {
1352 var Target = UsernameToUser(targetname[1].toUpperCase());
1353 if (Target !== -1) {
1354 if (CTS.UserList[Target].broadcasting) {
1355 if (CTS.Me.owner || !CTS.UserList[Target].mod) {
1356 Send("msg", "Your vote has been cast, you may vote again shortly!");
1357 CTS.WaitToVoteList.push([CTS.UserList[arguments[0]].username.toUpperCase(), new Date()]);
1358 CTS.UserList[Target].vote += 1;
1359 if (CTS.UserList[Target].vote === 3) {
1360 CTS.UserList[Target].vote = 0;
1361 Send("msg", CTS.UserList[Target].nick + "!\nYou've been voted off camera!");
1362 Send("stream_moder_close", CTS.UserList[Target].handle);
1363 }
1364 } else {
1365 Send("msg", "I cannot do that!");
1366 }
1367 }
1368 } else {
1369 Send("msg", "The user is not broadcasting...");
1370 }
1371 } else {
1372 Send("msg", "The nickname or username does not exist!");
1373 }
1374 }
1375 }
1376 }
1377
1378 function MessagePopUp() {
1379 if (CTS.Popups) {
1380 var push = false;
1381 if (arguments[0] != -1) {
1382 if (ChatListElement.querySelector(".list-item .active")) {
1383 if (ChatListElement.querySelector(".active").innerHTML.includes(CTS.UserList[arguments[0]].nick) && !ChatListElement.querySelector(".active").innerHTML.includes("(offline)")) {
1384 if (arguments[2]) push = true;
1385 } else {
1386 push = true;
1387 }
1388 } else if (!arguments[2]) {
1389 push = true;
1390 }
1391 }
1392 if (arguments[3]) push = true;
1393 if (push || !CTS.ChatDisplay) {
1394 if (VideoListElement.querySelector(".PMOverlay .PMPopup:nth-child(5)")) {
1395 Remove(VideoListElement, ".PMOverlay .PMPopup:first-child");
1396 clearTimeout(CTS.NotificationTimeOut[0]);
1397 CTS.NotificationTimeOut.shift();
1398 }
1399 VideoListElement.querySelector(".PMOverlay").insertAdjacentHTML("beforeend", "<div class=\"PMPopup\"><h2><div class=\"PMTime\">" + Time() + "</div><div class=\"PMName\">" + ((arguments[3]) ? "YouTube" : (CTS.UserList[arguments[0]].nick + " in " + ((arguments[2]) ? "Main" : "PM"))) + "</div></h2><div class=\"PMContent\"style=\"font-size:" + CTS.FontSize + "px\">" + arguments[1] + "</div></div>");
1400 CTS.NotificationTimeOut.push(setTimeout(function() {
1401 if (VideoListElement.querySelector(".PMOverlay .PMPopup")) {
1402 Remove(VideoListElement, ".PMOverlay .PMPopup:first-child");
1403 CTS.NotificationTimeOut.shift();
1404 }
1405 }, 11100));
1406 }
1407 }
1408 }
1409
1410 function Reminder() {
1411 var temp,
1412 i,
1413 len = CTS.ReminderServerInList.length;
1414 for (i = 0; i < len; i++) clearTimeout(CTS.ReminderServerInList[i]);
1415 CTS.ReminderServerInList = [];
1416 if (CTS.Reminder === true) {
1417 var OffsetTime;
1418 len = CTS.ReminderList.length;
1419 for (i = 0; i < len; i++) {
1420 temp = TimeToDate(CTS.ReminderList[i][0]);
1421 CTS.RecentTime = new Date();
1422 if (temp < CTS.RecentTime) temp.setDate(temp.getDate() + 1);
1423 OffsetTime = temp - CTS.RecentTime;
1424 CTS.ReminderServerInList.push(setTimeout(AddReminder, OffsetTime, CTS.ReminderList[i][1]));
1425 }
1426 if (Addon.active("ReminderList")) {
1427 len = Addon.get("ReminderList").length;
1428 for (i = 0; i < len; i++) {
1429 temp = TimeToDate(Addon.get("ReminderList")[i][0]);
1430 CTS.RecentTime = new Date();
1431 if (temp < CTS.RecentTime) temp.setDate(temp.getDate() + 1);
1432 OffsetTime = temp - CTS.RecentTime;
1433 CTS.ReminderServerInList.push(setTimeout(AddReminder, OffsetTime, Addon.get("ReminderList")[i][1]));
1434 }
1435 }
1436 }
1437 }
1438
1439 function AddReminder() {
1440 Send("msg", "? " + arguments[0]);
1441 setTimeout(Reminder, 5000);
1442 }
1443
1444 function NotificationDisplay() {
1445 ChatLogElement.querySelector("#notification-content").style.cssText = "display:" + ((CTS.NotificationToggle == 0) ? "block" : "none") + ";";
1446 ChatLogElement.querySelector(".notifbtn").style.cssText = "display:" + ((CTS.NotificationToggle == 0) ? "block" : "none") + ";";
1447 if (CTS.NotificationToggle == 0) {
1448 ChatLogElement.querySelector(".notifbtn").addEventListener("click", NotificationResize, {
1449 passive: true
1450 });
1451 } else {
1452 ChatLogElement.querySelector(".notifbtn").removeEventListener("click", NotificationResize, {
1453 passive: true
1454 });
1455 }
1456 UpdateScroll(1, true);
1457 UpdateScroll(2, true);
1458 }
1459
1460 function NotificationResize() {
1461 ChatLogElement.querySelector("#notification-content").classList.toggle("large");
1462 if (ChatLogElement.querySelector(".notifbtn").innerText === "▼") {
1463 ChatLogElement.querySelector(".notifbtn").innerText = "▲";
1464 ChatLogElement.querySelector("#chat").style.height = "50%%";
1465 } else {
1466 ChatLogElement.querySelector(".notifbtn").innerText = "▼";
1467 ChatLogElement.querySelector("#chat").style.height = "100%";
1468 }
1469 UpdateScroll(1, false);
1470 UpdateScroll(2, true);
1471 }
1472
1473 function Dice() {
1474 return String.fromCharCode("0x268" + Rand(0, 5));
1475 }
1476
1477 function Rand() {
1478 arguments[0] = Math.ceil(arguments[0]);
1479 arguments[1] = Math.floor(arguments[1]);
1480 return Math.floor(Math.random() * (arguments[1] - arguments[0] + 1)) + arguments[0];
1481 }
1482
1483 function OpenMicrophone() {
1484 MicrophoneElement.initMouseEvent("mousedown");
1485 VideoListElement.querySelector("#videos-footer-push-to-talk").dispatchEvent(MicrophoneElement);
1486 }
1487
1488 function Cameras() {
1489 var Camera = VideoListElement.querySelectorAll(".videos-items tc-video-item"),
1490 Len = Camera.length;
1491 for (var user = 0; user < Len; user++) {
1492 var isIgnored = User(Camera[user].shadowRoot.querySelector(".video > div > video").getAttribute("data-video-id"));
1493 if (CheckUserIgnore(isIgnored) || CheckUserTempIgnore(isIgnored) && !Camera[user].shadowRoot.querySelector(".not-visible")) Camera[user].shadowRoot.querySelector("button[class=\"icon-visibility\"]").click();
1494 Camera[user].shadowRoot.querySelector(".video").style.padding = (CTS.CameraBorderToggle) ? "5px" : "0";
1495 if (!Camera[user].shadowRoot.querySelector(".video #fixed")) Camera[user].shadowRoot.querySelector(".video").insertAdjacentHTML("afterbegin", "<style id=\"fixed\">@media screen and (max-width: 1827px){.video.large{width:100%!important;}}.video.large{position: absolute;left:0;top: 0;z-index: 2;max-width: 1827px;}.video>div>.overlay[data-mic-level=\"1\"] {-webkit-box-shadow: inset 0 0 2px 3px #53b6ef;box-shadow: inset 0 0 2px 3px #53b6ef;}.video>div>.overlay[data-mic-level=\"2\"] {-webkit-box-shadow: inset 0 0 4px 3px #53b6ef;box-shadow: inset 0 0 4px 3px #53b6ef;}.video>div>.overlay[data-mic-level=\"3\"],.video>div>.overlay[data-mic-level=\"4\"], .video>div>.overlay[data-mic-level=\"5\"], .video>div>.overlay[data-mic-level=\"6\"], .video>div>.overlay[data-mic-level=\"7\"], .video>div>.overlay[data-mic-level=\"8\"], .video>div>.overlay[data-mic-level=\"9\"], .video>div>.overlay[data-mic-level=\"10\"] {-webkit-box-shadow: inset 0 0 6px 3px #53b6ef;box-shadow: inset 0 0 6px 3px #53b6ef;}.video:after{content:unset;}</style>");
1496 }
1497 Resize();
1498 }
1499
1500 function FeaturedCameras() {
1501 if (arguments[0] === true) {
1502 if (VideoListElement.querySelector("#SmallFTYT")) {
1503 Remove(VideoListElement, "#SmallFTYT");
1504 }
1505 } else {
1506 var node = document.createElement("style");
1507 node.appendChild(document.createTextNode(FeaturedCSS));
1508 node.setAttribute("id", "SmallFTYT");
1509 VideoListElement.appendChild(node);
1510 }
1511 }
1512
1513 function Resize() {
1514 window.dispatchEvent(new Event("resize"));
1515 }
1516
1517 function PerformanceModeInit() {
1518 if (!CTS.ThemeChange) {
1519 var value = ((arguments[0]) ? "100%" : "calc(400px + " + CTS.ChatWidth + "%)");
1520 ChatLogElement.querySelector("#chat-wrapper").style.minWidth = value;
1521 ChatLogElement.querySelector("#chat-wrapper").style.maxWidth = value;
1522 ChatLogElement.querySelector("#chat-wrapper").style.width = value;
1523 TitleElement.querySelector("#room-header").style.minWidth = value;
1524 TitleElement.querySelector("#room-header").style.maxWidth = value;
1525 TitleElement.querySelector("#room-header").style.width = value;
1526 VideoListElement.querySelector("#videos-footer-broadcast-wrapper").style.minWidth = ((!CTS.ChatDisplay) ? "100%" : value);
1527 VideoListElement.querySelector("#videos-footer-broadcast-wrapper").style.maxWidth = ((!CTS.ChatDisplay) ? "100%" : value);
1528 VideoListElement.querySelector("#videos-footer-broadcast-wrapper").style.width = ((!CTS.ChatDisplay) ? "100%" : value);
1529 VideoListElement.querySelector("#videos-header").style.minWidth = ((!CTS.UserListDisplay) ? "calc(" + value + " - 54px)" : value);
1530 VideoListElement.querySelector("#videos-header").style.maxWidth = ((!CTS.UserListDisplay) ? "calc(" + value + " - 54px)" : value);
1531 VideoListElement.querySelector("#videos-header").style.width = ((!CTS.UserListDisplay) ? "calc(" + value + " - 54px)" : value);
1532 SideMenuElement.querySelector("#sidemenu").style.minWidth = value;
1533 SideMenuElement.querySelector("#sidemenu").style.maxWidth = value;
1534 SideMenuElement.querySelector("#sidemenu").style.width = value;
1535 document.querySelector("#content").style.width = ((!arguments[0]) ? "calc(100% " + (CTS.ChatDisplay ? "- (400px + " + CTS.ChatWidth + "%)" : "") + ")" : "0%");
1536 VideoListElement.querySelector("#videos").style.display = ((!arguments[0]) ? "block!important" : "none!important");
1537
1538 } else {
1539 if (arguments[0]) {
1540 VideoListElement.querySelector("#videos-content").style.display = "none";
1541 ChatLogElement.querySelector("#chat-wrapper").style.width ="100%";
1542 ChatLogElement.querySelector("#chat-wrapper").style.position = "fixed";
1543 ChatLogElement.querySelector("#chat-wrapper").style.left = "0";
1544 ChatLogElement.querySelector("#chat-wrapper").style.bottom = "0";
1545 ChatLogElement.querySelector("#chat-wrapper").style.minHeight = "100%";
1546 VideoListElement.querySelector("#videos-footer-broadcast-wrapper").style.display = "none";
1547 VideoListElement.querySelector("#videos-header").style.display = "none";
1548 VideoListElement.querySelector("#videos-footer").style.display = "none";
1549 } else {
1550 VideoListElement.querySelector("#videos-content").style.removeProperty("display");
1551 ChatLogElement.querySelector("#chat-wrapper").style.removeProperty("width");
1552 ChatLogElement.querySelector("#chat-wrapper").style.removeProperty("position");
1553 ChatLogElement.querySelector("#chat-wrapper").style.removeProperty("left");
1554 ChatLogElement.querySelector("#chat-wrapper").style.removeProperty("bottom");
1555 ChatLogElement.querySelector("#chat-wrapper").style.removeProperty("min-height");
1556 VideoListElement.querySelector("#videos-footer-broadcast-wrapper").style.removeProperty("display");
1557 VideoListElement.querySelector("#videos-header").style.removeProperty("display");
1558 VideoListElement.querySelector("#videos-footer").style.removeProperty("display");
1559 }
1560 }
1561 UpdateScroll(1, true);
1562 UpdateScroll(2, true);
1563 Resize();
1564 }
1565
1566 function OwnerCommand() {
1567 //MESSAGE FROM OWNER
1568 if (isCommand(arguments[1])) {
1569 if (CTS.UserList[arguments[0]].owner) {
1570 if (arguments[1].match(/^!closeall$/i)) {
1571 for (var a = 0; a < CTS.Camera.List.length; a++) {
1572 if (CTS.Me.handle !== CTS.Camera.List[a]) Send("stream_moder_close", CTS.Camera.List[a]);
1573 }
1574 }
1575 if (arguments[1].match(/^!kickall$/i)) {
1576 for (var b = 0; b < CTS.UserList.length; b++) {
1577 if (CTS.Me.handle !== CTS.UserList[b].handle) Send("kick", CTS.UserList[b].handle);
1578 }
1579 }
1580 }
1581 }
1582 }
1583
1584 function Command() {
1585 var UserCommand = arguments[0].match(/^!([a-z0-9]*)(?:\s?)(.*)/i);
1586 if (UserCommand) {
1587 if (typeof CommandList[UserCommand[1].toLowerCase()] == "function") {
1588 debug("COMMAND::" + ((arguments[1]) ? "PM" : "MAIN"), UserCommand[1] + ":" + UserCommand[2]);
1589 CommandList[UserCommand[1].toLowerCase()](UserCommand[2], arguments[1]);
1590 }
1591 }
1592 }
1593 //ALERT FUNCTIONS
1594 function Settings() {
1595 Alert(GetActiveChat(), ((arguments[0] !== undefined) ? arguments[0] : "") + "<center>CTS BOT CONFIGURATION:\nBot Mode: " + ((CTS.Bot) ? "ON" : "OFF") + "\nOperator Mode: " + ((CTS.UserYT) ? "ON" : "OFF") + "\nPublic Command Mode: " + ((CTS.PublicCommandToggle) ? "ON" : "OFF") + "\nGreen Room Mode:\n" + ((CTS.GreenRoomToggle) ? "AUTO ALLOW" : "MANUAL") + "\nReminder Mode: " + ((CTS.Reminder) ? "ON" : "OFF") + "\nGame View: " + ((CTS.CanSeeGames) ? "ON" : "OFF") + "\nGame Host: " + ((CTS.CanHostGames) ? "ON" : "OFF") + "\n\nAvatar Display: " + ((CTS.Avatar) ? "SHOW" : "HIDE") + "\nNotification Display: " + ((CTS.NotificationToggle != 2) ? "SHOW("+CTS.NotificationToggle+")" : "HIDE") + "\nPopup Display: " + ((CTS.Popups) ? "SHOW" : "HIDE") + "\nFont Size: " + CTS.FontSize + "PX\n\nFOR LIST OF COMMANDS:\n!CTS</center>");
1596 }
1597
1598 function Alert() {
1599 CTS.Message[arguments[0]].push({
1600 "time": Time(),
1601 "namecolor": (arguments[2] !== undefined) ? "#000000" : "#3f69c0",
1602 "avatar": (arguments[2] !== undefined) ? ("") : ("https://i.imgur.com/S09irS7.png"),
1603 "username": "",
1604 "nick": (arguments[2] !== undefined) ? (arguments[2]) : ("CTS Version: " + Ver()),
1605 "msg": ((arguments[2] !== undefined) ? ("<div id=\"system_user\">" + arguments[1] + "</div>") : arguments[1]),
1606 "mention": ((arguments[2] !== undefined) ? false : true)
1607 });
1608 var len = CTS.Message[arguments[0]].length - 1;
1609 arguments[1] = CTS.Message[arguments[0]][len];
1610 CreateMessage(arguments[1].time, arguments[1].namecolor, arguments[1].avatar, arguments[1].username, arguments[1].nick, arguments[1].msg, arguments[1].mention, arguments[0]);
1611 }
1612
1613 function Ver() {
1614 return window.CTSVersion.Major + "." + window.CTSVersion.Minor + "." + window.CTSVersion.Patch;
1615 }
1616
1617 function AddUserNotification() {
1618 if (CTS.FullLoad && CTS.ShowedSettings) {
1619 var chat = ChatLogElement.querySelector("#notification-content"),
1620 Notification;
1621 CTS.NotificationScroll = (Math.floor(chat.scrollTop) + 5 >= (chat.scrollHeight - chat.offsetHeight)) ? true : false;
1622 if (arguments[0] == 1) {
1623 Notification = arguments[3] + ((arguments[4]) ? " is " : " has stopped ") + "broadcasting!";
1624 } else if (arguments[0] == 2) {
1625 Notification = arguments[3] + " has " + ((!arguments[4]) ? "joined!" : "left");
1626 } else if (arguments[0] == 3) {
1627 Notification = arguments[2] + "has mentioned you!";
1628 if (CTS.NotificationToggle == 0) ChatLogElement.querySelector("#notification-content").insertAdjacentHTML("beforeend", "<div class=\"list-item\"><div class=\"notification\"><span style=\"background:" + arguments[1] + "\" class=\"nickname\">" + arguments[2] + "</span>"+((CTS.TimeStampToggle)?"<span class=\"time\"> " + Time() + " </span>":"")+"<br/> has mentioned you.</div></div>");
1629 UpdateScroll(2, true);
1630 } else if (arguments[0] == 4) {
1631 Notification = "with the account name " + arguments[3] + " changed their name to " + arguments[5];
1632 }
1633 if (arguments[0] != 3 && CTS.NotificationToggle == 0) ChatLogElement.querySelector("#notification-content").insertAdjacentHTML("beforeend", "<div class=\"list-item\"><div class=\"notification\"><span class=\"nickname\" style=\"background:" + arguments[1] + ";\">" + arguments[2] + "</span>"+((CTS.TimeStampToggle)?"<span class=\"time\"> " + Time() + " </span>":"")+"<br/>" + Notification + "</div></div>");
1634 if (CTS.NotificationToggle == 1) Alert(0, Notification, arguments[2]);
1635 if (CTS.TTS.synth !== undefined && (CTS.TTSList.includes(arguments[2].toUpperCase()) || CTS.TTSList.includes(arguments[3]) || CTS.TTSList.includes("-ALL") || CTS.TTSList.includes("-EVENT"))) TTS(arguments[2] + ((arguments[0] == 4) ? " " : "as ") + Notification);
1636 UpdateScroll(2, false);
1637 var Notifications = ChatLogElement.querySelectorAll(".notification");
1638 if (Notifications.length > CTS.NotificationLimit + 25) {
1639 for (var NotificationIndex = 0; NotificationIndex < Notifications.length - CTS.NotificationLimit; NotificationIndex++) Notifications[NotificationIndex].parentNode.removeChild(Notifications[NotificationIndex]);
1640 }
1641 }
1642 }
1643
1644 function AddSystemNotification() {
1645 if (CTS.FullLoad && CTS.ShowedSettings) {
1646 if (CTS.NotificationToggle == 0) {
1647 ChatLogElement.querySelector("#notification-content").insertAdjacentHTML("beforeend", "<div class=\"list-item\"><span class=\"nickname\"style=\"background:#F00\">SYSTEM</span>"+((CTS.TimeStampToggle)?"<span class=\"time\"> " + Time() + " </span>":"")+"<br/>" + arguments[0] + "</div>");
1648 } else if (CTS.NotificationToggle == 1) {
1649 Alert(0, arguments[0], "SYSTEM");
1650 }
1651 if (CTS.TTS.synth !== undefined && (CTS.TTSList.includes("-ALL") || CTS.TTSList.includes("-EVENT"))) TTS(arguments[0]);
1652 UpdateScroll(2, false);
1653 }
1654 }
1655 //USER FUNCTION
1656 function AddUser() {
1657 CTS.UserList.push({
1658 "handle": arguments[0],
1659 "username": arguments[5],
1660 "nick": arguments[4],
1661 "owner": arguments[7],
1662 "mod": arguments[1],
1663 "namecolor": arguments[2],
1664 "avatar": arguments[3],
1665 "canGame": arguments[6],
1666 "broadcasting": false,
1667 "vote": 0
1668 });
1669 if (CTS.ScriptInit) AddUserNotification(2, arguments[2], arguments[4], arguments[5], false);
1670 }
1671
1672 function User() {
1673 for (var user = 0; user < CTS.UserList.length; user++) {
1674 if (CTS.UserList[user].handle == arguments[0]) return user;
1675 }
1676 return -1;
1677 }
1678
1679 function UsernameToHandle() {
1680 for (var user = 0; user < CTS.UserList.length; user++) {
1681 if (CTS.UserList[user].username.toUpperCase() == arguments[0] || CTS.UserList[user].nick.toUpperCase() == arguments[0]) return CTS.UserList[user].handle;
1682 }
1683 return -1;
1684 }
1685
1686 function UsernameToUser() {
1687 for (var user = 0; user < CTS.UserList.length; user++) {
1688 if (CTS.UserList[user].username.toUpperCase() == arguments[0] || CTS.UserList[user].nick.toUpperCase() == arguments[0]) return user;
1689 }
1690 return -1;
1691 }
1692
1693 function NicknameToAccount() {
1694 for (var user = 0; user < CTS.UserList.length; user++) {
1695 if (CTS.UserList[user].nick.toUpperCase() == arguments[0]) return user;
1696 }
1697 return -1;
1698 }
1699
1700 function CheckUserListSafe() {
1701 var len = CTS.UserList.length;
1702 var temp = [];
1703 if (Addon.active("AKB")) temp = Addon.get("AKB");
1704 for (var user = 0; user < len; user++) {
1705 if (!CTS.UserList[user].mod && !isSafeListed(CTS.UserList[user].username)) {
1706 CTS.KBQueue.push(CTS.UserList[user].handle);
1707 }
1708 }
1709 len = CTS.KBQueue.length;
1710 for (var kb = 0; kb < len; kb++) {
1711 Send(arguments[0], CTS.KBQueue[kb]);
1712 }
1713 CTS.KBQueue = [];
1714 }
1715
1716 function isSafeListed() {
1717 var temp = [];
1718 if (Addon.active("AKB")) temp = Addon.get("AKB");
1719 return (CTS.SafeList.includes(arguments[0]) || temp.includes(arguments[0]));
1720 }
1721
1722 function CheckUserTempIgnore() {
1723 if (CTS.TempIgnoreList.includes(CTS.UserList[arguments[0]].username) || CTS.TempIgnoreList.includes(CTS.UserList[arguments[0]].nick.toUpperCase())) return true;
1724 return false;
1725 }
1726
1727 function CheckUserIgnore() {
1728 if (CTS.IgnoreList.includes(CTS.UserList[arguments[0]].username) || CTS.IgnoreList.includes(CTS.UserList[arguments[0]].nick.toUpperCase())) return true;
1729 return false;
1730 }
1731
1732 function CheckUserTouchScreen() {
1733 if (/Mobi|Android/i.test(navigator.userAgent) || 'ontouchstart' in document.documentElement) {
1734 CTS.Project.isTouchScreen = true;
1735 CTS.ThemeChange = true;
1736 }
1737 }
1738
1739 function CheckUserAbuse() {
1740 var action = false;
1741 if (CTS.Me.mod) {
1742 if ((CTS.KickList.includes(arguments[1]) || CTS.KickList.includes(arguments[2]))) {
1743 CTS.NoGreet = true;
1744 Send("kick", arguments[0]);
1745 action = true;
1746 }
1747 if (!action) {
1748 if ((CTS.BanList.includes(arguments[1]) || CTS.BanList.includes(arguments[2]))) {
1749 CTS.NoGreet = true;
1750 Send("ban", arguments[0]);
1751 }
1752 }
1753 }
1754 }
1755
1756 function CheckUserWordAbuse() {
1757 if (CTS.UserList[arguments[0]].handle != CTS.Me.handle && !CTS.UserList[arguments[0]].mod) {
1758 var action = false; //LETS NOT REPEAT/KICK
1759 var len = CTS.KickKeywordList.length;
1760 for (var i = 0; i < len; i++) {
1761 if (arguments[1].includes(CTS.KickKeywordList[i])) {
1762 Send("kick", CTS.UserList[arguments[0]].handle);
1763 action = true;
1764 break;
1765 }
1766 }
1767 if (!action) {
1768 len = CTS.BanKeywordList.length;
1769 for (i = 0; i < len; i++) {
1770 if (arguments[1].includes(CTS.BanKeywordList[i])) {
1771 Send("ban", CTS.UserList[arguments[0]].handle);
1772 break;
1773 }
1774 }
1775 }
1776 }
1777 }
1778
1779 function RemoveUserCamera() {
1780 var len = CTS.Camera.List.length;
1781 if (len > 0) {
1782 for (var i = 0; i < len; i++) {
1783 if (CTS.Camera.List[i] === arguments[0]) {
1784 CTS.Camera.List.splice(i, 1);
1785 clearTimeout(CTS.Camera.clearRandom);
1786 break;
1787 }
1788 }
1789 }
1790 }
1791
1792 function CheckUserStream() {
1793 if (CTS.Me.mod) {
1794 var user = User(arguments[0]);
1795 if (user != -1) {
1796 if (arguments[1]) {
1797 //PUSH UPDATE
1798 CTS.Camera.List.push(CTS.UserList[user].handle);
1799 CTS.UserList[user].broadcasting = true;
1800 var len = CTS.Camera.List.length;
1801 if (CTS.UserList[user].username !== "GUEST" && !CTS.GreenRoomList.includes(CTS.UserList[user].username)) {
1802 CTS.GreenRoomList.push(CTS.UserList[user].username);
1803 Save("GreenRoomList", JSON.stringify(CTS.GreenRoomList));
1804 }
1805 //CLEAR TIMERS
1806 clearTimeout(CTS.Camera.clearRandom);
1807 //CAMERA SWEEP FUNCTION
1808 if (len >= 12 && CTS.Me.handle === CTS.Host && CTS.Camera.Sweep) {
1809 CTS.Camera.clearRandom = setTimeout(function() {
1810 var rand = Rand(0, len - 1);
1811 if (CTS.Camera.List[rand] !== CTS.Me.handle && CTS.Camera.Sweep) {
1812 var target = User(CTS.Camera.List[rand]);
1813 if (CTS.Me.owner || !CTS.UserList[target].mod) {
1814 Send("msg", "[Camera Clear]\n" + CTS.UserList[target].nick + "!\nYou've been randomly selected. You win, a cam close!");
1815 Send("stream_moder_close", CTS.Camera.List[rand]);
1816 CTS.Camera.List.splice(rand, 1);
1817 }
1818 }
1819 }, CTS.Camera.SweepTimer * 60000);
1820 }
1821 } else {
1822 clearTimeout(CTS.Camera.clearRandom);
1823 RemoveUserCamera(CTS.UserList[user].handle);
1824 CTS.UserList[user].broadcasting = false;
1825 }
1826 CTS.UserList[user].broadcasting = arguments[1];
1827 if (CTS.ScriptInit) AddUserNotification(1, CTS.UserList[user].namecolor, CTS.UserList[user].nick, CTS.UserList[user].username, arguments[1]);
1828 }
1829 }
1830 }
1831
1832 function CheckUserName() {
1833 return arguments[0].match(/^(-all|[a-z0-9_]{1,32})$/i);
1834 }
1835
1836 function CheckUserNameStrict() {
1837 return arguments[0].match(/^([a-z0-9_]{1,32})$/i);
1838 }
1839
1840 function MSR() {
1841 if (arguments[0]) {
1842 arguments[1].videolist.RemoveVideoRemote(arguments[1].handle);
1843 } else {
1844 arguments[1].mediaStream.stop();
1845 arguments[1].mediaStream = null;
1846 }
1847 }
1848
1849 function MS() {
1850 if (arguments[0].mediaStream !== null) {
1851 if (arguments[0].mediaStream.active && arguments[1].signalingState !== "closed" && typeof arguments[1].removeStream === "function" && arguments[1].removeStream(arguments[0].mediaStream)) MSR(false, arguments[0]);
1852 } else {
1853 MSR(true, arguments[0]);
1854 }
1855 if (arguments[1].signalingState !== "closed" && arguments[1].close());
1856 }
1857 //LOAD/SAVE FUNCTION
1858 function Load() {
1859 var val = localStorage.getItem(CTS.Project.Storage + arguments[0]);
1860 if (null === val && "undefined" != typeof arguments[1]) {
1861 Save(arguments[0], arguments[1]);
1862 return arguments[1];
1863 }
1864 return val;
1865 }
1866
1867 function Save() {
1868 localStorage.setItem(CTS.Project.Storage + arguments[0], arguments[1]);
1869 }
1870 //SOCKET FUNCTION
1871 function CTSWebSocket() {
1872 if (window.Proxy === undefined) return;
1873 var handler = {
1874 set: function(Target, prop, value) {
1875 if (prop == "onmessage") {
1876 var oldMessage = value;
1877 value = function(event) {
1878 ServerMsg(JSON.parse(event.data), Target);
1879 oldMessage(event);
1880 };
1881 }
1882 return (Target[prop] = value);
1883 },
1884 get: function(Target, prop) {
1885 var value = Target[prop];
1886 if (prop == "send") {
1887 value = function(event) {
1888 ClientMsg(JSON.parse(event), Target);
1889 Target.send(event);
1890 };
1891 } else if (typeof value == 'function') {
1892 value = value.bind(Target);
1893 }
1894 return value;
1895 }
1896 };
1897 var WebSocketProxy = new window.Proxy(window.WebSocket, {
1898 construct: function(Target, args) {
1899 CTS.SocketTarget = new Target(args[0]);
1900 debug("SOCKET::CONNECTING", args[0]);
1901 return new window.Proxy(CTS.SocketTarget, handler);
1902 }
1903 });
1904 window.WebSocket = WebSocketProxy;
1905 }
1906
1907 function ModCommand() {
1908 var name = arguments[1].match(/\!(?:kick|ban|close)\s(guest-[0-9]{1,26}|[a-z0-9_]{1,32})$/i);
1909 if (name !== null) {
1910 var target = UsernameToUser(name[1].toUpperCase());
1911 if (target != -1) { // USER ONLINE
1912 if (CTS.UserList[target].handle !== CTS.Me.handle && !CTS.BotModList.includes(CTS.UserList[target].username) && !CTS.UserList[target].mod) {
1913 //IF USER IS NOT HOST/MODERATOR/JR.MODERATOR
1914 if (arguments[0] === "stream_moder_close") {
1915 if (CTS.UserList[target].broadcasting) Send(arguments[0], CTS.UserList[target].handle);
1916 } else {
1917 Send(arguments[0], CTS.UserList[target].handle);
1918 }
1919 } else {
1920 Send("msg", "This users authorization is similar or above yours!");
1921 }
1922 }
1923 }
1924 }
1925
1926 function BotCommand() {
1927 var len = CTS.YouTube.MessageQueueList.length;
1928 if (len <= 0) {
1929 // Moderator Control
1930 if (CTS.UserList[arguments[1]].mod) {
1931 if (arguments[0] == 2) {
1932 if (CTS.YouTube.CurrentTrack.ID !== undefined) {
1933 CTS.YouTube.Clear = true;
1934 YouTubePlayList();
1935 }
1936 }
1937 if (arguments[0] == 5) SetBot(true);
1938 }
1939 // User and Moderator Control
1940 if ((CTS.UserYT && CTS.SafeList.includes(CTS.UserList[arguments[1]].username) && (CTS.BotOPList.includes(CTS.UserList[arguments[1]].username) || CTS.BotOPList.includes("-ALL"))) || CTS.UserList[arguments[1]].mod || CTS.BotModList.includes(CTS.UserList[arguments[1]].username)) {
1941 if (arguments[0] == 1) CheckYouTube(arguments[2], true, undefined, CTS.UserList[arguments[1]].mod);
1942 if (arguments[0] == 4) YouTubePlayList(true);
1943 if (arguments[0] == 6) {
1944 if (CTS.UserList[arguments[1]].mod || CTS.BotModList.includes(CTS.UserList[arguments[1]].username)) {
1945 var videoid = arguments[2].match(/http(?:s)?(?:\:\/\/)(?:w{1,3}\.)?(?:youtu(?:\.be|be.com))(?:\/v\/|\/)?(?:watch\?|embed\/|user\/|v\/|\/)(?:v\=)?([a-z0-9\-\_]{1,11})/i);
1946 if (videoid !== null) {
1947 CTS.SocketTarget.send(JSON.stringify({
1948 "tc": "yut_play",
1949 "item": {
1950 "id": videoid[1],
1951 "duration": 7200,
1952 "offset": 0,
1953 "title": "YOUTUBE IS BYPASSED - MODS ONLY"
1954 }
1955 }));
1956 debug("YOUTUBE::LINK BYPASS", videoid[1]);
1957 }
1958 } else {
1959 Send("msg", "Ask a moderator to play your request.");
1960 }
1961 }
1962 if (arguments[0] == 3) {
1963 if (CTS.YouTube.CurrentTrack.ID !== undefined) {
1964 Send("yut_stop", [CTS.YouTube.CurrentTrack.ID, CTS.YouTube.CurrentTrack.duration, CTS.YouTube.CurrentTrack.title, CTS.YouTube.CurrentTrack.thumbnail, 0]);
1965 Send("msg", "?" + CTS.YouTube.CurrentTrack.title + " has been skipped!?");
1966 }
1967 }
1968 }
1969 } else {
1970 if (CTS.YouTube.ListBuilt === false) {
1971 Send("msg", "? Playlist search is happening, please wait! ?\n" + CTS.YouTube.MessageQueueList.length + " tracks found.");
1972 } else {
1973 Send("msg", "? Playlist items are being added,a please wait! ?\n" + CTS.YouTube.MessageQueueList.length + " tracks remaining.");
1974 }
1975 }
1976 }
1977
1978 function ServerMsg() {
1979 if (typeof ServerInList[arguments[0].tc] == "function") {
1980 debug(("SERVER::" + arguments[0].tc.toUpperCase()), arguments[0]);
1981 ServerInList[arguments[0].tc](arguments[0]);
1982 }
1983 }
1984
1985 function ClientMsg() {
1986 if (typeof ServerOutList[arguments[0].tc] == "function") {
1987 debug(("CLIENT::" + arguments[0].tc.toUpperCase()), arguments[0]);
1988 ServerOutList[arguments[0].tc](arguments[0]);
1989 }
1990 }
1991
1992 function Send() {
1993 ServerSendList[arguments[0]](arguments[0], arguments[1], arguments[2]);
1994 if (arguments[1] === undefined) arguments[1] = "Open Request";
1995 debug(("CLIENT::SEND::" + arguments[0].toUpperCase()), arguments[1]);
1996 }
1997 //GAME FUNCTION
1998 //FISHING BOAT
1999 function FishUpgradeStatus(playerExist, type) {
2000 var msg = "[FISHING BOAT]\n";
2001 if (type != 7) msg += playerExist.Nickname + ":\n";
2002 if (type == 0 || type == 1) msg += "[NET]Lv. " + playerExist.Upgrades.Net + "\n" + ((playerExist.Upgrades.Net >= 10) ? "[MAXED]" : "[COSTS $" + Fish.pricelist(playerExist, 0) + " to UPGRADE]\n\n");
2003 if (type == 0 || type == 2) msg += "[RADAR]Lv. " + playerExist.Upgrades.Radar + "\n" + ((playerExist.Upgrades.Radar >= 20) ? "[MAXED]" : "[COSTS $" + Fish.pricelist(playerExist, 1) + " to UPGRADE]") + "\n\n";
2004 if (type == 0 || type == 3) msg += "[INSURANCE]\n" + ((playerExist.Upgrades.Insurance) ? "[OWNED]" : "[COSTS $" + Fish.pricelist(playerExist, 3) + " per ROUND]") + "\n\n";
2005 if (type == 0 || type == 4) msg += "[SHOP]Lv. " + playerExist.Upgrades.Store + "\n" + ((playerExist.Upgrades.Store >= 6) ? "[MAXED]" : "[COSTS $" + Fish.pricelist(playerExist, 2) + " to UPGRADE]") + "\n\n";
2006 if (type == 6) msg += "HELP:\n!fish\n!fishbank\n!fishsplit user|nick\n!fishgamble\n[COSTS $" + Fish.pricelist(playerExist, 6) + "]\n!fishrob user|nick\n[COSTS $" + Fish.pricelist(playerExist, 4) + "]\n!fishslap user|nick\n[COSTS $" + Fish.pricelist(playerExist, 5) + "]\n!fishupgrade\n!fishupgrade\n[Net|Radar|Insurance|Shop]\n\n";
2007 Send("msg", msg);
2008 }
2009
2010 function FishTimerCheck(playerExist) {
2011 if (new Date() - playerExist.LastCheck >= 5000) {
2012 playerExist.LastCheck = new Date();
2013 return true;
2014 }
2015 return false;
2016 }
2017
2018 function FishCommandCheck() {
2019 var command,
2020 playerExist = Fish.getPlayer(CTS.UserList[arguments[0]].handle, false, true),
2021 FishCommand = arguments[1].match(/^\!(fish(?:rob|slap|split|help|upgrade)?)\s?(?:([a-z0-9_]*)|net|shop|radar|insurance)?$/i);
2022 if (FishCommand) {
2023 if (FishCommand[1] === "fishslap" || FishCommand[1] === "fishrob" || FishCommand[1] === "fishsplit") {
2024 if (FishCommand[2] !== undefined) {
2025 if (typeof FishList[FishCommand[1].toLowerCase()] == "function") FishList[FishCommand[1].toLowerCase()](playerExist, FishCommand[2]);
2026 }
2027 } else {
2028 command = ((FishCommand[2] !== undefined) ? FishCommand[1] + FishCommand[2] : FishCommand[1]);
2029 if (typeof FishList[command.toLowerCase()] == "function") FishList[command.toLowerCase()](playerExist, CTS.UserList[arguments[0]]);
2030 }
2031 }
2032 }
2033
2034 function FishTransfer(playerExist, target, cost, deduct, rob) {
2035 if (target !== undefined && target !== -1) {
2036 if (playerExist.Points > cost) {
2037 if (rob) {
2038 playerExist.Points -= cost;
2039 if (target.Points <= deduct) {
2040 deduct = target.Points;
2041 target.Points -= deduct;
2042 playerExist.Points += deduct;
2043 Send("msg", "[FISHING BOAT]\n" + playerExist.Nickname + " destroyed " + target.Nickname + "\nMoney made $" + deduct + "!");
2044 Fish.getPlayer(target.Handle, true);
2045 } else {
2046 target.Points -= deduct;
2047 playerExist.Points += deduct;
2048 Send("msg", "[FISHING BOAT]\n" + playerExist.Nickname + " robbed " + target.Nickname + " for $" + deduct + "!");
2049 }
2050 } else {
2051 playerExist.Points = deduct;
2052 target.Points += deduct;
2053 Send("msg", "[FISHING BOAT]\n" + playerExist.Nickname + " split their money with " + target.Nickname + "!");
2054 }
2055 } else {
2056 Send("msg", "[FISHING BOAT]\n" + playerExist.Nickname + " are you kidding me?\nTalk to me when you have money!");
2057 }
2058 }
2059 }
2060
2061 function FishTransaction(playerExist, cost, status) {
2062 if (playerExist.Points > cost) {
2063 playerExist.Points -= cost;
2064 return true;
2065 } else {
2066 Send("msg", "[FISHING BOAT]\n" + playerExist.Nickname + ", are you kidding me?\nTalk to me when you have money!");
2067 return false;
2068 }
2069 }
2070 //SERVER/CLIENT LIST FUNCTION
2071 var UnicodeConversionList = {
2072 convert: function() {
2073 return this.numerical(arguments[0]).replace(/[A-Za-z]/g, this.alphabet);
2074 },
2075 alphabet: function() {
2076 return String.fromCodePoint(arguments[0].codePointAt(0) + ((/[A-Z]/.test(arguments[0])) ? "?".codePointAt(0) - "A".codePointAt(0) : "?".codePointAt(0) - "a".codePointAt(0)));
2077 },
2078 numerical: function() {
2079 return arguments[0].replace(/\d/g, function(c) {
2080 return String.fromCodePoint(0x1D79E + c.charCodeAt(0));
2081 });
2082 }
2083 };
2084 var CommandList = {
2085 cts: function() {
2086 Alert(GetActiveChat(), "<b style=\"color:#ee3636;\">Owner Commands:</b>\n!raid <b style=\"color:#ffff00;\">tc link</b>\n!closeall\n!kickall\n!version\n\n<b style=\"color:#ee3636;\">Moderator Commands:</b>\n!whoisbot\n!bot\n!bottoggle\n!greenroomtoggle\n!publiccommandtoggle\n!camsweep\n!votetoggle\n!autokick (be careful!)\n!autoban (be careful!)\n\n!ytbypass <b style=\"color:#ffff00;\">link (no playlists)</b>\n!yt <b style=\"color:#ffff00;\">link | keyword</b>\n!ytclear\n\n!banlist\n!banlistclear\n!banadd <b style=\"color:#ffff00;\">user | nick</b>\n!banremove <b style=\"color:#ffff00;\">#</b>\n\n!bankeywordlist\n!bankeywordlistclear\n!bankeywordadd <b style=\"color:#ffff00;\">keyword | phrase</b>\n!bankeywordremove <b style=\"color:#ffff00;\">#</b>\n\n!kicklist\n!kicklistclear\n!kickadd <b style=\"color:#ffff00;\">user | nick</b>\n!kickremove <b style=\"color:#ffff00;\">#</b>\n\n!kickkeywordlist\n!kickkeywordlistclear\n!kickkeywordadd <b style=\"color:#ffff00;\">keyword | phrase</b>\n!kickkeywordremove <b style=\"color:#ffff00;\">#</b>\n\n!oplist\n!oplistclear\n!opadd <b style=\"color:#ffff00;\">user | -all</b>\n!opremove <b style=\"color:#ffff00;\">#</b>\n!optoggle\n\n<b style=\"color:#ee3636;\">Jr. Moderator Commands:</b>\n!ban <b style=\"color:#ffff00;\">user | nick</b>\n!kick <b style=\"color:#ffff00;\">user | nick</b>\n!close <b style=\"color:#ffff00;\">user | nick</b>\n\n<b style=\"color:#ee3636;\">User Commands:</b>\n!yt <b style=\"color:#ffff00;\">link | keyword</b>\n!ytskip\n!ytqueue\n\n!mentionlist\n!mentionlistclear\n!mentionadd <b style=\"color:#ffff00;\">keyword</b>\n!mentionremove <b style=\"color:#ffff00;\">#</b>\n\n!ignorelist\n!ignorelistclear\n!ignoreadd <b style=\"color:#ffff00;\">user | nick</b>\n!ignoreremove <b style=\"color:#ffff00;\">#</b>\n\n!greetlist\n!greetlistclear\n!greetadd <b style=\"color:#ffff00;\">user | nick | -all</b>\n!greetremove <b style=\"color:#ffff00;\">#</b>\n\n!ttslist\n!ttslistclear\n!ttsadd <b style=\"color:#ffff00;\">user | nick | -all | -event</b>\n!ttsremove <b style=\"color:#ffff00;\">#</b>\n\n!highlightlist\n!highlightlistclear\n!highlightadd <b style=\"color:#ffff00;\">user | nick</b>\n!highlightremove <b style=\"color:#ffff00;\">#</b>\n\n!reminderlist\n!reminderlistclear\n!reminderadd <b style=\"color:#ffff00;\">user | nick</b>\n!reminderremove <b style=\"color:#ffff00;\">#</b>\n!remindertoggle\n\n!safelist\n!safelistclear\n!safeadd <b style=\"color:#ffff00;\">user</b>\n!saferemove <b style=\"color:#ffff00;\">#</b>\n\n!greenroomlist\n!greenroomlistclear\n!greenroomadd <b style=\"color:#ffff00;\">user</b>\n!greenroomremove <b style=\"color:#ffff00;\">#</b>\n\n!greenroomignorelist\n!greenroomignorelistclear\n!greenroomignoreadd <b style=\"color:#ffff00;\">user</b>\n!greenroomignoreremove <b style=\"color:#ffff00;\">#</b>\n\n!lists\n!listsclear\n\n!greetmode\n!imgurtoggle\n!avatartoggle\n!notificationtoggle <b style=\"color:#ffff00;\"></b>\n!popuptoggle\n!timestamptoggle\n\n!coin\n!advice\n!8ball <b style=\"color:#ffff00;\">question</b>\n!roll <b style=\"color:#ffff00;\">#</b>\n!chuck\n!dad\n\n!vote <b style=\"color:#ffff00;\">user | nick</b>\n\n!clr\n!settings\n!share\n\n<b style=\"color:#ee3636;\">Game Commands:</b>\n!gamehost\n!gameview\n!fish");
2087 },
2088 help: function() {
2089 this.cts();
2090 },
2091 mentionadd: function() {
2092 if (arguments[0] === "") {
2093 Alert(GetActiveChat(), "?Command Rejected!\nParameter was missing/incorrect\nUse <b>!cts</b> for help.");
2094 } else {
2095 if (CheckUserNameStrict(arguments[0])) {
2096 CTS.MentionList.push(arguments[0].toUpperCase());
2097 Save("MentionList", JSON.stringify(CTS.MentionList));
2098 Alert(GetActiveChat(), "?Command Accepted!");
2099 } else {
2100 Alert(GetActiveChat(), "?Command Rejected!\nArgument passed didn't match criteria!");
2101 }
2102 }
2103 },
2104 mentionremove: function() {
2105 if (arguments[0] === "" || isNaN(arguments[0])) {
2106 Alert(GetActiveChat(), "?Command Rejected!\nParameter was missing/incorrect\nUse <b>!cts</b> for help.");
2107 } else {
2108 if (CTS.MentionList[arguments[0]] !== undefined) {
2109 CTS.MentionList.splice(arguments[0], 1);
2110 Save("MentionList", JSON.stringify(CTS.MentionList));
2111 Alert(GetActiveChat(), "?Command Accepted!");
2112 } else {
2113 Alert(GetActiveChat(), "?Command Rejected!\nID was not found!");
2114 }
2115 }
2116 },
2117 mentionlistclear: function() {
2118 CTS.MentionList = [];
2119 Save("MentionList", JSON.stringify(CTS.MentionList));
2120 Alert(GetActiveChat(), "?Command Accepted!");
2121 },
2122 mentionlist: function() {
2123 Alert(GetActiveChat(), SettingsList.MentionList());
2124 },
2125 ignoreadd: function() {
2126 if (arguments[0] === "") {
2127 Alert(GetActiveChat(), "?Command Rejected!\nParameter was missing/incorrect\nUse <b>!cts</b> for help.");
2128 } else {
2129 if (CheckUserNameStrict(arguments[0])) {
2130 CTS.IgnoreList.push(arguments[0].toUpperCase());
2131 Cameras();
2132 Save("IgnoreList", JSON.stringify(CTS.IgnoreList));
2133 Alert(GetActiveChat(), "?Command Accepted!");
2134 } else {
2135 Alert(GetActiveChat(), "?Command Rejected!\nArgument passed didn't match criteria!");
2136 }
2137 }
2138 },
2139 ignoreremove: function() {
2140 if (arguments[0] === "" || isNaN(arguments[0])) {
2141 Alert(GetActiveChat(), "?Command Rejected!\nParameter was missing/incorrect\nUse <b>!cts</b> for help.");
2142 } else {
2143 if (CTS.IgnoreList[arguments[0]] !== undefined) {
2144 CTS.IgnoreList.splice(arguments[0], 1);
2145 Save("IgnoreList", JSON.stringify(CTS.IgnoreList));
2146 Alert(GetActiveChat(), "?Command Accepted!");
2147 } else {
2148 Alert(GetActiveChat(), "?Command Rejected!\nID was not found!");
2149 }
2150 }
2151 },
2152 ignorelistclear: function() {
2153 CTS.IgnoreList = [];
2154 Save("IgnoreList", JSON.stringify(CTS.IgnoreList));
2155 Alert(GetActiveChat(), "?Command Accepted!");
2156 },
2157 ignorelist: function() {
2158 Alert(GetActiveChat(), SettingsList.IgnoreList());
2159 },
2160 banadd: function() {
2161 if (arguments[0] === "") {
2162 Alert(GetActiveChat(), "?Command Rejected!\nParameter was missing/incorrect\nUse <b>!cts</b> for help.");
2163 } else {
2164 if (CheckUserNameStrict(arguments[0])) {
2165 CTS.BanList.push(arguments[0].toUpperCase());
2166 Save("BanList", JSON.stringify(CTS.BanList));
2167 Alert(GetActiveChat(), "?Command Accepted!");
2168 var check = UsernameToHandle(arguments[0].toUpperCase());
2169 if (check != -1 && CTS.Me.mod) Send("ban", check);
2170 } else {
2171 Alert(GetActiveChat(), "?Command Rejected!\nArgument passed didn't match criteria!");
2172 }
2173 }
2174 },
2175 banremove: function() {
2176 if (arguments[0] === "" || isNaN(arguments[0])) {
2177 Alert(GetActiveChat(), "?Command Rejected!\nParameter was missing/incorrect\nUse <b>!cts</b> for help.");
2178 } else {
2179 if (CTS.BanList[arguments[0]] !== undefined) {
2180 CTS.BanList.splice(arguments[0], 1);
2181 Save("BanList", JSON.stringify(CTS.BanList));
2182 Alert(GetActiveChat(), "?Command Accepted!");
2183 } else {
2184 Alert(GetActiveChat(), "?Command Rejected!\nID was not found!");
2185 }
2186 }
2187 },
2188 banlistclear: function() {
2189 CTS.BanList = [];
2190 Save("BanList", JSON.stringify(CTS.BanList));
2191 Alert(GetActiveChat(), "?Command Accepted!");
2192 },
2193 banlist: function() {
2194 Alert(GetActiveChat(), SettingsList.BanList());
2195 },
2196 kickadd: function() {
2197 if (arguments[0] === "") {
2198 Alert(GetActiveChat(), "?Command Rejected!\nParameter was missing/incorrect\nUse <b>!cts</b> for help.");
2199 } else {
2200 if (CheckUserNameStrict(arguments[0])) {
2201 CTS.KickList.push(arguments[0].toUpperCase());
2202 Save("KickList", JSON.stringify(CTS.KickList));
2203 Alert(GetActiveChat(), "?Command Accepted!");
2204 var check = UsernameToHandle(arguments[0].toUpperCase());
2205 if (check != -1 && CTS.Me.mod) Send("kick", check);
2206 } else {
2207 Alert(GetActiveChat(), "?Command Rejected!\nArgument passed didn't match criteria!");
2208 }
2209 }
2210 },
2211 kickremove: function() {
2212 if (arguments[0] === "" || isNaN(arguments[0])) {
2213 Alert(GetActiveChat(), "?Command Rejected!\nParameter was missing/incorrect\nUse <b>!cts</b> for help.");
2214 } else {
2215 if (CTS.KickList[arguments[0]] !== undefined) {
2216 CTS.KickList.splice(arguments[0], 1);
2217 Save("KickList", JSON.stringify(CTS.KickList));
2218 Alert(GetActiveChat(), "?Command Accepted!");
2219 } else {
2220 Alert(GetActiveChat(), "?Command Rejected!\nID was not found!");
2221 }
2222 }
2223 },
2224 kicklistclear: function() {
2225 CTS.KickList = [];
2226 Save("KickList", JSON.stringify(CTS.KickList));
2227 Alert(GetActiveChat(), "?Command Accepted!");
2228 },
2229 kicklist: function() {
2230 Alert(GetActiveChat(), SettingsList.KickList());
2231 },
2232 bankeywordadd: function() {
2233 if (arguments[0] === "") {
2234 Alert(GetActiveChat(), "?Command Rejected!\nParameter was missing/incorrect\nUse <b>!cts</b> for help.");
2235 } else {
2236 CTS.BanKeywordList.push(arguments[0]);
2237 Save("BanKeywordList", JSON.stringify(CTS.BanKeywordList));
2238 Alert(GetActiveChat(), "?Command Accepted!");
2239 }
2240 },
2241 bankeywordremove: function() {
2242 if (arguments[0] === "" || isNaN(arguments[0])) {
2243 Alert(GetActiveChat(), "?Command Rejected!\nParameter was missing/incorrect\nUse <b>!cts</b> for help.");
2244 } else {
2245 if (CTS.BanKeywordList[arguments[0]] !== undefined) {
2246 CTS.BanKeywordList.splice(arguments[0], 1);
2247 Save("BanKeywordList", JSON.stringify(CTS.BanKeywordList));
2248 Alert(GetActiveChat(), "?Command Accepted!");
2249 } else {
2250 Alert(GetActiveChat(), "?Command Rejected!\nID was not found!");
2251 }
2252 }
2253 },
2254 bankeywordlistclear: function() {
2255 CTS.BanKeywordList = [];
2256 Save("BanKeywordList", JSON.stringify(CTS.BanKeywordList));
2257 Alert(GetActiveChat(), "?Command Accepted!");
2258 },
2259 bankeywordlist: function() {
2260 Alert(GetActiveChat(), SettingsList.BanKeywordList());
2261 },
2262 kickkeywordadd: function() {
2263 if (arguments[0] === "") {
2264 Alert(GetActiveChat(), "?Command Rejected!\nParameter was missing/incorrect\nUse <b>!cts</b> for help.");
2265 } else {
2266 CTS.KickKeywordList.push(arguments[0]);
2267 Save("KickKeywordList", JSON.stringify(CTS.KickKeywordList));
2268 Alert(GetActiveChat(), "?Command Accepted!");
2269 }
2270 },
2271 kickkeywordremove: function() {
2272 if (arguments[0] === "" || isNaN(arguments[0])) {
2273 Alert(GetActiveChat(), "?Command Rejected!\nParameter was missing/incorrect\nUse <b>!cts</b> for help.");
2274 } else {
2275 if (CTS.KickKeywordList[arguments[0]] !== undefined) {
2276 CTS.KickKeywordList.splice(arguments[0], 1);
2277 Save("KickKeywordList", JSON.stringify(CTS.KickKeywordList));
2278 Alert(GetActiveChat(), "?Command Accepted!");
2279 } else {
2280 Alert(GetActiveChat(), "?Command Rejected!\nID was not found!");
2281 }
2282 }
2283 },
2284 kickkeywordlistclear: function() {
2285 CTS.KickKeywordList = [];
2286 Save("KickKeywordList", JSON.stringify(CTS.KickKeywordList));
2287 Alert(GetActiveChat(), "?Command Accepted!");
2288 },
2289 kickkeywordlist: function() {
2290 Alert(GetActiveChat(), SettingsList.KickKeywordList());
2291 },
2292 greetadd: function() {
2293 if (arguments[0] === "") {
2294 Alert(GetActiveChat(), "?Command Rejected!\nParameter was missing/incorrect\nUse <b>!cts</b> for help.");
2295 } else {
2296 if (CheckUserName(arguments[0])) {
2297 CTS.GreetList.push(arguments[0].toUpperCase());
2298 Save("GreetList", JSON.stringify(CTS.GreetList));
2299 Alert(GetActiveChat(), "?Command Accepted!");
2300 } else {
2301 Alert(GetActiveChat(), "?Command Rejected!\nArgument passed didn't match criteria!");
2302 }
2303 }
2304 },
2305 greetremove: function() {
2306 if (arguments[0] === "" || isNaN(arguments[0])) {
2307 Alert(GetActiveChat(), "?Command Rejected!\nParameter was missing/incorrect\nUse <b>!cts</b> for help.");
2308 } else {
2309 if (CTS.GreetList[arguments[0]] !== undefined) {
2310 CTS.GreetList.splice(arguments[0], 1);
2311 Save("GreetList", JSON.stringify(CTS.GreetList));
2312 Alert(GetActiveChat(), "?Command Accepted!");
2313 } else {
2314 Alert(GetActiveChat(), "?Command Rejected!\nID was not found!");
2315 }
2316 }
2317 },
2318 greetlistclear: function() {
2319 CTS.GreetList = [];
2320 Save("GreetList", JSON.stringify(CTS.GreetList));
2321 Alert(GetActiveChat(), "?Command Accepted!");
2322 },
2323 greetlist: function() {
2324 Alert(GetActiveChat(), SettingsList.GreetList());
2325 },
2326 highlightadd: function() {
2327 if (arguments[0] === "") {
2328 Alert(GetActiveChat(), "?Command Rejected!\nParameter was missing/incorrect\nUse <b>!cts</b> for help.");
2329 } else {
2330 if (CheckUserNameStrict(arguments[0])) {
2331 CTS.HighlightList.push(arguments[0].toUpperCase());
2332 Save("HighlightList", JSON.stringify(CTS.HighlightList));
2333 Alert(GetActiveChat(), "?Command Accepted!");
2334 } else {
2335 Alert(GetActiveChat(), "?Command Rejected!\nArgument passed didn't match criteria!");
2336 }
2337 }
2338 },
2339 highlightremove: function() {
2340 if (arguments[0] === "" || isNaN(arguments[0])) {
2341 Alert(GetActiveChat(), "?Command Rejected!\nParameter was missing/incorrect\nUse <b>!cts</b> for help.");
2342 } else {
2343 if (CTS.HighlightList[arguments[0]] !== undefined) {
2344 CTS.HighlightList.splice(arguments[0], 1);
2345 Save("HighlightList", JSON.stringify(CTS.HighlightList));
2346 Alert(GetActiveChat(), "?Command Accepted!");
2347 } else {
2348 Alert(GetActiveChat(), "?Command Rejected!\nID was not found!");
2349 }
2350 }
2351 },
2352 highlightlistclear: function() {
2353 CTS.HighlightList = [];
2354 Save("HighlightList", JSON.stringify(CTS.HighlightList));
2355 Alert(GetActiveChat(), "?Command Accepted!");
2356 },
2357 highlightlist: function() {
2358 Alert(GetActiveChat(), SettingsList.HighlightList());
2359 },
2360 opadd: function() {
2361 if (arguments[0] === "") {
2362 Alert(GetActiveChat(), "?Command Rejected!\nParameter was missing/incorrect\nUse <b>!cts</b> for help.");
2363 } else {
2364 if (CheckUserName(arguments[0])) {
2365 CTS.BotOPList.push(arguments[0].toUpperCase());
2366 Save("BotOPList", JSON.stringify(CTS.BotOPList));
2367 Alert(GetActiveChat(), "?Command Accepted!");
2368 } else {
2369 Alert(GetActiveChat(), "?Command Rejected!\nArgument passed didn't match criteria!");
2370 }
2371 }
2372 },
2373 opremove: function() {
2374 if (arguments[0] === "" || isNaN(arguments[0])) {
2375 Alert(GetActiveChat(), "?Command Rejected!\nParameter was missing/incorrect\nUse <b>!cts</b> for help.");
2376 } else {
2377 if (CTS.BotOPList[arguments[0]] !== undefined) {
2378 CTS.BotOPList.splice(arguments[0], 1);
2379 Save("BotOPList", JSON.stringify(CTS.BotOPList));
2380 Alert(GetActiveChat(), "?Command Accepted!");
2381 } else {
2382 Alert(GetActiveChat(), "?Command Rejected!\nID was not found!");
2383 }
2384 }
2385 },
2386 oplistclear: function() {
2387 CTS.BotOPList = [];
2388 Save("BotOPList", JSON.stringify(CTS.BotOPList));
2389 Alert(GetActiveChat(), "?Command Accepted!");
2390 },
2391 oplist: function() {
2392 Alert(GetActiveChat(), SettingsList.BotOPList());
2393 },
2394 modadd: function() {
2395 if (arguments[0] === "") {
2396 Alert(GetActiveChat(), "?Command Rejected!\nParameter was missing/incorrect\nUse <b>!cts</b> for help.");
2397 } else {
2398 if (CheckUserNameStrict(arguments[0])) {
2399 CTS.BotModList.push(arguments[0].toUpperCase());
2400 Save("BotModList", JSON.stringify(CTS.BotModList));
2401 Alert(GetActiveChat(), "?Command Accepted!");
2402 } else {
2403 Alert(GetActiveChat(), "?Command Rejected!\nArgument passed didn't match criteria!");
2404 }
2405 }
2406 },
2407 modremove: function() {
2408 if (arguments[0] === "" || isNaN(arguments[0])) {
2409 Alert(GetActiveChat(), "?Command Rejected!\nParameter was missing/incorrect\nUse <b>!cts</b> for help.");
2410 } else {
2411 if (CTS.BotModList[arguments[0]] !== undefined) {
2412 CTS.BotModList.splice(arguments[0], 1);
2413 Save("BotModList", JSON.stringify(CTS.BotModList));
2414 Alert(GetActiveChat(), "?Command Accepted!");
2415 } else {
2416 Alert(GetActiveChat(), "?Command Rejected!\nID was not found!");
2417 }
2418 }
2419 },
2420 modlistclear: function() {
2421 CTS.BotModList = [];
2422 Save("BotModList", JSON.stringify(CTS.BotModList));
2423 Alert(GetActiveChat(), "?Command Accepted!");
2424 },
2425 modlist: function() {
2426 Alert(GetActiveChat(), SettingsList.BotModList());
2427 },
2428 ttsadd: function() {
2429 if (arguments[0] === "") {
2430 Alert(GetActiveChat(), "?Command Rejected!\nParameter was missing/incorrect\nUse <b>!cts</b> for help.");
2431 } else {
2432 if (arguments[0].match(/^(-all|-event|[a-z0-9_]){1,32}$/i)) {
2433 CTS.TTSList.push(arguments[0].toUpperCase());
2434 Save("TTSList", JSON.stringify(CTS.TTSList));
2435 Alert(GetActiveChat(), "?Command Accepted!");
2436 } else {
2437 Alert(GetActiveChat(), "?Command Rejected!\nArgument passed didn't match criteria!");
2438 }
2439 }
2440 },
2441 ttsremove: function() {
2442 if (arguments[0] === "" || isNaN(arguments[0])) {
2443 Alert(GetActiveChat(), "?Command Rejected!\nParameter was missing/incorrect\nUse <b>!cts</b> for help.");
2444 } else {
2445 if (CTS.TTSList[arguments[0]] !== undefined) {
2446 CTS.TTSList.splice(arguments[0], 1);
2447 Save("TTSList", JSON.stringify(CTS.TTSList));
2448 Alert(GetActiveChat(), "?Command Accepted!");
2449 } else {
2450 Alert(GetActiveChat(), "?Command Rejected!\nID was not found!");
2451 }
2452 }
2453 },
2454 ttslistclear: function() {
2455 CTS.TTSList = [];
2456 Save("TTSList", JSON.stringify(CTS.TTSList));
2457 Alert(GetActiveChat(), "?Command Accepted!");
2458 },
2459 ttslist: function() {
2460 Alert(GetActiveChat(), SettingsList.TTSList());
2461 },
2462 reminderadd: function() {
2463 if (arguments[0] === "") {
2464 Alert(GetActiveChat(), "?Command Rejected!\nParameter was missing/incorrect\nUse <b>!cts</b> for help.");
2465 } else {
2466 var reminder = arguments[0].match(/^((?:1[0-2]|0?[1-9]):(?:[0-5][0-9])\s?(?:[AaPp][Mm]))\s(.*)/);
2467 if (reminder === null) {
2468 Alert(GetActiveChat(), "?Command Rejected!\n!reminderadd 4:18 PM This is an example you can try!");
2469 } else {
2470 CTS.ReminderList.push([reminder[1], reminder[2]]);
2471 Save("ReminderList", JSON.stringify(CTS.ReminderList));
2472 Alert(GetActiveChat(), "?Command Accepted!");
2473 Reminder();
2474 }
2475 }
2476 },
2477 reminderremove: function() {
2478 if (arguments[0] === "" || isNaN(arguments[0])) {
2479 Alert(GetActiveChat(), "?Command Rejected!\nParameter was missing/incorrect\nUse <b>!cts</b> for help.");
2480 } else {
2481 if (CTS.ReminderList[arguments[0]] !== undefined) {
2482 CTS.ReminderList.splice(arguments[0], 1);
2483 Save("ReminderList", JSON.stringify(CTS.ReminderList));
2484 Reminder();
2485 Alert(GetActiveChat(), "?Command Accepted!");
2486 } else {
2487 Alert(GetActiveChat(), "?Command Rejected!\nID was not found!");
2488 }
2489 }
2490 },
2491 reminderlistclear: function() {
2492 CTS.ReminderList = [];
2493 Save("ReminderList", JSON.stringify(CTS.ReminderList));
2494 Alert(GetActiveChat(), "?Command Accepted!");
2495 },
2496 reminderlist: function() {
2497 Alert(GetActiveChat(), SettingsList.ReminderList());
2498 },
2499 remindertoggle: function() {
2500 CTS.Reminder = !CTS.Reminder;
2501 Save("Reminder", JSON.stringify(CTS.Reminder));
2502 Reminder();
2503 Settings();
2504 Alert(GetActiveChat(), "?Command Accepted!\n" + ((CTS.Reminder) ? "Reminders are now on!\n" : "Reminders are now off!\n "));
2505 },
2506 timestamptoggle: function() {
2507 CTS.TimeStampToggle = !CTS.TimeStampToggle;
2508 Save("TimeStampToggle", JSON.stringify(CTS.TimeStampToggle));
2509 Alert(GetActiveChat(), "?Command Accepted!\n" + ((CTS.TimeStampToggle) ? "Timestamps are now on!\n" : "Timestamps are now off\n "));
2510 },
2511 safeadd: function() {
2512 if (arguments[0] === "" || arguments[0].toUpperCase() === "GUEST") { // Can't protect guests;
2513 Alert(GetActiveChat(), "?Command Rejected!\nParameter was missing/incorrect\nUse <b>!cts</b> for help.");
2514 } else {
2515 if (CheckUserNameStrict(arguments[0])) {
2516 if (!CTS.SafeList.includes(arguments[0].toUpperCase())) {
2517 CTS.SafeList.push(arguments[0].toUpperCase());
2518 Save("AKB", JSON.stringify(CTS.SafeList));
2519 Alert(GetActiveChat(), "?Command Accepted!");
2520 } else {
2521 Alert(GetActiveChat(), "?Name already exists!");
2522 }
2523 } else {
2524 Alert(GetActiveChat(), "?Command Rejected!\nArgument passed didn't match criteria!");
2525 }
2526 }
2527 },
2528 saferemove: function() {
2529 if (arguments[0] === "" || isNaN(arguments[0])) {
2530 Alert(GetActiveChat(), "?Command Rejected!\nParameter was missing/incorrect\nUse <b>!cts</b> for help.");
2531 } else {
2532 if (CTS.SafeList[arguments[0]] !== undefined) {
2533 CTS.SafeList.splice(arguments[0], 1);
2534 Save("AKB", JSON.stringify(CTS.SafeList));
2535 Alert(GetActiveChat(), "?Command Accepted!");
2536 } else {
2537 Alert(GetActiveChat(), "?Command Rejected!\nID was not found!");
2538 }
2539 }
2540 },
2541 safelistclear: function() {
2542 CTS.SafeList = [];
2543 Save("AKB", JSON.stringify(CTS.SafeList));
2544 Alert(GetActiveChat(), "?Command Accepted!");
2545 },
2546 safelist: function() {
2547 Alert(GetActiveChat(), SettingsList.SafeList());
2548 },
2549 greenroomadd: function() {
2550 if (arguments[0] === "" || arguments[0].toUpperCase() === "GUEST") { // Can't protect guests;
2551 Alert(GetActiveChat(), "?Command Rejected!\nParameter was missing/incorrect\nUse <b>!cts</b> for help.");
2552 } else {
2553 if (CheckUserNameStrict(arguments[0])) {
2554 if (!CTS.GreenRoomList.includes(arguments[0].toUpperCase())) {
2555 CTS.GreenRoomList.push(arguments[0].toUpperCase());
2556 Save("GreenRoomList", JSON.stringify(CTS.GreenRoomList));
2557 Alert(GetActiveChat(), "?Command Accepted!");
2558 } else {
2559 Alert(GetActiveChat(), "?Name already exists!");
2560 }
2561 } else {
2562 Alert(GetActiveChat(), "?Command Rejected!\nArgument passed didn't match criteria!");
2563 }
2564 }
2565 },
2566 greenroomremove: function() {
2567 if (arguments[0] === "" || isNaN(arguments[0])) {
2568 Alert(GetActiveChat(), "?Command Rejected!\nParameter was missing/incorrect\nUse <b>!cts</b> for help.");
2569 } else {
2570 if (CTS.GreenRoomList[arguments[0]] !== undefined) {
2571 CTS.GreenRoomList.splice(arguments[0], 1);
2572 Save("GreenRoomList", JSON.stringify(CTS.GreenRoomList));
2573 Alert(GetActiveChat(), "?Command Accepted!");
2574 } else {
2575 Alert(GetActiveChat(), "?Command Rejected!\nID was not found!");
2576 }
2577 }
2578 },
2579 greenroomlistclear: function() {
2580 CTS.GreenRoomList = [];
2581 Save("GreenRoomList", JSON.stringify(CTS.GreenRoomList));
2582 Alert(GetActiveChat(), "?Command Accepted!");
2583 },
2584 greenroomlist: function() {
2585 Alert(GetActiveChat(), SettingsList.GreenRoomList());
2586 },
2587 greenroomignoreadd: function() {
2588 if (arguments[0] === "" || arguments[0].toUpperCase() === "GUEST") { // Can't protect guests;
2589 Alert(GetActiveChat(), "?Command Rejected!\nParameter was missing/incorrect\nUse <b>!cts</b> for help.");
2590 } else {
2591 if (CheckUserNameStrict(arguments[0])) {
2592 if (!CTS.GreenRoomIgnoreList.includes(arguments[0].toUpperCase())) {
2593 CTS.GreenRoomIgnoreList.push(arguments[0].toUpperCase());
2594 Save("GreenRoomIgnoreList", JSON.stringify(CTS.GreenRoomIgnoreList));
2595 Alert(GetActiveChat(), "?Command Accepted!");
2596 } else {
2597 Alert(GetActiveChat(), "?Name already exists!");
2598 }
2599 } else {
2600 Alert(GetActiveChat(), "?Command Rejected!\nArgument passed didn't match criteria!");
2601 }
2602 }
2603 },
2604 greenroomignoreremove: function() {
2605 if (arguments[0] === "" || isNaN(arguments[0])) {
2606 Alert(GetActiveChat(), "?Command Rejected!\nParameter was missing/incorrect\nUse <b>!cts</b> for help.");
2607 } else {
2608 if (CTS.GreenRoomIgnoreList[arguments[0]] !== undefined) {
2609 CTS.GreenRoomIgnoreList.splice(arguments[0], 1);
2610 Save("GreenRoomIgnoreList", JSON.stringify(CTS.GreenRoomIgnoreList));
2611 Alert(GetActiveChat(), "?Command Accepted!");
2612 } else {
2613 Alert(GetActiveChat(), "?Command Rejected!\nID was not found!");
2614 }
2615 }
2616 },
2617 greenroomignorelistclear: function() {
2618 CTS.GreenRoomIgnoreList = [];
2619 Save("GreenRoomIgnoreList", JSON.stringify(CTS.GreenRoomIgnoreList));
2620 Alert(GetActiveChat(), "?Command Accepted!");
2621 },
2622 greenroomignorelist: function() {
2623 Alert(GetActiveChat(), SettingsList.GreenRoomIgnoreList());
2624 },
2625 optoggle: function() {
2626 CTS.UserYT = !CTS.UserYT;
2627 Save("UserYT", JSON.stringify(CTS.UserYT));
2628 Settings();
2629 Alert(GetActiveChat(), "?Command Accepted!\n" + ((CTS.UserYT) ? "Operators can now use YouTube.\n" : "Operators cannot use YouTube.\n"));
2630 },
2631 avatartoggle: function() {
2632 CTS.Avatar = !CTS.Avatar;
2633 Save("Avatar", JSON.stringify(CTS.Avatar));
2634 Settings();
2635 Alert(GetActiveChat(), "?Command Accepted!\n" + ((CTS.Avatar) ? "Avatars from now on will be visible!\n " : "Avatars from now on will hidden!\n"));
2636 },
2637 popuptoggle: function() {
2638 CTS.Popups = !CTS.Popups;
2639 Save("Popups", JSON.stringify(CTS.Popups));
2640 Settings();
2641 Alert(GetActiveChat(), "?Command Accepted!\n" + ((CTS.Popups) ? "Popups from now on will be visible!\n " : "Popups from now on will hidden!\n"));
2642 },
2643 notificationtoggle: function() {
2644 CTS.NotificationToggle++;
2645 if (CTS.NotificationToggle >= 3) CTS.NotificationToggle = 0;
2646 Save("NotificationToggle", JSON.stringify(CTS.NotificationToggle));
2647 NotificationDisplay();
2648 Settings();
2649 Alert(GetActiveChat(), "?Command Accepted!\nNotifications " + ((CTS.NotificationToggle==0) ? "above chat enabled" : (CTS.NotificationToggle==1)?"in chat enabled":"disabled")+".");
2650 },
2651 greetmode: function() {
2652 CTS.GreetMode = !CTS.GreetMode;
2653 Save("GreetMode", JSON.stringify(CTS.GreetMode));
2654 Alert(GetActiveChat(), "?Command Accepted!\n" + ((CTS.GreetMode) ? "Server like greet is enabled." : "Server like greet is disabled."));
2655 },
2656 imgurtoggle: function() {
2657 CTS.imgur = !CTS.imgur;
2658 Save("imgur", JSON.stringify(CTS.imgur));
2659 Alert(GetActiveChat(), "?Command Accepted!\n" + ((CTS.imgur) ? "Imgur preview is enabled." : "Imgur preview is disabled."));
2660 },
2661 publiccommandtoggle: function() {
2662 CTS.PublicCommandToggle = !CTS.PublicCommandToggle;
2663 Save("PublicCommandToggle", JSON.stringify(CTS.PublicCommandToggle));
2664 Settings();
2665 Alert(GetActiveChat(), "?Command Accepted!\n" + ((CTS.PublicCommandToggle) ? "Public commands (8Ball, Advice, Chuck, Coin, Dad, Urb) are enabled." : "Public commands (8Ball, Advice, Chuck, Coin, Dad, Urb) are disabled."));
2666 },
2667 greenroomtoggle: function() {
2668 CTS.GreenRoomToggle = !CTS.GreenRoomToggle;
2669 Save("GreenRoomToggle", JSON.stringify(CTS.GreenRoomToggle));
2670 Settings();
2671 Alert(GetActiveChat(), "?Command Accepted!\n" + ((CTS.GreenRoomToggle) ? "Green Room Auto Allow ON!" : "Green Room Auto Allow OFF!"));
2672 },
2673 clr: function() {
2674 CTS.MessageCallback = [];
2675 CTS.Message = [];
2676 CTS.Message[0] = [];
2677 window.TinychatApp.getInstance().defaultChatroom._chatlog.items = [];
2678 ChatLogElement.querySelector("#cts-chat-content").innerHTML = "";
2679 },
2680 autokick: function() {
2681 if (arguments[1] === false && CTS.Me.mod) {
2682 CTS.AutoKick = !CTS.AutoKick;
2683 CTS.AutoBan = false;
2684 Alert(GetActiveChat(), "?Command Accepted!\n" + ((CTS.AutoKick) ? "AUTO KICK IS NOW ON!" : "AUTO KICK IS NOW OFF!"));
2685 if (CTS.AutoKick === true) CheckUserListSafe("kick");
2686 }
2687 },
2688 autoban: function() {
2689 if (arguments[1] === false && CTS.Me.mod) {
2690 CTS.AutoBan = !CTS.AutoBan;
2691 CTS.AutoKick = false;
2692 Alert(GetActiveChat(), "?Command Accepted!\n" + ((CTS.AutoBan) ? "AUTO BAN IS NOW ON!" : "AUTO BAN IS NOW OFF!"));
2693 if (CTS.AutoBan === true) CheckUserListSafe("ban");
2694 }
2695 },
2696 camsweep: function() {
2697 if (CTS.Me.mod && CTS.Host === CTS.Me.handle) {
2698 CTS.Camera.SweepTimer = arguments[0] === "" || isNaN(arguments[0]) ? 5 : (arguments[0] > 30) ? 30 : (arguments[0] < 1) ? 1 : parseInt(arguments[0]);
2699 CTS.Camera.Sweep = !CTS.Camera.Sweep;
2700 clearTimeout(CTS.Camera.clearRandom);
2701 Settings();
2702 Alert(GetActiveChat(), "?Command Accepted!\n" + ((CTS.Camera.Sweep) ? "Camera sweep is now on!\nTime set: " + CTS.Camera.SweepTimer + "min(s)" : "Camera sweep is now off!"));
2703 }
2704 },
2705 bottoggle: function() {
2706 CTS.Bot = !CTS.Bot;
2707 Save("Bot", JSON.stringify(CTS.Bot));
2708 Settings();
2709 Alert(GetActiveChat(), "?Command Accepted!\n" + ((CTS.Bot) ? "You'll now ask !bot bypass on load." : "You'll not !bot bypass on load."));
2710 },
2711 votetoggle: function() {
2712 if (CTS.Me.mod) {
2713 CTS.VoteSystem = !CTS.VoteSystem;
2714 CTS.WaitToVoteList = [];
2715 var len = CTS.UserList.length;
2716 if (len > 0) {
2717 for (var i = 0; i < len; i++) CTS.UserList[i].vote = 0;
2718 }
2719 Alert(GetActiveChat(), "?Command Accepted!\n" + ((CTS.VoteSystem) ? "VOTING IS NOW ON!" : "VOTING IS NOW OFF!"));
2720 }
2721 },
2722 bot: function() {
2723 if (arguments[1] === false && CTS.Me.mod) Alert(0, "?Command Accepted!\nBot bypass was called!");
2724 },
2725 share: function() {
2726 var msg = "CosmosisT's TinyChat Script:\nInstall...\n1. (Tamper Monkey Link)\nhttps://www.tampermonkey.net/\n2. (CTS Link)\nhttps://greasyfork.org/en/scripts/392086\nCTS Discord:\nhttps://discord.gg/cHEf8z7";
2727 if (GetActiveChat() !== 0) {
2728 Send("pvtmsg", msg, GetActiveChat());
2729 PushPM(GetActiveChat(), msg);
2730 } else {
2731 Send("msg", msg);
2732 }
2733 },
2734 gameview: function() {
2735 CTS.CanSeeGames = !CTS.CanSeeGames;
2736 Save("CanSeeGames", JSON.stringify(CTS.CanSeeGames));
2737 Settings();
2738 Alert(GetActiveChat(), "?Command Accepted!\n" + ((CTS.CanSeeGames) ? "GAME VIEW IS NOW ON!" : "GAME VIEW IS NOW OFF!"));
2739 },
2740 gamehost: function() {
2741 CTS.CanHostGames = !CTS.CanHostGames;
2742 Save("CanHostGames", JSON.stringify(CTS.CanHostGames));
2743 Fish.reset(true, true);
2744 Settings();
2745 Alert(GetActiveChat(), "?Command Accepted!\n" + ((CTS.CanHostGames) ? "GAME HOSTING IS NOW ON!" : "GAME HOSTING IS NOW OFF!"));
2746 },
2747 version: function() {
2748
2749 },
2750 roll: function() {
2751 var dice,
2752 msg = "";
2753 dice = (arguments[0] === "" || isNaN(arguments[0])) ? 1 : (arguments[0] < 12) ? arguments[0] : 12;
2754 for (var i = 0; i < dice; i++) msg += Dice();
2755 if (GetActiveChat() !== 0) {
2756 Send("pvtmsg", msg, GetActiveChat());
2757 PushPM(GetActiveChat(), msg);
2758 } else {
2759 Send("msg", msg);
2760 }
2761 },
2762 coin: function() {
2763 if (CTS.Host == 0 || GetActiveChat() !== 0) {
2764 var msg = "The coin landed on " + ((Rand(0, 1) == 1) ? "heads" : "tails") + "!";
2765 if (GetActiveChat() !== 0) {
2766 Send("pvtmsg", msg, GetActiveChat());
2767 } else {
2768 Send("msg", msg);
2769 }
2770 }
2771 },
2772 settings: function() {
2773 Settings();
2774 },
2775 lists: function() {
2776 Alert(GetActiveChat(), SettingsList.BanList() + SettingsList.BanKeywordList() + SettingsList.KickList() + SettingsList.KickKeywordList() + SettingsList.BotOPList() + SettingsList.BotModList() + SettingsList.MentionList() + SettingsList.IgnoreList() + SettingsList.GreetList() + SettingsList.TTSList() + SettingsList.HighlightList() + SettingsList.ReminderList());
2777 },
2778 listsclear: function() {
2779 CTS.MentionList = [];
2780 CTS.IgnoreList = [];
2781 CTS.BanList = [];
2782 CTS.KickList = [];
2783 CTS.BanKeywordList = [];
2784 CTS.KickKeywordList = [];
2785 CTS.GreetList = [];
2786 CTS.HighlightList = [];
2787 CTS.ReminderList = [];
2788 CTS.TTSList = [];
2789 CTS.BotOPList = [];
2790 CTS.BotModList = [];
2791 Save("MentionList", JSON.stringify(CTS.MentionList));
2792 Save("IgnoreList", JSON.stringify(CTS.IgnoreList));
2793 Save("BanList", JSON.stringify(CTS.BanList));
2794 Save("KickList", JSON.stringify(CTS.KickList));
2795 Save("BanKeywordList", JSON.stringify(CTS.BanKeywordList));
2796 Save("KickKeywordList", JSON.stringify(CTS.KickKeywordList));
2797 Save("GreetList", JSON.stringify(CTS.GreetList));
2798 Save("HighlightList", JSON.stringify(CTS.HighlightList));
2799 Save("ReminderList", JSON.stringify(CTS.ReminderList));
2800 Save("TTSList", JSON.stringify(CTS.TTSList));
2801 Save("BotModList", JSON.stringify(CTS.BotModList));
2802 Save("BotOPList", JSON.stringify(CTS.BotOPList));
2803 Alert(GetActiveChat(), "?Command Accepted!\nItems Mentionlist, igore");
2804 },
2805 ytqueue: function() {},
2806 ytclear: function() {},
2807 ytskip: function() {},
2808 yt: function() {},
2809 ytbypass: function() {}
2810 };
2811 var SettingsList = {
2812 BanList: function() {
2813 var index,
2814 msg,
2815 len = CTS.BanList.length;
2816 msg = "<b style=\"color:#ee3636;\"><u>Ban list:</u></b>\n" + ((!len) ? "empty\n" : "");
2817 for (index = 0; index < len; index++) msg += index + " : " + CTS.BanList[index] + "\n";
2818 return msg;
2819 },
2820 BanKeywordList: function() {
2821 var index,
2822 msg,
2823 len = CTS.BanKeywordList.length;
2824 msg = "<b style=\"color:#ee3636;\"><u>Ban Keyword list:</u></b>\n" + ((!len) ? "empty\n" : "");
2825 for (index = 0; index < len; index++) msg += index + " : " + HTMLtoTXT(CTS.BanKeywordList[index]) + "\n";
2826 return msg;
2827 },
2828 KickList: function() {
2829 var index,
2830 msg,
2831 len = CTS.KickList.length;
2832 msg = "<b style=\"color:#ee3636;\"><u>Kick list:</u></b>\n" + ((!len) ? "empty\n" : "");
2833 for (index = 0; index < len; index++) msg += index + " : " + CTS.KickList[index] + "\n";
2834 return msg;
2835 },
2836 KickKeywordList: function() {
2837 var index,
2838 msg,
2839 len = CTS.KickKeywordList.length;
2840 msg = "<b style=\"color:#ee3636;\"><u>Kick Keyword list:</u></b>\n" + ((!len) ? "empty\n" : "");
2841 for (index = 0; index < len; index++) msg += index + " : " + HTMLtoTXT(CTS.KickKeywordList[index]) + "\n";
2842 return msg;
2843 },
2844 BotOPList: function() {
2845 var index,
2846 msg,
2847 len = CTS.BotOPList.length;
2848 msg = "<b style=\"color:#ee3636;\"><u>Bot OP list:</u></b>\n" + ((!len) ? "empty\n" : "");
2849 for (index = 0; index < len; index++) msg += index + " : " + CTS.BotOPList[index] + "\n";
2850 return msg;
2851 },
2852 BotModList: function() {
2853 var index,
2854 msg,
2855 len = CTS.BotModList.length;
2856 msg = "<b style=\"color:#ee3636;\"><u>Bot Mod list:</u></b>\n" + ((!len) ? "empty\n" : "");
2857 for (index = 0; index < len; index++) msg += index + " : " + CTS.BotModList[index] + "\n";
2858 return msg;
2859 },
2860 MentionList: function() {
2861 var index,
2862 msg,
2863 len = CTS.MentionList.length;
2864 msg = "<b style=\"color:#ee3636;\"><u>Mention list:</u></b>\n" + ((!len) ? "empty\n" : "");
2865 for (index = 0; index < len; index++) msg += index + " : " + HTMLtoTXT(CTS.MentionList[index]) + "\n";
2866 return msg;
2867 },
2868 IgnoreList: function() {
2869 var index,
2870 msg,
2871 len = CTS.IgnoreList.length;
2872 msg = "<b style=\"color:#ee3636;\"><u>Ignore list:</u></b>\n" + ((!len) ? "empty\n" : "");
2873 for (index = 0; index < len; index++) msg += index + " : " + CTS.IgnoreList[index] + "\n";
2874 return msg;
2875 },
2876 GreetList: function() {
2877 var index,
2878 msg,
2879 len = CTS.GreetList.length;
2880 msg = "<b style=\"color:#ee3636;\"><u>Greet list:</u></b>\n" + ((!len) ? "empty\n" : "");
2881 for (index = 0; index < len; index++) msg += index + " : " + CTS.GreetList[index] + "\n";
2882 return msg;
2883 },
2884 TTSList: function() {
2885 var index,
2886 msg,
2887 len = CTS.TTSList.length;
2888 msg = "<b style=\"color:#ee3636;\"><u>TTS list:</u></b>\n" + ((!len) ? "empty\n" : "");
2889 for (index = 0; index < len; index++) msg += index + " : " + CTS.TTSList[index] + "\n";
2890 return msg;
2891 },
2892 HighlightList: function() {
2893 var index,
2894 msg,
2895 len = CTS.HighlightList.length;
2896 msg = "<b style=\"color:#ee3636;\"><u>Highlight list:</u></b>\n" + ((!len) ? "empty\n" : "");
2897 for (index = 0; index < len; index++) msg += index + " : " + CTS.HighlightList[index] + "\n";
2898 return msg;
2899 },
2900 ReminderList: function() {
2901 var index,
2902 msg,
2903 len = CTS.ReminderList.length;
2904 msg = "<b style=\"color:#ee3636;\"><u>Reminder list:</u></b>\n" + ((!len) ? "empty\n" : "");
2905 for (index = 0; index < len; index++) msg += index + ": [" + CTS.ReminderList[index][0] + "] " + HTMLtoTXT(CTS.ReminderList[index][1]) + "\n";
2906 return msg;
2907 },
2908 SafeList: function() {
2909 var index,
2910 msg,
2911 len = CTS.SafeList.length;
2912 msg = "<b style=\"color:#ee3636;\"><u>Safe list:</u></b>\n" + ((!len) ? "empty\n" : "");
2913 for (index = 0; index < len; index++) msg += index + ": " + CTS.SafeList[index] + "\n";
2914 return msg;
2915 },
2916 GreenRoomList: function() {
2917 var index,
2918 msg,
2919 len = CTS.GreenRoomList.length;
2920 msg = "<b style=\"color:#ee3636;\"><u>Green Room list:</u></b>\n" + ((!len) ? "empty\n" : "");
2921 for (index = 0; index < len; index++) msg += index + ": " + CTS.GreenRoomList[index] + "\n";
2922 return msg;
2923 },
2924 GreenRoomIgnoreList: function() {
2925 var index,
2926 msg,
2927 len = CTS.GreenRoomIgnoreList.length;
2928 msg = "<b style=\"color:#ee3636;\"><u>Green Room Ignore list:</u></b>\n" + ((!len) ? "empty\n" : "");
2929 for (index = 0; index < len; index++) msg += index + ": " + CTS.GreenRoomIgnoreList[index] + "\n";
2930 return msg;
2931 }
2932 };
2933 var MessageQueueList = {
2934 add: function() {
2935 CTS.SendQueue.push(arguments[0]);
2936 MessageQueueList.run();
2937 },
2938 run: function() {
2939 if (CTS.SendQueue !== undefined && CTS.SendQueue.length > 0) {
2940 setTimeout(function() {
2941 var temp = new Date();
2942 var OffsetTime = temp - CTS.LastMessage;
2943 if (OffsetTime >= 1500) {
2944 CTS.LastMessage = new Date();
2945 CTS.SocketTarget.send(CTS.SendQueue[0]);
2946 CTS.SendQueue.shift();
2947 }
2948 MessageQueueList.run();
2949 }, 1600, CTS.LastMessage);
2950 }
2951 }
2952 };
2953 var ServerSendList = {
2954 msg: function() {
2955 var obj = {
2956 "tc": arguments[0]
2957 };
2958 if (arguments[2] !== undefined) {
2959 obj.handle = arguments[1];
2960 CTS.SocketTarget.send(JSON.stringify(obj));
2961 } else {
2962 if (arguments[1] !== undefined) {
2963 obj.text = arguments[1];
2964 MessageQueueList.add(JSON.stringify(obj));
2965 } else {
2966 CTS.SocketTarget.send(JSON.stringify(obj));
2967 }
2968 }
2969 },
2970 pvtmsg: function() {
2971 var obj = {
2972 "tc": arguments[0],
2973 "text": arguments[1],
2974 "handle": Number(arguments[2])
2975 };
2976 MessageQueueList.add(JSON.stringify(obj));
2977 },
2978 kick: function() {
2979 CheckSafeList(arguments[1], true);
2980 ServerSendList.msg(arguments[0], arguments[1], "kick");
2981 },
2982 ban: function() {
2983 CheckSafeList(arguments[1], true);
2984 ServerSendList.msg(arguments[0], arguments[1], "ban");
2985 },
2986 nick: function() {
2987 var obj = {
2988 "tc": "nick",
2989 "nick": arguments[1]
2990 };
2991 CTS.SocketTarget.send(JSON.stringify(obj));
2992 },
2993 stream_moder_close: function() {
2994 CheckSafeList(arguments[1], true);
2995 ServerSendList.msg(arguments[0], arguments[1], "stream_moder_close");
2996 },
2997 stream_moder_allow: function() {
2998 ServerSendList.msg(arguments[0], arguments[1], "stream_moder_allow");
2999 },
3000 yut_playlist_add: function() {
3001 var obj = {
3002 "tc": arguments[0],
3003 "item": {
3004 "id": arguments[1][0],
3005 "duration": arguments[1][1] + 10,
3006 "title": arguments[1][2],
3007 "image": arguments[1][3]
3008 }
3009 };
3010 if (arguments[1][4] !== undefined) obj.item.offset = arguments[1][4];
3011 CTS.SocketTarget.send(JSON.stringify(obj));
3012 },
3013 yut_playlist_remove: function() {
3014 ServerSendList.yut_playlist_add(arguments[0], arguments[1]);
3015 },
3016 yut_stop: function() {
3017 ServerSendList.yut_playlist_add(arguments[0], arguments[1]);
3018 },
3019 yut_play: function() {
3020 ServerSendList.yut_playlist_add(arguments[0], arguments[1]);
3021 },
3022 yut_playlist: function() {
3023 ServerSendList.msg("yut_playlist");
3024 },
3025 yut_playlist_clear: function() {
3026 ServerSendList.msg("yut_playlist_clear");
3027 }
3028 };
3029 var ServerInList = {
3030 joined: function() {
3031 Reset();
3032 CTS.Me = {
3033 "handle": arguments[0].self.handle,
3034 "username": (arguments[0].self.username === "") ? "GUEST" : arguments[0].self.username.toUpperCase(),
3035 "nick": arguments[0].self.nick,
3036 "owner": arguments[0].self.owner,
3037 "mod": arguments[0].self.mod,
3038 "namecolor": window.CTSNameColor[Rand(0, window.CTSNameColor.length - 1)],
3039 "avatar": arguments[0].self.avatar
3040 };
3041 if (CTS.Me.nick.match(/^guest(?:\-[0-9]{1,10})?/i) && CTS.Me.username !== "GUEST") Send("nick", CTS.Me.username); //AUTO CORRECT NAME
3042 if (CTS.Me.mod && CTS.Bot && CTS.ScriptInit && CTS.SocketConnected) CheckHost();
3043 CTS.Room = {
3044 "Avatar": arguments[0].room.avatar,
3045 "Bio": arguments[0].room.biography,
3046 "Name": arguments[0].room.name,
3047 "PTT": arguments[0].room.pushtotalk,
3048 "Website": arguments[0].room.website,
3049 "YT_ON": arguments[0].room.youtube_enabled,
3050 "Recent_Gifts": arguments[0].room.recent_gifts
3051 };
3052 CTS.SocketConnected = true;
3053 },
3054 userlist: function() {
3055 var len = arguments[0].users.length;
3056 for (var user = 0; user < len; user++) {
3057 AKBS(arguments[0].users[user]);
3058 var username = (arguments[0].users[user].username === "") ? "GUEST" : arguments[0].users[user].username.toUpperCase();
3059 CheckUserAbuse(arguments[0].users[user].handle, username, arguments[0].users[user].nick.toUpperCase());
3060 CTS.UserList.push({
3061 "handle": arguments[0].users[user].handle,
3062 "username": username,
3063 "nick": arguments[0].users[user].nick,
3064 "owner": arguments[0].users[user].owner,
3065 "mod": arguments[0].users[user].mod,
3066 "namecolor": window.CTSNameColor[Rand(0, window.CTSNameColor.length - 1)],
3067 "avatar": (arguments[0].users[user].avatar === "") ? "https://avatars.tinychat.com/standart/small/eyePink.png" : arguments[0].users[user].avatar,
3068 "canGame": (arguments[0].users[user].username !== "GUEST") ? true : false,
3069 "broadcasting": false,
3070 "vote": 0
3071 });
3072 }
3073 RoomUsers();
3074 debug();
3075 },
3076 join: function() {
3077 AKBS(arguments[0]);
3078 var user = (arguments[0].username === "") ? "GUEST" : arguments[0].username.toUpperCase();
3079 CheckUserAbuse(arguments[0].handle, user, arguments[0].nick.toUpperCase());
3080 if (CTS.HighlightList.includes(user) || CTS.HighlightList.includes(arguments[0].nick.toUpperCase())) {
3081 if (CTS.enableSound === true) window.CTSSound.HIGHLIGHT.play();
3082 }
3083 if ((CTS.GreetList.includes(user) || CTS.GreetList.includes(arguments[0].nick.toUpperCase()) || (CTS.Host == CTS.Me.handle && CTS.GreetList.includes("-ALL"))) && CTS.NoGreet === false) {
3084 Send("msg", UnicodeConversionList.convert(((window.CTSWelcomes[Rand(0, window.CTSWelcomes.length - 1)] + arguments[0].nick.toUpperCase()) + ((CTS.GreetMode) ? ".\n" + (((user != "GUEST") ? "You are signed in as " + user : "You are not signed in") + ".\nWelcome to the room!") : "!"))));
3085 if (CTS.enableSound === true) window.CTSSound.GREET.play();
3086 }
3087 CTS.NoGreet = false;
3088 AddUser(arguments[0].handle, arguments[0].mod, window.CTSNameColor[Rand(0, window.CTSNameColor.length - 1)], (arguments[0].avatar === "") ? "https://avatars.tinychat.com/standart/small/eyePink.png" : arguments[0].avatar, arguments[0].nick, user, ((user !== "GUEST") ? true : false), arguments[0].owner);
3089 RoomUsers();
3090 debug();
3091 },
3092 sysmsg: function() {
3093 if (CTS.Me.mod) {
3094 var action = arguments[0].text.match(/^([a-z0-9_]{1,32}):?\s(closed|banned|kicked)\s([a-z0-9_]{1,32})$/i);
3095 if (action !== null) {
3096 var user;
3097 if (action[2] == "closed" || action[2] == "banned" || action[2] == "kicked") {
3098 user = NicknameToAccount(action[3].toUpperCase());
3099 if (user != -1) {
3100 var a = CTS.GreenRoomList.indexOf(CTS.UserList[user].username);
3101 if (a !== -1) {
3102 //REMOVE
3103 debug("GREENROOMLIST::", "REMOVE USER " + CTS.UserList[user].username + " FROM GREENROOMLIST");
3104 Alert(GetActiveChat(), "?Removing "+CTS.UserList[user].username+" from greenroomlist!");
3105 CommandList.greenroomremove(a);
3106 }
3107 }
3108 }
3109 }
3110 }
3111 AddSystemNotification(HTMLtoTXT(arguments[0].text));
3112 debug();
3113 },
3114 nick: function() {
3115 var user = User(arguments[0].handle);
3116 if (user != -1) {
3117
3118 AddUserNotification(4, CTS.UserList[user].namecolor, CTS.UserList[user].nick, CTS.UserList[user].username, true, arguments[0].nick);
3119
3120 if ((CTS.GreetList.includes(CTS.UserList[user].username) || CTS.GreetList.includes(CTS.UserList[user].nick.toUpperCase()) || (CTS.Host == CTS.Me.handle && CTS.GreetList.includes("-ALL"))) && CTS.NoGreet === false) {
3121 Send("msg", UnicodeConversionList.convert(CTS.UserList[user].nick + "\nwith the account name " + CTS.UserList[user].username + " changed their name to " + arguments[0].nick));
3122 if (CTS.enableSound === true) window.CTSSound.GREET.play();
3123 }
3124
3125 CTS.UserList[user].nick = arguments[0].nick;
3126 if (CTS.Me.handle == arguments[0].handle) CTS.Me.nick = arguments[0].nick;
3127 }
3128 debug();
3129 },
3130 stream_connected: function() {
3131 if (CTS.Host === CTS.Me.handle && CTS.GreenRoomToggle && arguments[0].publish == false && CTS.Me.handle !== arguments[0].handle && !CTS.Camera.List.includes(arguments[0].handle)) {
3132 //USER IS NOT ON CAMERA START AUTO ACCEPT PROCESS
3133 var user = User(arguments[0].handle);
3134 if (user != -1) {
3135 debug("CAMERA::WAITING", "nickname:" + CTS.UserList[user].nick);
3136 if (!CTS.GreenRoomIgnoreList.includes(CTS.UserList[user].username) && CTS.GreenRoomList.includes(CTS.UserList[user].username)) Send("stream_moder_allow", CTS.UserList[user].handle);
3137 }
3138 }
3139 debug();
3140 },
3141 stream_closed: function() {
3142 debug();
3143 },
3144 publish: function() { //ADD GLOBAL CAMERA
3145 CheckUserStream(arguments[0].handle, true);
3146 debug();
3147 },
3148 unpublish: function() { //REMOVE GLOBAL CAMERA
3149 CheckUserStream(arguments[0].handle, false);
3150 debug();
3151 },
3152 ping: function() {
3153 if (CTS.ScriptInit) {
3154 var verify;
3155 if (CTS.WatchList.length > 0) {
3156 verify = new Date() - CTS.WatchList[0][2];
3157 debug("WATCHLIST::LIST", CTS.WatchList);
3158 debug("WATCHLIST::VERIFYING", CTS.WatchList[0][0] + " " + verify + "/600000");
3159 if (CTS.SafeList.indexOf(CTS.WatchList[0][0]) === -1) { //LET'S NOT ADD TWICE
3160 if (verify > 600000) {
3161 debug("WATCHLIST::VERIFIED", CTS.WatchList[0][0] + " " + verify + "/600000");
3162 CTS.SafeList.push(CTS.WatchList[0][0]);
3163 CTS.WatchList.shift();
3164 }
3165 } else {
3166 CTS.WatchList.shift();
3167 }
3168 }
3169 if (CTS.WaitToVoteList.length > 0) {
3170 verify = new Date() - CTS.WaitToVoteList[0][1];
3171 debug("VOTE::LIST", CTS.WaitToVoteList);
3172 debug("VOTE::WAIT", CTS.WaitToVoteList[0][0] + " " + verify + "/300000");
3173 if (verify > 300000) {
3174 debug("VOTE::READY", CTS.WaitToVoteList[0][0] + " " + verify + "/300000");
3175 CTS.WaitToVoteList.shift();
3176 }
3177 }
3178 }
3179 //DISPOSE OF ITEMS
3180 window.TinychatApp.getInstance().defaultChatroom.packetWorker.queue = {};
3181 debug();
3182 },
3183 quit: function() {
3184 if (CTS.ScriptInit) {
3185 if (CTS.WatchList.length > 0) {
3186 var len = CTS.WatchList.length;
3187 for (var i = 0; i < len; i++) {
3188 if (CTS.WatchList[i][1] == arguments[0].handle) {
3189 CTS.WatchList.splice(i, 1);
3190 break;
3191 }
3192 }
3193 }
3194 if (CTS.Me.mod) RemoveUserCamera(arguments[0].handle);
3195 var user = User(arguments[0].handle);
3196 if (user != -1) {
3197 if (CTS.Me.handle === CTS.Host) {
3198 if (Fish.getPlayer(arguments[0].handle, true, false)) {
3199 Send("msg", CTS.Game.Fish.UserQuitLast + ", has slipped off the boat; I don't think we should look back.");
3200 }
3201 }
3202 //SEND THEM OUT
3203 AddUserNotification(2, CTS.UserList[user].namecolor, CTS.UserList[user].nick, CTS.UserList[user].username, true);
3204 CTS.UserList.splice(user, 1);
3205 }
3206 RoomUsers();
3207 if (CTS.Host == arguments[0].handle) {
3208 CTS.Host = 0;
3209 CTS.Camera.Sweep = false;
3210 if (CTS.Me.mod && CTS.Bot) {
3211 setTimeout(function(handle) {
3212 if (CTS.Host == 0) SetBot(false);
3213 }, (Rand(10, 30) * 1000), arguments[0].handle);
3214 }
3215 }
3216 }
3217 debug();
3218 },
3219 msg: function() {
3220 if (CTS.ScriptInit) {
3221 var user = User(arguments[0].handle);
3222 if (user != -1) {
3223 if (!SpamPrevention(arguments[0].text, CTS.UserList[user].mod)) {
3224 if (GamePrevention(arguments[0].text, CTS.UserList[user].mod)) {
3225 var text = HTMLtoTXT(arguments[0].text);
3226 //ALL USERS REPORT
3227 OwnerCommand(user, arguments[0].text);
3228 BotCheck(user, text, arguments[0]);
3229 //MODERATORS
3230 if (CTS.Me.mod) {
3231 if (CTS.Host == CTS.Me.handle) BotCommandCheck(user, text);
3232 CheckUserWordAbuse(user, arguments[0].text);
3233 }
3234
3235 if (!CheckUserIgnore(user) && !CheckUserTempIgnore(user) && IgnoreText(text)) {
3236 //PUSH MESSAGE
3237 CTS.Message[0].push({
3238 "time": Time(),
3239 "namecolor": CTS.UserList[user].namecolor,
3240 "avatar": CTS.UserList[user].avatar,
3241 "username": CTS.UserList[user].username,
3242 "nick": CTS.UserList[user].nick,
3243 "msg": CheckImgur(text),
3244 "mention": false
3245 });
3246 var msg = CTS.Message[0][CTS.Message[0].length - 1];
3247 if (CTS.Me.handle !== arguments[0].handle) {
3248 if (CTS.UserList[user].mod && (text.match(/^!autokick$/i) || text.match(/^!autoban$/i))) {
3249 Alert(GetActiveChat(), "?AntiSpam Watch List CLEARED!\nAnother user has initiated autokick/autoban.");
3250 CTS.AutoKick = false;
3251 CTS.AutoBan = false;
3252 }
3253 if (CTS.enableSound === true) {
3254 if (CTS.UserList.length <= 14) window.CTSSound.MSG.play();
3255 if (CTS.TTS.synth !== undefined && (CTS.TTSList.includes(CTS.UserList[user].username) || CTS.TTSList.includes(CTS.UserList[user].nick.toUpperCase()) || CTS.TTSList.includes("-ALL"))) TTS(CTS.UserList[user].nick + ((!text.match(/(?:^\!)|(?:https?|www|\uD83C\uDFB5)/gim)) ? " said, " + text : "is box banging!"));
3256 }
3257 var len = CTS.MentionList.length;
3258 for (var i = 0; i < len; i++) {
3259 if (text.toUpperCase().includes(CTS.MentionList[i])) {
3260 if (CTS.enableSound === true) window.CTSSound.MENTION.play();
3261 msg.mention = true;
3262 AddUserNotification(3, CTS.UserList[user].namecolor, CTS.UserList[user].nick, CTS.UserList[user].username, true);
3263 }
3264 }
3265 }
3266 if (GetActiveChat() === 0) CreateMessage(msg.time, msg.namecolor, msg.avatar, msg.username, msg.nick, msg.msg, msg.mention, 0);
3267 MessagePopUp(user, text, true, false);
3268 }
3269 }
3270 } else {
3271 if (CTS.Me.mod) Send("kick", arguments[0].handle);
3272 }
3273 }
3274 }
3275 debug();
3276 },
3277 pvtmsg: function() {
3278 if (CTS.ScriptInit) {
3279 if (CTS.enablePMs === true) {
3280 if (arguments[0].handle != CTS.Me.handle) {
3281 var user = User(arguments[0].handle);
3282 if (user != -1) {
3283 if (!SpamPrevention(arguments[0].text, CTS.UserList[user].mod)) {
3284 if (GamePrevention(arguments[0].text, CTS.UserList[user].mod)) {
3285 var text = arguments[0].text;
3286 if (CTS.Me.mod) CheckUserWordAbuse(user, arguments[0].text);
3287 if (!CheckUserIgnore(user) && !CheckUserTempIgnore(user) && IgnoreText(text)) {
3288 if (!CTS.Message[arguments[0].handle]) CTS.Message[arguments[0].handle] = [];
3289 PushPM(arguments[0].handle, text, user);
3290 if (CTS.enableSound === true) {
3291 window.CTSSound.PVTMSG.play();
3292 if (CTS.TTS.synth !== undefined && (CTS.TTSList.includes(CTS.UserList[user].username) || CTS.TTSList.includes(CTS.UserList[user].nick.toUpperCase()) || CTS.TTSList.includes("-ALL"))) TTS(CTS.UserList[user].nick + ((!text.match(/(?:^\!)|(?:https?|www)/gim)) ? " said, " + text : "is box banging!"));
3293 }
3294 MessagePopUp(user, CheckImgur(HTMLtoTXT(text)), false, false);
3295 }
3296 }
3297 } else {
3298 if (CTS.Me.mod) Send("kick", arguments[0].handle);
3299 }
3300 }
3301 }
3302 }
3303 }
3304 debug();
3305 },
3306 gift: function(parse) {
3307 window.DebugClear = false;
3308 Alert(GetActiveChat(), "USER HAS SENT A GIFT--CHECK PACKET OUT!!!\n");
3309 //coming soon a handler near you! :D
3310 console.log(parse);
3311 debug();
3312 },
3313 yut_playlist_add: function() {
3314 if (CTS.ScriptInit) {
3315 if (!CTS.YouTube.Playing) {
3316 if (CTS.PlayListStart === true) CTS.PlayListStart = false;
3317 if (CTS.Host != CTS.Me.handle) {
3318 Send("msg", "!play");
3319 } else {
3320 YouTubePlayList();
3321 }
3322 }
3323 }
3324 debug();
3325 },
3326 yut_playlist: function() {
3327 if (CTS.ScriptInit) {
3328 if (CTS.Me.mod && CTS.Me.handle == CTS.Host) {
3329 if (CTS.YouTube.Clear === true) {
3330 if (arguments[0].items !== null) Send("yut_playlist_clear");
3331 CTS.YouTube.MessageQueueList = [];
3332 Send("msg", "?YouTube cleared!?");
3333 CTS.YouTube.Clear = false;
3334 } else {
3335 if (arguments[0].items === null) {
3336 CTS.PlayListStart = true;
3337 } else {
3338 CTS.YouTube.PlayListCount = arguments[0].items.length;
3339 CTS.PlayListStart = false;
3340 if (CTS.YouTube.ShowQueue === true) {
3341 var msg = "?" + CTS.YouTube.PlayListCount + " track(s) in queue!?";
3342 for (var i = 0; i < 3; i++) {
3343 if (arguments[0].items[i] === undefined) break;
3344 msg = msg + "\n" + (i + 1) + ": " + arguments[0].items[i].title + "\n[" + Math.floor(arguments[0].items[i].duration / 60) + "M" + (arguments[0].items[i].duration % 60) + "S]";
3345 }
3346 Send("msg", msg);
3347 }
3348 }
3349 if (arguments[0].items !== null && CTS.Host == CTS.Me.handle && CTS.YouTube.Playing === false) CheckYouTube("https://www.youtube.com/watch?v=" + arguments[0].items[0].id, false);
3350 }
3351 CTS.YouTube.ShowQueue = false;
3352 }
3353 }
3354 debug();
3355 },
3356 yut_play: function() {
3357 if (CTS.ScriptInit) {
3358 if (CTS.YouTube.CurrentTrack.ID != arguments[0].item.id) {
3359 CTS.YouTube.CurrentTrack.ID = arguments[0].item.id;
3360 CTS.YouTube.CurrentTrack.duration = arguments[0].item.duration;
3361 CTS.YouTube.CurrentTrack.title = arguments[0].item.title;
3362 CTS.YouTube.CurrentTrack.thumbnail = arguments[0].item.image;
3363 MessagePopUp(-1, CTS.YouTube.CurrentTrack.title + " is now playing!", true, true);
3364 }
3365 CTS.YouTube.Playing = true;
3366 YouTubePlayList();
3367 }
3368 debug();
3369 },
3370 yut_stop: function() {
3371 if (CTS.ScriptInit) {
3372 CTS.YouTube.CurrentTrack.ID = undefined;
3373 CTS.YouTube.CurrentTrack.duration = undefined;
3374 CTS.YouTube.CurrentTrack.title = undefined;
3375 CTS.YouTube.CurrentTrack.thumbnail = undefined;
3376 CTS.YouTube.Playing = false;
3377 YouTubePlayList();
3378 }
3379 debug();
3380 }
3381 };
3382 var ServerOutList = {
3383 pvtmsg: function() {
3384 if (CTS.ScriptInit) {
3385 Command(arguments[0].text, true);
3386 var text = arguments[0].text;
3387 if (!CTS.Message[arguments[0].handle]) CTS.Message[arguments[0].handle] = [];
3388 PushPM(arguments[0].handle, text);
3389 }
3390 debug();
3391 },
3392 msg: function() {
3393 if (CTS.ScriptInit) {
3394 CTS.LastMessage = new Date();
3395 Command(arguments[0].text, false);
3396 }
3397 debug();
3398 },
3399 ban: function() {
3400 CheckSafeList(arguments[0].handle, true);
3401 debug();
3402 },
3403 kick: function() {
3404 CheckSafeList(arguments[0].handle, true);
3405 debug();
3406 },
3407 stream_moder_close: function() {
3408 CheckSafeList(arguments[0].handle, true);
3409 debug();
3410 }
3411 };
3412 //ADDON
3413 var Addon = {
3414 active: function() {
3415 if (window.CTSAddon !== undefined) {
3416 if (window.CTSAddon[arguments[0]] !== undefined) {
3417 return true;
3418 }
3419 }
3420 return false;
3421 },
3422 get: function() {
3423 return window.CTSAddon[arguments[0]];
3424 }
3425 };
3426 //XMLHttpRequest
3427 CTS.YouTube.XHR.onload = function() {
3428 var response = JSON.parse(CTS.YouTube.XHR.responseText);
3429 if (response.error) {
3430 Send("msg", "⛔" + ((response.error.errors[0].reason) ? response.error.errors[0].reason : "Track could not be added!") + "⛔");
3431 } else {
3432 if (response.kind == "youtube#playlistItemListResponse" && response.nextPageToken === undefined && response.items.length === 0) {
3433 CTS.YouTube.ListBuilt = true;
3434 Send("msg", "?Found " + CTS.YouTube.MessageQueueList.length + " tracks!\nThis may take a few moments to add, requests can be made shortly.?");
3435 CTS.YouTube.DataReady = true;
3436 CTS.YouTube.Busy = false;
3437 YouTubeTrackAdd();
3438 }
3439 CTS.YouTube.DataReady = false;
3440 if (response.items[0]) {
3441 CTS.YouTube.Busy = true;
3442 if (response.items[0].id) {
3443 if (response.kind == "youtube#playlistItemListResponse") {
3444 YouTubePlayListItems(response.items);
3445 } else {
3446 CTS.YouTube.VideoID = response.items[0].id.videoId;
3447 CTS.YouTube.XHR.open("GET", "https://www.googleapis.com/youtube/v3/videos?id=" + CTS.YouTube.VideoID + "&type=video&eventType=completed&part=contentDetails,snippet&fields=items/snippet/title,items/snippet/thumbnails/medium,items/contentDetails/duration&eventType=completed&key=" + CTS.YouTube.API_KEY);
3448 CTS.YouTube.XHR.send();
3449 }
3450 } else if (response.items[0].contentDetails.duration) {
3451 CTS.YouTube.DataReady = true;
3452 }
3453 if (CTS.YouTube.DataReady === false) {
3454 CTS.YouTube.Busy = false;
3455 if (response.kind == "youtube#searchListResponse") CTS.YouTube.XHR.videoid = response.items[0].id.videoId;
3456 if (response.kind == "youtube#playlistItemListResponse") {
3457 CTS.YouTube.ListBuilt = true;
3458 Send("msg", "?Adding " + CTS.YouTube.MessageQueueList.length + " track(s) to queue!?\nEnjoy!");
3459 CTS.YouTube.Busy = false;
3460 }
3461 } else {
3462 CTS.YouTube.VideoID = (CTS.YouTube.XHR.videoid) ? CTS.YouTube.XHR.videoid : CTS.YouTube.MessageQueueList[0].snippet.resourceId.videoId;
3463 if (CTS.YouTube.Playing === true) {
3464 MessagePopUp(-1, "Added " + ((response.items[0] === undefined) ? response.items.snippet.title : response.items[0].snippet.title), true, true);
3465 Send("yut_playlist_add", [CTS.YouTube.VideoID, YouTubeTimeConvert(response.items[0].contentDetails.duration), ((response.items[0] === undefined) ? response.items.snippet.title : response.items[0].snippet.title), (response.items[0] === undefined) ? response.items.snippet.thumbnails.medium.url : response.items[0].snippet.thumbnails.medium.url]);
3466 CTS.YouTube.Busy = false;
3467 } else {
3468 if (response.items[0].snippet.title !== undefined) {
3469 Send("yut_play", [CTS.YouTube.VideoID, YouTubeTimeConvert(response.items[0].contentDetails.duration), response.items[0].snippet.title, response.items[0].snippet.thumbnails.medium.url, 0]);
3470 Send("yut_playlist_remove", [CTS.YouTube.XHR.videoid, YouTubeTimeConvert(response.items[0].contentDetails.duration), response.items[0].snippet.title, response.items[0].snippet.thumbnails.medium.url]);
3471 CTS.YouTube.Playing = true;
3472 }
3473 CTS.YouTube.Busy = false;
3474 }
3475 }
3476 }
3477 if (CTS.YouTube.SearchReturn === true || (CTS.YouTube.SearchReturn === false && CTS.YouTube.VideoReturn === true && CTS.YouTube.XHR.type === true)) {
3478 var title = "";
3479 CTS.YouTube.SearchReturn = false;
3480 CTS.YouTube.VideoReturn = false;
3481 if (response.items[0] !== undefined) {
3482 if (response.items[0].length > 0) title = response.items[0].snippet.title;
3483 }
3484 if (response.items !== undefined) {
3485 if (response.items.length > 0) title = response.items[0].snippet.title;
3486 }
3487 Send("msg", ((title === "") ? "⛔Track could not be added!⛔" : "?Added " + DecodeTXT(title) + " to queue!?"));
3488 }
3489 if (CTS.YouTube.MessageQueueList.length > 0) YouTubeTrackAdd();
3490 }
3491 };
3492 //Chuck Norris Jokes API (https://api.chucknorris.io/)
3493 CTS.Chuck.XHR.onload = function() {
3494 var resp = JSON.parse(CTS.Chuck.XHR.responseText),
3495 msg = "[CHUCK NORRIS]\n" + resp.value;
3496 if (resp !== null) Send("msg", msg.substr(0, 499));
3497 };
3498 //https://api.Urb.com/
3499 CTS.Urb.XHR.onload = function() {
3500 var resp = JSON.parse(CTS.Urb.XHR.responseText),
3501 msg = "[URBAN DICTIONARY]\n" + ((resp.list[0] !== undefined) ? resp.list[0].word + "\n" + resp.list[0].definition : "Nothing was found!");
3502 if (resp !== null) Send("msg", msg.substr(0, 499));
3503 };
3504 //icanhazdadjoke API (https://icanhazdadjoke.com/)
3505 CTS.Dad.XHR.onload = function() {
3506 var resp = JSON.parse(CTS.Dad.XHR.responseText),
3507 msg = "[DAD JOKE]\n" + resp.joke;
3508 if (resp !== null) Send("msg", msg.substr(0, 499));
3509 };
3510 //adviceslip API (https://api.adviceslip.com/advice)
3511 CTS.Advice.XHR.onload = function() {
3512 var resp = JSON.parse(CTS.Advice.XHR.responseText),
3513 msg = "[ADVICE]\n" + resp.slip.advice;
3514 if (resp !== null) Send("msg", msg.substr(0, 499));
3515 };
3516 //GAME LIST FUNCTION
3517 var Fish = {
3518 //INIT
3519 init: function() {
3520 if (CTS.Me.handle == CTS.Host && CTS.CanHostGames === true) {
3521 Send("msg", "[FISH]\n!fish at any time and upgrade your way up!\n\n!gameview to show/hide game.\n\nRemember there's a five second delay for all commands, don't spam!\nFor commands type !fishhelp!");
3522 CTS.Game.Fish.StartTimeout = setTimeout(function(g) {
3523 g.cast();
3524 }, 5000, this);
3525 }
3526 },
3527 //PLAYERS
3528 addPlayer: function(handle, username, nickname) {
3529 if (!this.getPlayer(handle, false, false) && CTS.CanHostGames === true) {
3530 if (isSafeListed(username)) {
3531 CTS.Game.Fish.Player.push({
3532 Handle: handle,
3533 Username: username,
3534 Nickname: nickname,
3535 LastCheck: new Date() - 5000,
3536 Points: 5000,
3537 Upgrades: {
3538 Net: 1,
3539 Store: 1,
3540 Radar: 1,
3541 Insurance: false
3542 },
3543 });
3544 Send("msg", "[FISHING BOAT]\n" + nickname.substr(0, 16) + "...\n has jumped aboard.\nType !fishhelp for commands if you don't already know!");
3545 if (this.getPlayer() == 0) this.init();
3546 }
3547 }
3548 },
3549
3550 getPlayer: function(handle, del, exists) {
3551 var len = CTS.Game.Fish.Player.length;
3552 if (handle !== undefined) {
3553 for (var player = 0; player < len; player++) {
3554 if (CTS.Game.Fish.Player[player].Handle == handle) {
3555 if (exists) return CTS.Game.Fish.Player[player];
3556 if (del) {
3557 CTS.Game.Fish.UserQuitLast = CTS.Game.Fish.Player[player].Nickname;
3558 CTS.Game.Fish.Player.splice(player, 1);
3559 }
3560 if (!exists) return true;
3561 }
3562 }
3563 if (!exists) {
3564 return false;
3565 } else {
3566 return -1;
3567 }
3568 } else {
3569 return len - 1;
3570 }
3571 },
3572
3573 listPlayers: function() {
3574 var msg = "[FISHING BOAT]\nTOP 5 PLAYERS:\n",
3575 place = 0;
3576 for (var u = arguments[0]; u >= 0; u--) {
3577 place++;
3578 if (u < 5) {
3579 msg += place + ":" + CTS.Game.Fish.Player[u].Nickname + "[$" + CTS.Game.Fish.Player[u].Points + "]\n";
3580 }
3581 CTS.Game.Fish.Player[u].Upgrades.Insurance = false;
3582 CTS.Game.Fish.Player[u].Points += 10000;
3583 }
3584 Send("msg", msg);
3585 },
3586
3587 winner: function() {
3588 CTS.Game.Fish.Player.sort(function(a, b) {
3589 return a.Points - b.Points;
3590 });
3591 if (CTS.Game.Fish.HighScore[1] < CTS.Game.Fish.Player[0].Points) {
3592 Send("msg", "[FISHING HIGH SCORE]\nNEW HIGH SCORE,\nKeep going " + CTS.Game.Fish.Player[0].Nickname + "!");
3593 CTS.Game.Fish.HighScore = [CTS.Game.Fish.Player[0].Nickname, CTS.Game.Fish.Player[0].Points];
3594 Save("FishHighScore", JSON.stringify(CTS.Game.Fish.HighScore));
3595 }
3596 var len = CTS.Game.Fish.Player.length - 1;
3597 Send("msg", "[FISHING BOAT HIGH SCORE]\nHIGH SCORE:\n" + CTS.Game.Fish.HighScore[0] + " : $" + CTS.Game.Fish.HighScore[1] + "\n\nROUND WINNER:\n" + CTS.Game.Fish.Player[len].Nickname + " : $" + CTS.Game.Fish.Player[len].Points + "!\n\nNext round will start in thirty seconds!");
3598 this.listPlayers(len);
3599 CTS.Game.Fish.RestockTimeout = setTimeout(function(g) {
3600 g.reset(false, true);
3601 }, 30000, this);
3602 },
3603 //PRICELIST
3604 pricelist: function(playerExist, item) {
3605 if (item == 0) { // net
3606 return (1000 * playerExist.Upgrades.Net * playerExist.Upgrades.Net * playerExist.Upgrades.Net);
3607 } else if (item == 1) { // radar
3608 return (1000 * playerExist.Upgrades.Radar * 2) + 3500;
3609 } else if (item == 2) { // shop
3610 return (playerExist.Upgrades.Store * playerExist.Upgrades.Store * 25000);
3611 } else if (item == 3) { // insurance
3612 return (20000);
3613 } else if (item == 4) { // rob
3614 return (10000);
3615 } else if (item == 5) { // slap
3616 return (50000);
3617 } else if (item == 6) { // split (min$) / gamble
3618 return (1000);
3619 }
3620 },
3621 //GAMEPLAY
3622 cast: function() {
3623 clearTimeout(CTS.Game.Fish.StartTimeout);
3624 if (CTS.Host === CTS.Me.handle) {
3625 if (this.getPlayer() >= 0) {
3626 if (CTS.Game.Fish.Round < 10) {
3627 CTS.Game.Fish.Round++;
3628 var playerlen,
3629 fishlen = CTS.Game.Fish.TypesOfFish.length - 1,
3630 id,
3631 type,
3632 handle,
3633 eliminate = false,
3634 msgeliminate,
3635 value,
3636 msg = "[FISHING BOAT]\n";
3637 for (var cast = 0; cast <= 2; cast++) {
3638 playerlen = this.getPlayer();
3639 id = Rand(0, playerlen);
3640 type = Rand(CTS.Game.Fish.Player[id].Upgrades.Radar, fishlen);
3641 if (Rand(0, 100) <= Rand(10, 70)) {
3642 var net = Rand(1, CTS.Game.Fish.Player[id].Upgrades.Net);
3643 value = (net * CTS.Game.Fish.TypesOfFish[type][1] * 40 * CTS.Game.Fish.Player[id].Upgrades.Store);
3644 if (CTS.Game.Fish.TypesOfFish[type][2] === true) {
3645 CTS.Game.Fish.Player[id].Points += value;
3646 msg += (CTS.Game.Fish.Player[id].Nickname.substr(0, 16) + "...[$" + CTS.Game.Fish.Player[id].Points + "]:\n?" + net + " x " + CTS.Game.Fish.TypesOfFish[type][0] + " +$" + value + "\n");
3647 } else {
3648 if (!CTS.Game.Fish.Player[id].Upgrades.Insurance) {
3649 CTS.Game.Fish.Player[id].Points -= value;
3650 msg += (CTS.Game.Fish.Player[id].Nickname.substr(0, 16) + "..." + ((CTS.Game.Fish.Player[id].Points < 0) ? "[broke]" : "[$" + CTS.Game.Fish.Player[id].Points + "]") + ":\n?" + CTS.Game.Fish.TypesOfFish[type][0] + " -$" + value + "\n");
3651 } else {
3652 msg += (CTS.Game.Fish.Player[id].Nickname.substr(0, 16) + "...[$" + CTS.Game.Fish.Player[id].Points + "]:\n?" + net + " x " + CTS.Game.Fish.TypesOfFish[type][0] + " -$0\n");
3653 }
3654 }
3655 } else {
3656 cast--;
3657 }
3658 if (this.getPlayer() == -1) break;
3659 if (CTS.Game.Fish.Player[id].Points < 0) {
3660 eliminate = true;
3661 handle = CTS.Game.Fish.Player[id].Handle;
3662 msgeliminate = "[FISHING BOAT]\n" + (CTS.Game.Fish.Player[id].Nickname.substr(0, 16) + "...\nCan walk the plank for costing me my moneys!");
3663 CTS.Game.Fish.Player.splice(id, 1);
3664 break;
3665 }
3666 }
3667 if (msg !== "[FISHING BOAT]\n") Send("msg", msg);
3668 if (eliminate) {
3669 eliminate = false;
3670 Send("msg", msgeliminate);
3671 }
3672 CTS.Game.Fish.ReCastTimeout = setTimeout(function(g) {
3673 g.cast();
3674 }, Rand(90000, 120000), this);
3675 } else {
3676 this.winner();
3677 }
3678 } else {
3679 //RESTART
3680 Fish.stop();
3681 }
3682 }
3683 },
3684 //STOPPERS
3685 reset: function(stop, bypass) {
3686 var get = this.getPlayer();
3687 if (get !== undefined) {
3688 if (get >= 0 && !CTS.Game.NoReset || bypass !== undefined) {
3689 CTS.Game.Fish.Round = 0;
3690 clearTimeout(CTS.Game.Fish.StartTimeout);
3691 clearTimeout(CTS.Game.Fish.RestockTimeout);
3692 clearTimeout(CTS.Game.Fish.ReCastTimeout);
3693 clearTimeout(CTS.Game.Fish.NotEnoughTimeout);
3694 if (!stop) {
3695 this.init();
3696 } else {
3697 if (CTS.Game.Fish.Player.length > 0) Send("msg", "[FISHING BOAT]\nWelp... Boat sank! I'm not refunding anyone!");
3698 CTS.Game.Fish.Player = [];
3699 }
3700 }
3701 }
3702 },
3703
3704 stop: function() {
3705 CTS.Game.NoReset = false;
3706 this.reset(true, true);
3707 }
3708 };
3709 var FishList = {
3710 fish: function(playerExist, user) {
3711 Fish.addPlayer(user.handle, user.username, user.nick);
3712 },
3713
3714 fishbank: function(playerExist) {
3715 if (playerExist !== -1 && FishTimerCheck(playerExist)) Send("msg", "[FISHING BOAT]\n" + playerExist.Nickname.substr(0, 16) + ", you have $" + playerExist.Points + ".");
3716 },
3717
3718 fishrob: function(playerExist, target) {
3719 if (playerExist !== -1 && FishTimerCheck(playerExist)) {
3720 var CanEliminate = Fish.getPlayer(UsernameToHandle(target.toUpperCase()), false, true);
3721 FishTransfer(playerExist, CanEliminate, Fish.pricelist(playerExist, 4), Rand(5000, 20000), true);
3722 }
3723 },
3724 fishgamble: function(playerExist) {
3725 if (playerExist !== -1 && FishTimerCheck(playerExist)) {
3726 if (FishTransaction(playerExist, Fish.pricelist(playerExist, 6))) {
3727 var winnings;
3728 if (Rand(1, 10) === 7) { // 10% chance
3729 winnings = Rand(1000, 25000);
3730 playerExist.Points += winnings;
3731 Send("msg", "[FISHING BOAT]\n" + playerExist.Nickname + " you've won $" + winnings);
3732 } else {
3733 if (Rand(1, 7) === 4) { // 15%
3734 winnings = Rand(1000, 5000);
3735 playerExist.Points += winnings;
3736 Send("msg", "[FISHING BOAT]\n" + playerExist.Nickname + " you've won $" + winnings);
3737 } else {
3738 Send("msg", "[FISHING BOAT]\n" + playerExist.Nickname + " tough luck, you lost $1000!");
3739 }
3740 }
3741 }
3742 }
3743 },
3744 fishslap: function(playerExist, target) {
3745 if (playerExist !== -1 && FishTimerCheck(playerExist)) {
3746 var user = UsernameToUser(target.toUpperCase());
3747 if (user !== -1) {
3748 if (CTS.UserList[user].broadcasting && CTS.UserList[user].handle !== CTS.Me.handle) {
3749 if (CTS.Me.owner || !CTS.UserList[user].mod) {
3750 if (FishTransaction(playerExist, Fish.pricelist(playerExist, 5))) {
3751 Send("stream_moder_close", CTS.UserList[user].handle);
3752 Send("msg", playerExist.Nickname + " has paid to close your camera " + CTS.UserList[user].nick + "!");
3753 }
3754 } else {
3755 Send("msg", "Cannot close moderator!");
3756 }
3757 } else {
3758 Send("msg", "Cannot close user!");
3759 }
3760 }
3761 }
3762 },
3763
3764 fishsplit: function(playerExist, target) {
3765 if (playerExist !== -1 && FishTimerCheck(playerExist)) {
3766 var CanEliminate = Fish.getPlayer(UsernameToHandle(target.toUpperCase()), false, true);
3767 FishTransfer(playerExist, CanEliminate, Fish.pricelist(playerExist, 6), Math.round(playerExist.Points / 2), false);
3768 }
3769 },
3770
3771 fishupgrade: function(playerExist) {
3772 if (playerExist !== -1 && FishTimerCheck(playerExist)) FishUpgradeStatus(playerExist, 0);
3773 },
3774
3775 fishhelp: function(playerExist) {
3776 if (playerExist !== -1 && FishTimerCheck(playerExist)) FishUpgradeStatus(playerExist, 6);
3777 },
3778
3779 fishupgradenet: function(playerExist) {
3780 if (playerExist !== -1 && FishTimerCheck(playerExist)) {
3781 if (playerExist.Upgrades.Net >= 10) {
3782 Send("msg", playerExist.Nickname + ", you own all upgrades.");
3783 } else {
3784 if (FishTransaction(playerExist, Fish.pricelist(playerExist, 0))) {
3785 playerExist.Upgrades.Net += 1;
3786 FishUpgradeStatus(playerExist, 1);
3787 }
3788 }
3789 }
3790 },
3791
3792 fishupgradeshop: function(playerExist) {
3793 if (playerExist !== -1 && FishTimerCheck(playerExist)) {
3794 if (playerExist.Upgrades.Store >= 6) {
3795 Send("msg", playerExist.Nickname + ", you own them all already!");
3796 } else {
3797 if (FishTransaction(playerExist, Fish.pricelist(playerExist, 2))) {
3798 playerExist.Upgrades.Store += 1;
3799 FishUpgradeStatus(playerExist, 4);
3800 }
3801 }
3802 }
3803 },
3804
3805 fishupgraderadar: function(playerExist) {
3806 if (playerExist !== -1 && FishTimerCheck(playerExist)) {
3807 if (playerExist.Upgrades.Radar >= 20) {
3808 Send("msg", playerExist.Nickname + ", you own all upgrades.");
3809 } else {
3810 if (FishTransaction(playerExist, Fish.pricelist(playerExist, 1))) {
3811 playerExist.Upgrades.Radar += 5;
3812 FishUpgradeStatus(playerExist, 2);
3813 }
3814 }
3815 }
3816 },
3817
3818 fishupgradeinsurance: function(playerExist) {
3819 if (playerExist !== -1 && FishTimerCheck(playerExist)) {
3820 if (playerExist.Upgrades.Insurance === true) {
3821 Send("msg", playerExist.Nickname + ", you already have insurance!");
3822 } else {
3823 if (FishTransaction(playerExist, Fish.pricelist(playerExist, 3))) {
3824 playerExist.Upgrades.Insurance = true;
3825 FishUpgradeStatus(playerExist, 3);
3826 }
3827 }
3828 }
3829 }
3830 };
3831 //MISC FUNCTION
3832 function debug() {
3833 if (window.DebugClear === false) {
3834 if (arguments[0] !== undefined) {
3835 var msg = "CTS::" + arguments[0];
3836 if (arguments[1]) msg = msg + "\n" + JSON.stringify(arguments[1]);
3837 console.log(msg);
3838 }
3839 } else {
3840 console.clear();
3841 }
3842 }
3843
3844 function Reset() {
3845 CTS.UserList = [];
3846 CTS.Me = [];
3847 CTS.Room = [];
3848 CTS.SendQueue = [];
3849 CTS.Camera.List = [];
3850 CTS.Camera.List = [];
3851 CTS.WaitToVoteList = [];
3852 CTS.WatchList = [];
3853 CTS.Host = 0;
3854 CTS.HostAttempt = 0;
3855 CTS.HostWaiting = false;
3856 CTS.TempIgnoreList = [];
3857 // Fish Reset
3858 Fish.stop();
3859 }
3860
3861 function Remove() {
3862 return (arguments[1] !== undefined) ? arguments[0].querySelector(arguments[1]).parentNode.removeChild(arguments[0].querySelector(arguments[1])) : arguments[0].parentNode.removeChild(arguments[0]);
3863 }
3864})();