From 72d744c7e6c85cf684e0149b389b6a72b6119fa3 Mon Sep 17 00:00:00 2001 From: Luigi Pinca Date: Sun, 21 Oct 2012 21:43:43 +0200 Subject: [PATCH] added ability for privileged users to kick players --- app.js | 5 +++++ lib/room.js | 24 ++++++++++++++++++++---- package.json | 2 +- public/static/js/room.js | 17 +++++++++++++++-- routes/user.js | 2 +- 5 files changed, 42 insertions(+), 8 deletions(-) diff --git a/app.js b/app.js index 2c0c329..271c0aa 100644 --- a/app.js +++ b/app.js @@ -171,6 +171,11 @@ io.sockets.on('connection', function(socket) { rooms[room].joinRoom(socket); } }); + socket.on('kick', function(baduser, callback) { + if (socket.roomname && typeof baduser === 'string' && typeof callback === 'function') { + rooms[socket.roomname].kick(baduser, socket.nickname, callback); + } + }); socket.on('loggedin', function(callback) { if (typeof callback !== 'function') { return; diff --git a/lib/room.js b/lib/room.js index a764933..da38619 100644 --- a/lib/room.js +++ b/lib/room.js @@ -256,6 +256,22 @@ module.exports = function(params) { addUser(socket, true); }; + // Kick a user + this.kick = function(baduser, executor, callback) { + usersdb.hget('user:'+executor, 'role', function (err, role) { + if (role > 0) { // Check role + if (usersData[baduser]) { + var notice = 'you have been kicked by '+executor+'.'; + var recipient = sockets[baduser]; + recipient.emit('chatmsg', notice, 'binb', baduser); + recipient.disconnect(); + } + return; + } + callback(); + }); + }; + // A user has left (DCed, etc.) this.removeUser = function(nickname) { // Delete the references @@ -313,8 +329,8 @@ module.exports = function(params) { return sendLoadTrack(); } playedtracks.push(res); - songsdb.hmget('song:'+res, 'artistName', 'trackName', 'collectionName', 'previewUrl', - 'artworkUrl60', 'trackViewUrl', function(e, replies) { + songsdb.hmget('song:'+res, 'artistName', 'trackName', 'collectionName', + 'previewUrl', 'artworkUrl60', 'trackViewUrl', function(e, replies) { artistName = replies[0]; artist = artistName.toLowerCase(); trackName = replies[1]; @@ -429,9 +445,9 @@ module.exports = function(params) { this.unignore = function(baduser, executor) { if (usersData[baduser]) { - // Inform the wicked player that he/she is no longer ignored - var recipient = sockets[baduser]; + // Inform the bad player that he/she is no longer ignored var notice = executor+' has stopped ignoring you.'; + var recipient = sockets[baduser]; recipient.emit('chatmsg', notice, 'binb', baduser); } }; diff --git a/package.json b/package.json index 839c1bc..013168e 100644 --- a/package.json +++ b/package.json @@ -21,5 +21,5 @@ "start": "app.js" }, "subdomain": "binb", - "version": "0.3.4-2" + "version": "0.3.4-3" } \ No newline at end of file diff --git a/public/static/js/room.js b/public/static/js/room.js index 36e8922..e18b6bc 100644 --- a/public/static/js/room.js +++ b/public/static/js/room.js @@ -8,6 +8,7 @@ , jplayer , nickname , pvtmsgto + , subscriber = false , roundpoints = 0 , socket , stopanimation = false @@ -516,6 +517,7 @@ socket.emit('loggedin', function(data) { if (data) { nickname = data; + subscriber = true; return socket.emit('joinroom', roomname); } joinAnonymously(); @@ -537,6 +539,14 @@ }); }; + // Kick a player + var kick = function(baduser, outcome) { + socket.emit('kick', baduser, function() { + outcome.append('you are not allowed to kick a player.'); + addChatEntry(outcome); + }); + }; + var loadTrack = function(previewUrl) { jplayer.jPlayer('mute'); jplayer.jPlayer('setMedia', {m4a: previewUrl}); @@ -729,7 +739,10 @@ outcome.text('(From binb): '+argument+' is already ignored.'); break; case '/kick': - // TO DO + if (subscriber) { + return kick(argument, outcome); + } + outcome.append('you are not allowed to kick a player.'); break; case '/unignore': if (ignoredplayers[argument]) { @@ -743,7 +756,7 @@ } } else { - outcome.append('unknown command '+command+'.'); + outcome.text('(From binb): unknown command '+command+'.'); } addChatEntry(outcome); }; diff --git a/routes/user.js b/routes/user.js index 2f33848..2ec5df6 100644 --- a/routes/user.js +++ b/routes/user.js @@ -77,7 +77,7 @@ var buildLeaderboards = function(pointsresults, timesresults) { exports.use = function(options) { db = options.db; - rooms = options.rooms; + var rooms = options.rooms; // Populate the whitelist of follow-up URLs followupurls.push('/'); followupurls.push('/changepasswd'); -- 2.54.0