NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==UserScript==
// @name GMVCbizAlertOnGuysInChatroom
// @author . tim4fun6
// @version . 0.1
// @updateURL https://openuserjs.org/meta/tim4fun6/GMVCbizAlertOnGuysInChatroom.meta.js
// @description Alerts when there is someone in the GMVC.biz chatroom. Use with an auto-reloader.
// @copyright Copyright 2016 tim4fun6, https://github.com/tim4fun6/
// @license BSD-3-Clause
// @homepageURL https://github.com/tim4fun6/userscripts/
// @supportURL https://github.com/tim4fun6/userscripts/wiki
// @require https://code.jquery.com/jquery-3.1.0.slim.min.js#sha256=cRpWjoSOw5KcyIOaZNo4i6fZ9tKPhYYb6i5T9RSVJG8=
// @match https://gmvc.biz/joomla/index.php?option=com_avchat3&view=avchat3&Itemid=765&lang=en
// @grant GM_notification
// @grant GM_setValue
// @grant GM_getValue
// @run-at document-end
// ==/UserScript==
(function() {
'use strict';
function fetchStatus () {
// There are 1 users and 0 guests connected and 4 available rooms.
var regex = /There are (\d+) users and (\d+) guests connected and (\d+) available rooms/;
var info = $('p:contains(guests connected)').text();
var result = regex.exec(info);
var status = {};
if (result) {
status.users = result[1];
status.guests = result[2];
status.rooms = result[3];
if (status.users > 0) {
var usersDiv = $('h3:contains(Connected users)').next();
status.usernames = usersDiv.children().map(function(){ return jQuery(this).text(); }).get();
}
} else {
status.error = 'Could not parse page';
}
status.timestamp = (new Date()).getTime();
return status;
}
function arr2str (arr) {
if (!Array.isArray(arr)) {
return 'not an array';
} else {
return arr.sort().join(';');
}
}
function statusChanged(first, second){
return first && second && first.users != second.users || arr2str(first.usernames) !== arr2str(second.usernames);
}
var emptyInfo = { users: 0, guests: 0, rooms: 0, usernames: [], timestamp: 0 };
var priorStatus = GM_getValue('gmvc-roominfo', emptyInfo);
var status = fetchStatus();
if (statusChanged(priorStatus, status)) {
if (status.users > 0) {
GM_notification({ text: 'There are ' + status.users + ' users in the GMVC chat room: ' + status.usernames.join(', '),
title: 'People in GMVC chat room',
highlight: true,
timeout: 15 });
}
}
GM_setValue('gmvc-roominfo', status);
})();