noblox.js-secure 4.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of noblox.js-secure might be problematic. Click here for more details.
- package/.eslintrc.js +21 -0
- package/.github/FUNDING.yml +2 -0
- package/.github/ISSUE_TEMPLATE/bug_report.md +29 -0
- package/.github/ISSUE_TEMPLATE/feature_request.md +22 -0
- package/.github/dependabot.yml +12 -0
- package/.github/workflows/doc-publish.yml +33 -0
- package/.github/workflows/npmpublish.yml +70 -0
- package/.travis.yml +13 -0
- package/CODE_OF_CONDUCT.md +76 -0
- package/LICENSE +21 -0
- package/README.md +168 -0
- package/examples/cleanPlayers.js +130 -0
- package/examples/cleanWall.js +110 -0
- package/examples/revertRanks.js +100 -0
- package/examples/savePlayers.js +119 -0
- package/examples/saveWall.js +96 -0
- package/img/moderatedThumbnails/moderatedThumbnail_100x100.png +0 -0
- package/img/moderatedThumbnails/moderatedThumbnail_110x110.png +0 -0
- package/img/moderatedThumbnails/moderatedThumbnail_140x140.png +0 -0
- package/img/moderatedThumbnails/moderatedThumbnail_150x150.png +0 -0
- package/img/moderatedThumbnails/moderatedThumbnail_150x200.png +0 -0
- package/img/moderatedThumbnails/moderatedThumbnail_180x180.png +0 -0
- package/img/moderatedThumbnails/moderatedThumbnail_250x250.png +0 -0
- package/img/moderatedThumbnails/moderatedThumbnail_30x30.png +0 -0
- package/img/moderatedThumbnails/moderatedThumbnail_352x352.png +0 -0
- package/img/moderatedThumbnails/moderatedThumbnail_420x420.png +0 -0
- package/img/moderatedThumbnails/moderatedThumbnail_48x48.png +0 -0
- package/img/moderatedThumbnails/moderatedThumbnail_50x50.png +0 -0
- package/img/moderatedThumbnails/moderatedThumbnail_60x60.png +0 -0
- package/img/moderatedThumbnails/moderatedThumbnail_720x720.png +0 -0
- package/img/moderatedThumbnails/moderatedThumbnail_75x75.png +0 -0
- package/img/noblox-js-small.png +0 -0
- package/img/noblox-js.png +0 -0
- package/img/thumbnailSizes.png +0 -0
- package/jsDocsConfig.json +55 -0
- package/lib/accountinformation/getUserSocialLinks.js +42 -0
- package/lib/accountsettings/block.js +58 -0
- package/lib/accountsettings/unblock.js +58 -0
- package/lib/asset/deleteFromInventory.js +69 -0
- package/lib/asset/getProductInfo.js +56 -0
- package/lib/asset/uploadAnimation.js +103 -0
- package/lib/asset/uploadItem.js +83 -0
- package/lib/asset/uploadModel.js +90 -0
- package/lib/avatar/avatarRules.js +38 -0
- package/lib/avatar/currentlyWearing.js +32 -0
- package/lib/avatar/getAvatar.js +35 -0
- package/lib/avatar/getCurrentAvatar.js +37 -0
- package/lib/avatar/getRecentItems.js +37 -0
- package/lib/avatar/outfitDetails.js +32 -0
- package/lib/avatar/outfits.js +37 -0
- package/lib/avatar/redrawAvatar.js +48 -0
- package/lib/avatar/removeAssetId.js +55 -0
- package/lib/avatar/setAvatarBodyColors.js +60 -0
- package/lib/avatar/setAvatarScales.js +60 -0
- package/lib/avatar/setPlayerAvatarType.js +50 -0
- package/lib/avatar/setWearingAssets.js +50 -0
- package/lib/avatar/wearAssetId.js +55 -0
- package/lib/badges/getAwardedTimestamps.js +52 -0
- package/lib/badges/getBadgeInfo.js +43 -0
- package/lib/badges/getGameBadges.js +62 -0
- package/lib/badges/getPlayerBadges.js +28 -0
- package/lib/badges/updateBadgeInfo.js +80 -0
- package/lib/cache/add.js +14 -0
- package/lib/cache/addIf.js +26 -0
- package/lib/cache/clear.js +8 -0
- package/lib/cache/get.js +28 -0
- package/lib/cache/index.js +17 -0
- package/lib/cache/new.js +12 -0
- package/lib/cache/wrap.js +25 -0
- package/lib/chat/addUsersToConversation.js +61 -0
- package/lib/chat/chatSettings.js +33 -0
- package/lib/chat/getChatMessages.js +40 -0
- package/lib/chat/getConversations.js +43 -0
- package/lib/chat/getRolloutSettings.js +35 -0
- package/lib/chat/getUnreadConversationCount.js +33 -0
- package/lib/chat/getUnreadMessages.js +38 -0
- package/lib/chat/getUserConversations.js +37 -0
- package/lib/chat/markChatAsRead.js +52 -0
- package/lib/chat/markChatAsSeen.js +50 -0
- package/lib/chat/multiGetLatestMessages.js +37 -0
- package/lib/chat/onNewConversation.js +50 -0
- package/lib/chat/onNewMessage.js +53 -0
- package/lib/chat/onNewMessageBySelf.js +50 -0
- package/lib/chat/onUserOnline.js +50 -0
- package/lib/chat/onUserTyping.js +54 -0
- package/lib/chat/removeFromGroupConversation.js +62 -0
- package/lib/chat/renameGroupConversation.js +57 -0
- package/lib/chat/sendChatMessage.js +57 -0
- package/lib/chat/setChatUserTyping.js +61 -0
- package/lib/chat/start121Conversation.js +50 -0
- package/lib/chat/startCloudEditConversation.js +50 -0
- package/lib/chat/startGroupConversation.js +62 -0
- package/lib/client/onNotification.js +70 -0
- package/lib/client/setAPIKey.js +18 -0
- package/lib/client/setCookie.js +38 -0
- package/lib/datastores/deleteDatastoreEntry.js +66 -0
- package/lib/datastores/getDatastoreEntry.js +98 -0
- package/lib/datastores/getDatastoreEntryVersions.js +83 -0
- package/lib/datastores/getDatastoreKeys.js +73 -0
- package/lib/datastores/getDatastores.js +72 -0
- package/lib/datastores/incrementDatastoreEntry.js +93 -0
- package/lib/datastores/setDatastoreEntry.js +90 -0
- package/lib/develop/canManage.js +44 -0
- package/lib/develop/configureItem.js +142 -0
- package/lib/develop/updateUniverse.js +53 -0
- package/lib/develop/updateUniverseAccess.js +55 -0
- package/lib/economy/buy.js +99 -0
- package/lib/economy/getGroupFunds.js +43 -0
- package/lib/economy/getGroupRevenueSummary.js +48 -0
- package/lib/economy/getGroupTransactions.js +32 -0
- package/lib/economy/getResaleData.js +54 -0
- package/lib/economy/getResellers.js +35 -0
- package/lib/economy/getUserTransactions.js +34 -0
- package/lib/economy/onGroupTransaction.js +74 -0
- package/lib/friends/acceptFriendRequest.js +59 -0
- package/lib/friends/declineAllFriendRequests.js +57 -0
- package/lib/friends/declineFriendRequest.js +59 -0
- package/lib/friends/getFollowers.js +61 -0
- package/lib/friends/getFollowings.js +61 -0
- package/lib/friends/getFriendRequests.js +56 -0
- package/lib/friends/getFriends.js +53 -0
- package/lib/friends/onFriendRequest.js +58 -0
- package/lib/friends/removeFriend.js +58 -0
- package/lib/friends/sendFriendRequest.js +59 -0
- package/lib/friends/unfollow.js +58 -0
- package/lib/games/addDeveloperProduct.js +64 -0
- package/lib/games/checkDeveloperProductName.js +39 -0
- package/lib/games/configureGamePass.js +146 -0
- package/lib/games/getDeveloperProducts.js +51 -0
- package/lib/games/getGameInstances.js +31 -0
- package/lib/games/getGamePasses.js +39 -0
- package/lib/games/getGameSocialLinks.js +45 -0
- package/lib/games/getGroupGames.js +30 -0
- package/lib/games/getUniverseInfo.js +51 -0
- package/lib/games/updateDeveloperProduct.js +69 -0
- package/lib/groups/changeRank.js +59 -0
- package/lib/groups/deleteWallPost.js +64 -0
- package/lib/groups/deleteWallPostsByUser.js +59 -0
- package/lib/groups/demote.js +25 -0
- package/lib/groups/exile.js +59 -0
- package/lib/groups/getAuditLog.js +64 -0
- package/lib/groups/getGroup.js +55 -0
- package/lib/groups/getGroupSocialLinks.js +44 -0
- package/lib/groups/getGroups.js +88 -0
- package/lib/groups/getJoinRequest.js +52 -0
- package/lib/groups/getJoinRequests.js +58 -0
- package/lib/groups/getPlayers.js +108 -0
- package/lib/groups/getRankInGroup.js +52 -0
- package/lib/groups/getRankNameInGroup.js +52 -0
- package/lib/groups/getRole.js +64 -0
- package/lib/groups/getRolePermissions.js +51 -0
- package/lib/groups/getRoles.js +56 -0
- package/lib/groups/getShout.js +49 -0
- package/lib/groups/getWall.js +59 -0
- package/lib/groups/groupPayout.js +103 -0
- package/lib/groups/handleJoinRequest.js +60 -0
- package/lib/groups/leaveGroup.js +60 -0
- package/lib/groups/onAuditLog.js +61 -0
- package/lib/groups/onJoinRequest.js +63 -0
- package/lib/groups/onJoinRequestHandle.js +105 -0
- package/lib/groups/onShout.js +57 -0
- package/lib/groups/onWallPost.js +58 -0
- package/lib/groups/promote.js +25 -0
- package/lib/groups/searchGroups.js +32 -0
- package/lib/groups/setGroupDescription.js +65 -0
- package/lib/groups/setGroupName.js +66 -0
- package/lib/groups/setRank.js +79 -0
- package/lib/groups/shout.js +65 -0
- package/lib/index.js +30 -0
- package/lib/internal/levelOneCopy.js +16 -0
- package/lib/internal/queue.js +61 -0
- package/lib/internal/timeout.js +30 -0
- package/lib/internal/wrap.js +78 -0
- package/lib/inventory/getCollectibles.js +31 -0
- package/lib/inventory/getInventory.js +32 -0
- package/lib/inventory/getInventoryById.js +31 -0
- package/lib/inventory/getOwnership.js +54 -0
- package/lib/inventory/getUAIDs.js +47 -0
- package/lib/itemconfiguration/getGroupAssets.js +32 -0
- package/lib/options.js +26 -0
- package/lib/party/onPartyDeleted.js +53 -0
- package/lib/party/onPartyInvite.js +53 -0
- package/lib/party/onPartyJoinedGame.js +53 -0
- package/lib/party/onPartyLeftGame.js +53 -0
- package/lib/party/onPartySelfJoined.js +53 -0
- package/lib/party/onPartySelfLeft.js +53 -0
- package/lib/party/onPartyUserJoined.js +53 -0
- package/lib/party/onPartyUserLeft.js +53 -0
- package/lib/premiumfeatures/getPremium.js +51 -0
- package/lib/presence/getPresences.js +63 -0
- package/lib/privatemessages/getMessages.js +60 -0
- package/lib/privatemessages/message.js +80 -0
- package/lib/privatemessages/onMessage.js +88 -0
- package/lib/thumbnails/getLogo.js +60 -0
- package/lib/thumbnails/getPlayerThumbnail.js +121 -0
- package/lib/thumbnails/getThumbnails.js +93 -0
- package/lib/trades/acceptTrade.js +58 -0
- package/lib/trades/canTradeWith.js +48 -0
- package/lib/trades/counterTrade.js +84 -0
- package/lib/trades/declineTrade.js +58 -0
- package/lib/trades/getTradeInfo.js +52 -0
- package/lib/trades/getTrades.js +37 -0
- package/lib/trades/sendTrade.js +82 -0
- package/lib/users/getBlurb.js +36 -0
- package/lib/users/getIdFromUsername.js +53 -0
- package/lib/users/getPlayerInfo.js +100 -0
- package/lib/users/getUsernameFromId.js +44 -0
- package/lib/users/onBlurbChange.js +46 -0
- package/lib/util/clearSession.js +32 -0
- package/lib/util/generalRequest.js +61 -0
- package/lib/util/getAction.js +45 -0
- package/lib/util/getCurrentUser.js +44 -0
- package/lib/util/getGeneralToken.js +52 -0
- package/lib/util/getHash.js +29 -0
- package/lib/util/getInputs.js +37 -0
- package/lib/util/getPageResults.js +89 -0
- package/lib/util/getSenderUserId.js +30 -0
- package/lib/util/getSession.js +38 -0
- package/lib/util/getVerification.js +60 -0
- package/lib/util/getVerificationInputs.js +31 -0
- package/lib/util/http.js +110 -0
- package/lib/util/jar.js +24 -0
- package/lib/util/refreshCookie.js +52 -0
- package/lib/util/relog.js +81 -0
- package/lib/util/setOptions.js +54 -0
- package/lib/util/shortPoll.js +102 -0
- package/lib/util/threaded.js +80 -0
- package/package.json +91 -0
- package/postinstall.js +1 -0
- package/settings.json +101 -0
- package/test/accountinformation.test.js +27 -0
- package/test/accountsettings.test.js +27 -0
- package/test/asset.test.js +66 -0
- package/test/assets/Great-White-Shark-Fin.rbxm +0 -0
- package/test/assets/KeyframeSequence.rbxm +0 -0
- package/test/avatar.test.js +164 -0
- package/test/badges.test.js +96 -0
- package/test/chat.test.js +104 -0
- package/test/datastore.test.js +105 -0
- package/test/develop.test.js +53 -0
- package/test/economy.test.js +137 -0
- package/test/friends.test.js +128 -0
- package/test/games.test.js +187 -0
- package/test/groups.test.js +311 -0
- package/test/inventory.test.js +98 -0
- package/test/itemconfiguration.test.js +24 -0
- package/test/premiumfeatures.test.js +17 -0
- package/test/presence.test.js +25 -0
- package/test/privatemessages.test.js +33 -0
- package/test/thumbnails.test.js +53 -0
- package/test/users.test.js +68 -0
- package/tutorials/Authentication.md +75 -0
- package/tutorials/Event Emitters.md +26 -0
- package/tutorials/Promises.md +86 -0
- package/tutorials/VPS Authentication.md +72 -0
- package/typings/index.d.ts +2493 -0
- package/typings/jsDocs.ts +1883 -0
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
// Includes
|
|
2
|
+
const http = require('../util/http.js').func
|
|
3
|
+
const getGeneralToken = require('../util/getGeneralToken.js').func
|
|
4
|
+
|
|
5
|
+
// Args
|
|
6
|
+
exports.required = ['group', ['postId', 'post']]
|
|
7
|
+
exports.optional = ['jar']
|
|
8
|
+
|
|
9
|
+
// Docs
|
|
10
|
+
/**
|
|
11
|
+
* 🔐 Delete a wall post.
|
|
12
|
+
* @category Group
|
|
13
|
+
* @alias deleteWallPost
|
|
14
|
+
* @param {number} group - The id of the group.
|
|
15
|
+
* @param {number} postId - The id of the post to delete.
|
|
16
|
+
* @returns {Promise<void>}
|
|
17
|
+
* @example const noblox = require("noblox.js")
|
|
18
|
+
* // Login using your cookie
|
|
19
|
+
* noblox.deleteWallPost(1, 2)
|
|
20
|
+
**/
|
|
21
|
+
|
|
22
|
+
// Define
|
|
23
|
+
function deleteWallPost (jar, token, group, postId) {
|
|
24
|
+
return new Promise((resolve, reject) => {
|
|
25
|
+
const httpOpt = {
|
|
26
|
+
url: `//groups.roblox.com/v1/groups/${group}/wall/posts/${postId}`,
|
|
27
|
+
options: {
|
|
28
|
+
method: 'DELETE',
|
|
29
|
+
jar: jar,
|
|
30
|
+
headers: {
|
|
31
|
+
'X-CSRF-TOKEN': token
|
|
32
|
+
},
|
|
33
|
+
resolveWithFullResponse: true
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
return http(httpOpt)
|
|
37
|
+
.then(function (res) {
|
|
38
|
+
if (res.statusCode === 200) {
|
|
39
|
+
resolve()
|
|
40
|
+
} else {
|
|
41
|
+
const body = JSON.parse(res.body) || {}
|
|
42
|
+
if (body.errors && body.errors.length > 0) {
|
|
43
|
+
const errors = body.errors.map((e) => {
|
|
44
|
+
return e.message
|
|
45
|
+
})
|
|
46
|
+
reject(new Error(`${res.statusCode} ${errors.join(', ')}`))
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}).catch(error => reject(error))
|
|
50
|
+
})
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
exports.func = function (args) {
|
|
54
|
+
const group = args.group
|
|
55
|
+
const jar = args.jar
|
|
56
|
+
return getGeneralToken({ jar: jar })
|
|
57
|
+
.then(function (xcsrf) {
|
|
58
|
+
if (args.post) {
|
|
59
|
+
return deleteWallPost(jar, xcsrf, group, args.post.id)
|
|
60
|
+
} else {
|
|
61
|
+
return deleteWallPost(jar, xcsrf, group, args.postId)
|
|
62
|
+
}
|
|
63
|
+
})
|
|
64
|
+
}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
// Includes
|
|
2
|
+
const http = require('../util/http.js').func
|
|
3
|
+
const getGeneralToken = require('../util/getGeneralToken.js').func
|
|
4
|
+
|
|
5
|
+
// Args
|
|
6
|
+
exports.required = ['group', 'userId']
|
|
7
|
+
exports.optional = ['jar']
|
|
8
|
+
|
|
9
|
+
// Docs
|
|
10
|
+
/**
|
|
11
|
+
* 🔐 Removes all wall posts sent by the provided user.
|
|
12
|
+
* @category Group
|
|
13
|
+
* @alias deleteWallPostsByUser
|
|
14
|
+
* @param {number} group - The id of the group.
|
|
15
|
+
* @param {number} userId - The userId of the user having their posts removed.
|
|
16
|
+
* @returns {Promise<void>}
|
|
17
|
+
* @example const noblox = require("noblox.js")
|
|
18
|
+
* // Login using your cookie
|
|
19
|
+
* noblox.deleteWallPostsByUser(1, 2)
|
|
20
|
+
**/
|
|
21
|
+
|
|
22
|
+
function deleteWallPostsByUser (group, userId, jar, xcsrf) {
|
|
23
|
+
return new Promise((resolve, reject) => {
|
|
24
|
+
const httpOpt = {
|
|
25
|
+
url: `https://groups.roblox.com/v1/groups/${group}/wall/users/${userId}/posts`,
|
|
26
|
+
options: {
|
|
27
|
+
method: 'DELETE',
|
|
28
|
+
resolveWithFullResponse: true,
|
|
29
|
+
jar: jar,
|
|
30
|
+
headers: {
|
|
31
|
+
'X-CSRF-TOKEN': xcsrf
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
return http(httpOpt)
|
|
37
|
+
.then(function (res) {
|
|
38
|
+
const responseData = JSON.parse(res.body)
|
|
39
|
+
if (res.statusCode !== 200) {
|
|
40
|
+
let error = 'An unknown error has occurred.'
|
|
41
|
+
if (responseData && responseData.errors) {
|
|
42
|
+
error = responseData.errors.map((e) => e.message).join('\n')
|
|
43
|
+
}
|
|
44
|
+
reject(new Error(error))
|
|
45
|
+
} else {
|
|
46
|
+
resolve()
|
|
47
|
+
}
|
|
48
|
+
}).catch(error => reject(error))
|
|
49
|
+
})
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
// Define
|
|
53
|
+
exports.func = function (args) {
|
|
54
|
+
const jar = args.jar
|
|
55
|
+
return getGeneralToken({ jar: jar })
|
|
56
|
+
.then(function (xcsrf) {
|
|
57
|
+
return deleteWallPostsByUser(args.group, args.userId, args.jar, xcsrf)
|
|
58
|
+
})
|
|
59
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
// Includes
|
|
2
|
+
const changeRank = require('./changeRank.js').func
|
|
3
|
+
|
|
4
|
+
// Args
|
|
5
|
+
exports.required = ['group', 'target']
|
|
6
|
+
exports.optional = ['jar']
|
|
7
|
+
|
|
8
|
+
// Docs
|
|
9
|
+
/**
|
|
10
|
+
* 🔐 Demote a user.
|
|
11
|
+
* @category Group
|
|
12
|
+
* @alias demote
|
|
13
|
+
* @param {number} group - The id of the group.
|
|
14
|
+
* @param {number} target - The userId of the user being demoted.
|
|
15
|
+
* @returns {Promise<ChangeRankResult>}
|
|
16
|
+
* @example const noblox = require("noblox.js")
|
|
17
|
+
* // Login using your cookie
|
|
18
|
+
* noblox.demote(1, 2)
|
|
19
|
+
**/
|
|
20
|
+
|
|
21
|
+
// Define
|
|
22
|
+
exports.func = function (args) {
|
|
23
|
+
args.change = -1
|
|
24
|
+
return changeRank(args)
|
|
25
|
+
}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
// Includes
|
|
2
|
+
const http = require('../util/http.js').func
|
|
3
|
+
const getGeneralToken = require('../util/getGeneralToken.js').func
|
|
4
|
+
|
|
5
|
+
// Args
|
|
6
|
+
exports.required = ['group', 'target']
|
|
7
|
+
exports.optional = ['jar']
|
|
8
|
+
|
|
9
|
+
// Docs
|
|
10
|
+
/**
|
|
11
|
+
* 🔐 Exile a user from a group.
|
|
12
|
+
* @category Group
|
|
13
|
+
* @alias exile
|
|
14
|
+
* @param {number} group - The id of the group.
|
|
15
|
+
* @param {number} target - The userId of the user being exiled.
|
|
16
|
+
* @returns {Promise<void>}
|
|
17
|
+
* @example const noblox = require("noblox.js")
|
|
18
|
+
* // Login using your cookie
|
|
19
|
+
* noblox.exile(1, 2)
|
|
20
|
+
**/
|
|
21
|
+
|
|
22
|
+
function exileUser (group, target, jar, xcsrf) {
|
|
23
|
+
return new Promise((resolve, reject) => {
|
|
24
|
+
const httpOpt = {
|
|
25
|
+
url: `https://groups.roblox.com/v1/groups/${group}/users/${target}`,
|
|
26
|
+
options: {
|
|
27
|
+
method: 'DELETE',
|
|
28
|
+
resolveWithFullResponse: true,
|
|
29
|
+
jar: jar,
|
|
30
|
+
headers: {
|
|
31
|
+
'X-CSRF-TOKEN': xcsrf
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
return http(httpOpt)
|
|
37
|
+
.then(function (res) {
|
|
38
|
+
const responseData = JSON.parse(res.body)
|
|
39
|
+
if (res.statusCode !== 200) {
|
|
40
|
+
let error = 'An unknown error has occurred.'
|
|
41
|
+
if (responseData && responseData.errors) {
|
|
42
|
+
error = responseData.errors.map((e) => e.message).join('\n')
|
|
43
|
+
}
|
|
44
|
+
reject(new Error(error))
|
|
45
|
+
} else {
|
|
46
|
+
resolve()
|
|
47
|
+
}
|
|
48
|
+
}).catch(error => reject(error))
|
|
49
|
+
})
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
// Define
|
|
53
|
+
exports.func = function (args) {
|
|
54
|
+
const jar = args.jar
|
|
55
|
+
return getGeneralToken({ jar: jar })
|
|
56
|
+
.then(function (xcsrf) {
|
|
57
|
+
return exileUser(args.group, args.target, args.jar, xcsrf)
|
|
58
|
+
})
|
|
59
|
+
}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
// Includes
|
|
2
|
+
const http = require('../util/http.js').func
|
|
3
|
+
|
|
4
|
+
exports.required = ['group']
|
|
5
|
+
exports.optional = ['actionType', 'userId', 'sortOrder', 'limit', 'cursor', 'jar']
|
|
6
|
+
|
|
7
|
+
// Docs
|
|
8
|
+
/**
|
|
9
|
+
* 🔐 Get the audit log for the group.
|
|
10
|
+
* @category Group
|
|
11
|
+
* @alias getAuditLog
|
|
12
|
+
* @param {number} group - The id of the group.
|
|
13
|
+
* @param {("DeletePost" | "RemoveMember" | "AcceptJoinRequest" | "DeclineJoinRequest" | "PostStatus" | "ChangeRank" | "BuyAd" | "SendAllyRequest" | "CreateEnemy" | "AcceptAllyRequest" | "DeclineAllyRequest" | "DeleteAlly" | "DeleteEnemy" | "AddGroupPlace" | "RemoveGroupPlace" | "CreateItems" | "ConfigureItems" | "SpendGroupFunds" | "ChangeOwner" | "Delete" | "AdjustCurrencyAmounts" | "Abandon" | "Claim" | "Rename" | "ChangeDescription" | "InviteToClan" | "KickFromClan" | "CancelClanInvite" | "BuyClan" | "CreateGroupAsset" | "UpdateGroupAsset" | "ConfigureGroupAsset" | "RevertGroupAsset" | "CreateGroupDeveloperProduct" | "ConfigureGroupGame" | "Lock" | "Unlock" | "CreateGamePass" | "CreateBadge" | "ConfigureBadge" | "SavePlace" | "PublishPlace")=} actionType - The action type to filter for.
|
|
14
|
+
* @param {number=} userId - The user's id to filter for.
|
|
15
|
+
* @param {SortOrder=} sortOrder - The order to sort the logs by.
|
|
16
|
+
* @param {Limit=} limit - The maximum logs per a page.
|
|
17
|
+
* @param {string=} cursor - The cursor for the page.
|
|
18
|
+
* @returns {Promise<AuditPage>}
|
|
19
|
+
* @example const noblox = require("noblox.js")
|
|
20
|
+
* // Login using your cookie
|
|
21
|
+
* const rankLogs = await noblox.getAuditLog(1, "ChangeRank", 2, "Asc")
|
|
22
|
+
**/
|
|
23
|
+
|
|
24
|
+
function getAuditLog (group, actionType, userId, sortOrder, limit, cursor, jar) {
|
|
25
|
+
return new Promise((resolve, reject) => {
|
|
26
|
+
const httpOpt = {
|
|
27
|
+
url: `https://groups.roblox.com/v1/groups/${group}/audit-log?actionType=${actionType}&cursor=${cursor}&limit=${limit}&sortOrder=${sortOrder}&userId=${userId}`,
|
|
28
|
+
options: {
|
|
29
|
+
method: 'GET',
|
|
30
|
+
resolveWithFullResponse: true,
|
|
31
|
+
jar: jar
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
return http(httpOpt)
|
|
36
|
+
.then(function (res) {
|
|
37
|
+
const responseData = JSON.parse(res.body)
|
|
38
|
+
if (res.statusCode !== 200) {
|
|
39
|
+
let error = 'An unknown error has occurred.'
|
|
40
|
+
if (responseData && responseData.errors) {
|
|
41
|
+
error = responseData.errors.map((e) => e.message).join('\n')
|
|
42
|
+
}
|
|
43
|
+
reject(new Error(error))
|
|
44
|
+
} else {
|
|
45
|
+
responseData.data = responseData.data.map((entry) => {
|
|
46
|
+
entry.created = new Date(entry.created)
|
|
47
|
+
return entry
|
|
48
|
+
})
|
|
49
|
+
resolve(responseData)
|
|
50
|
+
}
|
|
51
|
+
}).catch(error => reject(error))
|
|
52
|
+
})
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
// Define
|
|
56
|
+
exports.func = function (args) {
|
|
57
|
+
const jar = args.jar
|
|
58
|
+
const actionType = args.actionType || ''
|
|
59
|
+
const userId = args.userId || ''
|
|
60
|
+
const sortOrder = args.sortOrder || 'Asc'
|
|
61
|
+
const limit = args.limit || (100).toString()
|
|
62
|
+
const cursor = args.cursor || ''
|
|
63
|
+
return getAuditLog(args.group, actionType, userId, sortOrder, limit, cursor, jar)
|
|
64
|
+
}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
// Includes
|
|
2
|
+
const http = require('../util/http.js').func
|
|
3
|
+
|
|
4
|
+
// Args
|
|
5
|
+
exports.required = ['groupId']
|
|
6
|
+
exports.optional = []
|
|
7
|
+
|
|
8
|
+
// Docs
|
|
9
|
+
/**
|
|
10
|
+
* ✅ Get a group's info.
|
|
11
|
+
* @category Group
|
|
12
|
+
* @alias getGroup
|
|
13
|
+
* @param {number} groupId - The id of the group.
|
|
14
|
+
* @returns {Promise<Group>}
|
|
15
|
+
* @example const noblox = require("noblox.js")
|
|
16
|
+
* const groupInfo = await noblox.getGroup(1)
|
|
17
|
+
**/
|
|
18
|
+
|
|
19
|
+
// Define
|
|
20
|
+
function getGroup (groupId) {
|
|
21
|
+
return new Promise((resolve, reject) => {
|
|
22
|
+
const httpOpt = {
|
|
23
|
+
url: `//groups.roblox.com/v1/groups/${groupId}`,
|
|
24
|
+
options: {
|
|
25
|
+
method: 'GET',
|
|
26
|
+
resolveWithFullResponse: true
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
return http(httpOpt)
|
|
30
|
+
.then(function (res) {
|
|
31
|
+
if (res.statusCode === 200) {
|
|
32
|
+
const body = JSON.parse(res.body)
|
|
33
|
+
|
|
34
|
+
body.shout.created = new Date(body.shout.created)
|
|
35
|
+
body.shout.updated = new Date(body.shout.updated)
|
|
36
|
+
|
|
37
|
+
resolve(body)
|
|
38
|
+
} else {
|
|
39
|
+
const body = JSON.parse(res.body) || {}
|
|
40
|
+
if (body.errors && body.errors.length > 0) {
|
|
41
|
+
const errors = body.errors.map((e) => {
|
|
42
|
+
return e.message
|
|
43
|
+
})
|
|
44
|
+
reject(new Error(`${res.statusCode} ${errors.join(', ')}`))
|
|
45
|
+
} else {
|
|
46
|
+
reject(new Error(`${res.statusCode} ${res.body}`))
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}).catch(error => reject(error))
|
|
50
|
+
})
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
exports.func = function (args) {
|
|
54
|
+
return getGroup(args.groupId)
|
|
55
|
+
}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
// Includes
|
|
2
|
+
const http = require('../util/http.js').func
|
|
3
|
+
|
|
4
|
+
// Args
|
|
5
|
+
exports.required = ['groupId']
|
|
6
|
+
exports.optional = ['jar']
|
|
7
|
+
|
|
8
|
+
// Docs
|
|
9
|
+
/**
|
|
10
|
+
* 🔐 Get the social link data associated with a group.
|
|
11
|
+
* @category Group
|
|
12
|
+
* @alias getGroupSocialLinks
|
|
13
|
+
* @param {number} groupId - The id of the group.
|
|
14
|
+
* @returns {Promise<SocialLinkResponse[]>}
|
|
15
|
+
* @example const noblox = require("noblox.js")
|
|
16
|
+
* const groupSocialLinks = await noblox.getGroupSocialLinks(9997719)
|
|
17
|
+
**/
|
|
18
|
+
|
|
19
|
+
// Define
|
|
20
|
+
function getGroupSocialLinks (groupId, jar) {
|
|
21
|
+
return http({
|
|
22
|
+
url: `//groups.roblox.com/v1/groups/${groupId}/social-links`,
|
|
23
|
+
options: {
|
|
24
|
+
jar: jar,
|
|
25
|
+
resolveWithFullResponse: true
|
|
26
|
+
}
|
|
27
|
+
})
|
|
28
|
+
.then(({ statusCode, body }) => {
|
|
29
|
+
const { errors, data } = JSON.parse(body)
|
|
30
|
+
if (statusCode === 200 && data) {
|
|
31
|
+
return data
|
|
32
|
+
} else if (statusCode === 400 || statusCode === 403 || statusCode === 404) {
|
|
33
|
+
throw new Error(`${errors[0].message} | groupId: ${groupId}`)
|
|
34
|
+
} else if (statusCode === 401) {
|
|
35
|
+
throw new Error(`${errors[0].message} (Are you logged in?) | groupId: ${groupId}`)
|
|
36
|
+
} else {
|
|
37
|
+
throw new Error(`An unknown error occurred with getGroupSocialLinks() | [${statusCode}] groupId: ${groupId}`)
|
|
38
|
+
}
|
|
39
|
+
})
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
exports.func = function ({ groupId, jar }) {
|
|
43
|
+
return getGroupSocialLinks(groupId, jar)
|
|
44
|
+
}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
// Includes
|
|
2
|
+
const http = require('../util/http.js').func
|
|
3
|
+
|
|
4
|
+
// Args
|
|
5
|
+
exports.required = ['userId']
|
|
6
|
+
exports.optional = []
|
|
7
|
+
|
|
8
|
+
// Docs
|
|
9
|
+
/**
|
|
10
|
+
* ✅ Get the groups of a user.
|
|
11
|
+
* @category User
|
|
12
|
+
* @alias getGroups
|
|
13
|
+
* @param {number} userId - The id of the user.
|
|
14
|
+
* @returns {Promise<IGroupPartial[]>}
|
|
15
|
+
* @example const noblox = require("noblox.js")
|
|
16
|
+
* let groups = await noblox.getGroups(123456)
|
|
17
|
+
**/
|
|
18
|
+
|
|
19
|
+
// Define
|
|
20
|
+
function getGroups (userId) {
|
|
21
|
+
return new Promise((resolve, reject) => {
|
|
22
|
+
const requests = [
|
|
23
|
+
constructRequest(`//groups.roblox.com/v2/users/${userId}/groups/roles`),
|
|
24
|
+
constructRequest(`//groups.roblox.com/v1/users/${userId}/groups/primary/role`)
|
|
25
|
+
].map(promise => promise.then(
|
|
26
|
+
val => ({ status: 'fulfilled', value: val }),
|
|
27
|
+
rej => ({ status: 'rejected', reason: rej })
|
|
28
|
+
))
|
|
29
|
+
|
|
30
|
+
const result = []
|
|
31
|
+
|
|
32
|
+
Promise.all(requests).then(async (promiseResponses) => {
|
|
33
|
+
let responses = promiseResponses.map(response => response.value)
|
|
34
|
+
const failedResponse = (responses[0].statusCode !== 200 || !responses[0].body) // we only check the first request because the second one errors if a primary is not set
|
|
35
|
+
|
|
36
|
+
if (failedResponse) {
|
|
37
|
+
const body = responses[0].body || {}
|
|
38
|
+
if (body.errors && body.errors.length > 0) {
|
|
39
|
+
const errors = body.errors.map((e) => {
|
|
40
|
+
return e.message
|
|
41
|
+
})
|
|
42
|
+
reject(new Error(`${responses[0].statusCode} ${errors.join(', ')}`))
|
|
43
|
+
}
|
|
44
|
+
reject(new Error('The provided user ID is not valid.'))
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
responses = responses.map(r => r.body)
|
|
48
|
+
|
|
49
|
+
const groupRoleData = responses[0].data
|
|
50
|
+
if (groupRoleData) {
|
|
51
|
+
const primaryGroupId = responses[1] && responses[1].group && responses[1].group.id
|
|
52
|
+
|
|
53
|
+
const groupThumbails = await constructRequest(`https://thumbnails.roblox.com/v1/groups/icons?groupIds=${groupRoleData.map(data => data.group.id).join(',')}&size=150x150&format=Png&isCircular=false`)
|
|
54
|
+
|
|
55
|
+
groupRoleData.forEach(data => {
|
|
56
|
+
const insertion = {
|
|
57
|
+
Id: data.group.id,
|
|
58
|
+
Name: data.group.name,
|
|
59
|
+
MemberCount: data.group.memberCount,
|
|
60
|
+
IsPrimary: data.group.id === primaryGroupId,
|
|
61
|
+
Rank: data.role.rank,
|
|
62
|
+
Role: data.role.name,
|
|
63
|
+
RoleId: data.role.id,
|
|
64
|
+
EmblemUrl: groupThumbails.body.data.find(thumbnail => thumbnail.targetId === data.group.id).imageUrl
|
|
65
|
+
}
|
|
66
|
+
result.push(insertion)
|
|
67
|
+
})
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
resolve(result)
|
|
71
|
+
})
|
|
72
|
+
})
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
function constructRequest (url) {
|
|
76
|
+
return http({
|
|
77
|
+
url: url,
|
|
78
|
+
options: {
|
|
79
|
+
resolveWithFullResponse: true,
|
|
80
|
+
followRedirect: false,
|
|
81
|
+
json: true
|
|
82
|
+
}
|
|
83
|
+
})
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
exports.func = function (args) {
|
|
87
|
+
return getGroups(args.userId)
|
|
88
|
+
}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
// Includes
|
|
2
|
+
const http = require('../util/http.js').func
|
|
3
|
+
|
|
4
|
+
// Args
|
|
5
|
+
exports.required = ['group', 'userId']
|
|
6
|
+
exports.optional = ['jar']
|
|
7
|
+
|
|
8
|
+
// Docs
|
|
9
|
+
/**
|
|
10
|
+
* 🔐 Gets a specific join request, given a user ID.
|
|
11
|
+
* @category Group
|
|
12
|
+
* @alias getJoinRequest
|
|
13
|
+
* @param {number} group - The id of the group.
|
|
14
|
+
* @param {number} userId - The user ID whose join request is wanted.
|
|
15
|
+
* @returns {(Promise<GroupJoinRequest>|Promise<null>)} A join request if one exists, or null.
|
|
16
|
+
* @example const noblox = require("noblox.js")
|
|
17
|
+
* // Login using your cookie
|
|
18
|
+
* const request = await noblox.getJoinRequest(4591072, 5903228)
|
|
19
|
+
**/
|
|
20
|
+
|
|
21
|
+
// Define
|
|
22
|
+
function getJoinRequest (jar, group, userId) {
|
|
23
|
+
return new Promise((resolve, reject) => {
|
|
24
|
+
const httpOpt = {
|
|
25
|
+
url: `//groups.roblox.com/v1/groups/${group}/join-requests/users/${userId}`,
|
|
26
|
+
options: {
|
|
27
|
+
method: 'GET',
|
|
28
|
+
jar: jar,
|
|
29
|
+
resolveWithFullResponse: true
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
return http(httpOpt)
|
|
33
|
+
.then(function (res) {
|
|
34
|
+
if (res.statusCode === 200) {
|
|
35
|
+
resolve(JSON.parse(res.body) || null)
|
|
36
|
+
} else {
|
|
37
|
+
const body = JSON.parse(res.body) || {}
|
|
38
|
+
if (body.errors && body.errors.length > 0) {
|
|
39
|
+
const errors = body.errors.map((e) => {
|
|
40
|
+
return e.message
|
|
41
|
+
})
|
|
42
|
+
reject(new Error(`${res.statusCode} ${errors.join(', ')}`))
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
}).catch(error => reject(error))
|
|
46
|
+
})
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
exports.func = function (args) {
|
|
50
|
+
const jar = args.jar
|
|
51
|
+
return getJoinRequest(jar, args.group, args.userId)
|
|
52
|
+
}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
// Includes
|
|
2
|
+
const http = require('../util/http.js').func
|
|
3
|
+
|
|
4
|
+
// Args
|
|
5
|
+
exports.required = ['group']
|
|
6
|
+
exports.optional = ['sortOrder', 'limit', 'cursor', 'jar']
|
|
7
|
+
|
|
8
|
+
// Docs
|
|
9
|
+
/**
|
|
10
|
+
* 🔐 Get the join requests for a group.
|
|
11
|
+
* @category Group
|
|
12
|
+
* @alias getJoinRequests
|
|
13
|
+
* @param {number} group - The id of the group.
|
|
14
|
+
* @param {SortOrder=} sortOrder - The order to sort the requests by.
|
|
15
|
+
* @param {Limit=} limit - The maximum results per a page.
|
|
16
|
+
* @param {string=} cursor - The cursor for the next page.
|
|
17
|
+
* @returns {Promise<GroupJoinRequestsPage>}
|
|
18
|
+
* @example const noblox = require("noblox.js")
|
|
19
|
+
* // Login using your cookie
|
|
20
|
+
* const requests = await noblox.getJoinRequests(1, "Asc")
|
|
21
|
+
**/
|
|
22
|
+
|
|
23
|
+
// Define
|
|
24
|
+
function getJoinRequests (jar, group, sortOrder, limit, cursor) {
|
|
25
|
+
return new Promise((resolve, reject) => {
|
|
26
|
+
const httpOpt = {
|
|
27
|
+
url: `//groups.roblox.com/v1/groups/${group}/join-requests?limit=${limit}&sortOrder=${sortOrder}&cursor=${cursor}`,
|
|
28
|
+
options: {
|
|
29
|
+
method: 'GET',
|
|
30
|
+
jar: jar,
|
|
31
|
+
resolveWithFullResponse: true
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
return http(httpOpt)
|
|
35
|
+
.then(function (res) {
|
|
36
|
+
if (res.statusCode === 200) {
|
|
37
|
+
resolve(JSON.parse(res.body))
|
|
38
|
+
} else {
|
|
39
|
+
const body = JSON.parse(res.body) || {}
|
|
40
|
+
if (body.errors && body.errors.length > 0) {
|
|
41
|
+
const errors = body.errors.map((e) => {
|
|
42
|
+
return e.message
|
|
43
|
+
})
|
|
44
|
+
reject(new Error(`${res.statusCode} ${errors.join(', ')}`))
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
})
|
|
48
|
+
.catch(error => reject(error))
|
|
49
|
+
})
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
exports.func = function (args) {
|
|
53
|
+
const jar = args.jar
|
|
54
|
+
const sortOrder = args.sortOrder || 'Asc'
|
|
55
|
+
const limit = args.limit || (10).toString()
|
|
56
|
+
const cursor = args.cursor || ''
|
|
57
|
+
return getJoinRequests(jar, args.group, sortOrder, limit, cursor)
|
|
58
|
+
}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
// Includes
|
|
2
|
+
const http = require('../util/http.js').func
|
|
3
|
+
|
|
4
|
+
// Args
|
|
5
|
+
exports.required = ['group', ['rolesetId']]
|
|
6
|
+
exports.optional = ['sortOrder', 'limit', 'cursor', 'jar']
|
|
7
|
+
|
|
8
|
+
// Docs
|
|
9
|
+
/**
|
|
10
|
+
* ✅ Get the players in a group for a specific role.
|
|
11
|
+
* @category Group
|
|
12
|
+
* @alias getPlayers
|
|
13
|
+
* @param {number} group - The id of the group.
|
|
14
|
+
* @param {number | Array<number>} rolesetId - The roleset's id.
|
|
15
|
+
* @param {SortOrder=} sortOrder - The order to get the players in.
|
|
16
|
+
* @param {Limit=} limit - The maximum result per a page.
|
|
17
|
+
* @param {string=} cursor - The cursor for the next page.
|
|
18
|
+
* @returns {Promise<GroupUser[]>}
|
|
19
|
+
* @example const noblox = require("noblox.js")
|
|
20
|
+
* const players = await noblox.getPlayers(1, 1117747196)
|
|
21
|
+
**/
|
|
22
|
+
|
|
23
|
+
// Define
|
|
24
|
+
function getPlayersInRoleOnPage (jar, group, rolesetId, sortOrder, limit, cursor) {
|
|
25
|
+
return new Promise((resolve, reject) => {
|
|
26
|
+
const httpOpt = {
|
|
27
|
+
url: `//groups.roblox.com/v1/groups/${group}/roles/${rolesetId}/users?cursor=${cursor}&limit=${limit}&sortOrder=${sortOrder}`,
|
|
28
|
+
options: {
|
|
29
|
+
method: 'GET',
|
|
30
|
+
jar: jar,
|
|
31
|
+
resolveWithFullResponse: true
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
return http(httpOpt)
|
|
35
|
+
.then(function (res) {
|
|
36
|
+
if (res.statusCode === 200) {
|
|
37
|
+
resolve(JSON.parse(res.body))
|
|
38
|
+
} else {
|
|
39
|
+
const body = JSON.parse(res.body) || {}
|
|
40
|
+
if (body.errors && body.errors.length > 0) {
|
|
41
|
+
const errors = body.errors.map((e) => {
|
|
42
|
+
return e.message
|
|
43
|
+
})
|
|
44
|
+
reject(new Error(`${res.statusCode} ${errors.join(', ')}`))
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}).catch(error => reject(error))
|
|
48
|
+
})
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
function getPlayersInRole (jar, group, rolesetId, sortOrder, limit, cursor, currentPlayers) {
|
|
52
|
+
return new Promise((resolve, reject) => {
|
|
53
|
+
if (!currentPlayers) currentPlayers = []
|
|
54
|
+
|
|
55
|
+
getPlayersInRoleOnPage(jar, group, rolesetId, sortOrder, 100, cursor, currentPlayers)
|
|
56
|
+
.then(function (pageData) {
|
|
57
|
+
const nextPageCursor = pageData.nextPageCursor
|
|
58
|
+
const dataArray = pageData.data
|
|
59
|
+
|
|
60
|
+
if (!dataArray) return reject(new Error('Error while retrieving players!'))
|
|
61
|
+
|
|
62
|
+
currentPlayers = currentPlayers.concat(dataArray)
|
|
63
|
+
|
|
64
|
+
if (limit > 0 && currentPlayers.length >= limit) {
|
|
65
|
+
return resolve(currentPlayers.slice(0, limit))
|
|
66
|
+
} else if (nextPageCursor === null) {
|
|
67
|
+
return resolve(currentPlayers)
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
getPlayersInRole(jar, group, rolesetId, sortOrder, limit, nextPageCursor, currentPlayers)
|
|
71
|
+
.then(function (newCurrentPlayers) {
|
|
72
|
+
return resolve(newCurrentPlayers)
|
|
73
|
+
})
|
|
74
|
+
}).catch(error => reject(error))
|
|
75
|
+
})
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
async function getPlayersInRoles (jar, group, rolesetIds, sortOrder, limit, cursor) {
|
|
79
|
+
let currentPlayers = []
|
|
80
|
+
|
|
81
|
+
for (let i = 0; i < rolesetIds.length; i++) {
|
|
82
|
+
const rolesetId = rolesetIds[i]
|
|
83
|
+
const roleLimit = limit <= 0 ? limit : limit - currentPlayers.length
|
|
84
|
+
|
|
85
|
+
await getPlayersInRole(jar, group, rolesetId, sortOrder, roleLimit, cursor)
|
|
86
|
+
.then((newData) => {
|
|
87
|
+
currentPlayers = currentPlayers.concat(newData)
|
|
88
|
+
})
|
|
89
|
+
.catch((error) => {
|
|
90
|
+
throw new Error(error)
|
|
91
|
+
})
|
|
92
|
+
|
|
93
|
+
if (limit > 0 && currentPlayers.length >= limit) {
|
|
94
|
+
return currentPlayers
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
return currentPlayers
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
exports.func = function (args) {
|
|
102
|
+
const jar = args.jar
|
|
103
|
+
const rolesetIds = Array.isArray(args.rolesetId) ? args.rolesetId : [args.rolesetId]
|
|
104
|
+
const sortOrder = args.sortOrder || 'Desc'
|
|
105
|
+
const limit = args.limit || -1
|
|
106
|
+
const cursor = args.cursor || ''
|
|
107
|
+
return getPlayersInRoles(jar, args.group, rolesetIds, sortOrder, limit, cursor)
|
|
108
|
+
}
|