noblox-asset.js 7.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (272) hide show
  1. package/.github/ISSUE_TEMPLATE/bug_report.md +29 -0
  2. package/.github/ISSUE_TEMPLATE/feature_request.md +22 -0
  3. package/.github/workflows/doc-publish.yml +33 -0
  4. package/.github/workflows/npmpublish.yml +72 -0
  5. package/.github/workflows/run-tests.yml +49 -0
  6. package/CODE_OF_CONDUCT.md +76 -0
  7. package/LICENSE +21 -0
  8. package/README.md +182 -0
  9. package/eslint.config.mjs +34 -0
  10. package/examples/cleanPlayers.js +130 -0
  11. package/examples/cleanWall.js +110 -0
  12. package/examples/revertRanks.js +100 -0
  13. package/examples/savePlayers.js +119 -0
  14. package/examples/saveWall.js +96 -0
  15. package/img/moderatedThumbnails/moderatedThumbnail_100x100.png +0 -0
  16. package/img/moderatedThumbnails/moderatedThumbnail_110x110.png +0 -0
  17. package/img/moderatedThumbnails/moderatedThumbnail_140x140.png +0 -0
  18. package/img/moderatedThumbnails/moderatedThumbnail_150x150.png +0 -0
  19. package/img/moderatedThumbnails/moderatedThumbnail_150x200.png +0 -0
  20. package/img/moderatedThumbnails/moderatedThumbnail_180x180.png +0 -0
  21. package/img/moderatedThumbnails/moderatedThumbnail_250x250.png +0 -0
  22. package/img/moderatedThumbnails/moderatedThumbnail_30x30.png +0 -0
  23. package/img/moderatedThumbnails/moderatedThumbnail_352x352.png +0 -0
  24. package/img/moderatedThumbnails/moderatedThumbnail_420x420.png +0 -0
  25. package/img/moderatedThumbnails/moderatedThumbnail_48x48.png +0 -0
  26. package/img/moderatedThumbnails/moderatedThumbnail_50x50.png +0 -0
  27. package/img/moderatedThumbnails/moderatedThumbnail_60x60.png +0 -0
  28. package/img/moderatedThumbnails/moderatedThumbnail_720x720.png +0 -0
  29. package/img/moderatedThumbnails/moderatedThumbnail_75x75.png +0 -0
  30. package/img/noblox-js-small.png +0 -0
  31. package/img/noblox-js.png +0 -0
  32. package/img/thumbnailSizes.png +0 -0
  33. package/jsDocsConfig.json +55 -0
  34. package/lib/accountinformation/getUserSocialLinks.js +40 -0
  35. package/lib/accountsettings/block.js +53 -0
  36. package/lib/accountsettings/unblock.js +53 -0
  37. package/lib/asset/deleteFromInventory.js +56 -0
  38. package/lib/asset/getGamePassProductInfo.js +50 -0
  39. package/lib/asset/getProductInfo.js +46 -0
  40. package/lib/asset/uploadAnimation.js +103 -0
  41. package/lib/asset/uploadItem.js +83 -0
  42. package/lib/asset/uploadModel.js +90 -0
  43. package/lib/avatar/avatarRules.js +39 -0
  44. package/lib/avatar/currentlyWearing.js +33 -0
  45. package/lib/avatar/getAvatar.js +36 -0
  46. package/lib/avatar/getCurrentAvatar.js +38 -0
  47. package/lib/avatar/getRecentItems.js +36 -0
  48. package/lib/avatar/outfitDetails.js +33 -0
  49. package/lib/avatar/outfits.js +38 -0
  50. package/lib/avatar/redrawAvatar.js +47 -0
  51. package/lib/avatar/removeAssetId.js +51 -0
  52. package/lib/avatar/setAvatarBodyColors.js +61 -0
  53. package/lib/avatar/setAvatarScales.js +61 -0
  54. package/lib/avatar/setPlayerAvatarType.js +51 -0
  55. package/lib/avatar/setWearingAssets.js +51 -0
  56. package/lib/avatar/wearAssetId.js +51 -0
  57. package/lib/badges/getAwardedTimestamps.js +49 -0
  58. package/lib/badges/getBadgeInfo.js +44 -0
  59. package/lib/badges/getGameBadges.js +63 -0
  60. package/lib/badges/getPlayerBadges.js +28 -0
  61. package/lib/badges/updateBadgeInfo.js +75 -0
  62. package/lib/cache/add.js +14 -0
  63. package/lib/cache/addIf.js +26 -0
  64. package/lib/cache/clear.js +8 -0
  65. package/lib/cache/get.js +28 -0
  66. package/lib/cache/index.js +17 -0
  67. package/lib/cache/new.js +12 -0
  68. package/lib/cache/wrap.js +25 -0
  69. package/lib/chat/addUsersToConversation.js +58 -0
  70. package/lib/chat/chatSettings.js +34 -0
  71. package/lib/chat/getChatMessages.js +41 -0
  72. package/lib/chat/getConversations.js +44 -0
  73. package/lib/chat/getRolloutSettings.js +36 -0
  74. package/lib/chat/getUnreadConversationCount.js +34 -0
  75. package/lib/chat/getUnreadMessages.js +39 -0
  76. package/lib/chat/getUserConversations.js +38 -0
  77. package/lib/chat/markChatAsRead.js +53 -0
  78. package/lib/chat/markChatAsSeen.js +51 -0
  79. package/lib/chat/multiGetLatestMessages.js +38 -0
  80. package/lib/chat/onNewConversation.js +50 -0
  81. package/lib/chat/onNewMessage.js +53 -0
  82. package/lib/chat/onNewMessageBySelf.js +50 -0
  83. package/lib/chat/onUserOnline.js +50 -0
  84. package/lib/chat/onUserTyping.js +54 -0
  85. package/lib/chat/removeFromGroupConversation.js +59 -0
  86. package/lib/chat/renameGroupConversation.js +58 -0
  87. package/lib/chat/sendChatMessage.js +58 -0
  88. package/lib/chat/setChatUserTyping.js +58 -0
  89. package/lib/chat/start121Conversation.js +51 -0
  90. package/lib/chat/startCloudEditConversation.js +51 -0
  91. package/lib/chat/startGroupConversation.js +59 -0
  92. package/lib/client/onNotification.js +86 -0
  93. package/lib/client/setAPIKey.js +18 -0
  94. package/lib/client/setCookie.js +38 -0
  95. package/lib/datastores/deleteDatastoreEntry.js +56 -0
  96. package/lib/datastores/getDatastoreEntry.js +88 -0
  97. package/lib/datastores/getDatastoreEntryVersions.js +73 -0
  98. package/lib/datastores/getDatastoreKeys.js +63 -0
  99. package/lib/datastores/getDatastores.js +62 -0
  100. package/lib/datastores/incrementDatastoreEntry.js +83 -0
  101. package/lib/datastores/setDatastoreEntry.js +80 -0
  102. package/lib/develop/canManage.js +42 -0
  103. package/lib/develop/configureItem.js +210 -0
  104. package/lib/develop/updateUniverse.js +52 -0
  105. package/lib/develop/updateUniverseAccess.js +54 -0
  106. package/lib/economy/getGroupFunds.js +42 -0
  107. package/lib/economy/getGroupPayoutEligibility.js +55 -0
  108. package/lib/economy/getGroupRevenueSummary.js +42 -0
  109. package/lib/economy/getGroupTransactions.js +32 -0
  110. package/lib/economy/getResaleData.js +48 -0
  111. package/lib/economy/getResellers.js +35 -0
  112. package/lib/economy/getUserFunds.js +43 -0
  113. package/lib/economy/getUserTransactions.js +34 -0
  114. package/lib/economy/onGroupTransaction.js +74 -0
  115. package/lib/friends/acceptFriendRequest.js +54 -0
  116. package/lib/friends/declineAllFriendRequests.js +52 -0
  117. package/lib/friends/declineFriendRequest.js +54 -0
  118. package/lib/friends/getFollowerCount.js +35 -0
  119. package/lib/friends/getFollowers.js +56 -0
  120. package/lib/friends/getFollowingCount.js +35 -0
  121. package/lib/friends/getFollowings.js +56 -0
  122. package/lib/friends/getFriendCount.js +35 -0
  123. package/lib/friends/getFriendRequests.js +51 -0
  124. package/lib/friends/getFriends.js +48 -0
  125. package/lib/friends/onFriendRequest.js +58 -0
  126. package/lib/friends/removeFriend.js +53 -0
  127. package/lib/friends/sendFriendRequest.js +54 -0
  128. package/lib/friends/unfollow.js +53 -0
  129. package/lib/games/addDeveloperProduct.js +53 -0
  130. package/lib/games/configureGamePass.js +126 -0
  131. package/lib/games/getDeveloperProducts.js +44 -0
  132. package/lib/games/getGameInstances.js +31 -0
  133. package/lib/games/getGamePasses.js +39 -0
  134. package/lib/games/getGameRevenue.js +48 -0
  135. package/lib/games/getGameSocialLinks.js +42 -0
  136. package/lib/games/getGroupGames.js +30 -0
  137. package/lib/games/getPlaceInfo.js +47 -0
  138. package/lib/games/getUniverseInfo.js +50 -0
  139. package/lib/games/publishToTopic.js +52 -0
  140. package/lib/games/sendUserNotification.js +65 -0
  141. package/lib/games/updateDeveloperProduct.js +56 -0
  142. package/lib/groups/banFromGroup.js +47 -0
  143. package/lib/groups/changeRank.js +59 -0
  144. package/lib/groups/deleteWallPost.js +59 -0
  145. package/lib/groups/deleteWallPostsByUser.js +55 -0
  146. package/lib/groups/demote.js +25 -0
  147. package/lib/groups/exile.js +55 -0
  148. package/lib/groups/getAuditLog.js +64 -0
  149. package/lib/groups/getGroup.js +50 -0
  150. package/lib/groups/getGroupBans.js +37 -0
  151. package/lib/groups/getGroupSocialLinks.js +41 -0
  152. package/lib/groups/getGroups.js +82 -0
  153. package/lib/groups/getJoinRequest.js +47 -0
  154. package/lib/groups/getJoinRequests.js +53 -0
  155. package/lib/groups/getPlayers.js +103 -0
  156. package/lib/groups/getRankInGroup.js +45 -0
  157. package/lib/groups/getRankNameInGroup.js +44 -0
  158. package/lib/groups/getRole.js +64 -0
  159. package/lib/groups/getRolePermissions.js +48 -0
  160. package/lib/groups/getRoles.js +53 -0
  161. package/lib/groups/getShout.js +47 -0
  162. package/lib/groups/getWall.js +56 -0
  163. package/lib/groups/groupPayout.js +103 -0
  164. package/lib/groups/handleJoinRequest.js +57 -0
  165. package/lib/groups/handleJoinRequests.js +61 -0
  166. package/lib/groups/leaveGroup.js +56 -0
  167. package/lib/groups/onAuditLog.js +62 -0
  168. package/lib/groups/onJoinRequest.js +63 -0
  169. package/lib/groups/onJoinRequestHandle.js +105 -0
  170. package/lib/groups/onShout.js +57 -0
  171. package/lib/groups/onWallPost.js +58 -0
  172. package/lib/groups/promote.js +25 -0
  173. package/lib/groups/searchGroups.js +32 -0
  174. package/lib/groups/setGroupDescription.js +58 -0
  175. package/lib/groups/setGroupName.js +59 -0
  176. package/lib/groups/setRank.js +74 -0
  177. package/lib/groups/setRoleInfo.js +84 -0
  178. package/lib/groups/shout.js +58 -0
  179. package/lib/groups/unbanFromGroup.js +41 -0
  180. package/lib/index.js +212 -0
  181. package/lib/internal/levelOneCopy.js +16 -0
  182. package/lib/internal/queue.js +61 -0
  183. package/lib/internal/timeout.js +30 -0
  184. package/lib/internal/wrap.js +78 -0
  185. package/lib/inventory/getCollectibles.js +31 -0
  186. package/lib/inventory/getInventory.js +32 -0
  187. package/lib/inventory/getInventoryById.js +31 -0
  188. package/lib/inventory/getOwnership.js +47 -0
  189. package/lib/inventory/getUAIDs.js +47 -0
  190. package/lib/itemconfiguration/getGroupAssets.js +32 -0
  191. package/lib/options.js +26 -0
  192. package/lib/party/onPartyDeleted.js +53 -0
  193. package/lib/party/onPartyInvite.js +53 -0
  194. package/lib/party/onPartyJoinedGame.js +53 -0
  195. package/lib/party/onPartyLeftGame.js +53 -0
  196. package/lib/party/onPartySelfJoined.js +53 -0
  197. package/lib/party/onPartySelfLeft.js +53 -0
  198. package/lib/party/onPartyUserJoined.js +53 -0
  199. package/lib/party/onPartyUserLeft.js +53 -0
  200. package/lib/premiumfeatures/getPremium.js +46 -0
  201. package/lib/presence/getPresences.js +60 -0
  202. package/lib/privatemessages/getMessages.js +55 -0
  203. package/lib/privatemessages/message.js +75 -0
  204. package/lib/privatemessages/onMessage.js +89 -0
  205. package/lib/thumbnails/getLogo.js +56 -0
  206. package/lib/thumbnails/getPlayerThumbnail.js +120 -0
  207. package/lib/thumbnails/getThumbnails.js +92 -0
  208. package/lib/trades/acceptTrade.js +52 -0
  209. package/lib/trades/canTradeWith.js +43 -0
  210. package/lib/trades/counterTrade.js +78 -0
  211. package/lib/trades/declineTrade.js +52 -0
  212. package/lib/trades/getTradeInfo.js +47 -0
  213. package/lib/trades/getTrades.js +37 -0
  214. package/lib/trades/sendTrade.js +76 -0
  215. package/lib/users/getBlurb.js +37 -0
  216. package/lib/users/getIdFromUsername.js +56 -0
  217. package/lib/users/getPlayerInfo.js +128 -0
  218. package/lib/users/getUserInfo.js +35 -0
  219. package/lib/users/getUsernameFromId.js +45 -0
  220. package/lib/users/getUsernameHistory.js +42 -0
  221. package/lib/users/onBlurbChange.js +46 -0
  222. package/lib/users/searchUsers.js +41 -0
  223. package/lib/util/apiError.js +50 -0
  224. package/lib/util/clearSession.js +32 -0
  225. package/lib/util/generalRequest.js +61 -0
  226. package/lib/util/getAction.js +45 -0
  227. package/lib/util/getAuthenticatedUser.js +41 -0
  228. package/lib/util/getCurrentUser.js +58 -0
  229. package/lib/util/getGeneralToken.js +52 -0
  230. package/lib/util/getHash.js +29 -0
  231. package/lib/util/getInputs.js +37 -0
  232. package/lib/util/getPageResults.js +86 -0
  233. package/lib/util/getSenderUserId.js +30 -0
  234. package/lib/util/getSession.js +38 -0
  235. package/lib/util/getVerification.js +60 -0
  236. package/lib/util/getVerificationInputs.js +31 -0
  237. package/lib/util/http.js +138 -0
  238. package/lib/util/jar.js +25 -0
  239. package/lib/util/refreshCookie.js +52 -0
  240. package/lib/util/relog.js +81 -0
  241. package/lib/util/setOptions.js +54 -0
  242. package/lib/util/shortPoll.js +102 -0
  243. package/package.json +76 -0
  244. package/postinstall.mjs +1 -0
  245. package/settings.json +115 -0
  246. package/test/accountinformation.test.js +27 -0
  247. package/test/accountsettings.test.js +27 -0
  248. package/test/asset.test.js +81 -0
  249. package/test/assets/Great-White-Shark-Fin.rbxm +0 -0
  250. package/test/assets/KeyframeSequence.rbxm +0 -0
  251. package/test/avatar.test.js +164 -0
  252. package/test/badges.test.js +96 -0
  253. package/test/chat.test.js +104 -0
  254. package/test/datastore.test.js +105 -0
  255. package/test/develop.test.js +53 -0
  256. package/test/economy.test.js +143 -0
  257. package/test/friends.test.js +146 -0
  258. package/test/games.test.js +229 -0
  259. package/test/groups.test.js +405 -0
  260. package/test/inventory.test.js +98 -0
  261. package/test/itemconfiguration.test.js +24 -0
  262. package/test/premiumfeatures.test.js +17 -0
  263. package/test/presence.test.js +25 -0
  264. package/test/privatemessages.test.js +33 -0
  265. package/test/thumbnails.test.js +53 -0
  266. package/test/users.test.js +110 -0
  267. package/tutorials/Authentication.md +75 -0
  268. package/tutorials/Event Emitters.md +26 -0
  269. package/tutorials/Promises.md +86 -0
  270. package/tutorials/VPS Authentication.md +72 -0
  271. package/typings/index.d.ts +2639 -0
  272. package/typings/jsDocs.ts +1987 -0
