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
package/lib/cache/add.js
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
// Includes
|
2
|
+
const levelOneCopy = require('../internal/levelOneCopy.js')
|
3
|
+
|
4
|
+
// Define
|
5
|
+
module.exports = function (cache, type, index, element) {
|
6
|
+
if (cache[type]) {
|
7
|
+
if (element instanceof Object) {
|
8
|
+
element = levelOneCopy(element)
|
9
|
+
}
|
10
|
+
cache[type].items[index] = { item: element, time: Date.now() / 1000 }
|
11
|
+
} else {
|
12
|
+
return 'Invalid type'
|
13
|
+
}
|
14
|
+
}
|
@@ -0,0 +1,26 @@
|
|
1
|
+
// Includes
|
2
|
+
const add = require('./add.js')
|
3
|
+
const get = require('./get.js')
|
4
|
+
|
5
|
+
// Define
|
6
|
+
module.exports = function (cache, type, index, callbacks) {
|
7
|
+
const got = get(cache, type, index)
|
8
|
+
const item = got[0]
|
9
|
+
const refresh = got[1]
|
10
|
+
if (item) {
|
11
|
+
callbacks.done(item)
|
12
|
+
if (refresh) {
|
13
|
+
const group = cache[type]
|
14
|
+
group.refresh = false
|
15
|
+
callbacks.add(function (element) {
|
16
|
+
group.refresh = true
|
17
|
+
add(cache, type, index, element)
|
18
|
+
})
|
19
|
+
}
|
20
|
+
} else {
|
21
|
+
callbacks.add(function (element) {
|
22
|
+
add(cache, type, index, element)
|
23
|
+
callbacks.done(element)
|
24
|
+
})
|
25
|
+
}
|
26
|
+
}
|
package/lib/cache/get.js
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
// Includes
|
2
|
+
const levelOneCopy = require('../internal/levelOneCopy.js')
|
3
|
+
|
4
|
+
// Define
|
5
|
+
module.exports = function (cache, type, index) {
|
6
|
+
if (cache[type]) {
|
7
|
+
const group = cache[type]
|
8
|
+
const cached = group.items[index]
|
9
|
+
if (cached && cached.time) {
|
10
|
+
let passed
|
11
|
+
if (!group.permanent) {
|
12
|
+
passed = Date.now() / 1000 - cached.time
|
13
|
+
if (passed > group.expire) {
|
14
|
+
return false
|
15
|
+
}
|
16
|
+
}
|
17
|
+
let item = cached.item
|
18
|
+
if (item instanceof Object) {
|
19
|
+
item = levelOneCopy(item)
|
20
|
+
}
|
21
|
+
return [item, (group.refresh && ((group.refresh === true && true) || passed > group.refresh))]
|
22
|
+
} else {
|
23
|
+
return false
|
24
|
+
}
|
25
|
+
} else {
|
26
|
+
return 'Invalid type'
|
27
|
+
}
|
28
|
+
}
|
@@ -0,0 +1,17 @@
|
|
1
|
+
// Includes
|
2
|
+
const newCache = require('./new.js')
|
3
|
+
const add = require('./add.js')
|
4
|
+
const addIf = require('./addIf.js')
|
5
|
+
const get = require('./get.js')
|
6
|
+
const clear = require('./clear.js')
|
7
|
+
const wrap = require('./wrap.js')
|
8
|
+
|
9
|
+
// Define
|
10
|
+
module.exports = {
|
11
|
+
new: newCache,
|
12
|
+
add: add,
|
13
|
+
clear: clear,
|
14
|
+
addIf: addIf,
|
15
|
+
get: get,
|
16
|
+
wrap: wrap
|
17
|
+
}
|
package/lib/cache/new.js
ADDED
@@ -0,0 +1,12 @@
|
|
1
|
+
// Define
|
2
|
+
module.exports = function (types) {
|
3
|
+
const cache = {}
|
4
|
+
for (let i = 0; i < types.length; i++) {
|
5
|
+
const type = types[i]
|
6
|
+
const expireValue = type.expire
|
7
|
+
const permanent = expireValue === true
|
8
|
+
const expire = (permanent || expireValue === false ? 0 : expireValue)
|
9
|
+
cache[type.name] = { items: {}, expire: expire, refresh: type.refresh, permanent: permanent }
|
10
|
+
}
|
11
|
+
return cache
|
12
|
+
}
|
@@ -0,0 +1,25 @@
|
|
1
|
+
// Includes
|
2
|
+
const addIf = require('./addIf.js')
|
3
|
+
const options = require('../options.js')
|
4
|
+
|
5
|
+
// Define
|
6
|
+
function wrap (type, index, func) {
|
7
|
+
const cache = options.cache
|
8
|
+
const group = cache[type]
|
9
|
+
if (group.expire > 0 || group.permanent) {
|
10
|
+
return new Promise(function (resolve, reject) {
|
11
|
+
addIf(cache, type, index, {
|
12
|
+
done: resolve,
|
13
|
+
add: function (done) {
|
14
|
+
return func().then(done).catch(reject)
|
15
|
+
}
|
16
|
+
})
|
17
|
+
})
|
18
|
+
} else {
|
19
|
+
return func()
|
20
|
+
}
|
21
|
+
}
|
22
|
+
|
23
|
+
module.exports = function (type, index, func) {
|
24
|
+
return wrap(type, index, func)
|
25
|
+
}
|
@@ -0,0 +1,61 @@
|
|
1
|
+
const http = require('../util/http.js').func
|
2
|
+
const getGeneralToken = require('../util/getGeneralToken.js').func
|
3
|
+
|
4
|
+
exports.required = ['conversationId', 'userIds']
|
5
|
+
exports.optional = ['jar']
|
6
|
+
|
7
|
+
// Docs
|
8
|
+
/**
|
9
|
+
* 🔐 Add users to a conversation.
|
10
|
+
* @category Chat
|
11
|
+
* @alias addUsersToConversation
|
12
|
+
* @param {number} conversationId - The id of the conversation.
|
13
|
+
* @param {Array<number>} userIds - The userIds of the users to add.
|
14
|
+
* @returns {Promise<ConversationAddResponse>}
|
15
|
+
* @example const noblox = require("noblox.js")
|
16
|
+
* // Login using your cookie
|
17
|
+
* noblox.addUsersToConversation(1, [1, 2, 3])
|
18
|
+
**/
|
19
|
+
|
20
|
+
function addUsersToConversation (conversationId, userIds, jar, token) {
|
21
|
+
return new Promise((resolve, reject) => {
|
22
|
+
const httpOpt = {
|
23
|
+
url: '//chat.roblox.com/v2/add-to-conversation',
|
24
|
+
options: {
|
25
|
+
method: 'POST',
|
26
|
+
jar: jar,
|
27
|
+
headers: {
|
28
|
+
'X-CSRF-TOKEN': token
|
29
|
+
},
|
30
|
+
json: {
|
31
|
+
conversationId: conversationId,
|
32
|
+
participantUserIds: userIds
|
33
|
+
},
|
34
|
+
resolveWithFullResponse: true
|
35
|
+
}
|
36
|
+
}
|
37
|
+
return http(httpOpt).then((res) => {
|
38
|
+
if (res.statusCode === 200) {
|
39
|
+
if (!res.body.resultType === 'Success') {
|
40
|
+
reject(new Error(res.body.statusMessage))
|
41
|
+
} else {
|
42
|
+
resolve(res.body)
|
43
|
+
}
|
44
|
+
} else {
|
45
|
+
let error = 'An unknown error has occurred.'
|
46
|
+
if (res.body && res.body.errors) {
|
47
|
+
error = res.body.errors.map((e) => e.message).join('\n')
|
48
|
+
}
|
49
|
+
reject(new Error(error))
|
50
|
+
}
|
51
|
+
}).catch(error => reject(error))
|
52
|
+
})
|
53
|
+
}
|
54
|
+
|
55
|
+
exports.func = (args) => {
|
56
|
+
const jar = args.jar
|
57
|
+
|
58
|
+
return getGeneralToken({ jar: jar }).then((xcsrf) => {
|
59
|
+
return addUsersToConversation(args.conversationId, args.userIds, jar, xcsrf)
|
60
|
+
})
|
61
|
+
}
|
@@ -0,0 +1,33 @@
|
|
1
|
+
const http = require('../util/http.js').func
|
2
|
+
|
3
|
+
exports.optional = ['jar']
|
4
|
+
|
5
|
+
// Docs
|
6
|
+
/**
|
7
|
+
* 🔐 Get the chat settings.
|
8
|
+
* @category Chat
|
9
|
+
* @alias chatSettings
|
10
|
+
* @returns {Promise<ChatSettings>}
|
11
|
+
* @example const noblox = require("noblox.js")
|
12
|
+
* // Login using your cookie
|
13
|
+
* const settings = await noblox.chatSettings()
|
14
|
+
**/
|
15
|
+
|
16
|
+
exports.func = (args) => {
|
17
|
+
const jar = args.jar
|
18
|
+
|
19
|
+
return http({
|
20
|
+
url: '//chat.roblox.com/v2/chat-settings',
|
21
|
+
options: {
|
22
|
+
method: 'GET',
|
23
|
+
jar: jar,
|
24
|
+
resolveWithFullResponse: true
|
25
|
+
}
|
26
|
+
}).then((res) => {
|
27
|
+
if (res.statusCode !== 200) {
|
28
|
+
throw new Error('You are not logged in')
|
29
|
+
} else {
|
30
|
+
return JSON.parse(res.body)
|
31
|
+
}
|
32
|
+
})
|
33
|
+
}
|
@@ -0,0 +1,40 @@
|
|
1
|
+
const http = require('../util/http.js').func
|
2
|
+
|
3
|
+
exports.required = ['conversationId']
|
4
|
+
exports.optional = ['pageSize', 'exclusiveStartMessageId', 'jar']
|
5
|
+
|
6
|
+
// Docs
|
7
|
+
/**
|
8
|
+
* 🔐 Get the chat messages for a conversation.
|
9
|
+
* @category Chat
|
10
|
+
* @alias getChatMessages
|
11
|
+
* @param {number} conversationId - The id of the conversation.
|
12
|
+
* @param {number=} [pageSize=100] - The size of the page.
|
13
|
+
* @param {string=} exclusiveStartMessageId - The messageId to start at.
|
14
|
+
* @returns {Promise<ChatMessage[]>}
|
15
|
+
* @example const noblox = require("noblox.js")
|
16
|
+
* // Login using your cookie
|
17
|
+
* const messages = await noblox.getChatMessages(1, 25)
|
18
|
+
**/
|
19
|
+
|
20
|
+
exports.func = (args) => {
|
21
|
+
const jar = args.jar
|
22
|
+
const conversationId = parseInt(args.conversationId) ? parseInt(args.conversationId) : 0
|
23
|
+
const pageSize = parseInt(args.pageSize) ? parseInt(args.pageSize) : 100
|
24
|
+
const startMessageId = typeof (args.exclusiveStartMessageId) === 'string' ? args.exclusiveStartMessageId : ''
|
25
|
+
|
26
|
+
return http({
|
27
|
+
url: '//chat.roblox.com/v2/get-messages?conversationId=' + conversationId + '&pageSize=' + pageSize + '&exclusiveStartMessageId=' + startMessageId,
|
28
|
+
options: {
|
29
|
+
method: 'GET',
|
30
|
+
jar: jar,
|
31
|
+
resolveWithFullResponse: true
|
32
|
+
}
|
33
|
+
}).then((res) => {
|
34
|
+
if (res.statusCode !== 200) {
|
35
|
+
throw new Error('You are not logged in')
|
36
|
+
} else {
|
37
|
+
return JSON.parse(res.body)
|
38
|
+
}
|
39
|
+
})
|
40
|
+
}
|
@@ -0,0 +1,43 @@
|
|
1
|
+
const http = require('../util/http.js').func
|
2
|
+
|
3
|
+
exports.required = ['conversationIds']
|
4
|
+
exports.optional = ['jar']
|
5
|
+
|
6
|
+
// Docs
|
7
|
+
/**
|
8
|
+
* 🔐 Get conversation details for the conversationIds specified in the parameters
|
9
|
+
* @category Chat
|
10
|
+
* @alias getConversations
|
11
|
+
* @param {Array<number>} conversationIds - An array with the ids of the conversations.
|
12
|
+
* @returns {Promise<ChatConversation[]>}
|
13
|
+
* @example const noblox = require("noblox.js")
|
14
|
+
* // Login using your cookie
|
15
|
+
* const conversations = await noblox.getConversations([1, 2, 3])
|
16
|
+
**/
|
17
|
+
|
18
|
+
exports.func = (args) => {
|
19
|
+
const jar = args.jar
|
20
|
+
const conversationIds = typeof (args.conversationIds) === 'object' ? args.conversationIds : []
|
21
|
+
|
22
|
+
return http({
|
23
|
+
url: '//chat.roblox.com/v2/get-conversations?conversationIds=' + conversationIds.join('&conversationIds='),
|
24
|
+
options: {
|
25
|
+
method: 'GET',
|
26
|
+
jar: jar,
|
27
|
+
resolveWithFullResponse: true
|
28
|
+
}
|
29
|
+
}).then((res) => {
|
30
|
+
if (res.statusCode !== 200) {
|
31
|
+
throw new Error('You are not logged in')
|
32
|
+
} else {
|
33
|
+
let response = JSON.parse(res.body)
|
34
|
+
|
35
|
+
response = response.map((entry) => {
|
36
|
+
entry.lastUpdated = new Date(entry.lastUpdated)
|
37
|
+
return entry
|
38
|
+
})
|
39
|
+
|
40
|
+
return response
|
41
|
+
}
|
42
|
+
})
|
43
|
+
}
|
@@ -0,0 +1,35 @@
|
|
1
|
+
const http = require('../util/http.js').func
|
2
|
+
|
3
|
+
exports.optional = ['featureNames', 'jar']
|
4
|
+
|
5
|
+
// Docs
|
6
|
+
/**
|
7
|
+
* 🔐 Get the rollout settings.
|
8
|
+
* @category Chat
|
9
|
+
* @alias getRolloutSettings
|
10
|
+
* @param {Array<string>=} featureNames - The names of the features rolling out.
|
11
|
+
* @returns {Promise<GetRolloutSettingsResult>}
|
12
|
+
* @example const noblox = require("noblox.js")
|
13
|
+
* // Login using your cookie
|
14
|
+
* const settings = await noblox.getRolloutSettings(['LuaChat', 'Party'])
|
15
|
+
**/
|
16
|
+
|
17
|
+
exports.func = (args) => {
|
18
|
+
const jar = args.jar
|
19
|
+
const featureNames = typeof (args.featureNames) === 'object' ? args.featureNames : []
|
20
|
+
|
21
|
+
return http({
|
22
|
+
url: '//chat.roblox.com/v2/get-rollout-settings?featureNames=' + featureNames.join('&featureNames='),
|
23
|
+
options: {
|
24
|
+
method: 'GET',
|
25
|
+
jar: jar,
|
26
|
+
resolveWithFullResponse: true
|
27
|
+
}
|
28
|
+
}).then((res) => {
|
29
|
+
if (res.statusCode !== 200) {
|
30
|
+
throw new Error('You are not logged in')
|
31
|
+
} else {
|
32
|
+
return JSON.parse(res.body)
|
33
|
+
}
|
34
|
+
})
|
35
|
+
}
|
@@ -0,0 +1,33 @@
|
|
1
|
+
const http = require('../util/http.js').func
|
2
|
+
|
3
|
+
exports.optional = ['jar']
|
4
|
+
|
5
|
+
// Docs
|
6
|
+
/**
|
7
|
+
* 🔐 Get the number of unread conversations.
|
8
|
+
* @category Chat
|
9
|
+
* @alias getUnreadConversationCount
|
10
|
+
* @returns {Promise<GetUnreadConversationCountResult>}
|
11
|
+
* @example const noblox = require("noblox.js")
|
12
|
+
* // Login using your cookie
|
13
|
+
* const unreadConversationCount = noblox.getUnreadConversationCount()
|
14
|
+
**/
|
15
|
+
|
16
|
+
exports.func = (args) => {
|
17
|
+
const jar = args.jar
|
18
|
+
|
19
|
+
return http({
|
20
|
+
url: '//chat.roblox.com/v2/get-unread-conversation-count',
|
21
|
+
options: {
|
22
|
+
method: 'GET',
|
23
|
+
jar: jar,
|
24
|
+
resolveWithFullResponse: true
|
25
|
+
}
|
26
|
+
}).then((res) => {
|
27
|
+
if (res.statusCode !== 200) {
|
28
|
+
throw new Error('You are not logged in')
|
29
|
+
} else {
|
30
|
+
return JSON.parse(res.body)
|
31
|
+
}
|
32
|
+
})
|
33
|
+
}
|
@@ -0,0 +1,38 @@
|
|
1
|
+
const http = require('../util/http.js').func
|
2
|
+
|
3
|
+
exports.required = ['conversationIds']
|
4
|
+
exports.optional = ['pageSize', 'jar']
|
5
|
+
|
6
|
+
// Docs
|
7
|
+
/**
|
8
|
+
* 🔐 Returns unread messages in the given conversations
|
9
|
+
* @category Chat
|
10
|
+
* @alias getUnreadMessages
|
11
|
+
* @param {Array<number>} conversationIds - The IDs of the conversations you want unread messages from.
|
12
|
+
* @param {number} pageSize - Number of messages to return on each page.
|
13
|
+
* @returns {Promise<ChatConversationWithMessages[]>}
|
14
|
+
* @example const noblox = require("noblox.js")
|
15
|
+
* // Login using your cookie
|
16
|
+
* noblox.getUnreadMessages([8212952828])
|
17
|
+
**/
|
18
|
+
|
19
|
+
exports.func = (args) => {
|
20
|
+
const jar = args.jar
|
21
|
+
const conversationIds = typeof (args.conversationIds) === 'object' ? args.conversationIds : []
|
22
|
+
const pageSize = parseInt(args.pageSize) ? parseInt(args.pageSize) : 30
|
23
|
+
|
24
|
+
return http({
|
25
|
+
url: '//chat.roblox.com/v2/get-unread-messages?pageSize=' + pageSize + '&conversationIds=' + conversationIds.join('&conversationIds='),
|
26
|
+
options: {
|
27
|
+
method: 'GET',
|
28
|
+
jar: jar,
|
29
|
+
resolveWithFullResponse: true
|
30
|
+
}
|
31
|
+
}).then((res) => {
|
32
|
+
if (res.statusCode !== 200) {
|
33
|
+
throw new Error('You are not logged in')
|
34
|
+
} else {
|
35
|
+
return JSON.parse(res.body)
|
36
|
+
}
|
37
|
+
})
|
38
|
+
}
|
@@ -0,0 +1,37 @@
|
|
1
|
+
const http = require('../util/http.js').func
|
2
|
+
|
3
|
+
exports.optional = ['pageNumber', 'pageSize', 'jar']
|
4
|
+
|
5
|
+
// Docs
|
6
|
+
/**
|
7
|
+
* 🔐 Get your conversations.
|
8
|
+
* @category Chat
|
9
|
+
* @alias getUserConversations
|
10
|
+
* @param {number=} pageNumber - The page index.
|
11
|
+
* @param {number=} pageSize - The size of each page.
|
12
|
+
* @returns {Promise<ChatConversation[]>}
|
13
|
+
* @example const noblox = require("noblox.js")
|
14
|
+
* // Login using your cookie
|
15
|
+
* const conversations = await noblox.getUserConversations()
|
16
|
+
**/
|
17
|
+
|
18
|
+
exports.func = (args) => {
|
19
|
+
const jar = args.jar
|
20
|
+
const pageNumber = parseInt(args.pageNumber) ? parseInt(args.pageNumber) : 1
|
21
|
+
const pageSize = parseInt(args.pageSize) ? parseInt(args.pageSize) : 30
|
22
|
+
|
23
|
+
return http({
|
24
|
+
url: '//chat.roblox.com/v2/get-user-conversations?pageNumber=' + pageNumber + '&pageSize=' + pageSize,
|
25
|
+
options: {
|
26
|
+
method: 'GET',
|
27
|
+
jar: jar,
|
28
|
+
resolveWithFullResponse: true
|
29
|
+
}
|
30
|
+
}).then((res) => {
|
31
|
+
if (res.statusCode !== 200) {
|
32
|
+
throw new Error('You are not logged in')
|
33
|
+
} else {
|
34
|
+
return JSON.parse(res.body)
|
35
|
+
}
|
36
|
+
})
|
37
|
+
}
|
@@ -0,0 +1,52 @@
|
|
1
|
+
const http = require('../util/http.js').func
|
2
|
+
const getGeneralToken = require('../util/getGeneralToken.js').func
|
3
|
+
|
4
|
+
exports.required = ['conversationId', 'endMessageId']
|
5
|
+
exports.optional = ['jar']
|
6
|
+
|
7
|
+
// Docs
|
8
|
+
/**
|
9
|
+
* 🔐 Mark a chat as read.
|
10
|
+
* @category Chat
|
11
|
+
* @alias markChatAsRead
|
12
|
+
* @param {number} conversationId - The id of the conversation.
|
13
|
+
* @param {string} endMessageId - The last message to read.
|
14
|
+
* @returns {Promise<void>}
|
15
|
+
* @example const noblox = require("noblox.js")
|
16
|
+
* // Login using your cookie
|
17
|
+
* noblox.markChatAsRead(8212952828, 'e775e103-876f-4332-84ab-1ea14f326d39')
|
18
|
+
**/
|
19
|
+
|
20
|
+
const nextFunction = (jar, token, conversationId, endMessageId) => {
|
21
|
+
return http({
|
22
|
+
url: '//chat.roblox.com/v2/mark-as-read',
|
23
|
+
options: {
|
24
|
+
method: 'POST',
|
25
|
+
jar: jar,
|
26
|
+
headers: {
|
27
|
+
'X-CSRF-TOKEN': token
|
28
|
+
},
|
29
|
+
json: {
|
30
|
+
conversationId: conversationId,
|
31
|
+
endMessageId: endMessageId
|
32
|
+
},
|
33
|
+
resolveWithFullResponse: true
|
34
|
+
}
|
35
|
+
}).then((res) => {
|
36
|
+
if (res.statusCode === 200) {
|
37
|
+
if (!res.body.resultType === 'Success') {
|
38
|
+
throw new Error(res.body.statusMessage)
|
39
|
+
}
|
40
|
+
} else {
|
41
|
+
throw new Error('Mark as read failed')
|
42
|
+
}
|
43
|
+
})
|
44
|
+
}
|
45
|
+
|
46
|
+
exports.func = (args) => {
|
47
|
+
const jar = args.jar
|
48
|
+
|
49
|
+
return getGeneralToken({ jar: jar }).then((xcsrf) => {
|
50
|
+
return nextFunction(jar, xcsrf, args.conversationId, args.endMessageId)
|
51
|
+
})
|
52
|
+
}
|
@@ -0,0 +1,50 @@
|
|
1
|
+
const http = require('../util/http.js').func
|
2
|
+
const getGeneralToken = require('../util/getGeneralToken.js').func
|
3
|
+
|
4
|
+
exports.required = ['conversationIds']
|
5
|
+
exports.optional = ['jar']
|
6
|
+
|
7
|
+
// Docs
|
8
|
+
/**
|
9
|
+
* 🔐 Mark chats as seen.
|
10
|
+
* @category Chat
|
11
|
+
* @alias markChatAsSeen
|
12
|
+
* @param {Array<number>} conversationIds - An array with conversationIds.
|
13
|
+
* @returns {Promise<void>}
|
14
|
+
* @example const noblox = require("noblox.js")
|
15
|
+
* // Login using your cookie
|
16
|
+
* noblox.markChatAsSeen([1, 2, 3])
|
17
|
+
**/
|
18
|
+
|
19
|
+
const nextFunction = (jar, token, conversationIds) => {
|
20
|
+
return http({
|
21
|
+
url: '//chat.roblox.com/v2/mark-as-seen',
|
22
|
+
options: {
|
23
|
+
method: 'POST',
|
24
|
+
jar: jar,
|
25
|
+
headers: {
|
26
|
+
'X-CSRF-TOKEN': token
|
27
|
+
},
|
28
|
+
json: {
|
29
|
+
conversationsToMarkSeen: conversationIds
|
30
|
+
},
|
31
|
+
resolveWithFullResponse: true
|
32
|
+
}
|
33
|
+
}).then((res) => {
|
34
|
+
if (res.statusCode === 200) {
|
35
|
+
if (!res.body.resultType === 'Success') {
|
36
|
+
throw new Error(res.body.statusMessage)
|
37
|
+
}
|
38
|
+
} else {
|
39
|
+
throw new Error('Mark as seen failed')
|
40
|
+
}
|
41
|
+
})
|
42
|
+
}
|
43
|
+
|
44
|
+
exports.func = (args) => {
|
45
|
+
const jar = args.jar
|
46
|
+
|
47
|
+
return getGeneralToken({ jar: jar }).then((xcsrf) => {
|
48
|
+
return nextFunction(jar, xcsrf, args.conversationIds)
|
49
|
+
})
|
50
|
+
}
|
@@ -0,0 +1,37 @@
|
|
1
|
+
const http = require('../util/http.js').func
|
2
|
+
|
3
|
+
exports.required = ['conversationIds']
|
4
|
+
exports.optional = ['pageSize', 'jar']
|
5
|
+
|
6
|
+
// Docs
|
7
|
+
/**
|
8
|
+
* 🔐 Get multiple of the latest messages.
|
9
|
+
* @category Chat
|
10
|
+
* @alias multiGetLatestMessages
|
11
|
+
* @param {Array<number>} conversationIds - An array with the conversationIds.
|
12
|
+
* @returns {Promise<ChatConversationWithMessages[]>}
|
13
|
+
* @example const noblox = require("noblox.js")
|
14
|
+
* // Login using your cookie
|
15
|
+
* const recentMessages = await noblox.multiGetLatestMessages([1, 2, 3])
|
16
|
+
**/
|
17
|
+
|
18
|
+
exports.func = (args) => {
|
19
|
+
const jar = args.jar
|
20
|
+
const conversationIds = typeof (args.conversationIds) === 'object' ? args.conversationIds : []
|
21
|
+
const pageSize = parseInt(args.pageSize) ? parseInt(args.pageSize) : 30
|
22
|
+
|
23
|
+
return http({
|
24
|
+
url: '//chat.roblox.com/v2/multi-get-latest-messages?pageSize=' + pageSize + '&conversationIds=' + conversationIds.join('&conversationIds='),
|
25
|
+
options: {
|
26
|
+
method: 'GET',
|
27
|
+
jar: jar,
|
28
|
+
resolveWithFullResponse: true
|
29
|
+
}
|
30
|
+
}).then((res) => {
|
31
|
+
if (res.statusCode !== 200) {
|
32
|
+
throw new Error('You are not logged in')
|
33
|
+
} else {
|
34
|
+
return JSON.parse(res.body)
|
35
|
+
}
|
36
|
+
})
|
37
|
+
}
|
@@ -0,0 +1,50 @@
|
|
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 conversation is created.
|
10
|
+
* @category Chat
|
11
|
+
* @alias onNewConversation
|
12
|
+
* @returns An EventEmitter that emits when a conversation is created.
|
13
|
+
* @example const noblox = require("noblox.js")
|
14
|
+
* // Login using your cookie
|
15
|
+
* const conversationEvent = noblox.onNewConversation()
|
16
|
+
* conversationEvent.on("data", function(data) {
|
17
|
+
* console.log("New conversation! ", data)
|
18
|
+
* })
|
19
|
+
* conversationEvent.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 onChatEvent = new events.EventEmitter()
|
28
|
+
const notifications = onNotification({ jar: jar })
|
29
|
+
|
30
|
+
notifications.on('data', (name, message) => {
|
31
|
+
if (name === 'ChatNotifications' && message.Type === 'NewConversation') {
|
32
|
+
onChatEvent.emit('data', message.ConversationId)
|
33
|
+
}
|
34
|
+
})
|
35
|
+
|
36
|
+
notifications.on('error', (err) => {
|
37
|
+
onChatEvent.emit('error', err)
|
38
|
+
})
|
39
|
+
|
40
|
+
notifications.on('connect', () => {
|
41
|
+
onChatEvent.emit('connect')
|
42
|
+
})
|
43
|
+
|
44
|
+
notifications.on('close', (internal) => {
|
45
|
+
if (internal) return
|
46
|
+
notifications.emit('close', true)
|
47
|
+
})
|
48
|
+
|
49
|
+
return onChatEvent
|
50
|
+
}
|