noblox.ts 4.10.5
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of noblox.ts 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,53 @@
|
|
1
|
+
const events = require('events')
|
2
|
+
|
3
|
+
const onNotification = require('../client/onNotification.js').func
|
4
|
+
|
5
|
+
exports.optional = ['jar']
|
6
|
+
|
7
|
+
// Docs
|
8
|
+
/**
|
9
|
+
* 🔐 An event for when a party joins a game.
|
10
|
+
* @category Party
|
11
|
+
* @alias onPartyJoinedGame
|
12
|
+
* @returns An EventEmitter that emits when a party joins a game.
|
13
|
+
* @example const noblox = require("noblox.js")
|
14
|
+
* // Login using your cookie
|
15
|
+
* const partyJoinedGame = noblox.onPartyJoinedGame()
|
16
|
+
* partyJoinedGame.on("data", function(data) {
|
17
|
+
* console.log("Party joined game! ", data)
|
18
|
+
* })
|
19
|
+
* partyJoinedGame.on("error", function(err) {
|
20
|
+
* console.error("Something went wrong: ", err)
|
21
|
+
* // Handle error as needed
|
22
|
+
* })
|
23
|
+
**/
|
24
|
+
|
25
|
+
exports.func = (args) => {
|
26
|
+
const jar = args.jar
|
27
|
+
const newEvent = new events.EventEmitter()
|
28
|
+
const notifications = onNotification({ jar: jar })
|
29
|
+
|
30
|
+
notifications.on('data', (name, message) => {
|
31
|
+
if (name === 'PartyNotifications' && message.Type === 'PartyJoinedGame') {
|
32
|
+
newEvent.emit('data', {
|
33
|
+
PartyId: message.PartyId,
|
34
|
+
PartyType: message.PartyType
|
35
|
+
})
|
36
|
+
}
|
37
|
+
})
|
38
|
+
|
39
|
+
notifications.on('error', (err) => {
|
40
|
+
newEvent.emit('error', err)
|
41
|
+
})
|
42
|
+
|
43
|
+
notifications.on('connect', () => {
|
44
|
+
newEvent.emit('connect')
|
45
|
+
})
|
46
|
+
|
47
|
+
notifications.on('close', (internal) => {
|
48
|
+
if (internal) return
|
49
|
+
notifications.emit('close', true)
|
50
|
+
})
|
51
|
+
|
52
|
+
return newEvent
|
53
|
+
}
|
@@ -0,0 +1,53 @@
|
|
1
|
+
const events = require('events')
|
2
|
+
|
3
|
+
const onNotification = require('../client/onNotification.js').func
|
4
|
+
|
5
|
+
exports.optional = ['jar']
|
6
|
+
|
7
|
+
// Docs
|
8
|
+
/**
|
9
|
+
* 🔐 An event for when a party leaves a game.
|
10
|
+
* @category Party
|
11
|
+
* @alias onPartyLeftGame
|
12
|
+
* @returns An EventEmitter that emits when a party leaves a game.
|
13
|
+
* @example const noblox = require("noblox.js")
|
14
|
+
* // Login using your cookie
|
15
|
+
* const partyLeftGame = noblox.onPartyLeftGame()
|
16
|
+
* partyLeftGame.on("data", function(data) {
|
17
|
+
* console.log("Party left game! ", data)
|
18
|
+
* })
|
19
|
+
* partyLeftGame.on("error", function(err) {
|
20
|
+
* console.error("Something went wrong: ", err)
|
21
|
+
* // Handle error as needed
|
22
|
+
* })
|
23
|
+
**/
|
24
|
+
|
25
|
+
exports.func = (args) => {
|
26
|
+
const jar = args.jar
|
27
|
+
const newEvent = new events.EventEmitter()
|
28
|
+
const notifications = onNotification({ jar: jar })
|
29
|
+
|
30
|
+
notifications.on('data', (name, message) => {
|
31
|
+
if (name === 'PartyNotifications' && message.Type === 'PartyLeftGame') {
|
32
|
+
newEvent.emit('data', {
|
33
|
+
PartyId: message.PartyId,
|
34
|
+
PartyType: message.PartyType
|
35
|
+
})
|
36
|
+
}
|
37
|
+
})
|
38
|
+
|
39
|
+
notifications.on('error', (err) => {
|
40
|
+
newEvent.emit('error', err)
|
41
|
+
})
|
42
|
+
|
43
|
+
notifications.on('connect', () => {
|
44
|
+
newEvent.emit('connect')
|
45
|
+
})
|
46
|
+
|
47
|
+
notifications.on('close', (internal) => {
|
48
|
+
if (internal) return
|
49
|
+
notifications.emit('close', true)
|
50
|
+
})
|
51
|
+
|
52
|
+
return newEvent
|
53
|
+
}
|
@@ -0,0 +1,53 @@
|
|
1
|
+
const events = require('events')
|
2
|
+
|
3
|
+
const onNotification = require('../client/onNotification.js').func
|
4
|
+
|
5
|
+
exports.optional = ['jar']
|
6
|
+
|
7
|
+
// Docs
|
8
|
+
/**
|
9
|
+
* 🔐 An event for when you join a party.
|
10
|
+
* @category Party
|
11
|
+
* @alias onPartySelfJoined
|
12
|
+
* @returns An EventEmitter that emits when you join a party.
|
13
|
+
* @example const noblox = require("noblox.js")
|
14
|
+
* // Login using your cookie
|
15
|
+
* const joinedParty = noblox.onPartySelfJoined()
|
16
|
+
* joinedParty.on("data", function(data) {
|
17
|
+
* console.log("You joined a party! ", data)
|
18
|
+
* })
|
19
|
+
* joinedParty.on("error", function(err) {
|
20
|
+
* console.error("Something went wrong: ", err)
|
21
|
+
* // Handle error as needed
|
22
|
+
* })
|
23
|
+
**/
|
24
|
+
|
25
|
+
exports.func = (args) => {
|
26
|
+
const jar = args.jar
|
27
|
+
const newEvent = new events.EventEmitter()
|
28
|
+
const notifications = onNotification({ jar: jar })
|
29
|
+
|
30
|
+
notifications.on('data', (name, message) => {
|
31
|
+
if (name === 'PartyNotifications' && message.Type === 'IJoinedParty') {
|
32
|
+
newEvent.emit('data', {
|
33
|
+
PartyId: message.PartyId,
|
34
|
+
PartyType: message.PartyType
|
35
|
+
})
|
36
|
+
}
|
37
|
+
})
|
38
|
+
|
39
|
+
notifications.on('error', (err) => {
|
40
|
+
newEvent.emit('error', err)
|
41
|
+
})
|
42
|
+
|
43
|
+
notifications.on('connect', () => {
|
44
|
+
newEvent.emit('connect')
|
45
|
+
})
|
46
|
+
|
47
|
+
notifications.on('close', (internal) => {
|
48
|
+
if (internal) return
|
49
|
+
notifications.emit('close', true)
|
50
|
+
})
|
51
|
+
|
52
|
+
return newEvent
|
53
|
+
}
|
@@ -0,0 +1,53 @@
|
|
1
|
+
const events = require('events')
|
2
|
+
|
3
|
+
const onNotification = require('../client/onNotification.js').func
|
4
|
+
|
5
|
+
exports.optional = ['jar']
|
6
|
+
|
7
|
+
// Docs
|
8
|
+
/**
|
9
|
+
* 🔐 An event for when you leave a party.
|
10
|
+
* @category Party
|
11
|
+
* @alias onPartySelfLeft
|
12
|
+
* @returns An EventEmitter that emits when you leave a party.
|
13
|
+
* @example const noblox = require("noblox.js")
|
14
|
+
* // Login using your cookie
|
15
|
+
* const leftParty = noblox.onPartySelfLeft()
|
16
|
+
* leftParty.on("data", function(data) {
|
17
|
+
* console.log("You left a party! ", data)
|
18
|
+
* })
|
19
|
+
* leftParty.on("error", function(err) {
|
20
|
+
* console.error("Something went wrong: ", err)
|
21
|
+
* // Handle error as needed
|
22
|
+
* })
|
23
|
+
**/
|
24
|
+
|
25
|
+
exports.func = (args) => {
|
26
|
+
const jar = args.jar
|
27
|
+
const newEvent = new events.EventEmitter()
|
28
|
+
const notifications = onNotification({ jar: jar })
|
29
|
+
|
30
|
+
notifications.on('data', (name, message) => {
|
31
|
+
if (name === 'PartyNotifications' && message.Type === 'ILeftParty') {
|
32
|
+
newEvent.emit('data', {
|
33
|
+
PartyId: message.PartyId,
|
34
|
+
PartyType: message.PartyType
|
35
|
+
})
|
36
|
+
}
|
37
|
+
})
|
38
|
+
|
39
|
+
notifications.on('error', (err) => {
|
40
|
+
newEvent.emit('error', err)
|
41
|
+
})
|
42
|
+
|
43
|
+
notifications.on('connect', () => {
|
44
|
+
newEvent.emit('connect')
|
45
|
+
})
|
46
|
+
|
47
|
+
notifications.on('close', (internal) => {
|
48
|
+
if (internal) return
|
49
|
+
notifications.emit('close', true)
|
50
|
+
})
|
51
|
+
|
52
|
+
return newEvent
|
53
|
+
}
|
@@ -0,0 +1,53 @@
|
|
1
|
+
const events = require('events')
|
2
|
+
|
3
|
+
const onNotification = require('../client/onNotification.js').func
|
4
|
+
|
5
|
+
exports.optional = ['jar']
|
6
|
+
|
7
|
+
// Docs
|
8
|
+
/**
|
9
|
+
* 🔐 An event for when someone joins a party.
|
10
|
+
* @category Party
|
11
|
+
* @alias onPartyUserJoined
|
12
|
+
* @returns An EventEmitter that emits when someone joins a party.
|
13
|
+
* @example const noblox = require("noblox.js")
|
14
|
+
* // Login using your cookie
|
15
|
+
* const partyJoined = noblox.onPartyUserJoined()
|
16
|
+
* partyJoined.on("data", function(data) {
|
17
|
+
* console.log("Someone joined a party! ", data)
|
18
|
+
* })
|
19
|
+
* partyJoined.on("error", function(err) {
|
20
|
+
* console.error("Something went wrong: ", err)
|
21
|
+
* // Handle error as needed
|
22
|
+
* })
|
23
|
+
**/
|
24
|
+
|
25
|
+
exports.func = (args) => {
|
26
|
+
const jar = args.jar
|
27
|
+
const newEvent = new events.EventEmitter()
|
28
|
+
const notifications = onNotification({ jar: jar })
|
29
|
+
|
30
|
+
notifications.on('data', (name, message) => {
|
31
|
+
if (name === 'PartyNotifications' && message.Type === 'PartyUserJoined') {
|
32
|
+
newEvent.emit('data', {
|
33
|
+
PartyId: message.PartyId,
|
34
|
+
PartyType: message.PartyType
|
35
|
+
})
|
36
|
+
}
|
37
|
+
})
|
38
|
+
|
39
|
+
notifications.on('error', (err) => {
|
40
|
+
newEvent.emit('error', err)
|
41
|
+
})
|
42
|
+
|
43
|
+
notifications.on('connect', () => {
|
44
|
+
newEvent.emit('connect')
|
45
|
+
})
|
46
|
+
|
47
|
+
notifications.on('close', (internal) => {
|
48
|
+
if (internal) return
|
49
|
+
notifications.emit('close', true)
|
50
|
+
})
|
51
|
+
|
52
|
+
return newEvent
|
53
|
+
}
|
@@ -0,0 +1,53 @@
|
|
1
|
+
const events = require('events')
|
2
|
+
|
3
|
+
const onNotification = require('../client/onNotification.js').func
|
4
|
+
|
5
|
+
exports.optional = ['jar']
|
6
|
+
|
7
|
+
// Docs
|
8
|
+
/**
|
9
|
+
* 🔐 An event for when someone leaves a party.
|
10
|
+
* @category Party
|
11
|
+
* @alias onPartyUserLeft
|
12
|
+
* @returns An EventEmitter that emits when someone leaves a party.
|
13
|
+
* @example const noblox = require("noblox.js")
|
14
|
+
* // Login using your cookie
|
15
|
+
* const partyLeft = noblox.onPartyUserLeft()
|
16
|
+
* partyLeft.on("data", function(data) {
|
17
|
+
* console.log("Someone left party! ", data)
|
18
|
+
* })
|
19
|
+
* partyLeft.on("error", function(err) {
|
20
|
+
* console.error("Something went wrong: ", err)
|
21
|
+
* // Handle error as needed
|
22
|
+
* })
|
23
|
+
**/
|
24
|
+
|
25
|
+
exports.func = (args) => {
|
26
|
+
const jar = args.jar
|
27
|
+
const newEvent = new events.EventEmitter()
|
28
|
+
const notifications = onNotification({ jar: jar })
|
29
|
+
|
30
|
+
notifications.on('data', (name, message) => {
|
31
|
+
if (name === 'PartyNotifications' && message.Type === 'PartyUserLeft') {
|
32
|
+
newEvent.emit('data', {
|
33
|
+
PartyId: message.PartyId,
|
34
|
+
PartyType: message.PartyType
|
35
|
+
})
|
36
|
+
}
|
37
|
+
})
|
38
|
+
|
39
|
+
notifications.on('error', (err) => {
|
40
|
+
newEvent.emit('error', err)
|
41
|
+
})
|
42
|
+
|
43
|
+
notifications.on('connect', () => {
|
44
|
+
newEvent.emit('connect')
|
45
|
+
})
|
46
|
+
|
47
|
+
notifications.on('close', (internal) => {
|
48
|
+
if (internal) return
|
49
|
+
notifications.emit('close', true)
|
50
|
+
})
|
51
|
+
|
52
|
+
return newEvent
|
53
|
+
}
|
@@ -0,0 +1,51 @@
|
|
1
|
+
// Includes
|
2
|
+
const http = require('../util/http.js').func
|
3
|
+
|
4
|
+
// Args
|
5
|
+
exports.required = ['userId']
|
6
|
+
exports.optional = ['jar']
|
7
|
+
|
8
|
+
// Docs
|
9
|
+
/**
|
10
|
+
* 🔐 Gets whether or not a user has premium.
|
11
|
+
* @category User
|
12
|
+
* @alias getPremium
|
13
|
+
* @param {number} userId - The id of the user.
|
14
|
+
* @returns {Promise<boolean>}
|
15
|
+
* @example const noblox = require("noblox.js")
|
16
|
+
* // Login using your cookie
|
17
|
+
* const hasPremium = await noblox.getPremium(123456)
|
18
|
+
**/
|
19
|
+
|
20
|
+
// Define
|
21
|
+
function getPremium (jar, userId) {
|
22
|
+
return new Promise((resolve, reject) => {
|
23
|
+
const httpOpt = {
|
24
|
+
url: `https://premiumfeatures.roblox.com/v1/users/${userId}/validate-membership`,
|
25
|
+
options: {
|
26
|
+
method: 'GET',
|
27
|
+
jar: jar,
|
28
|
+
resolveWithFullResponse: true
|
29
|
+
}
|
30
|
+
}
|
31
|
+
return http(httpOpt)
|
32
|
+
.then(function (res) {
|
33
|
+
if (res.statusCode === 200) {
|
34
|
+
resolve(res.body === 'true')
|
35
|
+
} else {
|
36
|
+
const body = JSON.parse(res.body) || {}
|
37
|
+
if (body.errors && body.errors.length > 0) {
|
38
|
+
const errors = body.errors.map((e) => {
|
39
|
+
return e.message
|
40
|
+
})
|
41
|
+
reject(new Error(`${res.statusCode} ${errors.join(', ')}`))
|
42
|
+
}
|
43
|
+
}
|
44
|
+
})
|
45
|
+
})
|
46
|
+
}
|
47
|
+
|
48
|
+
exports.func = function (args) {
|
49
|
+
const jar = args.jar
|
50
|
+
return getPremium(jar, args.userId)
|
51
|
+
}
|
@@ -0,0 +1,63 @@
|
|
1
|
+
// Includes
|
2
|
+
const http = require('../util/http.js').func
|
3
|
+
const getGeneralToken = require('../util/getGeneralToken.js').func
|
4
|
+
|
5
|
+
// Args
|
6
|
+
exports.required = ['userIds']
|
7
|
+
exports.optional = []
|
8
|
+
|
9
|
+
// Docs
|
10
|
+
/**
|
11
|
+
* 🔐 Get the presence status of users.
|
12
|
+
* @category Presence
|
13
|
+
* @alias getPresences
|
14
|
+
* @param {Array<number>} userIds - An array of userIds.
|
15
|
+
* @returns {Promise<Presences>}
|
16
|
+
* @example const noblox = require("noblox.js")
|
17
|
+
* // Login using your cookie
|
18
|
+
* const presences = await noblox.getPresences([1, 2, 3])
|
19
|
+
**/
|
20
|
+
|
21
|
+
// Define
|
22
|
+
function getPresences (userIds, jar, xcsrf) {
|
23
|
+
return new Promise((resolve, reject) => {
|
24
|
+
const httpOpt = {
|
25
|
+
url: '//presence.roblox.com/v1/presence/users',
|
26
|
+
options: {
|
27
|
+
method: 'POST',
|
28
|
+
resolveWithFullResponse: true,
|
29
|
+
jar: jar,
|
30
|
+
headers: {
|
31
|
+
'X-CSRF-TOKEN': xcsrf,
|
32
|
+
'Content-Type': 'application/json'
|
33
|
+
},
|
34
|
+
body: JSON.stringify({
|
35
|
+
userIds
|
36
|
+
})
|
37
|
+
}
|
38
|
+
}
|
39
|
+
|
40
|
+
return http(httpOpt)
|
41
|
+
.then(function (res) {
|
42
|
+
const responseData = JSON.parse(res.body)
|
43
|
+
if (res.statusCode !== 200) {
|
44
|
+
let error = 'An unknown error has occurred.'
|
45
|
+
if (responseData && responseData.errors) {
|
46
|
+
error = responseData.errors.map((e) => e.message).join('\n')
|
47
|
+
}
|
48
|
+
reject(new Error(error))
|
49
|
+
} else {
|
50
|
+
resolve(responseData)
|
51
|
+
}
|
52
|
+
})
|
53
|
+
.catch(error => reject(error))
|
54
|
+
})
|
55
|
+
}
|
56
|
+
|
57
|
+
exports.func = function (args) {
|
58
|
+
const jar = args.jar
|
59
|
+
return getGeneralToken({ jar: jar })
|
60
|
+
.then(function (xcsrf) {
|
61
|
+
return getPresences(args.userIds, args.jar, xcsrf)
|
62
|
+
})
|
63
|
+
}
|
@@ -0,0 +1,60 @@
|
|
1
|
+
// Includes
|
2
|
+
const http = require('../util/http.js').func
|
3
|
+
// Args
|
4
|
+
exports.required = []
|
5
|
+
exports.optional = ['pageNumber', 'pageSize', 'messageTab', 'jar']
|
6
|
+
|
7
|
+
// Docs
|
8
|
+
/**
|
9
|
+
* 🔐 Get the messages of the authenticated user.
|
10
|
+
* @category User
|
11
|
+
* @alias getMessages
|
12
|
+
* @param {number=} [pageNumber=0] - The number of the current page.
|
13
|
+
* @param {number=} [pageSize=25] - The size of the current page.
|
14
|
+
* @param {("Inbox" | "Sent" | "Archive")=} [messageTab=Inbox] - The tab of the messages being fetched (Inbox, Sent, Archive)
|
15
|
+
* @returns {Promise<PrivateMessagesPage>}
|
16
|
+
* @example const noblox = require("noblox.js")
|
17
|
+
* // Login using your cookie
|
18
|
+
* let messages = await noblox.getMessages(1, 10, "Inbox"))
|
19
|
+
**/
|
20
|
+
|
21
|
+
// Define
|
22
|
+
function getMessages (jar, token, pageNumber, pageSize, messageTab) {
|
23
|
+
return new Promise((resolve, reject) => {
|
24
|
+
const httpOpt = {
|
25
|
+
url: `//privatemessages.roblox.com/v1/messages?pageNumber=${pageNumber}&pageSize=${pageSize}&messageTab=${messageTab}`,
|
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))
|
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
|
+
})
|
46
|
+
})
|
47
|
+
}
|
48
|
+
|
49
|
+
exports.func = function (args) {
|
50
|
+
const jar = args.jar
|
51
|
+
const pageNumber = (args.pageNumber && args.pageNumber.toString()) || '0'
|
52
|
+
const pageSize = (args.pageSize && args.pageSize.toString()) || '25'
|
53
|
+
const messageTab = args.messageTab || 'Inbox'
|
54
|
+
if (!['Inbox', 'Sent', 'Archive'].includes(messageTab)) {
|
55
|
+
return new Promise((resolve, reject) => {
|
56
|
+
reject(new Error('messageTab must be Inbox, Sent, or Archive'))
|
57
|
+
})
|
58
|
+
}
|
59
|
+
return getMessages(jar, pageNumber, pageSize, messageTab)
|
60
|
+
}
|
@@ -0,0 +1,80 @@
|
|
1
|
+
// Includes
|
2
|
+
const http = require('../util/http.js').func
|
3
|
+
const queue = require('../internal/queue.js')
|
4
|
+
const getGeneralToken = require('../util/getGeneralToken.js').func
|
5
|
+
const getHash = require('../util/getHash.js').func
|
6
|
+
const getSenderId = require('../util/getSenderUserId.js').func
|
7
|
+
|
8
|
+
// Args
|
9
|
+
exports.required = ['recipient', 'subject', 'body']
|
10
|
+
exports.optional = ['replyMessageId', 'includePreviousMessage', 'jar']
|
11
|
+
|
12
|
+
// Docs
|
13
|
+
/**
|
14
|
+
* 🔐 Send a message. NOTE: Roblox blocks web servers and proxies from sending messages.
|
15
|
+
* @category User
|
16
|
+
* @alias message
|
17
|
+
* @param {number} recipient - The id of the user.
|
18
|
+
* @param {string} subject - The subject of the message.
|
19
|
+
* @param {string} body - The body of the message.
|
20
|
+
* @param {number=} replyMessageId - The messageId to reply to.
|
21
|
+
* @param {boolean=} [includePreviousMessage=false] - The previous or next page cursor.
|
22
|
+
* @returns {Promise<void>}
|
23
|
+
* @example const noblox = require("noblox.js")
|
24
|
+
* // Login using your cookie
|
25
|
+
* noblox.message(1, "A subject", "A body", 1234, true)
|
26
|
+
**/
|
27
|
+
|
28
|
+
// Define
|
29
|
+
function message (jar, token, senderId, recipient, subject, body, replyMessageId, includePreviousMessage) {
|
30
|
+
return new Promise((resolve, reject) => {
|
31
|
+
const httpOpt = {
|
32
|
+
url: '//privatemessages.roblox.com/v1/messages/send',
|
33
|
+
options: {
|
34
|
+
method: 'POST',
|
35
|
+
jar: jar,
|
36
|
+
headers: {
|
37
|
+
'X-CSRF-TOKEN': token,
|
38
|
+
'Content-Type': 'application/json'
|
39
|
+
},
|
40
|
+
body: JSON.stringify({
|
41
|
+
userId: senderId,
|
42
|
+
recipientId: recipient,
|
43
|
+
subject,
|
44
|
+
body,
|
45
|
+
replyMessageId,
|
46
|
+
includePreviousMessage
|
47
|
+
}),
|
48
|
+
resolveWithFullResponse: true
|
49
|
+
}
|
50
|
+
}
|
51
|
+
return http(httpOpt)
|
52
|
+
.then(function (res) {
|
53
|
+
if (res.statusCode === 200) {
|
54
|
+
resolve(JSON.parse(res.body))
|
55
|
+
} else {
|
56
|
+
const body = JSON.parse(res.body) || {}
|
57
|
+
if (body.errors && body.errors.length > 0) {
|
58
|
+
const errors = body.errors.map((e) => {
|
59
|
+
return e.message
|
60
|
+
})
|
61
|
+
reject(new Error(`${res.statusCode} ${errors.join(', ')}`))
|
62
|
+
}
|
63
|
+
}
|
64
|
+
})
|
65
|
+
})
|
66
|
+
}
|
67
|
+
|
68
|
+
exports.func = function (args) {
|
69
|
+
const jar = args.jar
|
70
|
+
return queue('Message', getHash({ jar: jar }), function () {
|
71
|
+
return getGeneralToken({ jar: jar })
|
72
|
+
.then(function (xcsrf) {
|
73
|
+
return getSenderId({ jar: jar }).then((senderId) => {
|
74
|
+
return message(jar, xcsrf, senderId, args.recipient, args.subject, args.body, args.replyMessageId, args.includePreviousMessage)
|
75
|
+
})
|
76
|
+
})
|
77
|
+
}, function () {
|
78
|
+
return true
|
79
|
+
})
|
80
|
+
}
|
@@ -0,0 +1,88 @@
|
|
1
|
+
// Dependencies
|
2
|
+
const events = require('events')
|
3
|
+
|
4
|
+
// Includes
|
5
|
+
const onNotification = require('../client/onNotification.js').func
|
6
|
+
const getMessages = require('./getMessages.js').func
|
7
|
+
|
8
|
+
// Args
|
9
|
+
exports.optional = ['jar']
|
10
|
+
|
11
|
+
// Docs
|
12
|
+
/**
|
13
|
+
* 🔐 An event for when a user sends you a message via. the older 'email-like' message system. To receive chat messages,
|
14
|
+
* see the `onNewMessage` method.
|
15
|
+
* @see [onNewMessage()](global.html#onNewMessage).
|
16
|
+
* @category User
|
17
|
+
* @alias onMessage
|
18
|
+
* @returns An EventEmitter that emits when a user sends you a message.
|
19
|
+
* @example const noblox = require("noblox.js")
|
20
|
+
* // Login using your cookie
|
21
|
+
* const messageEvent = noblox.onMessage()
|
22
|
+
* messageEvent.on("data", function(data) {
|
23
|
+
* console.log("New message! ", data)
|
24
|
+
* })
|
25
|
+
* messageEvent.on("error", function(err) {
|
26
|
+
* console.error("Something went wrong: ", err)
|
27
|
+
* // Handle error as needed
|
28
|
+
* })
|
29
|
+
**/
|
30
|
+
|
31
|
+
// Define
|
32
|
+
exports.func = function (args) {
|
33
|
+
const jar = args.jar
|
34
|
+
const onMessage = new events.EventEmitter()
|
35
|
+
let waitingForRequest = false
|
36
|
+
let latest
|
37
|
+
getMessages({ jar: jar, messageTab: 'Inbox', pageNumber: 0 })
|
38
|
+
.then(function (initial) {
|
39
|
+
latest = initial.collection[0] ? initial.collection[0].id : 0
|
40
|
+
const notifications = onNotification({ jar: jar })
|
41
|
+
notifications.on('data', function (name, message) {
|
42
|
+
if (name === 'NotificationStream' && message.Type === 'NewNotification') {
|
43
|
+
if (waitingForRequest) {
|
44
|
+
waitingForRequest = false
|
45
|
+
} else {
|
46
|
+
getMessages({
|
47
|
+
jar: jar,
|
48
|
+
messageTab: 'Inbox',
|
49
|
+
pageNumber: 0
|
50
|
+
})
|
51
|
+
.then(function (inbox) {
|
52
|
+
const messages = inbox.collection
|
53
|
+
for (let i = messages.length - 1; i >= 0; i--) {
|
54
|
+
const message = messages[i]
|
55
|
+
const id = message.id
|
56
|
+
if (id > latest) {
|
57
|
+
latest = id
|
58
|
+
onMessage.emit('data', message)
|
59
|
+
}
|
60
|
+
}
|
61
|
+
})
|
62
|
+
}
|
63
|
+
} else if (name === 'FriendshipNotifications' && message.Type === 'FriendshipRequested') {
|
64
|
+
waitingForRequest = true
|
65
|
+
}
|
66
|
+
})
|
67
|
+
notifications.on('error', function (err) {
|
68
|
+
onMessage.emit('error', err)
|
69
|
+
})
|
70
|
+
notifications.on('connect', function () {
|
71
|
+
onMessage.emit('connect')
|
72
|
+
})
|
73
|
+
notifications.on('close', function (internal) {
|
74
|
+
if (internal) {
|
75
|
+
return
|
76
|
+
}
|
77
|
+
onMessage.emit('close', true)
|
78
|
+
})
|
79
|
+
onMessage.on('close', function (internal) {
|
80
|
+
if (internal) {
|
81
|
+
return
|
82
|
+
}
|
83
|
+
notifications.emit('close', true)
|
84
|
+
})
|
85
|
+
})
|
86
|
+
|
87
|
+
return onMessage
|
88
|
+
}
|