]> git.example.dev Git - binbsis50.git/commitdiff
added ability for privileged users to kick players
authorLuigi Pinca <luigipinca@gmail.com>
Sun, 21 Oct 2012 19:43:43 +0000 (21:43 +0200)
committerLuigi Pinca <luigipinca@gmail.com>
Sun, 21 Oct 2012 19:43:43 +0000 (21:43 +0200)
app.js
lib/room.js
package.json
public/static/js/room.js
routes/user.js

diff --git a/app.js b/app.js
index 2c0c3295ea9100c0f28c51d0740659abdaa4f9da..271c0aabed3d974da5711aa01745f53e8e20d12d 100644 (file)
--- 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;
index a764933dd84ea251cd4990493b0331d2e106e6ed..da3861921f1a41ee0f91873c6583f639aa345695 100644 (file)
@@ -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);
             }
         };
index 839c1bc166310bd6822a3bddc35037f10b5dc97e..013168eaef63da871b7aea35972576db3dad8af0 100644 (file)
@@ -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
index 36e892299448b7b032286bae8289abba2ab84b51..e18b6bce8c5244c64b1a2bd2aa20f8c83764fb7d 100644 (file)
@@ -8,6 +8,7 @@
         , jplayer
         , nickname
         , pvtmsgto
+        , subscriber = false
         , roundpoints = 0
         , socket
         , stopanimation = false
         socket.emit('loggedin', function(data) {
             if (data) {
                 nickname = data;
+                subscriber = true;
                 return socket.emit('joinroom', roomname);
             }
             joinAnonymously();
         });
     };
 
+    // 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});
                     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]) {
             }
         }
         else {
-            outcome.append('unknown command '+command+'.');
+            outcome.text('(From binb): unknown command '+command+'.');
         }
         addChatEntry(outcome);
     };
index 2f338480c416d048d9426b1c7a91b0d615105c31..2ec5df6317bc24b44508f5a713ca73c07af44818 100644 (file)
@@ -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');