From c905280125b9983327c79b21ef4766b261018c53 Mon Sep 17 00:00:00 2001 From: Nick Bensema Date: Mon, 2 Sep 2013 23:36:19 -0700 Subject: [PATCH 01/10] Added /clean command to clear a user's additions from a channel Any user with playlistdelete permission can now use the /clean command to wipe out a user's additions to the playlist. This can be helpful for taking down abusive items en masse without resetting the entire playlist. The code should probably be generalized, somehow, to handle title patterns or additions within a certain timeframe. --- chatcommand.js | 45 +++++++++++++++++++++++++++++++++++++++++++++ ullist.js | 17 +++++++++++++++++ 2 files changed, 62 insertions(+) diff --git a/chatcommand.js b/chatcommand.js index 1ad2d946..97fd303e 100644 --- a/chatcommand.js +++ b/chatcommand.js @@ -88,6 +88,9 @@ function handle(chan, user, msg, data) { else if(msg.indexOf("/clear") == 0) { handleClear(chan, user); } + else if(msg.indexOf("/clean ") == 0) { + handleClean(chan, user, msg.substring(7)); + } } function handleMute(chan, user, args) { @@ -240,5 +243,47 @@ function handleClear(chan, user) { chan.sendAll("clearchat"); } + +/** +Remove all videos by a particular user. +*/ +function handleClean(chan, user, target) { + if(!chan.hasPermission(user, "playlistdelete")) { + return; + } + // you can use regexps, in case someone tries + // to fool you with cyrillic or something. + target = new RegExp(target); + var uid = false; // to skip first chan.sendAll() + // local variables for deleteNext() callback + var pl = chan.playlist; + var count = 0; + var deleteNext; + // this callback will search for matching items, + // and if one is found, call the remove method + // with itself as the callback to execute after + // the remove is finished. + deleteNext = function() { + // notify channel that this is deleted + if (uid !== false) { + chan.sendAll("delete", { + uid: uid + }); + } + // find next match + uid = pl.items.findSubmitter(target); + if (uid !== false) { + // remove, and restart callback when removed. + pl.remove(uid, deleteNext); + } else { + // refresh playlist only once, at the end + chan.broadcastPlaylistMeta(); + } + } + // start initial callback + deleteNext(); + return; +} + exports.handle = handle; diff --git a/ullist.js b/ullist.js index 24785fad..4838e4ad 100644 --- a/ullist.js +++ b/ullist.js @@ -181,4 +181,21 @@ ULList.prototype.findVideoId = function (id) { return false; }; +/** +returns the UID of the first item in the queue that +was submitted by a user matching the target regexp. +*/ +ULList.prototype.findSubmitter = function(target) { + var item = this.first; + + while(item !== null) { + if(item.queueby && target.test(item.queueby)) { + console.log("found", item.uid, target, item.queueby); + return item.uid; + } + item = item.next; + } + return false; +} + exports.ULList = ULList; From 48de4710643ee429f1bc386fa2ee336f3046f94b Mon Sep 17 00:00:00 2001 From: Nick Bensema Date: Tue, 3 Sep 2013 21:28:12 -0700 Subject: [PATCH 02/10] made slightly more efficient in response to comments --- chatcommand.js | 19 +++++++------------ ullist.js | 23 ++++++++--------------- 2 files changed, 15 insertions(+), 27 deletions(-) diff --git a/chatcommand.js b/chatcommand.js index 97fd303e..82928d12 100644 --- a/chatcommand.js +++ b/chatcommand.js @@ -254,26 +254,21 @@ function handleClean(chan, user, target) { // you can use regexps, in case someone tries // to fool you with cyrillic or something. target = new RegExp(target); - var uid = false; // to skip first chan.sendAll() // local variables for deleteNext() callback var pl = chan.playlist; var count = 0; + var matches = pl.items.findAll(function(item) { + return target.test(item.queueby); + }); + console.log(matches); var deleteNext; - // this callback will search for matching items, - // and if one is found, call the remove method - // with itself as the callback to execute after - // the remove is finished. deleteNext = function() { - // notify channel that this is deleted - if (uid !== false) { + if (count < matches.length) { + var uid=matches[count].uid; + count += 1 chan.sendAll("delete", { uid: uid }); - } - // find next match - uid = pl.items.findSubmitter(target); - if (uid !== false) { - // remove, and restart callback when removed. pl.remove(uid, deleteNext); } else { // refresh playlist only once, at the end diff --git a/ullist.js b/ullist.js index 4838e4ad..5b018792 100644 --- a/ullist.js +++ b/ullist.js @@ -181,21 +181,14 @@ ULList.prototype.findVideoId = function (id) { return false; }; -/** -returns the UID of the first item in the queue that -was submitted by a user matching the target regexp. -*/ -ULList.prototype.findSubmitter = function(target) { - var item = this.first; - - while(item !== null) { - if(item.queueby && target.test(item.queueby)) { - console.log("found", item.uid, target, item.queueby); - return item.uid; - } - item = item.next; - } - return false; +ULList.prototype.findAll = function(fn) { + var result = []; + this.forEach(function(item) { + if( fn(item) ) { + result.push(item); + } + }); + return result; } exports.ULList = ULList; From 507a97b4db584e78a9639ae729ad364579159a1a Mon Sep 17 00:00:00 2001 From: Nick Bensema Date: Wed, 4 Sep 2013 19:27:48 -0700 Subject: [PATCH 03/10] Added /cleantitle, and -i option to ignore case. Fix #257, you should be able to clear username and title patterns now with ease. For best results, wait until they've wasted a lot of time adding a lot of videos before you wipe them. --- chatcommand.js | 40 ++++++++++++++++++++++++++++++++-------- 1 file changed, 32 insertions(+), 8 deletions(-) diff --git a/chatcommand.js b/chatcommand.js index 82928d12..ec0b9613 100644 --- a/chatcommand.js +++ b/chatcommand.js @@ -91,6 +91,9 @@ function handle(chan, user, msg, data) { else if(msg.indexOf("/clean ") == 0) { handleClean(chan, user, msg.substring(7)); } + else if(msg.indexOf("/cleantitle ") == 0) { + handleCleanTitle(chan, user, msg.substring(12)); + } } function handleMute(chan, user, args) { @@ -243,24 +246,45 @@ function handleClear(chan, user) { chan.sendAll("clearchat"); } +var user_input_re = /^(-[img]+\s+)/i + +function user_input_regexp(target) { + var m = target.match(user_input_re); + var flags = ""; + if (m) { + flags = m[0].slice(1,-1); + target = target.replace(user_input_re, ""); + } + return new RegExp(target, flags); +} + +function handleClean(chan, user, target) { + // you can use regexps, in case someone tries + // to fool you with cyrillic or something. + target = user_input_regexp(target); + cleanPlaylist(chan, user, function(item) { + return target.test(item.queueby); + }); +} + +function handleCleanTitle(chan, user, target) { + target = user_input_regexp(target); + cleanPlaylist(chan, user, function(item) { + return target.exec(item.media.title) !== null; + }); +} /** Remove all videos by a particular user. */ -function handleClean(chan, user, target) { +function cleanPlaylist(chan, user, filter) { if(!chan.hasPermission(user, "playlistdelete")) { return; } - // you can use regexps, in case someone tries - // to fool you with cyrillic or something. - target = new RegExp(target); // local variables for deleteNext() callback var pl = chan.playlist; var count = 0; - var matches = pl.items.findAll(function(item) { - return target.test(item.queueby); - }); - console.log(matches); + var matches = pl.items.findAll(filter); var deleteNext; deleteNext = function() { if (count < matches.length) { From cbaa1f04e9d31d127d6c53542d2162d675a506ac Mon Sep 17 00:00:00 2001 From: Nick Bensema Date: Wed, 4 Sep 2013 19:39:38 -0700 Subject: [PATCH 04/10] Added online help for /clean and /cleantitle --- www/help.html | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/www/help.html b/www/help.html index 38eb2219..6d4d8c2e 100644 --- a/www/help.html +++ b/www/help.html @@ -135,6 +135,16 @@ Moderators The chat buffer is cleared + +
/clean username
+ Moderators + All items in the playlist that were added by that user are cleared. + + +
/cleantitle [-i] regexp
+ Moderators + All items in the playlist that have a title matching the regexp are cleared. Use the -i flag to ignore case. +

There are also some other chat features. When your name appears in a message, the message will be highlighted. If you type the beginning of someone's name in chat, pressing tab will attempt to autocomplete the name.

From 1ddba6d39b12b5ef0850dcc7cb947082116a38e6 Mon Sep 17 00:00:00 2001 From: Nick Bensema Date: Wed, 4 Sep 2013 20:46:57 -0700 Subject: [PATCH 05/10] Removed help.html since it's not used anymore. --- www/help.html | 358 -------------------------------------------------- 1 file changed, 358 deletions(-) delete mode 100644 www/help.html diff --git a/www/help.html b/www/help.html deleted file mode 100644 index 6d4d8c2e..00000000 --- a/www/help.html +++ /dev/null @@ -1,358 +0,0 @@ - - - - - CyTube - Help - - - - - - - - - - - - - - -
-
-
- -

Troubleshooting

-

There are many reasons why you might encounter issues with CyTube. Below are some common steps to isolate and identify the problem.

-
    -
  • Try a different browser. CyTube is tested in Firefox and Chromium, but you may find a browser-specific issue I don't know about
  • -
  • Make sure HTTPS Everywhere (if you have this extension) is disabled for YouTube. This is known not to be compatible
  • -
  • Try clearing your cookies and cache
  • -
  • Disable all extensions, see if it works, and enable them one by one until you figure out which extension conflicts
  • -
-

If you do encounter issues, please report them. You can open an issue on GitHub or join the #synchtube channel on 6irc.

-
- -

Chat Commands

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
CommandRankResult
/sp Spoiler Alert!
AnyoneSpoiler Alert!
/me does something
Anyoneusername does something
/afk
AnyoneToggles your AFK (away from keyboard) status. While AFK, your name will appear in italics with a clock icon.
/say This is important!
ModeratorsThis is important!
/kick username
Moderators(username is kicked from the room)
/ban username
Moderators(username is banned from the room)
/ipban username
Moderators(username is IP banned from the room)
/unban name|ip_address
Moderators(The user is unbanned from the room)
/poll Title,Option 1,Option 2,etc
Moderators -
- - -

Title

-
- - Option 1 -
-
- - Option 2 -
-
- - etc -
-
-
/poll
(no parameters)
ModeratorsA poll editor is popped up allowing for easy creation of the poll, and allowing commas in the poll title and options
/clear
ModeratorsThe chat buffer is cleared
/clean username
ModeratorsAll items in the playlist that were added by that user are cleared.
/cleantitle [-i] regexp
ModeratorsAll items in the playlist that have a title matching the regexp are cleared. Use the -i flag to ignore case.
-

There are also some other chat features. When your name appears in a message, the message will be highlighted. If you type the beginning of someone's name in chat, pressing tab will attempt to autocomplete the name.

- - -

Queue Controls

-

Queue Controls are only visible to moderators by default. A moderator can unlock the queue to make the controls visible to everyone.
Below is an example of the queue controls. On your channel, simply paste a link of one of the following accepted formats and press "Next" to add it after the current video, or "End" to add it at the end of the playlist. If Voteskip is enabled in Channel Options, then pressing voteskip indicates you would like to skip the current video. If a majority of connected users does this, the video will be skipped.
-

- Acceptable URLs -
    -
  • http://www.youtube.com/watch?v=(videoid)
  • -
  • http://www.youtube.com/playlist?list=(playlistid)
  • -
  • http://www.vimeo.com/(videoid)
  • -
  • http://www.soundcloud.com/(songid)
  • -
  • http://www.dailymotion.com/video/(videoid)
  • -
  • http://www.twitch.tv/(channel)
  • -
  • http://www.justin.tv/(channel)
  • -
  • http://www.livestream.com/(channel)
  • -
  • http://www.ustream.tv/(channel)
  • -
  • rtmp://(stream url)
  • -
  • jw:(stream url) - uses a JWPlayer embed (use this for audio streams) -
- You can also queue multiple items at once by separating the URLs with commas. -
- -
- - -
- -
-

Below is an example of an entry in the playlist. Please note the control buttons only appear if you are a moderator or if the queue is unlocked. The button with vertical arrows is for moving videos in the playlist. Click and hold the button and drag the mouse up and down to move the video in the playlist. The red "X" button will remove the video from the playlist. The green play button will jump the playlist to that video. The arrow button will move the video to the next position after the currently playing video. The flag button will toggle whether the video is temporary (temporary videos are auto-removed after playing once). -

-
    -
  • -
    - - - - - -
    -
    Title
    -
    00:00
    -
    -
  • -
-

Moderators will also see the "(Un)Lock Queue" button. This button can be used to toggle whether anyone can add videos, or just moderators. -

- - - -

Userlist Controls

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
FunctionDescription
Ignore UserIgnores incoming chat messages from this user -
Make LeaderAssigns leadership of the media to this user. When someone is assigned leadership, the server follows their video/audio and syncs other clients to them. This allows for seeking within the video. By default, the server leads by itself. -
Take LeaderRevokes leadership from this user and the server takes over
KickKicks this user from the room
IP BanIP bans this user from the room. This can be reversed using the /unban chat command or from the ban list interface
PromoteIncreases this user's rank in this channel by 1. All users start with rank 0. Moderators have rank 2, channel owners have rank 3. When you register a channel, you are assigned rank 10. -
DemoteDecreases this user's rank in this channel by 1. All users start with rank 0. Moderators have rank 2, channel owners have rank 3. When you register a channel, you are assigned rank 10. -
- - -

Synchronization and Leaders

-

- Synchronization is handled a little bit differently from Synchtube. By default, media synchronization is managed by the server, which sends out synchronization updates every 5 seconds. This means if you attempt to seek your client manually, it will be jumped back to the server's position. If you need to seek the video, you can assign leader to someone (see Userlist Controls). Giving someone leader makes the video follow their client, so any seeking they do will be broadcast to everyone in the channel.
- When someone is leader, they also get partial moderator powers temporarily. Leaders can open polls, use /say, and manage the queue, but cannot kick/ban, change channel options, or change chat filters. This is useful if you want to leave someone in charge but not make them a full moderator. Leadership is revoked upon refresh, or you can revoke it manually. -

-
- -

Channel Options

-

- Moderators have access to a menu (at the bottom of the page) for toggling various channel options. This is pretty self explanatory. The "Channel Options" tab contains various channel settings, the "Ban List" tab allows you to view and lift IP Bans, and the "MOTD" tab allows you to edit the message of the day. The "Chat Filters" tab is explained below. -

-
- - -

Chat Filters

-

- Moderators can apply various filters to chat messages using Regular Expressions. The first column contains a button to remove filters. The second is a name to identify the filter. The third is the regular expression to match in the message. The fourth is the regular expression flags (g = replace all, i = not case sensitive, gi is the combination of the two, etc). The fifth is the replacement text, and the last is a checkbox for toggling the filter on/off. Regular Expressions are given in Javascript syntax. The following example replaces money amounts of the form "$amount" to "amount dollars":


- - - - - - - - - - - - - - - - - - - -
NameRegexFlagsReplacementActive
- - - The dollar filter - - \$([0-9\.]+) - - g - - $1 dollars - - -
- - -

Ranks

- - - - - - - - - - - - - - - - - - - - - - - - - - - -
Rank NameNumeric Rank
Website Administrator255+
Channel Administrator3-254
Channel Moderator2
User1
Guest0
-
- -

Third party tools

- - - - - - - - - - - - - -
NameDescriptionLink
CyNaokoCyTube version of Naoko SychTube botLink
-
-
-
- - - - From c6c6e8e55b780dbf415518d5f102111613a362d8 Mon Sep 17 00:00:00 2001 From: Nick Bensema Date: Mon, 2 Sep 2013 23:36:19 -0700 Subject: [PATCH 06/10] Added /clean command to clear a user's additions from a channel Any user with playlistdelete permission can now use the /clean command to wipe out a user's additions to the playlist. This can be helpful for taking down abusive items en masse without resetting the entire playlist. The code should probably be generalized, somehow, to handle title patterns or additions within a certain timeframe. --- lib/chatcommand.js | 45 +++++++++++++++++++++++++++++++++++++++++++++ lib/ullist.js | 17 +++++++++++++++++ 2 files changed, 62 insertions(+) diff --git a/lib/chatcommand.js b/lib/chatcommand.js index 83a14614..5de03a5b 100644 --- a/lib/chatcommand.js +++ b/lib/chatcommand.js @@ -91,6 +91,9 @@ function handle(chan, user, msg, data) { else if(msg.indexOf("/clear") == 0) { handleClear(chan, user); } + else if(msg.indexOf("/clean ") == 0) { + handleClean(chan, user, msg.substring(7)); + } } function handleMute(chan, user, args) { @@ -243,5 +246,47 @@ function handleClear(chan, user) { chan.sendAll("clearchat"); } + +/** +Remove all videos by a particular user. +*/ +function handleClean(chan, user, target) { + if(!chan.hasPermission(user, "playlistdelete")) { + return; + } + // you can use regexps, in case someone tries + // to fool you with cyrillic or something. + target = new RegExp(target); + var uid = false; // to skip first chan.sendAll() + // local variables for deleteNext() callback + var pl = chan.playlist; + var count = 0; + var deleteNext; + // this callback will search for matching items, + // and if one is found, call the remove method + // with itself as the callback to execute after + // the remove is finished. + deleteNext = function() { + // notify channel that this is deleted + if (uid !== false) { + chan.sendAll("delete", { + uid: uid + }); + } + // find next match + uid = pl.items.findSubmitter(target); + if (uid !== false) { + // remove, and restart callback when removed. + pl.remove(uid, deleteNext); + } else { + // refresh playlist only once, at the end + chan.broadcastPlaylistMeta(); + } + } + // start initial callback + deleteNext(); + return; +} + exports.handle = handle; diff --git a/lib/ullist.js b/lib/ullist.js index 24785fad..4838e4ad 100644 --- a/lib/ullist.js +++ b/lib/ullist.js @@ -181,4 +181,21 @@ ULList.prototype.findVideoId = function (id) { return false; }; +/** +returns the UID of the first item in the queue that +was submitted by a user matching the target regexp. +*/ +ULList.prototype.findSubmitter = function(target) { + var item = this.first; + + while(item !== null) { + if(item.queueby && target.test(item.queueby)) { + console.log("found", item.uid, target, item.queueby); + return item.uid; + } + item = item.next; + } + return false; +} + exports.ULList = ULList; From bf95be812cb5eaefed932e570e405e1284fe8d8f Mon Sep 17 00:00:00 2001 From: Nick Bensema Date: Tue, 3 Sep 2013 21:28:12 -0700 Subject: [PATCH 07/10] made slightly more efficient in response to comments --- lib/chatcommand.js | 19 +++++++------------ lib/ullist.js | 23 ++++++++--------------- 2 files changed, 15 insertions(+), 27 deletions(-) diff --git a/lib/chatcommand.js b/lib/chatcommand.js index 5de03a5b..9377361a 100644 --- a/lib/chatcommand.js +++ b/lib/chatcommand.js @@ -257,26 +257,21 @@ function handleClean(chan, user, target) { // you can use regexps, in case someone tries // to fool you with cyrillic or something. target = new RegExp(target); - var uid = false; // to skip first chan.sendAll() // local variables for deleteNext() callback var pl = chan.playlist; var count = 0; + var matches = pl.items.findAll(function(item) { + return target.test(item.queueby); + }); + console.log(matches); var deleteNext; - // this callback will search for matching items, - // and if one is found, call the remove method - // with itself as the callback to execute after - // the remove is finished. deleteNext = function() { - // notify channel that this is deleted - if (uid !== false) { + if (count < matches.length) { + var uid=matches[count].uid; + count += 1 chan.sendAll("delete", { uid: uid }); - } - // find next match - uid = pl.items.findSubmitter(target); - if (uid !== false) { - // remove, and restart callback when removed. pl.remove(uid, deleteNext); } else { // refresh playlist only once, at the end diff --git a/lib/ullist.js b/lib/ullist.js index 4838e4ad..5b018792 100644 --- a/lib/ullist.js +++ b/lib/ullist.js @@ -181,21 +181,14 @@ ULList.prototype.findVideoId = function (id) { return false; }; -/** -returns the UID of the first item in the queue that -was submitted by a user matching the target regexp. -*/ -ULList.prototype.findSubmitter = function(target) { - var item = this.first; - - while(item !== null) { - if(item.queueby && target.test(item.queueby)) { - console.log("found", item.uid, target, item.queueby); - return item.uid; - } - item = item.next; - } - return false; +ULList.prototype.findAll = function(fn) { + var result = []; + this.forEach(function(item) { + if( fn(item) ) { + result.push(item); + } + }); + return result; } exports.ULList = ULList; From 8899b5f7990f68944c581d9ffb998427a1918dfa Mon Sep 17 00:00:00 2001 From: Nick Bensema Date: Wed, 4 Sep 2013 19:27:48 -0700 Subject: [PATCH 08/10] Added /cleantitle, and -i option to ignore case. Fix #257, you should be able to clear username and title patterns now with ease. For best results, wait until they've wasted a lot of time adding a lot of videos before you wipe them. --- lib/chatcommand.js | 40 ++++++++++++++++++++++++++++++++-------- 1 file changed, 32 insertions(+), 8 deletions(-) diff --git a/lib/chatcommand.js b/lib/chatcommand.js index 9377361a..11f8b5e0 100644 --- a/lib/chatcommand.js +++ b/lib/chatcommand.js @@ -94,6 +94,9 @@ function handle(chan, user, msg, data) { else if(msg.indexOf("/clean ") == 0) { handleClean(chan, user, msg.substring(7)); } + else if(msg.indexOf("/cleantitle ") == 0) { + handleCleanTitle(chan, user, msg.substring(12)); + } } function handleMute(chan, user, args) { @@ -246,24 +249,45 @@ function handleClear(chan, user) { chan.sendAll("clearchat"); } +var user_input_re = /^(-[img]+\s+)/i + +function user_input_regexp(target) { + var m = target.match(user_input_re); + var flags = ""; + if (m) { + flags = m[0].slice(1,-1); + target = target.replace(user_input_re, ""); + } + return new RegExp(target, flags); +} + +function handleClean(chan, user, target) { + // you can use regexps, in case someone tries + // to fool you with cyrillic or something. + target = user_input_regexp(target); + cleanPlaylist(chan, user, function(item) { + return target.test(item.queueby); + }); +} + +function handleCleanTitle(chan, user, target) { + target = user_input_regexp(target); + cleanPlaylist(chan, user, function(item) { + return target.exec(item.media.title) !== null; + }); +} /** Remove all videos by a particular user. */ -function handleClean(chan, user, target) { +function cleanPlaylist(chan, user, filter) { if(!chan.hasPermission(user, "playlistdelete")) { return; } - // you can use regexps, in case someone tries - // to fool you with cyrillic or something. - target = new RegExp(target); // local variables for deleteNext() callback var pl = chan.playlist; var count = 0; - var matches = pl.items.findAll(function(item) { - return target.test(item.queueby); - }); - console.log(matches); + var matches = pl.items.findAll(filter); var deleteNext; deleteNext = function() { if (count < matches.length) { From 1e8b507750411e686c2b60eb01c2ab9e4e201528 Mon Sep 17 00:00:00 2001 From: Nick Bensema Date: Wed, 4 Sep 2013 19:39:38 -0700 Subject: [PATCH 09/10] Added online help for /clean and /cleantitle --- www/help.html | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/www/help.html b/www/help.html index 38eb2219..6d4d8c2e 100644 --- a/www/help.html +++ b/www/help.html @@ -135,6 +135,16 @@ Moderators The chat buffer is cleared + +
/clean username
+ Moderators + All items in the playlist that were added by that user are cleared. + + +
/cleantitle [-i] regexp
+ Moderators + All items in the playlist that have a title matching the regexp are cleared. Use the -i flag to ignore case. +

There are also some other chat features. When your name appears in a message, the message will be highlighted. If you type the beginning of someone's name in chat, pressing tab will attempt to autocomplete the name.

From cb94a2ac705122ee37532c574f921ee40dc42e08 Mon Sep 17 00:00:00 2001 From: Nick Bensema Date: Wed, 4 Sep 2013 20:46:57 -0700 Subject: [PATCH 10/10] Removed help.html since it's not used anymore. --- www/help.html | 358 -------------------------------------------------- 1 file changed, 358 deletions(-) delete mode 100644 www/help.html diff --git a/www/help.html b/www/help.html deleted file mode 100644 index 6d4d8c2e..00000000 --- a/www/help.html +++ /dev/null @@ -1,358 +0,0 @@ - - - - - CyTube - Help - - - - - - - - - - - - - - -
-
-
- -

Troubleshooting

-

There are many reasons why you might encounter issues with CyTube. Below are some common steps to isolate and identify the problem.

-
    -
  • Try a different browser. CyTube is tested in Firefox and Chromium, but you may find a browser-specific issue I don't know about
  • -
  • Make sure HTTPS Everywhere (if you have this extension) is disabled for YouTube. This is known not to be compatible
  • -
  • Try clearing your cookies and cache
  • -
  • Disable all extensions, see if it works, and enable them one by one until you figure out which extension conflicts
  • -
-

If you do encounter issues, please report them. You can open an issue on GitHub or join the #synchtube channel on 6irc.

-
- -

Chat Commands

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
CommandRankResult
/sp Spoiler Alert!
AnyoneSpoiler Alert!
/me does something
Anyoneusername does something
/afk
AnyoneToggles your AFK (away from keyboard) status. While AFK, your name will appear in italics with a clock icon.
/say This is important!
ModeratorsThis is important!
/kick username
Moderators(username is kicked from the room)
/ban username
Moderators(username is banned from the room)
/ipban username
Moderators(username is IP banned from the room)
/unban name|ip_address
Moderators(The user is unbanned from the room)
/poll Title,Option 1,Option 2,etc
Moderators -
- - -

Title

-
- - Option 1 -
-
- - Option 2 -
-
- - etc -
-
-
/poll
(no parameters)
ModeratorsA poll editor is popped up allowing for easy creation of the poll, and allowing commas in the poll title and options
/clear
ModeratorsThe chat buffer is cleared
/clean username
ModeratorsAll items in the playlist that were added by that user are cleared.
/cleantitle [-i] regexp
ModeratorsAll items in the playlist that have a title matching the regexp are cleared. Use the -i flag to ignore case.
-

There are also some other chat features. When your name appears in a message, the message will be highlighted. If you type the beginning of someone's name in chat, pressing tab will attempt to autocomplete the name.

- - -

Queue Controls

-

Queue Controls are only visible to moderators by default. A moderator can unlock the queue to make the controls visible to everyone.
Below is an example of the queue controls. On your channel, simply paste a link of one of the following accepted formats and press "Next" to add it after the current video, or "End" to add it at the end of the playlist. If Voteskip is enabled in Channel Options, then pressing voteskip indicates you would like to skip the current video. If a majority of connected users does this, the video will be skipped.
-

- Acceptable URLs -
    -
  • http://www.youtube.com/watch?v=(videoid)
  • -
  • http://www.youtube.com/playlist?list=(playlistid)
  • -
  • http://www.vimeo.com/(videoid)
  • -
  • http://www.soundcloud.com/(songid)
  • -
  • http://www.dailymotion.com/video/(videoid)
  • -
  • http://www.twitch.tv/(channel)
  • -
  • http://www.justin.tv/(channel)
  • -
  • http://www.livestream.com/(channel)
  • -
  • http://www.ustream.tv/(channel)
  • -
  • rtmp://(stream url)
  • -
  • jw:(stream url) - uses a JWPlayer embed (use this for audio streams) -
- You can also queue multiple items at once by separating the URLs with commas. -
- -
- - -
- -
-

Below is an example of an entry in the playlist. Please note the control buttons only appear if you are a moderator or if the queue is unlocked. The button with vertical arrows is for moving videos in the playlist. Click and hold the button and drag the mouse up and down to move the video in the playlist. The red "X" button will remove the video from the playlist. The green play button will jump the playlist to that video. The arrow button will move the video to the next position after the currently playing video. The flag button will toggle whether the video is temporary (temporary videos are auto-removed after playing once). -

-
    -
  • -
    - - - - - -
    -
    Title
    -
    00:00
    -
    -
  • -
-

Moderators will also see the "(Un)Lock Queue" button. This button can be used to toggle whether anyone can add videos, or just moderators. -

- - - -

Userlist Controls

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
FunctionDescription
Ignore UserIgnores incoming chat messages from this user -
Make LeaderAssigns leadership of the media to this user. When someone is assigned leadership, the server follows their video/audio and syncs other clients to them. This allows for seeking within the video. By default, the server leads by itself. -
Take LeaderRevokes leadership from this user and the server takes over
KickKicks this user from the room
IP BanIP bans this user from the room. This can be reversed using the /unban chat command or from the ban list interface
PromoteIncreases this user's rank in this channel by 1. All users start with rank 0. Moderators have rank 2, channel owners have rank 3. When you register a channel, you are assigned rank 10. -
DemoteDecreases this user's rank in this channel by 1. All users start with rank 0. Moderators have rank 2, channel owners have rank 3. When you register a channel, you are assigned rank 10. -
- - -

Synchronization and Leaders

-

- Synchronization is handled a little bit differently from Synchtube. By default, media synchronization is managed by the server, which sends out synchronization updates every 5 seconds. This means if you attempt to seek your client manually, it will be jumped back to the server's position. If you need to seek the video, you can assign leader to someone (see Userlist Controls). Giving someone leader makes the video follow their client, so any seeking they do will be broadcast to everyone in the channel.
- When someone is leader, they also get partial moderator powers temporarily. Leaders can open polls, use /say, and manage the queue, but cannot kick/ban, change channel options, or change chat filters. This is useful if you want to leave someone in charge but not make them a full moderator. Leadership is revoked upon refresh, or you can revoke it manually. -

-
- -

Channel Options

-

- Moderators have access to a menu (at the bottom of the page) for toggling various channel options. This is pretty self explanatory. The "Channel Options" tab contains various channel settings, the "Ban List" tab allows you to view and lift IP Bans, and the "MOTD" tab allows you to edit the message of the day. The "Chat Filters" tab is explained below. -

-
- - -

Chat Filters

-

- Moderators can apply various filters to chat messages using Regular Expressions. The first column contains a button to remove filters. The second is a name to identify the filter. The third is the regular expression to match in the message. The fourth is the regular expression flags (g = replace all, i = not case sensitive, gi is the combination of the two, etc). The fifth is the replacement text, and the last is a checkbox for toggling the filter on/off. Regular Expressions are given in Javascript syntax. The following example replaces money amounts of the form "$amount" to "amount dollars":


- - - - - - - - - - - - - - - - - - - -
NameRegexFlagsReplacementActive
- - - The dollar filter - - \$([0-9\.]+) - - g - - $1 dollars - - -
- - -

Ranks

- - - - - - - - - - - - - - - - - - - - - - - - - - - -
Rank NameNumeric Rank
Website Administrator255+
Channel Administrator3-254
Channel Moderator2
User1
Guest0
-
- -

Third party tools

- - - - - - - - - - - - - -
NameDescriptionLink
CyNaokoCyTube version of Naoko SychTube botLink
-
-
-
- - - -