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.

Files changed (259) hide show
  1. package/.eslintrc.js +21 -0
  2. package/.github/FUNDING.yml +3 -0
  3. package/.github/ISSUE_TEMPLATE/bug_report.md +29 -0
  4. package/.github/ISSUE_TEMPLATE/feature_request.md +22 -0
  5. package/.github/workflows/doc-publish.yml +33 -0
  6. package/.github/workflows/npmpublish.yml +70 -0
  7. package/.travis.yml +13 -0
  8. package/CODE_OF_CONDUCT.md +76 -0
  9. package/LICENSE +21 -0
  10. package/README.md +168 -0
  11. package/examples/cleanPlayers.js +130 -0
  12. package/examples/cleanWall.js +110 -0
  13. package/examples/revertRanks.js +100 -0
  14. package/examples/savePlayers.js +119 -0
  15. package/examples/saveWall.js +96 -0
  16. package/img/moderatedThumbnails/moderatedThumbnail_100x100.png +0 -0
  17. package/img/moderatedThumbnails/moderatedThumbnail_110x110.png +0 -0
  18. package/img/moderatedThumbnails/moderatedThumbnail_140x140.png +0 -0
  19. package/img/moderatedThumbnails/moderatedThumbnail_150x150.png +0 -0
  20. package/img/moderatedThumbnails/moderatedThumbnail_150x200.png +0 -0
  21. package/img/moderatedThumbnails/moderatedThumbnail_180x180.png +0 -0
  22. package/img/moderatedThumbnails/moderatedThumbnail_250x250.png +0 -0
  23. package/img/moderatedThumbnails/moderatedThumbnail_30x30.png +0 -0
  24. package/img/moderatedThumbnails/moderatedThumbnail_352x352.png +0 -0
  25. package/img/moderatedThumbnails/moderatedThumbnail_420x420.png +0 -0
  26. package/img/moderatedThumbnails/moderatedThumbnail_48x48.png +0 -0
  27. package/img/moderatedThumbnails/moderatedThumbnail_50x50.png +0 -0
  28. package/img/moderatedThumbnails/moderatedThumbnail_60x60.png +0 -0
  29. package/img/moderatedThumbnails/moderatedThumbnail_720x720.png +0 -0
  30. package/img/moderatedThumbnails/moderatedThumbnail_75x75.png +0 -0
  31. package/img/noblox-js-small.png +0 -0
  32. package/img/noblox-js.png +0 -0
  33. package/img/thumbnailSizes.png +0 -0
  34. package/jsDocsConfig.json +55 -0
  35. package/lib/accountinformation/getUserSocialLinks.js +42 -0
  36. package/lib/accountsettings/block.js +58 -0
  37. package/lib/accountsettings/unblock.js +58 -0
  38. package/lib/asset/deleteFromInventory.js +69 -0
  39. package/lib/asset/getGamePassProductInfo.js +51 -0
  40. package/lib/asset/getProductInfo.js +56 -0
  41. package/lib/asset/uploadAnimation.js +103 -0
  42. package/lib/asset/uploadItem.js +83 -0
  43. package/lib/asset/uploadModel.js +90 -0
  44. package/lib/avatar/avatarRules.js +38 -0
  45. package/lib/avatar/currentlyWearing.js +32 -0
  46. package/lib/avatar/getAvatar.js +35 -0
  47. package/lib/avatar/getCurrentAvatar.js +37 -0
  48. package/lib/avatar/getRecentItems.js +37 -0
  49. package/lib/avatar/outfitDetails.js +32 -0
  50. package/lib/avatar/outfits.js +37 -0
  51. package/lib/avatar/redrawAvatar.js +48 -0
  52. package/lib/avatar/removeAssetId.js +55 -0
  53. package/lib/avatar/setAvatarBodyColors.js +60 -0
  54. package/lib/avatar/setAvatarScales.js +60 -0
  55. package/lib/avatar/setPlayerAvatarType.js +50 -0
  56. package/lib/avatar/setWearingAssets.js +50 -0
  57. package/lib/avatar/wearAssetId.js +55 -0
  58. package/lib/badges/getAwardedTimestamps.js +52 -0
  59. package/lib/badges/getBadgeInfo.js +43 -0
  60. package/lib/badges/getGameBadges.js +62 -0
  61. package/lib/badges/getPlayerBadges.js +28 -0
  62. package/lib/badges/updateBadgeInfo.js +80 -0
  63. package/lib/cache/add.js +14 -0
  64. package/lib/cache/addIf.js +26 -0
  65. package/lib/cache/clear.js +8 -0
  66. package/lib/cache/get.js +28 -0
  67. package/lib/cache/index.js +17 -0
  68. package/lib/cache/new.js +12 -0
  69. package/lib/cache/wrap.js +25 -0
  70. package/lib/chat/addUsersToConversation.js +61 -0
  71. package/lib/chat/chatSettings.js +33 -0
  72. package/lib/chat/getChatMessages.js +40 -0
  73. package/lib/chat/getConversations.js +43 -0
  74. package/lib/chat/getRolloutSettings.js +35 -0
  75. package/lib/chat/getUnreadConversationCount.js +33 -0
  76. package/lib/chat/getUnreadMessages.js +38 -0
  77. package/lib/chat/getUserConversations.js +37 -0
  78. package/lib/chat/markChatAsRead.js +52 -0
  79. package/lib/chat/markChatAsSeen.js +50 -0
  80. package/lib/chat/multiGetLatestMessages.js +37 -0
  81. package/lib/chat/onNewConversation.js +50 -0
  82. package/lib/chat/onNewMessage.js +53 -0
  83. package/lib/chat/onNewMessageBySelf.js +50 -0
  84. package/lib/chat/onUserOnline.js +50 -0
  85. package/lib/chat/onUserTyping.js +54 -0
  86. package/lib/chat/removeFromGroupConversation.js +62 -0
  87. package/lib/chat/renameGroupConversation.js +57 -0
  88. package/lib/chat/sendChatMessage.js +57 -0
  89. package/lib/chat/setChatUserTyping.js +61 -0
  90. package/lib/chat/start121Conversation.js +50 -0
  91. package/lib/chat/startCloudEditConversation.js +50 -0
  92. package/lib/chat/startGroupConversation.js +62 -0
  93. package/lib/client/onNotification.js +70 -0
  94. package/lib/client/setAPIKey.js +18 -0
  95. package/lib/client/setCookie.js +38 -0
  96. package/lib/datastores/deleteDatastoreEntry.js +66 -0
  97. package/lib/datastores/getDatastoreEntry.js +98 -0
  98. package/lib/datastores/getDatastoreEntryVersions.js +83 -0
  99. package/lib/datastores/getDatastoreKeys.js +73 -0
  100. package/lib/datastores/getDatastores.js +72 -0
  101. package/lib/datastores/incrementDatastoreEntry.js +93 -0
  102. package/lib/datastores/setDatastoreEntry.js +90 -0
  103. package/lib/develop/canManage.js +44 -0
  104. package/lib/develop/configureItem.js +142 -0
  105. package/lib/develop/updateUniverse.js +53 -0
  106. package/lib/develop/updateUniverseAccess.js +55 -0
  107. package/lib/economy/buy.js +99 -0
  108. package/lib/economy/getGroupFunds.js +43 -0
  109. package/lib/economy/getGroupRevenueSummary.js +48 -0
  110. package/lib/economy/getGroupTransactions.js +32 -0
  111. package/lib/economy/getResaleData.js +54 -0
  112. package/lib/economy/getResellers.js +35 -0
  113. package/lib/economy/getUserTransactions.js +34 -0
  114. package/lib/economy/onGroupTransaction.js +74 -0
  115. package/lib/friends/acceptFriendRequest.js +59 -0
  116. package/lib/friends/declineAllFriendRequests.js +57 -0
  117. package/lib/friends/declineFriendRequest.js +59 -0
  118. package/lib/friends/getFollowers.js +61 -0
  119. package/lib/friends/getFollowings.js +61 -0
  120. package/lib/friends/getFriendRequests.js +56 -0
  121. package/lib/friends/getFriends.js +53 -0
  122. package/lib/friends/onFriendRequest.js +58 -0
  123. package/lib/friends/removeFriend.js +58 -0
  124. package/lib/friends/sendFriendRequest.js +59 -0
  125. package/lib/friends/unfollow.js +58 -0
  126. package/lib/games/addDeveloperProduct.js +65 -0
  127. package/lib/games/checkDeveloperProductName.js +39 -0
  128. package/lib/games/configureGamePass.js +146 -0
  129. package/lib/games/getDeveloperProducts.js +51 -0
  130. package/lib/games/getGameInstances.js +31 -0
  131. package/lib/games/getGamePasses.js +39 -0
  132. package/lib/games/getGameRevenue.js +49 -0
  133. package/lib/games/getGameSocialLinks.js +45 -0
  134. package/lib/games/getGroupGames.js +30 -0
  135. package/lib/games/getPlaceInfo.js +48 -0
  136. package/lib/games/getUniverseInfo.js +51 -0
  137. package/lib/games/updateDeveloperProduct.js +69 -0
  138. package/lib/groups/changeRank.js +59 -0
  139. package/lib/groups/deleteWallPost.js +64 -0
  140. package/lib/groups/deleteWallPostsByUser.js +59 -0
  141. package/lib/groups/demote.js +25 -0
  142. package/lib/groups/exile.js +59 -0
  143. package/lib/groups/getAuditLog.js +67 -0
  144. package/lib/groups/getGroup.js +57 -0
  145. package/lib/groups/getGroupSocialLinks.js +44 -0
  146. package/lib/groups/getGroups.js +88 -0
  147. package/lib/groups/getJoinRequest.js +52 -0
  148. package/lib/groups/getJoinRequests.js +58 -0
  149. package/lib/groups/getPlayers.js +108 -0
  150. package/lib/groups/getRankInGroup.js +52 -0
  151. package/lib/groups/getRankNameInGroup.js +52 -0
  152. package/lib/groups/getRole.js +64 -0
  153. package/lib/groups/getRolePermissions.js +51 -0
  154. package/lib/groups/getRoles.js +56 -0
  155. package/lib/groups/getShout.js +49 -0
  156. package/lib/groups/getWall.js +59 -0
  157. package/lib/groups/groupPayout.js +103 -0
  158. package/lib/groups/handleJoinRequest.js +60 -0
  159. package/lib/groups/leaveGroup.js +60 -0
  160. package/lib/groups/onAuditLog.js +62 -0
  161. package/lib/groups/onJoinRequest.js +63 -0
  162. package/lib/groups/onJoinRequestHandle.js +105 -0
  163. package/lib/groups/onShout.js +57 -0
  164. package/lib/groups/onWallPost.js +58 -0
  165. package/lib/groups/promote.js +25 -0
  166. package/lib/groups/searchGroups.js +32 -0
  167. package/lib/groups/setGroupDescription.js +65 -0
  168. package/lib/groups/setGroupName.js +66 -0
  169. package/lib/groups/setRank.js +79 -0
  170. package/lib/groups/shout.js +65 -0
  171. package/lib/index.js +30 -0
  172. package/lib/internal/levelOneCopy.js +16 -0
  173. package/lib/internal/queue.js +61 -0
  174. package/lib/internal/timeout.js +30 -0
  175. package/lib/internal/wrap.js +78 -0
  176. package/lib/inventory/getCollectibles.js +31 -0
  177. package/lib/inventory/getInventory.js +32 -0
  178. package/lib/inventory/getInventoryById.js +31 -0
  179. package/lib/inventory/getOwnership.js +54 -0
  180. package/lib/inventory/getUAIDs.js +47 -0
  181. package/lib/itemconfiguration/getGroupAssets.js +32 -0
  182. package/lib/options.js +26 -0
  183. package/lib/party/onPartyDeleted.js +53 -0
  184. package/lib/party/onPartyInvite.js +53 -0
  185. package/lib/party/onPartyJoinedGame.js +53 -0
  186. package/lib/party/onPartyLeftGame.js +53 -0
  187. package/lib/party/onPartySelfJoined.js +53 -0
  188. package/lib/party/onPartySelfLeft.js +53 -0
  189. package/lib/party/onPartyUserJoined.js +53 -0
  190. package/lib/party/onPartyUserLeft.js +53 -0
  191. package/lib/premiumfeatures/getPremium.js +51 -0
  192. package/lib/presence/getPresences.js +63 -0
  193. package/lib/privatemessages/getMessages.js +60 -0
  194. package/lib/privatemessages/message.js +80 -0
  195. package/lib/privatemessages/onMessage.js +88 -0
  196. package/lib/thumbnails/getLogo.js +60 -0
  197. package/lib/thumbnails/getPlayerThumbnail.js +121 -0
  198. package/lib/thumbnails/getThumbnails.js +93 -0
  199. package/lib/trades/acceptTrade.js +58 -0
  200. package/lib/trades/canTradeWith.js +48 -0
  201. package/lib/trades/counterTrade.js +84 -0
  202. package/lib/trades/declineTrade.js +58 -0
  203. package/lib/trades/getTradeInfo.js +52 -0
  204. package/lib/trades/getTrades.js +37 -0
  205. package/lib/trades/sendTrade.js +82 -0
  206. package/lib/users/getBlurb.js +36 -0
  207. package/lib/users/getIdFromUsername.js +53 -0
  208. package/lib/users/getPlayerInfo.js +100 -0
  209. package/lib/users/getUsernameFromId.js +44 -0
  210. package/lib/users/onBlurbChange.js +46 -0
  211. package/lib/util/clearSession.js +32 -0
  212. package/lib/util/generalRequest.js +61 -0
  213. package/lib/util/getAction.js +45 -0
  214. package/lib/util/getCurrentUser.js +44 -0
  215. package/lib/util/getGeneralToken.js +52 -0
  216. package/lib/util/getHash.js +29 -0
  217. package/lib/util/getInputs.js +37 -0
  218. package/lib/util/getPageResults.js +89 -0
  219. package/lib/util/getSenderUserId.js +30 -0
  220. package/lib/util/getSession.js +38 -0
  221. package/lib/util/getVerification.js +60 -0
  222. package/lib/util/getVerificationInputs.js +31 -0
  223. package/lib/util/http.js +110 -0
  224. package/lib/util/jar.js +24 -0
  225. package/lib/util/refreshCookie.js +52 -0
  226. package/lib/util/relog.js +81 -0
  227. package/lib/util/setOptions.js +54 -0
  228. package/lib/util/shortPoll.js +102 -0
  229. package/lib/util/threaded.js +80 -0
  230. package/package.json +94 -0
  231. package/postinstall.js +1 -0
  232. package/settings.json +107 -0
  233. package/test/accountinformation.test.js +27 -0
  234. package/test/accountsettings.test.js +27 -0
  235. package/test/asset.test.js +81 -0
  236. package/test/assets/Great-White-Shark-Fin.rbxm +0 -0
  237. package/test/assets/KeyframeSequence.rbxm +0 -0
  238. package/test/avatar.test.js +164 -0
  239. package/test/badges.test.js +96 -0
  240. package/test/chat.test.js +104 -0
  241. package/test/datastore.test.js +105 -0
  242. package/test/develop.test.js +53 -0
  243. package/test/economy.test.js +137 -0
  244. package/test/friends.test.js +128 -0
  245. package/test/games.test.js +212 -0
  246. package/test/groups.test.js +311 -0
  247. package/test/inventory.test.js +98 -0
  248. package/test/itemconfiguration.test.js +24 -0
  249. package/test/premiumfeatures.test.js +17 -0
  250. package/test/presence.test.js +25 -0
  251. package/test/privatemessages.test.js +33 -0
  252. package/test/thumbnails.test.js +53 -0
  253. package/test/users.test.js +68 -0
  254. package/tutorials/Authentication.md +75 -0
  255. package/tutorials/Event Emitters.md +26 -0
  256. package/tutorials/Promises.md +86 -0
  257. package/tutorials/VPS Authentication.md +72 -0
  258. package/typings/index.d.ts +2525 -0
  259. 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 someone messages you via. chat. This event will only emit for messages sent via. chat windows on
