Skip to content
This repository has been archived by the owner on Jul 3, 2021. It is now read-only.

Commit

Permalink
Multiple updates (See commit description)
Browse files Browse the repository at this point in the history
Update: Remove logging for some plugdj events and ignore instead (Will still be emitted)
Added: Private util function to check for if a parameter is a number
Update: parse strings as numbers in API methods that require it
Fix: HTTP Status checks for API routes
  • Loading branch information
thedark1337 committed Oct 13, 2017
1 parent a0e3b2a commit 8e8474c
Showing 1 changed file with 29 additions and 32 deletions.
61 changes: 29 additions & 32 deletions lib/client.js
Original file line number Diff line number Diff line change
Expand Up @@ -334,6 +334,14 @@ class PlugAPI extends EventEmitter3 {
running: false
};

/**
* Checks if a number is finite and not an empty string.
* @param {*} number The variable to check if it's a number or not.
* @returns {Boolean} True if a number. False if not.
* @private
*/
store(this)._isNumber = (number) => isFinite(Number(number)) && !Object.is(number, '');

/**
* Queue that the bot should connect to the socket server
* @param {String} roomSlug Slug of room to join after connection
Expand Down Expand Up @@ -444,12 +452,12 @@ class PlugAPI extends EventEmitter3 {

if (obj) {
store(this)._sendEvent(PlugAPI.events.CHAT, obj.msg);
if (!Object.is(obj.timeout, undefined) && isFinite(~~obj.timeout) && ~~obj.timeout > 0) {
if (!Object.is(obj.timeout, undefined) && store(this)._isNumber(obj.timeout) && Number(obj.timeout) > 0) {
const specificChatDeleter = (data) => {
if (Object.is(data.raw.uid, store(this)._room.getSelf().id) && Object.is(data.message.trim(), obj.msg.trim())) {
setTimeout(() => {
this.moderateDeleteChat(data.raw.cid);
}, ~~obj.timeout * 1E3);
}, Number(obj.timeout) * 1E3);
this.off(PlugAPI.events.CHAT, specificChatDeleter);
}
};
Expand Down Expand Up @@ -617,7 +625,7 @@ class PlugAPI extends EventEmitter3 {
store(this)._getRoomState = (roomstateCallback) => {
store(this)._queueREST('GET', 'rooms/state', undefined, (err, data) => {
if (err) {
if (isFinite(err) && err >= 500) {
if (err.statusCode && err.statusCode >= 500) {
handleErrors.error('Internal Server Error from Plug.dj', roomstateCallback);
} else {
this.logger.error('PlugAPI', `'Error getting room state: ${err ? err : 'Unknown error'}`);
Expand Down Expand Up @@ -648,8 +656,8 @@ class PlugAPI extends EventEmitter3 {
slug: roomSlug
}, (err) => {
if (err) {
if (isFinite(err)) {
if (err >= 400 && err < 500) {
if (err.statusCode) {
if (err.statusCode >= 400 && err.statusCode < 500) {
handleErrors.error(`Invalid room URL. Please Check If the roomSlug ${roomSlug} is correct`, joinCallback);
} else {
handleErrors.error('Internal Server Error from Plug.dj', joinCallback);
Expand Down Expand Up @@ -918,7 +926,7 @@ class PlugAPI extends EventEmitter3 {
messageData.args = messageData.args.split(' ');

for (i = 0; i < messageData.args.length; i++) {
if (isFinite(Number(messageData.args[i])) && !Object.is(messageData.args[i], '')) {
if (store(this)._isNumber(messageData.args[i])) {
messageData.args[i] = Number(messageData.args[i]);
}
}
Expand Down Expand Up @@ -1200,15 +1208,6 @@ class PlugAPI extends EventEmitter3 {
username: data.n
});
break;
case PlugAPI.events.PDJ_MESSAGE:
this.logger.info('plug.dj', `Message from plug.dj: ${data}`);
break;
case PlugAPI.events.PDJ_UPDATE:
this.logger.info('plug.dj', `Update Message from plug.dj: ${data}`);
break;
case PlugAPI.events.MAINT_MODE_ALERT:
this.logger.warning('plugAPI', `plug.dj is going into maintenance in ${data} minutes`);
break;
case PlugAPI.events.MODERATE_STAFF:
if (Array.isArray(data.raw) && data.raw.u.length > 0) {
for (i = 0; i < data.raw.u.length; i++) {
Expand All @@ -1223,18 +1222,23 @@ class PlugAPI extends EventEmitter3 {
}
}
break;
case PlugAPI.events.CHAT_LEVEL_UPDATE:
case PlugAPI.events.MAINT_MODE:
case PlugAPI.events.MAINT_MODE_ALERT:
case PlugAPI.events.MODERATE_BAN:
case PlugAPI.events.MODERATE_WLBAN:
case PlugAPI.events.MODERATE_ADD_DJ:
case PlugAPI.events.MODERATE_REMOVE_DJ:
case PlugAPI.events.MODERATE_MOVE_DJ:
case PlugAPI.events.MODERATE_REMOVE_DJ:
case PlugAPI.events.MODERATE_SKIP:
case PlugAPI.events.PLAYLIST_CYCLE:
case PlugAPI.events.PDJ_MESSAGE:
case PlugAPI.events.PDJ_UPDATE:
case PlugAPI.events.SKIP:
case PlugAPI.events.MODERATE_SKIP:
case PlugAPI.events.ROOM_VOTE_SKIP:
case PlugAPI.events.FRIEND_REQUEST:
case PlugAPI.events.GIFTED:
case PlugAPI.events.NOTIFY:

/*
These will be ignored by plugAPI.
Expand All @@ -1254,17 +1258,6 @@ class PlugAPI extends EventEmitter3 {
case PlugAPI.events.EARN:
store(this)._room.setEarn(data);
break;
case PlugAPI.events.NOTIFY:
if (Object.is(data.action, 'levelUp')) {
this.logger.info('plug.dj', `Congratulations, you have leveled up to level ${data.value}`);
} else {
this.logger.info('plug.dj', `Notification: ${util.inspect(data)}`);
}
break;
case PlugAPI.events.CHAT_LEVEL_UPDATE:
store(this)._room.setMinChatLevel(data.level);
this.logger.info('plug.dj', `Chat Level has changed to level: ${data.level} by ${data.user.username}`);
break;
default:
case undefined:
this.logger.warning('PlugAPI', `Unknown Message Format (unimplemented in plugAPI): ${JSON.stringify(msg, null, 4)}`);
Expand Down Expand Up @@ -2765,10 +2758,10 @@ class PlugAPI extends EventEmitter3 {
* bot.moderateMoveDJ(123456, 1);
*/
moderateMoveDJ(userID, position, callback) {
if (!store(this)._room.getRoomMeta().slug || !this.havePermission(undefined, PlugAPI.ROOM_ROLE.MANAGER) || !store(this)._room.isInWaitList(userID) || !isFinite(position) || this.guest) {
if (!store(this)._room.getRoomMeta().slug || !this.havePermission(undefined, PlugAPI.ROOM_ROLE.MANAGER) || !store(this)._room.isInWaitList(userID) || !store(this)._isNumber(position) || this.guest) {
return false;
}

position = Number(position);
position = position > 50 ? 49 : position < 1 ? 1 : --position;

store(this)._queueREST('POST', endpoints.MODERATE_MOVE_DJ, {
Expand Down Expand Up @@ -2850,12 +2843,14 @@ class PlugAPI extends EventEmitter3 {
* bot.moderateSetRole(123456, bot.ROOM_ROLE.BOUNCER);
*/
moderateSetRole(userID, roleID, callback) {
if (!store(this)._room.getRoomMeta().slug || !isFinite(roleID) || roleID < PlugAPI.ROOM_ROLE.NONE || roleID > PlugAPI.ROOM_ROLE.HOST || this.guest) {
if (!store(this)._room.getRoomMeta().slug || !store(this)._isNumber(roleID) || roleID < PlugAPI.ROOM_ROLE.NONE || roleID > PlugAPI.ROOM_ROLE.HOST || this.guest) {
return false;
}

const user = this.getUser(userID);

roleID = Number(roleID);

if (Object.is(user, null) ? this.havePermission(undefined, PlugAPI.ROOM_ROLE.MANAGER) : store(this)._room.getPermissions(user).canModStaff) {
if (user && Object.is(user.role, roleID)) return false;
if (Object.is(roleID, PlugAPI.ROOM_ROLE.NONE)) {
Expand Down Expand Up @@ -3008,7 +3003,8 @@ class PlugAPI extends EventEmitter3 {
* bot.changeRoomChatLevel(3);
*/
changeRoomChatLevel(minChatLevel, callback) {
if (!store(this)._room.getRoomMeta().slug || !this.havePermission(undefined, PlugAPI.ROOM_ROLE.MANAGER) || Object.is(store(this)._room.getRoomMeta().minChatLevel, minChatLevel) || (!isFinite(minChatLevel) || (isFinite(minChatLevel) && (minChatLevel < 1 || minChatLevel > 3))) || this.guest) return false;
if (!store(this)._room.getRoomMeta().slug || !this.havePermission(undefined, PlugAPI.ROOM_ROLE.MANAGER) || Object.is(store(this)._room.getRoomMeta().minChatLevel, minChatLevel) || (!store(this)._isNumber(minChatLevel) || (store(this)._isNumber(minChatLevel) && (Number(minChatLevel) < 1 || Number(minChatLevel) > 3))) || this.guest) return false;
minChatLevel = Number(minChatLevel);

store(this)._queueREST('POST', endpoints.ROOM_INFO, {
name: undefined,
Expand Down Expand Up @@ -3504,6 +3500,7 @@ PlugAPI.prototype.moderateLockWaitList = PlugAPI.prototype.moderateLockBooth;
*
* @prop {Object} data The advance event object
* @prop {User} data.currentDJ The current DJ that is playing.
* @prop {Object} data.media Info about the currently playing media.
* @prop {String} data.media.title The title of the last played song.
* @prop {String} data.media.author The author of the last played song.
* @prop {string} data.media.format 1 if the last played song was Youtube, 2 if SoundCloud.
Expand Down

0 comments on commit 8e8474c

Please sign in to comment.