noblox-asset.js 7.4.0
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.
- 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 +72 -0
- package/.github/workflows/run-tests.yml +49 -0
- package/CODE_OF_CONDUCT.md +76 -0
- package/LICENSE +21 -0
- package/README.md +182 -0
- package/eslint.config.mjs +34 -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 +40 -0
- package/lib/accountsettings/block.js +53 -0
- package/lib/accountsettings/unblock.js +53 -0
- package/lib/asset/deleteFromInventory.js +56 -0
- package/lib/asset/getGamePassProductInfo.js +50 -0
- package/lib/asset/getProductInfo.js +46 -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 +39 -0
- package/lib/avatar/currentlyWearing.js +33 -0
- package/lib/avatar/getAvatar.js +36 -0
- package/lib/avatar/getCurrentAvatar.js +38 -0
- package/lib/avatar/getRecentItems.js +36 -0
- package/lib/avatar/outfitDetails.js +33 -0
- package/lib/avatar/outfits.js +38 -0
- package/lib/avatar/redrawAvatar.js +47 -0
- package/lib/avatar/removeAssetId.js +51 -0
- package/lib/avatar/setAvatarBodyColors.js +61 -0
- package/lib/avatar/setAvatarScales.js +61 -0
- package/lib/avatar/setPlayerAvatarType.js +51 -0
- package/lib/avatar/setWearingAssets.js +51 -0
- package/lib/avatar/wearAssetId.js +51 -0
- package/lib/badges/getAwardedTimestamps.js +49 -0
- package/lib/badges/getBadgeInfo.js +44 -0
- package/lib/badges/getGameBadges.js +63 -0
- package/lib/badges/getPlayerBadges.js +28 -0
- package/lib/badges/updateBadgeInfo.js +75 -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 +58 -0
- package/lib/chat/chatSettings.js +34 -0
- package/lib/chat/getChatMessages.js +41 -0
- package/lib/chat/getConversations.js +44 -0
- package/lib/chat/getRolloutSettings.js +36 -0
- package/lib/chat/getUnreadConversationCount.js +34 -0
- package/lib/chat/getUnreadMessages.js +39 -0
- package/lib/chat/getUserConversations.js +38 -0
- package/lib/chat/markChatAsRead.js +53 -0
- package/lib/chat/markChatAsSeen.js +51 -0
- package/lib/chat/multiGetLatestMessages.js +38 -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 +59 -0
- package/lib/chat/renameGroupConversation.js +58 -0
- package/lib/chat/sendChatMessage.js +58 -0
- package/lib/chat/setChatUserTyping.js +58 -0
- package/lib/chat/start121Conversation.js +51 -0
- package/lib/chat/startCloudEditConversation.js +51 -0
- package/lib/chat/startGroupConversation.js +59 -0
- package/lib/client/onNotification.js +86 -0
- package/lib/client/setAPIKey.js +18 -0
- package/lib/client/setCookie.js +38 -0
- package/lib/datastores/deleteDatastoreEntry.js +56 -0
- package/lib/datastores/getDatastoreEntry.js +88 -0
- package/lib/datastores/getDatastoreEntryVersions.js +73 -0
- package/lib/datastores/getDatastoreKeys.js +63 -0
- package/lib/datastores/getDatastores.js +62 -0
- package/lib/datastores/incrementDatastoreEntry.js +83 -0
- package/lib/datastores/setDatastoreEntry.js +80 -0
- package/lib/develop/canManage.js +42 -0
- package/lib/develop/configureItem.js +210 -0
- package/lib/develop/updateUniverse.js +52 -0
- package/lib/develop/updateUniverseAccess.js +54 -0
- package/lib/economy/getGroupFunds.js +42 -0
- package/lib/economy/getGroupPayoutEligibility.js +55 -0
- package/lib/economy/getGroupRevenueSummary.js +42 -0
- package/lib/economy/getGroupTransactions.js +32 -0
- package/lib/economy/getResaleData.js +48 -0
- package/lib/economy/getResellers.js +35 -0
- package/lib/economy/getUserFunds.js +43 -0
- package/lib/economy/getUserTransactions.js +34 -0
- package/lib/economy/onGroupTransaction.js +74 -0
- package/lib/friends/acceptFriendRequest.js +54 -0
- package/lib/friends/declineAllFriendRequests.js +52 -0
- package/lib/friends/declineFriendRequest.js +54 -0
- package/lib/friends/getFollowerCount.js +35 -0
- package/lib/friends/getFollowers.js +56 -0
- package/lib/friends/getFollowingCount.js +35 -0
- package/lib/friends/getFollowings.js +56 -0
- package/lib/friends/getFriendCount.js +35 -0
- package/lib/friends/getFriendRequests.js +51 -0
- package/lib/friends/getFriends.js +48 -0
- package/lib/friends/onFriendRequest.js +58 -0
- package/lib/friends/removeFriend.js +53 -0
- package/lib/friends/sendFriendRequest.js +54 -0
- package/lib/friends/unfollow.js +53 -0
- package/lib/games/addDeveloperProduct.js +53 -0
- package/lib/games/configureGamePass.js +126 -0
- package/lib/games/getDeveloperProducts.js +44 -0
- package/lib/games/getGameInstances.js +31 -0
- package/lib/games/getGamePasses.js +39 -0
- package/lib/games/getGameRevenue.js +48 -0
- package/lib/games/getGameSocialLinks.js +42 -0
- package/lib/games/getGroupGames.js +30 -0
- package/lib/games/getPlaceInfo.js +47 -0
- package/lib/games/getUniverseInfo.js +50 -0
- package/lib/games/publishToTopic.js +52 -0
- package/lib/games/sendUserNotification.js +65 -0
- package/lib/games/updateDeveloperProduct.js +56 -0
- package/lib/groups/banFromGroup.js +47 -0
- package/lib/groups/changeRank.js +59 -0
- package/lib/groups/deleteWallPost.js +59 -0
- package/lib/groups/deleteWallPostsByUser.js +55 -0
- package/lib/groups/demote.js +25 -0
- package/lib/groups/exile.js +55 -0
- package/lib/groups/getAuditLog.js +64 -0
- package/lib/groups/getGroup.js +50 -0
- package/lib/groups/getGroupBans.js +37 -0
- package/lib/groups/getGroupSocialLinks.js +41 -0
- package/lib/groups/getGroups.js +82 -0
- package/lib/groups/getJoinRequest.js +47 -0
- package/lib/groups/getJoinRequests.js +53 -0
- package/lib/groups/getPlayers.js +103 -0
- package/lib/groups/getRankInGroup.js +45 -0
- package/lib/groups/getRankNameInGroup.js +44 -0
- package/lib/groups/getRole.js +64 -0
- package/lib/groups/getRolePermissions.js +48 -0
- package/lib/groups/getRoles.js +53 -0
- package/lib/groups/getShout.js +47 -0
- package/lib/groups/getWall.js +56 -0
- package/lib/groups/groupPayout.js +103 -0
- package/lib/groups/handleJoinRequest.js +57 -0
- package/lib/groups/handleJoinRequests.js +61 -0
- package/lib/groups/leaveGroup.js +56 -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 +58 -0
- package/lib/groups/setGroupName.js +59 -0
- package/lib/groups/setRank.js +74 -0
- package/lib/groups/setRoleInfo.js +84 -0
- package/lib/groups/shout.js +58 -0
- package/lib/groups/unbanFromGroup.js +41 -0
- package/lib/index.js +212 -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 +47 -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 +46 -0
- package/lib/presence/getPresences.js +60 -0
- package/lib/privatemessages/getMessages.js +55 -0
- package/lib/privatemessages/message.js +75 -0
- package/lib/privatemessages/onMessage.js +89 -0
- package/lib/thumbnails/getLogo.js +56 -0
- package/lib/thumbnails/getPlayerThumbnail.js +120 -0
- package/lib/thumbnails/getThumbnails.js +92 -0
- package/lib/trades/acceptTrade.js +52 -0
- package/lib/trades/canTradeWith.js +43 -0
- package/lib/trades/counterTrade.js +78 -0
- package/lib/trades/declineTrade.js +52 -0
- package/lib/trades/getTradeInfo.js +47 -0
- package/lib/trades/getTrades.js +37 -0
- package/lib/trades/sendTrade.js +76 -0
- package/lib/users/getBlurb.js +37 -0
- package/lib/users/getIdFromUsername.js +56 -0
- package/lib/users/getPlayerInfo.js +128 -0
- package/lib/users/getUserInfo.js +35 -0
- package/lib/users/getUsernameFromId.js +45 -0
- package/lib/users/getUsernameHistory.js +42 -0
- package/lib/users/onBlurbChange.js +46 -0
- package/lib/users/searchUsers.js +41 -0
- package/lib/util/apiError.js +50 -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/getAuthenticatedUser.js +41 -0
- package/lib/util/getCurrentUser.js +58 -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 +86 -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 +138 -0
- package/lib/util/jar.js +25 -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/package.json +76 -0
- package/postinstall.mjs +1 -0
- package/settings.json +115 -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 +143 -0
- package/test/friends.test.js +146 -0
- package/test/games.test.js +229 -0
- package/test/groups.test.js +405 -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 +110 -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 +2639 -0
- package/typings/jsDocs.ts +1987 -0
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
// Includes
|
|
2
|
+
const shortPoll = require('../util/shortPoll.js').func
|
|
3
|
+
const getGroupTransactions = require('./getGroupTransactions.js').func
|
|
4
|
+
|
|
5
|
+
// Args
|
|
6
|
+
exports.required = ['groupId', 'transactionType']
|
|
7
|
+
exports.optional = ['jar']
|
|
8
|
+
|
|
9
|
+
// Docs
|
|
10
|
+
/**
|
|
11
|
+
* 🔐 An event for when a group transaction is made, for example a purchase. This event has a rate of one request per 60
|
|
12
|
+
* sec, which is more than the typical 10 seconds. This is due to the unusually low rate limit on the transactions
|
|
13
|
+
* endpoint.
|
|
14
|
+
*
|
|
15
|
+
* Note: The `created` field returned by this event will always have 0 milliseconds. This is due to a quirk on Roblox's side:
|
|
16
|
+
* These millisecond values fluctuate, meaning the event can misfire. Removing them avoids this problem.
|
|
17
|
+
* @category Group
|
|
18
|
+
* @alias onGroupTransaction
|
|
19
|
+
* @param {number} groupId - The id of the group.
|
|
20
|
+
* @param {("Sale" | "Purchase" | "AffiliateSale" | "DevEx" | "GroupPayout" | "AdImpressionPayout")} transactionType - The transaction type.
|
|
21
|
+
* @returns An EventEmitter that emits when a transaction is made.
|
|
22
|
+
* @example const noblox = require("noblox.js")
|
|
23
|
+
* // Login using your cookie
|
|
24
|
+
* const transactionEvent = noblox.onGroupTransaction(1)
|
|
25
|
+
* transactionEvent.on("data", function(data) {
|
|
26
|
+
* console.log("New Transaction!", data)
|
|
27
|
+
* })
|
|
28
|
+
* transactionEvent.on("error", function(err) {
|
|
29
|
+
* console.error("Something went wrong: ", err)
|
|
30
|
+
* // Handle error as needed
|
|
31
|
+
* })
|
|
32
|
+
**/
|
|
33
|
+
|
|
34
|
+
// Define
|
|
35
|
+
exports.func = function (args) {
|
|
36
|
+
let empty = true
|
|
37
|
+
return shortPoll({
|
|
38
|
+
getLatest: function (latest) {
|
|
39
|
+
return getGroupTransactions({ group: args.groupId, jar: args.jar, transactionType: args.transactionType })
|
|
40
|
+
.then(function (transactions) {
|
|
41
|
+
const given = []
|
|
42
|
+
// This method works much in the same way as onAuditLog. We remove some of the precision from transaction dates
|
|
43
|
+
// Because Roblox has a habit of being imprecise and varying the milliseconds of a given transaction/log item
|
|
44
|
+
// across different requests - and this causes duplicate fires.
|
|
45
|
+
if (transactions) {
|
|
46
|
+
for (const key in transactions) {
|
|
47
|
+
if (Object.prototype.hasOwnProperty.call(transactions, key)) {
|
|
48
|
+
const date = transactions[key].created
|
|
49
|
+
date.setMilliseconds(0)
|
|
50
|
+
|
|
51
|
+
if (date > latest) {
|
|
52
|
+
latest = date
|
|
53
|
+
given.push(transactions[key])
|
|
54
|
+
}
|
|
55
|
+
empty = false
|
|
56
|
+
} else if (!empty) {
|
|
57
|
+
const date = new Date()
|
|
58
|
+
date.setMilliseconds(0)
|
|
59
|
+
|
|
60
|
+
given.push({ date })
|
|
61
|
+
latest = date
|
|
62
|
+
empty = true
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
return {
|
|
66
|
+
latest,
|
|
67
|
+
data: given
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
})
|
|
71
|
+
},
|
|
72
|
+
delay: 'onGroupTransaction'
|
|
73
|
+
})
|
|
74
|
+
}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
// Includes
|
|
2
|
+
const http = require('../util/http.js').func
|
|
3
|
+
const getGeneralToken = require('../util/getGeneralToken.js').func
|
|
4
|
+
const RobloxAPIError = require('../util/apiError.js')
|
|
5
|
+
|
|
6
|
+
// Args
|
|
7
|
+
exports.required = ['userId']
|
|
8
|
+
exports.optional = ['jar']
|
|
9
|
+
|
|
10
|
+
// Docs
|
|
11
|
+
/**
|
|
12
|
+
* 🔐 Accept a user's friend request.
|
|
13
|
+
* @category User
|
|
14
|
+
* @alias acceptFriendRequest
|
|
15
|
+
* @param {number} userId - The id of the user.
|
|
16
|
+
* @returns {Promise<void>}
|
|
17
|
+
* @example const noblox = require("noblox.js")
|
|
18
|
+
* // Login using your cookie
|
|
19
|
+
* noblox.acceptFriendRequest(123456)
|
|
20
|
+
**/
|
|
21
|
+
|
|
22
|
+
// Define
|
|
23
|
+
function acceptFriendRequest (jar, token, userId) {
|
|
24
|
+
return new Promise((resolve, reject) => {
|
|
25
|
+
const httpOpt = {
|
|
26
|
+
url: `//friends.roblox.com/v1/users/${userId}/accept-friend-request`,
|
|
27
|
+
options: {
|
|
28
|
+
method: 'POST',
|
|
29
|
+
jar,
|
|
30
|
+
headers: {
|
|
31
|
+
'X-CSRF-TOKEN': token,
|
|
32
|
+
'Content-Type': 'application/json'
|
|
33
|
+
},
|
|
34
|
+
resolveWithFullResponse: true
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
return http(httpOpt)
|
|
38
|
+
.then(function (res) {
|
|
39
|
+
if (res.statusCode === 200) {
|
|
40
|
+
resolve()
|
|
41
|
+
} else {
|
|
42
|
+
reject(new RobloxAPIError(res))
|
|
43
|
+
}
|
|
44
|
+
})
|
|
45
|
+
})
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
exports.func = function (args) {
|
|
49
|
+
const jar = args.jar
|
|
50
|
+
return getGeneralToken({ jar })
|
|
51
|
+
.then(function (xcsrf) {
|
|
52
|
+
return acceptFriendRequest(jar, xcsrf, args.userId)
|
|
53
|
+
})
|
|
54
|
+
}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
// Includes
|
|
2
|
+
const http = require('../util/http.js').func
|
|
3
|
+
const getGeneralToken = require('../util/getGeneralToken.js').func
|
|
4
|
+
const RobloxAPIError = require('../util/apiError.js')
|
|
5
|
+
|
|
6
|
+
// Args
|
|
7
|
+
exports.required = []
|
|
8
|
+
exports.optional = ['jar']
|
|
9
|
+
|
|
10
|
+
// Docs
|
|
11
|
+
/**
|
|
12
|
+
* 🔐 Decline all incoming friend requests.
|
|
13
|
+
* @category User
|
|
14
|
+
* @alias declineAllFriendRequests
|
|
15
|
+
* @returns {Promise<void>}
|
|
16
|
+
* @example const noblox = require("noblox.js")
|
|
17
|
+
* // Login using your cookie
|
|
18
|
+
* noblox.declineAllFriendRequests()
|
|
19
|
+
**/
|
|
20
|
+
|
|
21
|
+
// Define
|
|
22
|
+
function declineAllFriendRequests (jar, token) {
|
|
23
|
+
return new Promise((resolve, reject) => {
|
|
24
|
+
const httpOpt = {
|
|
25
|
+
url: '//friends.roblox.com/v1/user/friend-requests/decline-all',
|
|
26
|
+
options: {
|
|
27
|
+
method: 'POST',
|
|
28
|
+
jar,
|
|
29
|
+
headers: {
|
|
30
|
+
'X-CSRF-TOKEN': token
|
|
31
|
+
},
|
|
32
|
+
resolveWithFullResponse: true
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
return http(httpOpt)
|
|
36
|
+
.then(function (res) {
|
|
37
|
+
if (res.statusCode === 200) {
|
|
38
|
+
resolve()
|
|
39
|
+
} else {
|
|
40
|
+
reject(new RobloxAPIError(res))
|
|
41
|
+
}
|
|
42
|
+
})
|
|
43
|
+
})
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
exports.func = function (args) {
|
|
47
|
+
const jar = args.jar
|
|
48
|
+
return getGeneralToken({ jar })
|
|
49
|
+
.then(function (xcsrf) {
|
|
50
|
+
return declineAllFriendRequests(jar, xcsrf)
|
|
51
|
+
})
|
|
52
|
+
}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
// Includes
|
|
2
|
+
const http = require('../util/http.js').func
|
|
3
|
+
const getGeneralToken = require('../util/getGeneralToken.js').func
|
|
4
|
+
const RobloxAPIError = require('../util/apiError.js')
|
|
5
|
+
|
|
6
|
+
// Args
|
|
7
|
+
exports.required = ['userId']
|
|
8
|
+
exports.optional = ['jar']
|
|
9
|
+
|
|
10
|
+
// Docs
|
|
11
|
+
/**
|
|
12
|
+
* 🔐 Decline a user's friend request.
|
|
13
|
+
* @category User
|
|
14
|
+
* @alias declineFriendRequest
|
|
15
|
+
* @param {number} userId - The id of the user that sent the friend request that is being declined.
|
|
16
|
+
* @returns {Promise<void>}
|
|
17
|
+
* @example const noblox = require("noblox.js")
|
|
18
|
+
* // Login using your cookie
|
|
19
|
+
* noblox.declineFriendRequest(123456)
|
|
20
|
+
**/
|
|
21
|
+
|
|
22
|
+
// Define
|
|
23
|
+
function declineFriendRequest (jar, token, userId) {
|
|
24
|
+
return new Promise((resolve, reject) => {
|
|
25
|
+
const httpOpt = {
|
|
26
|
+
url: `//friends.roblox.com/v1/users/${userId}/decline-friend-request`,
|
|
27
|
+
options: {
|
|
28
|
+
method: 'POST',
|
|
29
|
+
jar,
|
|
30
|
+
headers: {
|
|
31
|
+
'X-CSRF-TOKEN': token,
|
|
32
|
+
'Content-Type': 'application/json'
|
|
33
|
+
},
|
|
34
|
+
resolveWithFullResponse: true
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
return http(httpOpt)
|
|
38
|
+
.then(function (res) {
|
|
39
|
+
if (res.statusCode === 200) {
|
|
40
|
+
resolve()
|
|
41
|
+
} else {
|
|
42
|
+
reject(new RobloxAPIError(res))
|
|
43
|
+
}
|
|
44
|
+
})
|
|
45
|
+
})
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
exports.func = function (args) {
|
|
49
|
+
const jar = args.jar
|
|
50
|
+
return getGeneralToken({ jar })
|
|
51
|
+
.then(function (xcsrf) {
|
|
52
|
+
return declineFriendRequest(jar, xcsrf, args.userId)
|
|
53
|
+
})
|
|
54
|
+
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
// Includes
|
|
2
|
+
const http = require('../util/http.js').func
|
|
3
|
+
const RobloxAPIError = require('../util/apiError.js')
|
|
4
|
+
|
|
5
|
+
// Args
|
|
6
|
+
exports.required = ['userId']
|
|
7
|
+
|
|
8
|
+
// Docs
|
|
9
|
+
/**
|
|
10
|
+
* ✅ Gets the number of followers a user has.
|
|
11
|
+
* @category User
|
|
12
|
+
* @alias getFollowerCount
|
|
13
|
+
* @param { number } userId
|
|
14
|
+
* @returns Promise<number>
|
|
15
|
+
* @example const noblox = require("noblox.js")
|
|
16
|
+
* const numberOfFollowers = await noblox.getFollowerCount(55549140)
|
|
17
|
+
**/
|
|
18
|
+
|
|
19
|
+
// Define
|
|
20
|
+
exports.func = function (args) {
|
|
21
|
+
const httpOpt = {
|
|
22
|
+
url: `//friends.roblox.com/v1/users/${args.userId}/followers/count`,
|
|
23
|
+
options: {
|
|
24
|
+
json: true,
|
|
25
|
+
method: 'GET',
|
|
26
|
+
resolveWithFullResponse: true
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
return http(httpOpt).then(function (res) {
|
|
31
|
+
if (res.statusCode === 200) { return res.body.count }
|
|
32
|
+
|
|
33
|
+
throw new RobloxAPIError(res)
|
|
34
|
+
})
|
|
35
|
+
}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
// Includes
|
|
2
|
+
const http = require('../util/http.js').func
|
|
3
|
+
const RobloxAPIError = require('../util/apiError.js')
|
|
4
|
+
|
|
5
|
+
// Args
|
|
6
|
+
exports.required = ['userId']
|
|
7
|
+
exports.optional = ['sortOrder', 'limit', 'cursor', 'jar']
|
|
8
|
+
|
|
9
|
+
// Docs
|
|
10
|
+
/**
|
|
11
|
+
* ✅ Get a user's followers.
|
|
12
|
+
* @category User
|
|
13
|
+
* @alias getFollowers
|
|
14
|
+
* @param {number} userId - The id of the user whose followers are being returned.
|
|
15
|
+
* @param {Limit=} [limit=10] - The amount of followers being fetched each request.
|
|
16
|
+
* @param {SortOrder=} [sortOrder=Asc] - The order that the data should be sorted by (Asc or Desc)
|
|
17
|
+
* @param {string=} cursor - The cursor for the previous or next page.
|
|
18
|
+
* @returns {Promise<FollowersPage>}
|
|
19
|
+
* @example const noblox = require("noblox.js")
|
|
20
|
+
* let followers = await noblox.getFollowers(123456, "Asc", 10)
|
|
21
|
+
**/
|
|
22
|
+
|
|
23
|
+
// Define
|
|
24
|
+
function getFollowers (jar, userId, sortOrder, limit, cursor) {
|
|
25
|
+
return new Promise((resolve, reject) => {
|
|
26
|
+
const httpOpt = {
|
|
27
|
+
url: `//friends.roblox.com/v1/users/${userId}/followers?limit=${limit}&sortOrder=${sortOrder}&cursor=${cursor}`,
|
|
28
|
+
options: {
|
|
29
|
+
method: 'GET',
|
|
30
|
+
jar,
|
|
31
|
+
resolveWithFullResponse: true
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
return http(httpOpt)
|
|
35
|
+
.then(function (res) {
|
|
36
|
+
if (res.statusCode === 200) {
|
|
37
|
+
const response = JSON.parse(res.body)
|
|
38
|
+
response.data = response.data.map((entry) => {
|
|
39
|
+
entry.created = new Date(entry.created)
|
|
40
|
+
return entry
|
|
41
|
+
})
|
|
42
|
+
resolve(response)
|
|
43
|
+
} else {
|
|
44
|
+
reject(new RobloxAPIError(res))
|
|
45
|
+
}
|
|
46
|
+
})
|
|
47
|
+
})
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
exports.func = function (args) {
|
|
51
|
+
const jar = args.jar
|
|
52
|
+
const sortOrder = args.sortOrder || 'Asc'
|
|
53
|
+
const limit = args.limit || (10).toString()
|
|
54
|
+
const cursor = args.cursor || ''
|
|
55
|
+
return getFollowers(jar, args.userId, sortOrder, limit, cursor)
|
|
56
|
+
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
// Includes
|
|
2
|
+
const http = require('../util/http.js').func
|
|
3
|
+
const RobloxAPIError = require('../util/apiError.js')
|
|
4
|
+
|
|
5
|
+
// Args
|
|
6
|
+
exports.required = ['userId']
|
|
7
|
+
|
|
8
|
+
// Docs
|
|
9
|
+
/**
|
|
10
|
+
* ✅ Gets the number of users a user is following.
|
|
11
|
+
* @category User
|
|
12
|
+
* @alias getFollowingCount
|
|
13
|
+
* @param { number } userId
|
|
14
|
+
* @returns Promise<number>
|
|
15
|
+
* @example const noblox = require("noblox.js")
|
|
16
|
+
* const numberOfFollowings = await noblox.getFollowingCount(55549140)
|
|
17
|
+
**/
|
|
18
|
+
|
|
19
|
+
// Define
|
|
20
|
+
exports.func = function (args) {
|
|
21
|
+
const httpOpt = {
|
|
22
|
+
url: `//friends.roblox.com/v1/users/${args.userId}/followings/count`,
|
|
23
|
+
options: {
|
|
24
|
+
json: true,
|
|
25
|
+
method: 'GET',
|
|
26
|
+
resolveWithFullResponse: true
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
return http(httpOpt).then(function (res) {
|
|
31
|
+
if (res.statusCode === 200) { return res.body.count }
|
|
32
|
+
|
|
33
|
+
throw new RobloxAPIError(res)
|
|
34
|
+
})
|
|
35
|
+
}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
// Includes
|
|
2
|
+
const http = require('../util/http.js').func
|
|
3
|
+
const RobloxAPIError = require('../util/apiError.js')
|
|
4
|
+
|
|
5
|
+
// Args
|
|
6
|
+
exports.required = ['userId']
|
|
7
|
+
exports.optional = ['sortOrder', 'limit', 'cursor', 'jar']
|
|
8
|
+
|
|
9
|
+
// Docs
|
|
10
|
+
/**
|
|
11
|
+
* ✅ Get the users followed by the user.
|
|
12
|
+
* @category User
|
|
13
|
+
* @alias getFollowings
|
|
14
|
+
* @param {number} userId - The id of the user.
|
|
15
|
+
* @param {Limit=} [limit=10] - The amount of users fetched by each request (10, 25, 50, 100)
|
|
16
|
+
* @param {SortOrder=} [sortOrder=Asc] - The order that the returned data will be sorted by (Asc or Desc)
|
|
17
|
+
* @param {string=} cursor - The previous or next page's cursor.
|
|
18
|
+
* @returns {Promise<FollowingsPage>}
|
|
19
|
+
* @example const noblox = require("noblox.js")
|
|
20
|
+
* let following = await noblox.getFollowings(123456, "Asc", 50)
|
|
21
|
+
**/
|
|
22
|
+
|
|
23
|
+
// Define
|
|
24
|
+
function getFollowings (jar, userId, sortOrder, limit, cursor) {
|
|
25
|
+
return new Promise((resolve, reject) => {
|
|
26
|
+
const httpOpt = {
|
|
27
|
+
url: `//friends.roblox.com/v1/users/${userId}/followings?limit=${limit}&sortOrder=${sortOrder}&cursor=${cursor}`,
|
|
28
|
+
options: {
|
|
29
|
+
method: 'GET',
|
|
30
|
+
jar,
|
|
31
|
+
resolveWithFullResponse: true
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
return http(httpOpt)
|
|
35
|
+
.then(function (res) {
|
|
36
|
+
if (res.statusCode === 200) {
|
|
37
|
+
const response = JSON.parse(res.body)
|
|
38
|
+
response.data = response.data.map((entry) => {
|
|
39
|
+
entry.created = new Date(entry.created)
|
|
40
|
+
return entry
|
|
41
|
+
})
|
|
42
|
+
resolve(response)
|
|
43
|
+
} else {
|
|
44
|
+
reject(new RobloxAPIError(res))
|
|
45
|
+
}
|
|
46
|
+
})
|
|
47
|
+
})
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
exports.func = function (args) {
|
|
51
|
+
const jar = args.jar
|
|
52
|
+
const sortOrder = args.sortOrder || 'Asc'
|
|
53
|
+
const limit = args.limit || (10).toString()
|
|
54
|
+
const cursor = args.cursor || ''
|
|
55
|
+
return getFollowings(jar, args.userId, sortOrder, limit, cursor)
|
|
56
|
+
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
// Includes
|
|
2
|
+
const http = require('../util/http.js').func
|
|
3
|
+
const RobloxAPIError = require('../util/apiError.js')
|
|
4
|
+
|
|
5
|
+
// Args
|
|
6
|
+
exports.required = ['userId']
|
|
7
|
+
|
|
8
|
+
// Docs
|
|
9
|
+
/**
|
|
10
|
+
* ✅ Gets the number of friends a user has.
|
|
11
|
+
* @category User
|
|
12
|
+
* @alias getFriendCount
|
|
13
|
+
* @param { number } userId
|
|
14
|
+
* @returns Promise<number>
|
|
15
|
+
* @example const noblox = require("noblox.js")
|
|
16
|
+
* const numberOfFriends = await noblox.getFriendCount(55549140)
|
|
17
|
+
**/
|
|
18
|
+
|
|
19
|
+
// Define
|
|
20
|
+
exports.func = function (args) {
|
|
21
|
+
const httpOpt = {
|
|
22
|
+
url: `//friends.roblox.com/v1/users/${args.userId}/friends/count`,
|
|
23
|
+
options: {
|
|
24
|
+
json: true,
|
|
25
|
+
method: 'GET',
|
|
26
|
+
resolveWithFullResponse: true
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
return http(httpOpt).then(function (res) {
|
|
31
|
+
if (res.statusCode === 200) { return res.body.count }
|
|
32
|
+
|
|
33
|
+
throw new RobloxAPIError(res)
|
|
34
|
+
})
|
|
35
|
+
}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
// Includes
|
|
2
|
+
const http = require('../util/http.js').func
|
|
3
|
+
const RobloxAPIError = require('../util/apiError.js')
|
|
4
|
+
|
|
5
|
+
// Args
|
|
6
|
+
exports.required = []
|
|
7
|
+
exports.optional = ['sortOrder', 'limit', 'cursor', 'jar']
|
|
8
|
+
|
|
9
|
+
// Docs
|
|
10
|
+
/**
|
|
11
|
+
* 🔐 Get the friend requests of the authenticated user.
|
|
12
|
+
* @category User
|
|
13
|
+
* @alias getFriendRequests
|
|
14
|
+
* @param {SortOrder=} [sortOrder=Asc] - The order of the returned data (Asc or Desc)
|
|
15
|
+
* @param {Limit=} [limit=10] - The number of users returned by each request.
|
|
16
|
+
* @param {string=} cursor - The previous or next page's cursor.
|
|
17
|
+
* @returns {Promise<FriendRequestsPage>}
|
|
18
|
+
* @example const noblox = require("noblox.js")
|
|
19
|
+
* // Login using your cookie
|
|
20
|
+
* let friendRequests = await noblox.getFriendRequests({sortOrder: "Desc", limit: 100})
|
|
21
|
+
**/
|
|
22
|
+
|
|
23
|
+
// Define
|
|
24
|
+
function getFriendsRequests (args) {
|
|
25
|
+
return new Promise((resolve, reject) => {
|
|
26
|
+
const jar = args.jar
|
|
27
|
+
const httpOpt = {
|
|
28
|
+
url: '//friends.roblox.com/v1/my/friends/requests',
|
|
29
|
+
options: {
|
|
30
|
+
method: 'GET',
|
|
31
|
+
jar,
|
|
32
|
+
resolveWithFullResponse: true
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
return http(httpOpt)
|
|
36
|
+
.then(function (res) {
|
|
37
|
+
if (res.statusCode === 200) {
|
|
38
|
+
const response = JSON.parse(res.body)
|
|
39
|
+
response.data = response.data.map((entry) => {
|
|
40
|
+
entry.created = new Date(entry.created)
|
|
41
|
+
return entry
|
|
42
|
+
})
|
|
43
|
+
resolve(response)
|
|
44
|
+
} else {
|
|
45
|
+
reject(new RobloxAPIError(res))
|
|
46
|
+
}
|
|
47
|
+
})
|
|
48
|
+
})
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
exports.func = getFriendsRequests
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
// Includes
|
|
2
|
+
const http = require('../util/http.js').func
|
|
3
|
+
const RobloxAPIError = require('../util/apiError.js')
|
|
4
|
+
// Args
|
|
5
|
+
exports.required = ['userId']
|
|
6
|
+
exports.optional = ['jar']
|
|
7
|
+
|
|
8
|
+
// Docs
|
|
9
|
+
/**
|
|
10
|
+
* ✅ Get the friends of a user
|
|
11
|
+
* @category User
|
|
12
|
+
* @alias getFriends
|
|
13
|
+
* @param {number} userId - The id of the user whose friends are being returned.
|
|
14
|
+
* @returns {Promise<Friends>}
|
|
15
|
+
* @example const noblox = require("noblox.js")
|
|
16
|
+
* let friends = await noblox.getFriends(123456)
|
|
17
|
+
**/
|
|
18
|
+
|
|
19
|
+
// Define
|
|
20
|
+
function getFriends (jar, userId) {
|
|
21
|
+
return new Promise((resolve, reject) => {
|
|
22
|
+
const httpOpt = {
|
|
23
|
+
url: `//friends.roblox.com/v1/users/${userId}/friends`,
|
|
24
|
+
options: {
|
|
25
|
+
method: 'GET',
|
|
26
|
+
jar,
|
|
27
|
+
resolveWithFullResponse: true
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
return http(httpOpt)
|
|
31
|
+
.then(function (res) {
|
|
32
|
+
if (res.statusCode === 200) {
|
|
33
|
+
const response = JSON.parse(res.body)
|
|
34
|
+
response.data = response.data.map((entry) => {
|
|
35
|
+
entry.created = new Date(entry.created)
|
|
36
|
+
return entry
|
|
37
|
+
})
|
|
38
|
+
resolve(response)
|
|
39
|
+
} else {
|
|
40
|
+
reject(new RobloxAPIError(res))
|
|
41
|
+
}
|
|
42
|
+
})
|
|
43
|
+
})
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
exports.func = function (args) {
|
|
47
|
+
return getFriends(args.jar, args.userId)
|
|
48
|
+
}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
// Dependencies
|
|
2
|
+
const events = require('events')
|
|
3
|
+
|
|
4
|
+
// Includes
|
|
5
|
+
const onNotification = require('../client/onNotification.js').func
|
|
6
|
+
|
|
7
|
+
// Args
|
|
8
|
+
exports.optional = ['jar']
|
|
9
|
+
|
|
10
|
+
// Docs
|
|
11
|
+
/**
|
|
12
|
+
* 🔐 An event for when a user sends you a friend request.
|
|
13
|
+
* @category User
|
|
14
|
+
* @alias onFriendRequest
|
|
15
|
+
* @returns An EventEmitter that emits when a user sends you a friend request.
|
|
16
|
+
* @example const noblox = require("noblox.js")
|
|
17
|
+
* // Login using your cookie
|
|
18
|
+
*
|
|
19
|
+
* const friendRequestEvent = noblox.onFriendRequest()
|
|
20
|
+
* friendRequestEvent.on("data", function(data) {
|
|
21
|
+
* console.log("New friend request! ", data)
|
|
22
|
+
* })
|
|
23
|
+
* friendRequestEvent.on("error", function(err) {
|
|
24
|
+
* console.error("Something went wrong: ", err)
|
|
25
|
+
* // Handle error as needed
|
|
26
|
+
* })
|
|
27
|
+
**/
|
|
28
|
+
|
|
29
|
+
// Define
|
|
30
|
+
exports.func = function (args) {
|
|
31
|
+
const jar = args.jar
|
|
32
|
+
const onFriendRequest = new events.EventEmitter()
|
|
33
|
+
const notifications = onNotification({ jar })
|
|
34
|
+
notifications.on('data', function (name, message) {
|
|
35
|
+
if (name === 'FriendshipNotifications' && message.Type === 'FriendshipRequested') {
|
|
36
|
+
onFriendRequest.emit('data', message.EventArgs.UserId1)
|
|
37
|
+
}
|
|
38
|
+
})
|
|
39
|
+
notifications.on('error', function (err) {
|
|
40
|
+
onFriendRequest.emit('error', err)
|
|
41
|
+
})
|
|
42
|
+
notifications.on('connect', function () {
|
|
43
|
+
onFriendRequest.emit('connect')
|
|
44
|
+
})
|
|
45
|
+
notifications.on('close', function (internal) {
|
|
46
|
+
if (internal) {
|
|
47
|
+
return
|
|
48
|
+
}
|
|
49
|
+
onFriendRequest.emit('close', true)
|
|
50
|
+
})
|
|
51
|
+
onFriendRequest.on('close', function (internal) {
|
|
52
|
+
if (internal) {
|
|
53
|
+
return
|
|
54
|
+
}
|
|
55
|
+
notifications.emit('close', true)
|
|
56
|
+
})
|
|
57
|
+
return onFriendRequest
|
|
58
|
+
}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
// Includes
|
|
2
|
+
const http = require('../util/http.js').func
|
|
3
|
+
const getGeneralToken = require('../util/getGeneralToken.js').func
|
|
4
|
+
const RobloxAPIError = require('../util/apiError.js')
|
|
5
|
+
|
|
6
|
+
// Args
|
|
7
|
+
exports.required = ['userId']
|
|
8
|
+
exports.optional = ['jar']
|
|
9
|
+
|
|
10
|
+
// Docs
|
|
11
|
+
/**
|
|
12
|
+
* 🔐 Remove a user from your friends list.
|
|
13
|
+
* @category User
|
|
14
|
+
* @alias removeFriend
|
|
15
|
+
* @param {number} userId - The id of the user.
|
|
16
|
+
* @returns {Promise<void>}
|
|
17
|
+
* @example const noblox = require("noblox.js")
|
|
18
|
+
* // Login using your cookie
|
|
19
|
+
* noblox.removeFriend(123456)
|
|
20
|
+
**/
|
|
21
|
+
|
|
22
|
+
// Define
|
|
23
|
+
function removeFriend (jar, token, userId) {
|
|
24
|
+
return new Promise((resolve, reject) => {
|
|
25
|
+
const httpOpt = {
|
|
26
|
+
url: `//friends.roblox.com/v1/users/${userId}/unfriend`,
|
|
27
|
+
options: {
|
|
28
|
+
method: 'POST',
|
|
29
|
+
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
|
+
reject(new RobloxAPIError(res))
|
|
42
|
+
}
|
|
43
|
+
})
|
|
44
|
+
})
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
exports.func = function (args) {
|
|
48
|
+
const jar = args.jar
|
|
49
|
+
return getGeneralToken({ jar })
|
|
50
|
+
.then(function (xcsrf) {
|
|
51
|
+
return removeFriend(jar, xcsrf, args.userId)
|
|
52
|
+
})
|
|
53
|
+
}
|