10
+ * the website - those in the pop-up/overlay window. To handle messages sent via. the older email-like
11
+ * message function, see onMessage.
12
+ * @see [onMessage()](global.html#onMessage)
13
+ * @category Chat
14
+ * @alias onNewMessage
15
+ * @returns An EventEmitter that emits when someone messages you.
16
+ * @example const noblox = require("noblox.js")
17
+ * // Login using your cookie
18
+ * const messageEvent = noblox.onNewMessage()
19
+ * messageEvent.on("data", function(data) {
20
+ * console.log("New chat message! ", data)
21
+ * })
22
+ * messageEvent.on("error", function(err) {
23
+ * console.error("Something went wrong: ", err)
24
+ * // Handle error as needed
25
+ * })
26
+ **/
27
+
28
+ exports.func = (args) => {
29
+ const jar = args.jar
30
+ const newEvent = new events.EventEmitter()
31
+ const notifications = onNotification({ jar: jar })
32
+
33
+ notifications.on('data', (name, message) => {
34
+ if (name === 'ChatNotifications' && message.Type === 'NewMessage') {
35
+ newEvent.emit('data', message.ConversationId)
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,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 you send a new message.
10
+ * @category Chat
11
+ * @alias onNewMessageBySelf
12
+ * @returns An EventEmitter that emits when you send a new message.
13
+ * @example const noblox = require("noblox.js")
14
+ * // Login using your cookie
15
+ * const messageSent = noblox.onNewMessageBySelf()
16
+ * messageSent.on("data", function(data) {
17
+ * console.log("Sent chat message! ", data)
18
+ * })
19
+ * messageSent.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 === 'ChatNotifications' && message.Type === 'NewMessageBySelf') {
32
+ newEvent.emit('data', message.ConversationId)
33
+ }
34
+ })
35
+
36
+ notifications.on('error', (err) => {
37
+ newEvent.emit('error', err)
38
+ })
39
+
40
+ notifications.on('connect', () => {
41
+ newEvent.emit('connect')
42
+ })
43
+
44
+ notifications.on('close', (internal) => {
45
+ if (internal) return
46
+ notifications.emit('close', true)
47
+ })
48
+
49
+ return newEvent
50
+ }
@@ -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 someone comes online.
10
+ * @category Chat
11
+ * @alias onUserOnline
12
+ * @returns An EventEmitter that emits when someone comes online.
13
+ * @example const noblox = require("noblox.js")
14
+ * // Login using your cookie
15
+ * const userOnlineEvent = noblox.onUserOnline()
16
+ * userOnlineEvent.on("data", function(data) {
17
+ * console.log("User online! ", data)
18
+ * })
19
+ * userOnlineEvent.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 === 'PresenceNotifications' && message.Type === 'UserOnline') {
32
+ newEvent.emit('data', message.UserId)
33
+ }
34
+ })
35
+
36
+ notifications.on('error', (err) => {
37
+ newEvent.emit('error', err)
38
+ })
39
+
40
+ notifications.on('connect', () => {
41
+ newEvent.emit('connect')
42
+ })
43
+
44
+ notifications.on('close', (internal) => {
45
+ if (internal) return
46
+ notifications.emit('close', true)
47
+ })
48
+
49
+ return newEvent
50
+ }
@@ -0,0 +1,54 @@
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 starts typing in a chat.
10
+ * @category Chat
11
+ * @alias onUserTyping
12
+ * @returns An EventEmitter that emits when someone starts typing in a chat.
13
+ * @example const noblox = require("noblox.js")
14
+ * // Login using your cookie
15
+ * const userTyping = noblox.onUserTyping()
16
+ * userTyping.on("data", function(data) {
17
+ * console.log("User typing! ", data)
18
+ * })
19
+ * userTyping.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 === 'ChatNotifications' && message.Type === 'ParticipantTyping') {
32
+ newEvent.emit('data', {
33
+ UserId: message.UserId,
34
+ ConversationId: message.ConversationId,
35
+ IsTyping: message.IsTyping
36
+ })
37
+ }
38
+ })
39
+
40
+ notifications.on('error', (err) => {
41
+ newEvent.emit('error', err)
42
+ })
43
+
44
+ notifications.on('connect', () => {
45
+ newEvent.emit('connect')
46
+ })
47
+
48
+ notifications.on('close', (internal) => {
49
+ if (internal) return
50
+ notifications.emit('close', true)
51
+ })
52
+
53
+ return newEvent
54
+ }
@@ -0,0 +1,62 @@
1
+ const http = require('../util/http.js').func
2
+ const getGeneralToken = require('../util/getGeneralToken.js').func
3
+
4
+ exports.required = ['conversationId', 'userId']
5
+ exports.optional = ['jar']
6
+
7
+ // Docs
8
+ /**
9
+ * 🔐 Remove a user from the group conversation.
10
+ * @category Chat
11
+ * @alias removeFromGroupConversation
12
+ * @param {number} conversationId - The id of the conversation.
13
+ * @param {number} userId - The id of the user.
14
+ * @returns {Promise<ConversationRemoveResponse>}
15
+ * @example const noblox = require("noblox.js")
16
+ * // Login using your cookie
17
+ * noblox.removeFromGroupConversation(1, 2)
18
+ **/
19
+
20
+ function removeFromGroupConversation (conversationId, userId, jar, token) {
21
+ return new Promise((resolve, reject) => {
22
+ const httpOpt = {
23
+ url: '//chat.roblox.com/v2/remove-from-conversation',
24
+ options: {
25
+ method: 'POST',
26
+ jar: jar,
27
+ headers: {
28
+ 'X-CSRF-TOKEN': token
29
+ },
30
+ json: {
31
+ conversationId: conversationId,
32
+ participantUserId: userId
33
+ },
34
+ resolveWithFullResponse: true
35
+ }
36
+ }
37
+
38
+ return http(httpOpt).then((res) => {
39
+ if (res.statusCode === 200) {
40
+ if (!res.body.resultType === 'Success') {
41
+ reject(new Error(res.body.statusMessage))
42
+ } else {
43
+ resolve(res.body)
44
+ }
45
+ } else {
46
+ let error = 'An unknown error has occurred.'
47
+ if (res.body && res.body.errors) {
48
+ error = res.body.errors.map((e) => e.message).join('\n')
49
+ }
50
+ reject(new Error(error))
51
+ }
52
+ }).catch(error => reject(error))
53
+ })
54
+ }
55
+
56
+ exports.func = (args) => {
57
+ const jar = args.jar
58
+
59
+ return getGeneralToken({ jar: jar }).then((xcsrf) => {
60
+ return removeFromGroupConversation(args.conversationId, args.userId, jar, xcsrf)
61
+ })
62
+ }
@@ -0,0 +1,57 @@
1
+ const http = require('../util/http.js').func
2
+ const getGeneralToken = require('../util/getGeneralToken.js').func
3
+
4
+ exports.required = ['conversationId', 'title']
5
+ exports.optional = ['jar']
6
+
7
+ // Docs
8
+ /**
9
+ * 🔐 Rename a group conversation.
10
+ * @category Chat
11
+ * @alias renameGroupConversation
12
+ * @param {number} conversationId - The id of the conversation.
13
+ * @param {string} title - The new title of the group.
14
+ * @returns {Promise<ConversationRenameResponse>}
15
+ * @example const noblox = require("noblox.js")
16
+ * // Login using your cookie
17
+ * noblox.renameGroupConversation(1, "A cool group.")
18
+ **/
19
+
20
+ function renameGroupConversation (conversationId, newTitle, jar, token) {
21
+ return new Promise((resolve, reject) => {
22
+ const httpOpt = {
23
+ url: '//chat.roblox.com/v2/rename-group-conversation',
24
+ options: {
25
+ method: 'POST',
26
+ jar: jar,
27
+ headers: {
28
+ 'X-CSRF-TOKEN': token
29
+ },
30
+ json: {
31
+ conversationId: conversationId,
32
+ newTitle: newTitle
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
+ reject(new Error('Rename group chat failed'))
46
+ }
47
+ }).catch(error => reject(error))
48
+ })
49
+ }
50
+
51
+ exports.func = (args) => {
52
+ const jar = args.jar
53
+
54
+ return getGeneralToken({ jar: jar }).then((xcsrf) => {
55
+ return renameGroupConversation(args.conversationId, args.title, jar, xcsrf)
56
+ })
57
+ }
@@ -0,0 +1,57 @@
1
+ const http = require('../util/http.js').func
2
+ const getGeneralToken = require('../util/getGeneralToken.js').func
3
+
4
+ exports.required = ['conversationId', 'message']
5
+ exports.optional = ['jar']
6
+
7
+ // Docs
8
+ /**
9
+ * 🔐 Send a message in a chat.
10
+ * @category Chat
11
+ * @alias sendChatMessage
12
+ * @param {number} conversationId - The id of the conversation.
13
+ * @param {string} message - The message to send.
14
+ * @returns {Promise<SendChatResponse>}
15
+ * @example const noblox = require("noblox.js")
16
+ * // Login using your cookie
17
+ * noblox.sendChatMessage(1, "Hello world!")
18
+ **/
19
+
20
+ function sendChatMessage (conversationId, messageText, jar, token) {
21
+ return new Promise((resolve, reject) => {
22
+ const httpOpt = {
23
+ url: '//chat.roblox.com/v2/send-message',
24
+ options: {
25
+ method: 'POST',
26
+ jar: jar,
27
+ headers: {
28
+ 'X-CSRF-TOKEN': token
29
+ },
30
+ json: {
31
+ conversationId: conversationId,
32
+ message: messageText
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
+ throw new Error('Send chat message failed')
46
+ }
47
+ }).catch(error => reject(error))
48
+ })
49
+ }
50
+
51
+ exports.func = (args) => {
52
+ const jar = args.jar
53
+
54
+ return getGeneralToken({ jar: jar }).then((xcsrf) => {
55
+ return sendChatMessage(args.conversationId, args.message, jar, xcsrf)
56
+ })
57
+ }
@@ -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', 'isTyping']
5
+ exports.optional = ['jar']
6
+
7
+ // Docs
8
+ /**
9
+ * 🔐 Trigger the typing action in a conversation.
10
+ * @category Chat
11
+ * @alias setChatUserTyping
12
+ * @param {number} conversationId - The id of the conversation.
13
+ * @param {boolean} isTyping - If the user is typing.
14
+ * @returns {Promise<UpdateTypingResponse>}
15
+ * @example const noblox = require("noblox.js")
16
+ * // Login using your cookie
17
+ * noblox.setChatUserTyping(1, true)
18
+ **/
19
+
20
+ function setChatUserTyping (conversationId, isTyping, jar, token) {
21
+ return new Promise((resolve, reject) => {
22
+ const httpOpt = {
23
+ url: '//chat.roblox.com/v2/update-user-typing-status',
24
+ options: {
25
+ method: 'POST',
26
+ jar: jar,
27
+ headers: {
28
+ 'X-CSRF-TOKEN': token
29
+ },
30
+ json: {
31
+ conversationId: conversationId,
32
+ isTyping: isTyping
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 setChatUserTyping(args.conversationId, args.isTyping, jar, xcsrf)
60
+ })
61
+ }
@@ -0,0 +1,50 @@
1
+ const http = require('../util/http.js').func
2
+ const getGeneralToken = require('../util/getGeneralToken.js').func
3
+
4
+ exports.required = ['userId']
5
+ exports.optional = ['jar']
6
+
7
+ // Docs
8
+ /**
9
+ * 🔐 Start a conversation with another user.
10
+ * @category Chat
11
+ * @alias start121Conversation
12
+ * @param {number} userId - The id of the user.
13
+ * @returns {Promise<void>}
14
+ * @example const noblox = require("noblox.js")
15
+ * // Login using your cookie
16
+ * noblox.start121Conversation(1)
17
+ **/
18
+
19
+ const nextFunction = (jar, token, userId) => {
20
+ return http({
21
+ url: '//chat.roblox.com/v2/start-one-to-one-conversation',
22
+ options: {
23
+ method: 'POST',
24
+ jar: jar,
25
+ headers: {
26
+ 'X-CSRF-TOKEN': token
27
+ },
28
+ json: {
29
+ participantUserId: userId
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('Start conversation 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.userId)
49
+ })
50
+ }
@@ -0,0 +1,50 @@
1
+ const http = require('../util/http.js').func
2
+ const getGeneralToken = require('../util/getGeneralToken.js').func
3
+
4
+ exports.required = ['placeId']
5
+ exports.optional = ['jar']
6
+
7
+ // Docs
8
+ /**
9
+ * 🔐 Start a Cloud Edit/Team Create conversation.
10
+ * @category Chat
11
+ * @alias startCloudEditConversation
12
+ * @param {number} placeId - The id of the place.
13
+ * @returns {Promise<void>}
14
+ * @example const noblox = require("noblox.js")
15
+ * // Login using your cookie
16
+ * noblox.startCloudEditConversation(1117747196)
17
+ **/
18
+
19
+ const nextFunction = (jar, token, placeId) => {
20
+ return http({
21
+ url: '//chat.roblox.com/v2/start-cloud-edit-conversation',
22
+ options: {
23
+ method: 'POST',
24
+ jar: jar,
25
+ headers: {
26
+ 'X-CSRF-TOKEN': token
27
+ },
28
+ json: {
29
+ placeId: placeId
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('Start cloud edit chat 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.placeId)
49
+ })
50
+ }
@@ -0,0 +1,62 @@
1
+ const http = require('../util/http.js').func
2
+ const getGeneralToken = require('../util/getGeneralToken.js').func
3
+
4
+ exports.required = ['userIds', 'title']
5
+ exports.optional = ['jar']
6
+
7
+ // Docs
8
+ /**
9
+ * 🔐 Start a group conversation.
10
+ * @category Chat
11
+ * @alias startGroupConversation
12
+ * @param {Array<number>} userIds - An array of userIds to add.
13
+ * @param {string} title - The title of the group.
14
+ * @returns {Promise<StartGroupConversationResponse>}
15
+ * @example const noblox = require("noblox.js")
16
+ * // Login using your cookie
17
+ * noblox.startGroupConversation([1, 2, 3], "A group conversation.")
18
+ **/
19
+
20
+ function startGroupConversation (userIds, chatTitle, jar, token) {
21
+ return new Promise((resolve, reject) => {
22
+ const httpOpt = {
23
+ url: '//chat.roblox.com/v2/start-group-conversation',
24
+ options: {
25
+ method: 'POST',
26
+ jar: jar,
27
+ headers: {
28
+ 'X-CSRF-TOKEN': token
29
+ },
30
+ json: {
31
+ participantUserIds: userIds,
32
+ title: chatTitle
33
+ },
34
+ resolveWithFullResponse: true
35
+ }
36
+ }
37
+
38
+ return http(httpOpt).then((res) => {
39
+ if (res.statusCode === 200) {
40
+ if (!res.body.resultType === 'Success') {
41
+ reject(new Error(res.body.statusMessage))
42
+ } else {
43
+ resolve(res.body)
44
+ }
45
+ } else {
46
+ let error = 'An unknown error has occurred.'
47
+ if (res.body && res.body.errors) {
48
+ error = res.body.errors.map((e) => e.message).join('\n')
49
+ }
50
+ reject(new Error(error))
51
+ }
52
+ }).catch(error => reject(error))
53
+ })
54
+ }
55
+
56
+ exports.func = (args) => {
57
+ const jar = args.jar
58
+
59
+ return getGeneralToken({ jar: jar }).then((xcsrf) => {
60
+ return startGroupConversation(args.userIds, args.title, jar, xcsrf)
61
+ })
62
+ }
@@ -0,0 +1,70 @@
1
+ // Dependencies
2
+ const SignalR = require('signalr-client').client
3
+ const events = require('events')
4
+
5
+ // Includes
6
+ const getSession = require('../util/getSession.js').func
7
+ const settings = require('../../settings.json')
8
+
9
+ // Args
10
+ exports.optional = ['jar']
11
+
12
+ // Docs
13
+ /**
14
+ * 🔐 An event for when you get a notification.
15
+ * @category Client
16
+ * @alias onNotification
17
+ * @returns An EventEmitter that emits when you get a notification.
18
+ * @example const noblox = require("noblox.js")
19
+ * // Login using your cookie
20
+ * const notification = noblox.onNotification()
21
+ * notification.on("data", function(data) {
22
+ * console.log("New notification! ", data)
23
+ * })
24
+ * notification.on("error", function(err) {
25
+ * console.error("Something went wrong: ", err)
26
+ * // Handle error as needed
27
+ * })
28
+ **/
29
+
30
+ // Define
31
+ exports.func = function (args) {
32
+ const max = settings.event.maxRetries
33
+ const notifications = new events.EventEmitter()
34
+ function connect (retries) {
35
+ if (typeof args.jar === 'string') {
36
+ args.jar = { session: args.jar }
37
+ }
38
+ const session = getSession({ jar: args.jar })
39
+ const client = new SignalR('wss://realtime.roblox.com/notifications', ['usernotificationhub'], 3, true) // wss for https
40
+ client.headers.Cookie = '.ROBLOSECURITY=' + session + ';'
41
+ client.on('usernotificationhub', 'notification', function (name, message) {
42
+ notifications.emit('data', name, JSON.parse(message))
43
+ })
44
+ notifications.on('close', client.end)
45
+ client.serviceHandlers.connectFailed = function (err) {
46
+ notifications.emit('error', new Error('Connection failed: ' + err.message))
47
+ if (retries !== -1) {
48
+ if (retries > max) {
49
+ notifications.emit('close', new Error('Max retries reached'))
50
+ } else {
51
+ setTimeout(connect, 5000, retries + 1)
52
+ }
53
+ }
54
+ }
55
+ client.serviceHandlers.onerror = function (err) {
56
+ notifications.emit('error', err)
57
+ }
58
+ client.serviceHandlers.connected = function (connection) {
59
+ notifications.emit('connect', connection)
60
+ }
61
+ client.serviceHandlers.reconnecting = function () {
62
+ setTimeout(connect, 5000, 0)
63
+ notifications.emit('error', new Error('Lost connection, reconnecting'))
64
+ return true // Abort reconnection
65
+ }
66
+ client.start()
67
+ }
68
+ connect(-1)
69
+ return notifications
70
+ }