@@ -0,0 +1,58 @@
1
+ // Includes
2
+ const http = require('../util/http.js').func
3
+ const getGeneralToken = require('../util/getGeneralToken.js').func
4
+ const RobloxAPIError = require('../util/apiError.js')
5
+
6
+ // Args
7
+ exports.required = ['group']
8
+ exports.optional = ['description', 'jar']
9
+
10
+ // Docs
11
+ /**
12
+ * 🔐 Update a group description
13
+ * @category Group
14
+ * @alias setGroupDescription
15
+ * @param {number} group - The id of the group.
16
+ * @param {string=} [description=""] - The new description for the group
17
+ * @returns {Promise<GroupDescriptionResult>}
18
+ * @example const noblox = require("noblox.js")
19
+ * // Login using your cookie
20
+ * noblox.setGroupDescription(1, "Group Description!")
21
+ **/
22
+
23
+ function changeGroupDesc (group, description = '', jar, xcsrf) {
24
+ return new Promise((resolve, reject) => {
25
+ const httpOpt = {
26
+ url: `https://groups.roblox.com/v1/groups/${group}/description`,
27
+ options: {
28
+ method: 'PATCH',
29
+ resolveWithFullResponse: true,
30
+ json: {
31
+ description
32
+ },
33
+ jar,
34
+ headers: {
35
+ 'X-CSRF-TOKEN': xcsrf
36
+ }
37
+ }
38
+ }
39
+
40
+ return http(httpOpt)
41
+ .then(function (res) {
42
+ if (res.statusCode === 200) {
43
+ resolve(res.body)
44
+ } else {
45
+ reject(new RobloxAPIError(res))
46
+ }
47
+ })
48
+ })
49
+ }
50
+
51
+ // Define
52
+ exports.func = function (args) {
53
+ const jar = args.jar
54
+ return getGeneralToken({ jar })
55
+ .then(function (xcsrf) {
56
+ return changeGroupDesc(args.group, args.description, args.jar, xcsrf)
57
+ })
58
+ }
@@ -0,0 +1,59 @@
1
+ // Includes
2
+ const http = require('../util/http.js').func
3
+ const getGeneralToken = require('../util/getGeneralToken.js').func
4
+ const RobloxAPIError = require('../util/apiError.js')
5
+
6
+ // Args
7
+ exports.required = ['group', 'name']
8
+ exports.optional = ['jar']
9
+
10
+ // Docs
11
+ /**
12
+ * 🔐 Update a group name. This method will trigger a Robux charge to your account, and can only be performed by the group
13
+ * owner.
14
+ * @category Group
15
+ * @alias setGroupName
16
+ * @param {number} group - The id of the group.
17
+ * @param {string=} name - The new name for the group
18
+ * @returns {Promise<GroupNameResult>}
19
+ * @example const noblox = require("noblox.js")
20
+ * // Login using your cookie
21
+ * noblox.setGroupName(1, "Cool group")
22
+ **/
23
+
24
+ function changeGroupName (group, name, jar, xcsrf) {
25
+ return new Promise((resolve, reject) => {
26
+ const httpOpt = {
27
+ url: `https://groups.roblox.com/v1/groups/${group}/name`,
28
+ options: {
29
+ method: 'PATCH',
30
+ resolveWithFullResponse: true,
31
+ json: {
32
+ name
33
+ },
34
+ jar,
35
+ headers: {
36
+ 'X-CSRF-TOKEN': xcsrf
37
+ }
38
+ }
39
+ }
40
+
41
+ return http(httpOpt)
42
+ .then(function (res) {
43
+ if (res.statusCode === 200) {
44
+ resolve(res.body)
45
+ } else {
46
+ reject(new RobloxAPIError(res))
47
+ }
48
+ })
49
+ })
50
+ }
51
+
52
+ // Define
53
+ exports.func = function (args) {
54
+ const jar = args.jar
55
+ return getGeneralToken({ jar })
56
+ .then(function (xcsrf) {
57
+ return changeGroupName(args.group, args.name, args.jar, xcsrf)
58
+ })
59
+ }
@@ -0,0 +1,74 @@
1
+ // Includes
2
+ const http = require('../util/http.js').func
3
+ const getGeneralToken = require('../util/getGeneralToken.js').func
4
+ const getRole = require('./getRole.js').func
5
+ const RobloxAPIError = require('../util/apiError.js')
6
+
7
+ // Args
8
+ exports.required = ['group', 'target', 'rank']
9
+ exports.optional = ['jar']
10
+
11
+ // Docs
12
+ /**
13
+ * 🔐 Change a user's rank.
14
+ * @category Group
15
+ * @alias setRank
16
+ * @param {number} group - The id of the group.
17
+ * @param {number} target - The id of the user whose rank is being changed.
18
+ * @param {number | string | Role} rank - The rank, roleset ID, name of the role, or the actual Role itself.
19
+ * @returns {Promise<Role>}
20
+ * @example const noblox = require("noblox.js")
21
+ * // Login using your cookie
22
+ * noblox.setRank(1, 1, "Customer")
23
+ **/
24
+
25
+ // Define
26
+ function setRank (jar, xcsrf, group, target, role) {
27
+ return new Promise((resolve, reject) => {
28
+ const httpOpt = {
29
+ url: `//groups.roblox.com/v1/groups/${group}/users/${target}`,
30
+ options: {
31
+ resolveWithFullResponse: true,
32
+ method: 'PATCH',
33
+ jar,
34
+ headers: {
35
+ 'Content-Type': 'application/json',
36
+ 'X-CSRF-TOKEN': xcsrf
37
+ },
38
+ body: JSON.stringify({
39
+ roleId: role.id
40
+ })
41
+ }
42
+ }
43
+ return http(httpOpt)
44
+ .then(function (res) {
45
+ if (res.statusCode === 200) {
46
+ resolve(role)
47
+ } else {
48
+ reject(new RobloxAPIError(res))
49
+ }
50
+ }).catch(error => reject(error))
51
+ })
52
+ }
53
+
54
+ function runWithToken (args) {
55
+ const jar = args.jar
56
+ return getGeneralToken({ jar })
57
+ .then(function (xcsrf) {
58
+ return setRank(jar, xcsrf, args.group, args.target, args.role)
59
+ })
60
+ }
61
+
62
+ exports.func = function (args) {
63
+ if (typeof args.rank === 'object') { // assumes they gave Role
64
+ args.role = args.rank
65
+ return runWithToken(args)
66
+ } else if (typeof args.rank === 'number' || typeof args.rank === 'string') {
67
+ return getRole({ group: args.group, roleQuery: args.rank }).then((role) => {
68
+ args.role = role
69
+ return runWithToken(args)
70
+ })
71
+ } else {
72
+ throw new Error('Please provide either a Role, rank, or role name to change the user\'s rank to')
73
+ }
74
+ }
@@ -0,0 +1,84 @@
1
+ // Includes
2
+ const http = require('../util/http.js').func
3
+ const getGeneralToken = require('../util/getGeneralToken.js').func
4
+ const getRole = require('./getRole.js').func
5
+
6
+ // Args
7
+ exports.required = ['group', 'role', 'newRoleInfo']
8
+ exports.optional = ['jar']
9
+
10
+ // Docs
11
+ /**
12
+ * 🔐 Update a role's information
13
+ * @category Group
14
+ * @alias setRoleInfo
15
+ * @param {number} group - The id of the group.
16
+ * @param {number | string | Role} role - The rank, roleset ID, name of the role, or the actual Role itself.
17
+ * @param {Role} newRoleInfo - The new info for the role
18
+ * @returns {Promise<Role>}
19
+ * @example const noblox = require("noblox.js")
20
+ * // Login using your cookie
21
+ * noblox.setRoleInfo(1, 2342243, )
22
+ **/
23
+
24
+ // Define
25
+ function setRoleInfo (jar, xcsrf, group, role, newRoleInfo) {
26
+ return new Promise((resolve, reject) => {
27
+ const httpOpt = {
28
+ url: `//groups.roblox.com/v1/groups/${group}/rolesets/${role.id}`,
29
+ options: {
30
+ resolveWithFullResponse: true,
31
+ method: 'PATCH',
32
+ jar,
33
+ headers: {
34
+ 'Content-Type': 'application/json',
35
+ 'X-CSRF-TOKEN': xcsrf
36
+ },
37
+ body: JSON.stringify({
38
+ name: newRoleInfo.name,
39
+ rank: newRoleInfo.rank,
40
+ description: newRoleInfo.description
41
+ })
42
+ }
43
+ }
44
+ return http(httpOpt)
45
+ .then(function (res) {
46
+ if (res.statusCode === 200) {
47
+ role.name = newRoleInfo.name
48
+ role.rank = newRoleInfo.rank
49
+ role.description = newRoleInfo.description
50
+
51
+ resolve(role)
52
+ } else {
53
+ const body = JSON.parse(res.body) || {}
54
+ if (body.errors && body.errors.length > 0) {
55
+ const errors = body.errors.map((e) => {
56
+ return e.message
57
+ })
58
+ reject(new Error(`${res.statusCode} ${errors.join(', ')}`))
59
+ }
60
+ }
61
+ }).catch(error => reject(error))
62
+ })
63
+ }
64
+
65
+ function runWithToken (args) {
66
+ const jar = args.jar
67
+ return getGeneralToken({ jar })
68
+ .then(function (xcsrf) {
69
+ return setRoleInfo(jar, xcsrf, args.group, args.role, args.newRoleInfo)
70
+ })
71
+ }
72
+
73
+ exports.func = function (args) {
74
+ if (typeof args.role === 'object') { // assumes they gave Role
75
+ return runWithToken(args)
76
+ } else if (typeof args.role === 'number' || typeof args.role === 'string') {
77
+ return getRole({ group: args.group, roleQuery: args.role }).then((role) => {
78
+ args.role = role
79
+ return runWithToken(args)
80
+ })
81
+ } else {
82
+ throw new Error('Please provide either a Role, rank, or role name to change its info')
83
+ }
84
+ }
@@ -0,0 +1,58 @@
1
+ // Includes
2
+ const http = require('../util/http.js').func
3
+ const getGeneralToken = require('../util/getGeneralToken.js').func
4
+ const RobloxAPIError = require('../util/apiError.js')
5
+
6
+ // Args
7
+ exports.required = ['group']
8
+ exports.optional = ['message', 'jar']
9
+
10
+ // Docs
11
+ /**
12
+ * 🔐 Change a group's shout.
13
+ * @category Group
14
+ * @alias shout
15
+ * @param {number} group - The id of the group.
16
+ * @param {string=} [message=""] - The message to shout
17
+ * @returns {Promise<GroupShout>}
18
+ * @example const noblox = require("noblox.js")
19
+ * // Login using your cookie
20
+ * noblox.shout(1, "Hello world!")
21
+ **/
22
+
23
+ function shoutOnGroup (group, message = '', jar, xcsrf) {
24
+ return new Promise((resolve, reject) => {
25
+ const httpOpt = {
26
+ url: `https://groups.roblox.com/v1/groups/${group}/status`,
27
+ options: {
28
+ method: 'PATCH',
29
+ resolveWithFullResponse: true,
30
+ json: {
31
+ message
32
+ },
33
+ jar,
34
+ headers: {
35
+ 'X-CSRF-TOKEN': xcsrf
36
+ }
37
+ }
38
+ }
39
+
40
+ return http(httpOpt)
41
+ .then(function (res) {
42
+ if (res.statusCode === 200) {
43
+ resolve(res.body)
44
+ } else {
45
+ reject(new RobloxAPIError(res))
46
+ }
47
+ }).catch(error => reject(error))
48
+ })
49
+ }
50
+
51
+ // Define
52
+ exports.func = function (args) {
53
+ const jar = args.jar
54
+ return getGeneralToken({ jar })
55
+ .then(function (xcsrf) {
56
+ return shoutOnGroup(args.group, args.message, args.jar, xcsrf)
57
+ })
58
+ }
@@ -0,0 +1,41 @@
1
+ // Includes
2
+ const http = require('../util/http.js')
3
+ const getGeneralToken = require('../util/getGeneralToken.js')
4
+ const RobloxAPIError = require('../util/apiError.js')
5
+
6
+ // Args
7
+ exports.required = ['groupId', 'userId']
8
+ exports.optional = ['jar']
9
+
10
+ // Docs
11
+ /**
12
+ * 🔐 Unbans a user from the specified group.
13
+ * @alias unbanFromGroup
14
+ * @param {number} groupId - The ID of the group
15
+ * @param {number} userId - The ID of the target user
16
+ * @returns {Promise<void>}
17
+ * @example const noblox = require("noblox.js")
18
+ * // Log in
19
+ * await noblox.unbanFromGroup(1, 2)
20
+ **/
21
+
22
+ // Define
23
+ exports.func = async function (args) {
24
+ const { groupId, jar, userId } = args
25
+ const token = await getGeneralToken({ jar })
26
+
27
+ const response = await http({
28
+ url: `//groups.roblox.com/v1/groups/${groupId}/bans/${userId}`,
29
+ options: {
30
+ method: 'DELETE',
31
+ jar,
32
+ headers: {
33
+ 'x-csrf-token': token
34
+ }
35
+ }
36
+ })
37
+
38
+ if (response.statusCode !== 200) {
39
+ throw new RobloxAPIError(response)
40
+ }
41
+ }
package/lib/index.js ADDED
@@ -0,0 +1,212 @@
1
+ const noblox = {}
2
+
3
+ noblox.getUserSocialLinks = require('./accountinformation/getUserSocialLinks.js')
4
+ noblox.block = require('./accountsettings/block.js')
5
+ noblox.unblock = require('./accountsettings/unblock.js')
6
+ noblox.deleteFromInventory = require('./asset/deleteFromInventory.js')
7
+ noblox.getGamePassProductInfo = require('./asset/getGamePassProductInfo.js')
8
+ noblox.getProductInfo = require('./asset/getProductInfo.js')
9
+ noblox.uploadAnimation = require('./asset/uploadAnimation.js')
10
+ noblox.uploadItem = require('./asset/uploadItem.js')
11
+ noblox.uploadModel = require('./asset/uploadModel.js')
12
+ noblox.avatarRules = require('./avatar/avatarRules.js')
13
+ noblox.currentlyWearing = require('./avatar/currentlyWearing.js')
14
+ noblox.getAvatar = require('./avatar/getAvatar.js')
15
+ noblox.getCurrentAvatar = require('./avatar/getCurrentAvatar.js')
16
+ noblox.getRecentItems = require('./avatar/getRecentItems.js')
17
+ noblox.outfitDetails = require('./avatar/outfitDetails.js')
18
+ noblox.outfits = require('./avatar/outfits.js')
19
+ noblox.redrawAvatar = require('./avatar/redrawAvatar.js')
20
+ noblox.removeAssetId = require('./avatar/removeAssetId.js')
21
+ noblox.setAvatarBodyColors = require('./avatar/setAvatarBodyColors.js')
22
+ noblox.setAvatarScales = require('./avatar/setAvatarScales.js')
23
+ noblox.setPlayerAvatarType = require('./avatar/setPlayerAvatarType.js')
24
+ noblox.setWearingAssets = require('./avatar/setWearingAssets.js')
25
+ noblox.wearAssetId = require('./avatar/wearAssetId.js')
26
+ noblox.getAwardedTimestamps = require('./badges/getAwardedTimestamps.js')
27
+ noblox.getBadgeInfo = require('./badges/getBadgeInfo.js')
28
+ noblox.getGameBadges = require('./badges/getGameBadges.js')
29
+ noblox.getPlayerBadges = require('./badges/getPlayerBadges.js')
30
+ noblox.updateBadgeInfo = require('./badges/updateBadgeInfo.js')
31
+ noblox.addUsersToConversation = require('./chat/addUsersToConversation.js')
32
+ noblox.chatSettings = require('./chat/chatSettings.js')
33
+ noblox.getChatMessages = require('./chat/getChatMessages.js')
34
+ noblox.getConversations = require('./chat/getConversations.js')
35
+ noblox.getRolloutSettings = require('./chat/getRolloutSettings.js')
36
+ noblox.getUnreadConversationCount = require('./chat/getUnreadConversationCount.js')
37
+ noblox.getUnreadMessages = require('./chat/getUnreadMessages.js')
38
+ noblox.getUserConversations = require('./chat/getUserConversations.js')
39
+ noblox.markChatAsRead = require('./chat/markChatAsRead.js')
40
+ noblox.markChatAsSeen = require('./chat/markChatAsSeen.js')
41
+ noblox.multiGetLatestMessages = require('./chat/multiGetLatestMessages.js')
42
+ noblox.onNewConversation = require('./chat/onNewConversation.js')
43
+ noblox.onNewMessage = require('./chat/onNewMessage.js')
44
+ noblox.onNewMessageBySelf = require('./chat/onNewMessageBySelf.js')
45
+ noblox.onUserOnline = require('./chat/onUserOnline.js')
46
+ noblox.onUserTyping = require('./chat/onUserTyping.js')
47
+ noblox.removeFromGroupConversation = require('./chat/removeFromGroupConversation.js')
48
+ noblox.renameGroupConversation = require('./chat/renameGroupConversation.js')
49
+ noblox.sendChatMessage = require('./chat/sendChatMessage.js')
50
+ noblox.setChatUserTyping = require('./chat/setChatUserTyping.js')
51
+ noblox.start121Conversation = require('./chat/start121Conversation.js')
52
+ noblox.startCloudEditConversation = require('./chat/startCloudEditConversation.js')
53
+ noblox.startGroupConversation = require('./chat/startGroupConversation.js')
54
+ noblox.onNotification = require('./client/onNotification.js')
55
+ noblox.setAPIKey = require('./client/setAPIKey.js')
56
+ noblox.setCookie = require('./client/setCookie.js')
57
+ noblox.deleteDatastoreEntry = require('./datastores/deleteDatastoreEntry.js')
58
+ noblox.getDatastoreEntry = require('./datastores/getDatastoreEntry.js')
59
+ noblox.getDatastoreEntryVersions = require('./datastores/getDatastoreEntryVersions.js')
60
+ noblox.getDatastoreKeys = require('./datastores/getDatastoreKeys.js')
61
+ noblox.getDatastores = require('./datastores/getDatastores.js')
62
+ noblox.incrementDatastoreEntry = require('./datastores/incrementDatastoreEntry.js')
63
+ noblox.setDatastoreEntry = require('./datastores/setDatastoreEntry.js')
64
+ noblox.canManage = require('./develop/canManage.js')
65
+ noblox.configureItem = require('./develop/configureItem.js')
66
+ noblox.updateUniverse = require('./develop/updateUniverse.js')
67
+ noblox.updateUniverseAccess = require('./develop/updateUniverseAccess.js')
68
+ noblox.getGroupFunds = require('./economy/getGroupFunds.js')
69
+ noblox.getGroupRevenueSummary = require('./economy/getGroupRevenueSummary.js')
70
+ noblox.getGroupTransactions = require('./economy/getGroupTransactions.js')
71
+ noblox.getResaleData = require('./economy/getResaleData.js')
72
+ noblox.getResellers = require('./economy/getResellers.js')
73
+ noblox.getUserFunds = require('./economy/getUserFunds.js')
74
+ noblox.getUserTransactions = require('./economy/getUserTransactions.js')
75
+ noblox.onGroupTransaction = require('./economy/onGroupTransaction.js')
76
+ noblox.acceptFriendRequest = require('./friends/acceptFriendRequest.js')
77
+ noblox.declineAllFriendRequests = require('./friends/declineAllFriendRequests.js')
78
+ noblox.declineFriendRequest = require('./friends/declineFriendRequest.js')
79
+ noblox.getFollowerCount = require('./friends/getFollowerCount.js')
80
+ noblox.getFollowers = require('./friends/getFollowers.js')
81
+ noblox.getFollowingCount = require('./friends/getFollowingCount.js')
82
+ noblox.getFollowings = require('./friends/getFollowings.js')
83
+ noblox.getFriendCount = require('./friends/getFriendCount.js')
84
+ noblox.getFriendRequests = require('./friends/getFriendRequests.js')
85
+ noblox.getFriends = require('./friends/getFriends.js')
86
+ noblox.onFriendRequest = require('./friends/onFriendRequest.js')
87
+ noblox.removeFriend = require('./friends/removeFriend.js')
88
+ noblox.sendFriendRequest = require('./friends/sendFriendRequest.js')
89
+ noblox.unfollow = require('./friends/unfollow.js')
90
+ noblox.addDeveloperProduct = require('./games/addDeveloperProduct.js')
91
+ noblox.configureGamePass = require('./games/configureGamePass.js')
92
+ noblox.getDeveloperProducts = require('./games/getDeveloperProducts.js')
93
+ noblox.getGameInstances = require('./games/getGameInstances.js')
94
+ noblox.getGamePasses = require('./games/getGamePasses.js')
95
+ noblox.getGameRevenue = require('./games/getGameRevenue.js')
96
+ noblox.getGameSocialLinks = require('./games/getGameSocialLinks.js')
97
+ noblox.getGroupGames = require('./games/getGroupGames.js')
98
+ noblox.getPlaceInfo = require('./games/getPlaceInfo.js')
99
+ noblox.getUniverseInfo = require('./games/getUniverseInfo.js')
100
+ noblox.sendUserNotification = require('./games/sendUserNotification.js')
101
+ noblox.publishToTopic = require('./games/publishToTopic.js')
102
+ noblox.updateDeveloperProduct = require('./games/updateDeveloperProduct.js')
103
+ noblox.changeRank = require('./groups/changeRank.js')
104
+ noblox.deleteWallPost = require('./groups/deleteWallPost.js')
105
+ noblox.deleteWallPostsByUser = require('./groups/deleteWallPostsByUser.js')
106
+ noblox.demote = require('./groups/demote.js')
107
+ noblox.exile = require('./groups/exile.js')
108
+ noblox.getAuditLog = require('./groups/getAuditLog.js')
109
+ noblox.getGroup = require('./groups/getGroup.js')
110
+ noblox.getGroupPayoutEligibility = require('./economy/getGroupPayoutEligibility.js')
111
+ noblox.getGroupSocialLinks = require('./groups/getGroupSocialLinks.js')
112
+ noblox.getGroups = require('./groups/getGroups.js')
113
+ noblox.getJoinRequest = require('./groups/getJoinRequest.js')
114
+ noblox.getJoinRequests = require('./groups/getJoinRequests.js')
115
+ noblox.getPlayers = require('./groups/getPlayers.js')
116
+ noblox.getRankInGroup = require('./groups/getRankInGroup.js')
117
+ noblox.getRankNameInGroup = require('./groups/getRankNameInGroup.js')
118
+ noblox.getRole = require('./groups/getRole.js')
119
+ noblox.getRolePermissions = require('./groups/getRolePermissions.js')
120
+ noblox.getRoles = require('./groups/getRoles.js')
121
+ noblox.getShout = require('./groups/getShout.js')
122
+ noblox.getWall = require('./groups/getWall.js')
123
+ noblox.groupPayout = require('./groups/groupPayout.js')
124
+ noblox.handleJoinRequest = require('./groups/handleJoinRequest.js')
125
+ noblox.handleJoinRequests = require('./groups/handleJoinRequests.js')
126
+ noblox.leaveGroup = require('./groups/leaveGroup.js')
127
+ noblox.onAuditLog = require('./groups/onAuditLog.js')
128
+ noblox.onJoinRequest = require('./groups/onJoinRequest.js')
129
+ noblox.onJoinRequestHandle = require('./groups/onJoinRequestHandle.js')
130
+ noblox.onShout = require('./groups/onShout.js')
131
+ noblox.onWallPost = require('./groups/onWallPost.js')
132
+ noblox.promote = require('./groups/promote.js')
133
+ noblox.searchGroups = require('./groups/searchGroups.js')
134
+ noblox.setGroupDescription = require('./groups/setGroupDescription.js')
135
+ noblox.setGroupName = require('./groups/setGroupName.js')
136
+ noblox.setRank = require('./groups/setRank.js')
137
+ noblox.setRoleInfo = require('./groups/setRoleInfo.js')
138
+ noblox.shout = require('./groups/shout.js')
139
+ noblox.index = require('./index.js')
140
+ noblox.levelOneCopy = require('./internal/levelOneCopy.js')
141
+ noblox.queue = require('./internal/queue.js')
142
+ noblox.timeout = require('./internal/timeout.js')
143
+ noblox.wrap = require('./internal/wrap.js')
144
+ noblox.getCollectibles = require('./inventory/getCollectibles.js')
145
+ noblox.getInventory = require('./inventory/getInventory.js')
146
+ noblox.getInventoryById = require('./inventory/getInventoryById.js')
147
+ noblox.getOwnership = require('./inventory/getOwnership.js')
148
+ noblox.getUAIDs = require('./inventory/getUAIDs.js')
149
+ noblox.getGroupAssets = require('./itemconfiguration/getGroupAssets.js')
150
+ noblox.options = require('./options.js')
151
+ noblox.onPartyDeleted = require('./party/onPartyDeleted.js')
152
+ noblox.onPartyInvite = require('./party/onPartyInvite.js')
153
+ noblox.onPartyJoinedGame = require('./party/onPartyJoinedGame.js')
154
+ noblox.onPartyLeftGame = require('./party/onPartyLeftGame.js')
155
+ noblox.onPartySelfJoined = require('./party/onPartySelfJoined.js')
156
+ noblox.onPartySelfLeft = require('./party/onPartySelfLeft.js')
157
+ noblox.onPartyUserJoined = require('./party/onPartyUserJoined.js')
158
+ noblox.onPartyUserLeft = require('./party/onPartyUserLeft.js')
159
+ noblox.getPremium = require('./premiumfeatures/getPremium.js')
160
+ noblox.getPresences = require('./presence/getPresences.js')
161
+ noblox.getMessages = require('./privatemessages/getMessages.js')
162
+ noblox.message = require('./privatemessages/message.js')
163
+ noblox.onMessage = require('./privatemessages/onMessage.js')
164
+ noblox.getLogo = require('./thumbnails/getLogo.js')
165
+ noblox.getPlayerThumbnail = require('./thumbnails/getPlayerThumbnail.js')
166
+ noblox.getThumbnails = require('./thumbnails/getThumbnails.js')
167
+ noblox.acceptTrade = require('./trades/acceptTrade.js')
168
+ noblox.canTradeWith = require('./trades/canTradeWith.js')
169
+ noblox.counterTrade = require('./trades/counterTrade.js')
170
+ noblox.declineTrade = require('./trades/declineTrade.js')
171
+ noblox.getTradeInfo = require('./trades/getTradeInfo.js')
172
+ noblox.getTrades = require('./trades/getTrades.js')
173
+ noblox.sendTrade = require('./trades/sendTrade.js')
174
+ noblox.getBlurb = require('./users/getBlurb.js')
175
+ noblox.getIdFromUsername = require('./users/getIdFromUsername.js')
176
+ noblox.getPlayerInfo = require('./users/getPlayerInfo.js')
177
+ noblox.getUserInfo = require('./users/getUserInfo.js')
178
+ noblox.getUsernameFromId = require('./users/getUsernameFromId.js')
179
+ noblox.getUsernameHistory = require('./users/getUsernameHistory.js')
180
+ noblox.onBlurbChange = require('./users/onBlurbChange.js')
181
+ noblox.searchUsers = require('./users/searchUsers.js')
182
+ noblox.clearSession = require('./util/clearSession.js')
183
+ noblox.generalRequest = require('./util/generalRequest.js')
184
+ noblox.getAction = require('./util/getAction.js')
185
+ noblox.getAuthenticatedUser = require('./util/getAuthenticatedUser.js')
186
+ noblox.getCurrentUser = require('./util/getCurrentUser.js')
187
+ noblox.getGeneralToken = require('./util/getGeneralToken.js')
188
+ noblox.getHash = require('./util/getHash.js')
189
+ noblox.getInputs = require('./util/getInputs.js')
190
+ noblox.getPageResults = require('./util/getPageResults.js')
191
+ noblox.getSenderUserId = require('./util/getSenderUserId.js')
192
+ noblox.getSession = require('./util/getSession.js')
193
+ noblox.getVerification = require('./util/getVerification.js')
194
+ noblox.getVerificationInputs = require('./util/getVerificationInputs.js')
195
+ noblox.http = require('./util/http.js')
196
+ noblox.jar = require('./util/jar.js')
197
+ noblox.refreshCookie = require('./util/refreshCookie.js')
198
+ noblox.relog = require('./util/relog.js')
199
+ noblox.setOptions = require('./util/setOptions.js')
200
+ noblox.shortPoll = require('./util/shortPoll.js')
201
+
202
+ for (const name in noblox) {
203
+ const exporter = noblox[name]
204
+ if (Object.prototype.hasOwnProperty.call(exporter, 'func')) {
205
+ module.exports[name] = noblox.wrap.wrapExport(exporter.func, exporter.required || [], exporter.optional || [])
206
+ } else {
207
+ module.exports[name] = noblox[name]
208
+ }
209
+ }
210
+
211
+ exports.options = require('./options.js')
212
+ exports.settings = require('../settings.json')
@@ -0,0 +1,16 @@
1
+ // Define
2
+ function shallowCopy (obj) {
3
+ return Object.assign(obj instanceof Array ? [] : {}, obj)
4
+ }
5
+
6
+ module.exports = function (obj) {
7
+ const newObj = shallowCopy(obj)
8
+ for (const index in obj) {
9
+ let value = obj[index]
10
+ if (value instanceof Object) {
11
+ value = shallowCopy(value)
12
+ }
13
+ newObj[index] = value
14
+ }
15
+ return newObj
16
+ }
@@ -0,0 +1,61 @@
1
+ // Includes
2
+ const options = require('../options.js')
3
+
4
+ // Define
5
+ module.exports = function (type, index, func, handler) {
6
+ const group = options.queue[type]
7
+ if (!group[index]) {
8
+ group[index] = {
9
+ jobs: []
10
+ }
11
+ }
12
+ const home = group[index]
13
+ function run (time) {
14
+ return function (resolve, reject) {
15
+ setTimeout(function () {
16
+ func().then(resolve).catch(reject)
17
+ }, time)
18
+ }
19
+ }
20
+ const jobs = home.jobs
21
+ function deactivate (err) {
22
+ jobs.shift()
23
+ if (!handler(err)) {
24
+ home.last = Date.now()
25
+ }
26
+ }
27
+ function next () {
28
+ jobs.shift()
29
+ home.last = Date.now()
30
+ }
31
+ if (group.delay > 0) {
32
+ const delay = group.delay
33
+ const last = home.last
34
+ if (jobs.length === 0) {
35
+ let item
36
+ const diff = Date.now() - last
37
+ if (!last || diff > delay) {
38
+ item = func()
39
+ } else {
40
+ item = new Promise(run(delay - diff))
41
+ }
42
+ jobs.push(item)
43
+ item.then(next).catch(deactivate)
44
+ return item
45
+ } else {
46
+ const job = jobs[jobs.length - 1].then(function () {
47
+ const item = new Promise(run(delay))
48
+ item.then(next).catch(deactivate)
49
+ return item
50
+ }).catch(function (err) {
51
+ const item = handler && handler(err) ? func() : new Promise(run(delay))
52
+ item.then(next).catch(deactivate)
53
+ return item
54
+ })
55
+ jobs.push(job)
56
+ return job
57
+ }
58
+ } else {
59
+ return func()
60
+ }
61
+ }