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,65 @@
1
+ const http = require('../util/http.js').func
2
+ const RobloxAPIError = require('../util/apiError.js')
3
+
4
+ exports.required = ['universeId', 'userId', 'assetId', 'parameters']
5
+ exports.optional = ['jar']
6
+
7
+ // Docs
8
+ /**
9
+ * ☁️ Send a universe notification to a user.
10
+ * @category Game
11
+ * @alias sendUserNotification
12
+ * @param {number} universeId - The id of the universe.
13
+ * @param {number} userId - The id of the target player.
14
+ * @param {string} assetId - The asset id of the notification.
15
+ * @param {UserNotificationPayloadParameters} parameters - The notification parameters.
16
+ * @returns {Promise<boolean>}
17
+ * @example const noblox = require("noblox.js")
18
+ * // Set API key
19
+ * const parameters = {
20
+ * myMessage: { stringValue: "Hello world!" }
21
+ * }
22
+ * const assetId = "774d62e5-3414-b84a-89dd-77d96f1a3d33"
23
+ * noblox.sendUserNotification(4434277335, 1210019099, assetId, parameters)
24
+ **/
25
+
26
+ function sendUserNotification (universeId, userId, assetId, parameters, jar) {
27
+ return new Promise((resolve, reject) => {
28
+ const httpOpt = {
29
+ url: `//apis.roblox.com/cloud/v2/users/${userId}/notifications`,
30
+ options: {
31
+ json: true,
32
+ resolveWithFullResponse: true,
33
+ jar,
34
+ method: 'POST',
35
+ body: {
36
+ source: {
37
+ universe: `universes/${universeId}`
38
+ },
39
+ payload: {
40
+ type: 'MOMENT',
41
+ messageId: assetId,
42
+ parameters
43
+ }
44
+ },
45
+ headers: {
46
+ 'Content-Type': 'application/json'
47
+ }
48
+ }
49
+ }
50
+
51
+ return http(httpOpt)
52
+ .then(function (res) {
53
+ if (res.statusCode === 200) {
54
+ resolve(true)
55
+ } else {
56
+ reject(new RobloxAPIError(res))
57
+ }
58
+ })
59
+ .catch(reject)
60
+ })
61
+ }
62
+
63
+ exports.func = function (args) {
64
+ return sendUserNotification(args.universeId, args.userId, args.assetId, args.parameters, args.jar)
65
+ }
@@ -0,0 +1,56 @@
1
+ const http = require('../util/http.js').func
2
+ const getGeneralToken = require('../util/getGeneralToken.js').func
3
+ const RobloxAPIError = require('../util/apiError.js')
4
+
5
+ exports.required = ['universeId', 'productId', 'priceInRobux']
6
+ exports.optional = ['name', 'description', 'jar']
7
+
8
+ // Docs
9
+ /**
10
+ * 🔐 Update a developer product.
11
+ * @category Game
12
+ * @alias updateDeveloperProduct
13
+ * @param {number} universeId - The id of the universe.
14
+ * @param {number} productId - The id of the product.
15
+ * @param {number} priceInRobux - The new price of the product.
16
+ * @param {string=} name - The new name of the product.
17
+ * @param {string=} description - The new description of the product.
18
+ * @returns {Promise<void>}
19
+ * @example const noblox = require("noblox.js")
20
+ * // Login using your cookie
21
+ * noblox.updateDeveloperProduct(1, 2, 10, "An Updated Developer Product", "My new updated product.")
22
+ **/
23
+
24
+ function updateDeveloperProduct (universeId, productId, priceInRobux, name, description, jar, token) {
25
+ return new Promise((resolve, reject) => {
26
+ return http({
27
+ url: `//apis.roblox.com/developer-products/v1/universes/${universeId}/developerproducts/${productId}/update`,
28
+ options: {
29
+ method: 'POST',
30
+ jar,
31
+ headers: {
32
+ 'X-CSRF-TOKEN': token
33
+ },
34
+ json: {
35
+ Name: name,
36
+ Description: description,
37
+ PriceInRobux: priceInRobux
38
+ },
39
+ resolveWithFullResponse: true
40
+ }
41
+ }).then((res) => {
42
+ if (res.statusCode === 200) {
43
+ resolve(res.body)
44
+ } else {
45
+ reject(new RobloxAPIError(res))
46
+ }
47
+ }).catch(reject)
48
+ })
49
+ }
50
+
51
+ exports.func = function ({ universeId, productId, priceInRobux, name, description, jar }) {
52
+ return getGeneralToken({ jar })
53
+ .then((token) => {
54
+ return updateDeveloperProduct(universeId, productId, priceInRobux, name, description, jar, token)
55
+ })
56
+ }
@@ -0,0 +1,47 @@
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
+ * 🔐 Bans a user from the specified group.
13
+ * @alias banFromGroup
14
+ * @param {number} groupId - The ID of the group
15
+ * @param {number} userId - The ID of the target user
16
+ * @returns {Promise<GroupBan>}
17
+ * @example const noblox = require("noblox.js")
18
+ * // Log in
19
+ * await noblox.banFromGroup(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: 'POST',
31
+ jar,
32
+ headers: {
33
+ 'x-csrf-token': token
34
+ },
35
+ resolveWithFullResponse: true
36
+ }
37
+ })
38
+
39
+ if (response.statusCode !== 200) {
40
+ throw new RobloxAPIError(response)
41
+ }
42
+
43
+ const body = JSON.parse(response.body)
44
+ body.created = new Date(body.created)
45
+
46
+ return body
47
+ }
@@ -0,0 +1,59 @@
1
+ // Includes
2
+ const setRank = require('./setRank.js').func
3
+ const getRoles = require('./getRoles.js').func
4
+ const getRankNameInGroup = require('./getRankNameInGroup.js').func
5
+
6
+ // Args
7
+ exports.required = ['group', 'target', 'change']
8
+ exports.optional = ['jar']
9
+
10
+ // Docs
11
+ /**
12
+ * 🔐 Change a user's rank.
13
+ * @category Group
14
+ * @alias changeRank
15
+ * @param {number} groupId - The id of the group.
16
+ * @param {number} target - The userId of the target.
17
+ * @param {number} change - The change in rank (1 = one rank higher, -1 = one rank lower)
18
+ * @returns {Promise<ChangeRankResult>}
19
+ * @example const noblox = require("noblox.js")
20
+ * // Login using your cookie
21
+ * noblox.changeRank(1, 2, -1)
22
+ **/
23
+
24
+ // Define
25
+ exports.func = function (args) {
26
+ const group = args.group
27
+ const target = args.target
28
+ const amount = args.change
29
+ const jar = args.jar
30
+ return getRankNameInGroup({ group, userId: target })
31
+ .then(function (rank) {
32
+ if (rank === 'Guest') {
33
+ throw new Error('Target user is not in group')
34
+ }
35
+ return getRoles({ group })
36
+ .then(function (roles) {
37
+ for (let i = 0; i < roles.length; i++) {
38
+ const role = roles[i]
39
+ const thisRank = role.name
40
+
41
+ if (thisRank === rank) {
42
+ const change = i + amount
43
+ const found = roles[change]
44
+
45
+ if (!found) {
46
+ throw new Error('Rank change is out of range')
47
+ } else if (found.name === 'Guest' || found.rank === 0) {
48
+ throw new Error('Group members cannot be demoted to guest.')
49
+ }
50
+
51
+ return setRank({ group, target, rank: found.id, jar })
52
+ .then(function () {
53
+ return { newRole: found, oldRole: role }
54
+ })
55
+ }
56
+ }
57
+ })
58
+ })
59
+ }
@@ -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', ['postId', 'post']]
8
+ exports.optional = ['jar']
9
+
10
+ // Docs
11
+ /**
12
+ * 🔐 Delete a wall post.
13
+ * @category Group
14
+ * @alias deleteWallPost
15
+ * @param {number} group - The id of the group.
16
+ * @param {number} postId - The id of the post to delete.
17
+ * @returns {Promise<void>}
18
+ * @example const noblox = require("noblox.js")
19
+ * // Login using your cookie
20
+ * noblox.deleteWallPost(1, 2)
21
+ **/
22
+
23
+ // Define
24
+ function deleteWallPost (jar, token, group, postId) {
25
+ return new Promise((resolve, reject) => {
26
+ const httpOpt = {
27
+ url: `//groups.roblox.com/v1/groups/${group}/wall/posts/${postId}`,
28
+ options: {
29
+ method: 'DELETE',
30
+ jar,
31
+ headers: {
32
+ 'X-CSRF-TOKEN': token
33
+ },
34
+ resolveWithFullResponse: true
35
+ }
36
+ }
37
+ return http(httpOpt)
38
+ .then(function (res) {
39
+ if (res.statusCode === 200) {
40
+ resolve()
41
+ } else {
42
+ reject(new RobloxAPIError(res))
43
+ }
44
+ }).catch(error => reject(error))
45
+ })
46
+ }
47
+
48
+ exports.func = function (args) {
49
+ const group = args.group
50
+ const jar = args.jar
51
+ return getGeneralToken({ jar })
52
+ .then(function (xcsrf) {
53
+ if (args.post) {
54
+ return deleteWallPost(jar, xcsrf, group, args.post.id)
55
+ } else {
56
+ return deleteWallPost(jar, xcsrf, group, args.postId)
57
+ }
58
+ })
59
+ }
@@ -0,0 +1,55 @@
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', 'userId']
8
+ exports.optional = ['jar']
9
+
10
+ // Docs
11
+ /**
12
+ * 🔐 Removes all wall posts sent by the provided user.
13
+ * @category Group
14
+ * @alias deleteWallPostsByUser
15
+ * @param {number} group - The id of the group.
16
+ * @param {number} userId - The userId of the user having their posts removed.
17
+ * @returns {Promise<void>}
18
+ * @example const noblox = require("noblox.js")
19
+ * // Login using your cookie
20
+ * noblox.deleteWallPostsByUser(1, 2)
21
+ **/
22
+
23
+ function deleteWallPostsByUser (group, userId, jar, xcsrf) {
24
+ return new Promise((resolve, reject) => {
25
+ const httpOpt = {
26
+ url: `https://groups.roblox.com/v1/groups/${group}/wall/users/${userId}/posts`,
27
+ options: {
28
+ method: 'DELETE',
29
+ resolveWithFullResponse: true,
30
+ jar,
31
+ headers: {
32
+ 'X-CSRF-TOKEN': xcsrf
33
+ }
34
+ }
35
+ }
36
+
37
+ return http(httpOpt)
38
+ .then(function (res) {
39
+ if (res.statusCode !== 200) {
40
+ reject(new RobloxAPIError(res))
41
+ } else {
42
+ resolve()
43
+ }
44
+ }).catch(error => reject(error))
45
+ })
46
+ }
47
+
48
+ // Define
49
+ exports.func = function (args) {
50
+ const jar = args.jar
51
+ return getGeneralToken({ jar })
52
+ .then(function (xcsrf) {
53
+ return deleteWallPostsByUser(args.group, args.userId, args.jar, xcsrf)
54
+ })
55
+ }
@@ -0,0 +1,25 @@
1
+ // Includes
2
+ const changeRank = require('./changeRank.js').func
3
+
4
+ // Args
5
+ exports.required = ['group', 'target']
6
+ exports.optional = ['jar']
7
+
8
+ // Docs
9
+ /**
10
+ * 🔐 Demote a user.
11
+ * @category Group
12
+ * @alias demote
13
+ * @param {number} group - The id of the group.
14
+ * @param {number} target - The userId of the user being demoted.
15
+ * @returns {Promise<ChangeRankResult>}
16
+ * @example const noblox = require("noblox.js")
17
+ * // Login using your cookie
18
+ * noblox.demote(1, 2)
19
+ **/
20
+
21
+ // Define
22
+ exports.func = function (args) {
23
+ args.change = -1
24
+ return changeRank(args)
25
+ }
@@ -0,0 +1,55 @@
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', 'target']
8
+ exports.optional = ['jar']
9
+
10
+ // Docs
11
+ /**
12
+ * 🔐 Exile a user from a group.
13
+ * @category Group
14
+ * @alias exile
15
+ * @param {number} group - The id of the group.
16
+ * @param {number} target - The userId of the user being exiled.
17
+ * @returns {Promise<void>}
18
+ * @example const noblox = require("noblox.js")
19
+ * // Login using your cookie
20
+ * noblox.exile(1, 2)
21
+ **/
22
+
23
+ function exileUser (group, target, jar, xcsrf) {
24
+ return new Promise((resolve, reject) => {
25
+ const httpOpt = {
26
+ url: `https://groups.roblox.com/v1/groups/${group}/users/${target}`,
27
+ options: {
28
+ method: 'DELETE',
29
+ resolveWithFullResponse: true,
30
+ jar,
31
+ headers: {
32
+ 'X-CSRF-TOKEN': xcsrf
33
+ }
34
+ }
35
+ }
36
+
37
+ return http(httpOpt)
38
+ .then(function (res) {
39
+ if (res.statusCode !== 200) {
40
+ reject(new RobloxAPIError(res))
41
+ } else {
42
+ resolve()
43
+ }
44
+ }).catch(error => reject(error))
45
+ })
46
+ }
47
+
48
+ // Define
49
+ exports.func = function (args) {
50
+ const jar = args.jar
51
+ return getGeneralToken({ jar })
52
+ .then(function (xcsrf) {
53
+ return exileUser(args.group, args.target, args.jar, xcsrf)
54
+ })
55
+ }
@@ -0,0 +1,64 @@
1
+ // Includes
2
+ const http = require('../util/http.js').func
3
+ const RobloxAPIError = require('../util/apiError.js')
4
+
5
+ exports.required = ['group']
6
+ exports.optional = ['actionType', 'userId', 'sortOrder', 'limit', 'cursor', 'jar']
7
+
8
+ // Docs
9
+ /**
10
+ * 🔐 Get the audit log for the group.
11
+ * @category Group
12
+ * @alias getAuditLog
13
+ * @param {number} group - The id of the group.
14
+ * @param {("DeletePost" | "RemoveMember" | "AcceptJoinRequest" | "DeclineJoinRequest" | "PostStatus" | "ChangeRank" | "BuyAd" | "SendAllyRequest" | "CreateEnemy" | "AcceptAllyRequest" | "DeclineAllyRequest" | "DeleteAlly" | "DeleteEnemy" | "AddGroupPlace" | "RemoveGroupPlace" | "CreateItems" | "ConfigureItems" | "SpendGroupFunds" | "ChangeOwner" | "Delete" | "AdjustCurrencyAmounts" | "Abandon" | "Claim" | "Rename" | "ChangeDescription" | "InviteToClan" | "KickFromClan" | "CancelClanInvite" | "BuyClan" | "CreateGroupAsset" | "UpdateGroupAsset" | "ConfigureGroupAsset" | "RevertGroupAsset" | "CreateGroupDeveloperProduct" | "ConfigureGroupGame" | "Lock" | "Unlock" | "CreateGamePass" | "CreateBadge" | "ConfigureBadge" | "SavePlace" | "PublishPlace")=} actionType - The action type to filter for.
15
+ * @param {number=} userId - The user's id to filter for.
16
+ * @param {SortOrder=} sortOrder - The order to sort the logs by.
17
+ * @param {Limit=} limit - The maximum logs per a page.
18
+ * @param {string=} cursor - The cursor for the page.
19
+ * @returns {Promise<AuditPage>}
20
+ * @example const noblox = require("noblox.js")
21
+ * // Login using your cookie
22
+ * const rankLogs = await noblox.getAuditLog(1, "ChangeRank", 2, "Asc")
23
+ **/
24
+
25
+ function getAuditLog (group, actionType, userId, sortOrder, limit, cursor, jar) {
26
+ return new Promise((resolve, reject) => {
27
+ const httpOpt = {
28
+ url: `https://groups.roblox.com/v1/groups/${group}/audit-log?actionType=${actionType}&cursor=${cursor}&limit=${limit}&sortOrder=${sortOrder}&userId=${userId}`,
29
+ options: {
30
+ method: 'GET',
31
+ resolveWithFullResponse: true,
32
+ jar
33
+ }
34
+ }
35
+
36
+ return http(httpOpt)
37
+ .then(function (res) {
38
+ const responseData = JSON.parse(res.body)
39
+ if (res.statusCode !== 200) {
40
+ reject(new RobloxAPIError(res))
41
+ } else {
42
+ responseData.data = responseData.data.map((entry) => {
43
+ // We need to set milliseconds to 0 because Roblox does this fascinating thing
44
+ // Where they vary the ms value on each request, for an existing action.
45
+ entry.created = new Date(entry.created)
46
+ entry.created.setMilliseconds(0)
47
+ return entry
48
+ })
49
+ resolve(responseData)
50
+ }
51
+ }).catch(error => reject(error))
52
+ })
53
+ }
54
+
55
+ // Define
56
+ exports.func = function (args) {
57
+ const jar = args.jar
58
+ const actionType = args.actionType || ''
59
+ const userId = args.userId || ''
60
+ const sortOrder = args.sortOrder || 'Asc'
61
+ const limit = args.limit || (100).toString()
62
+ const cursor = args.cursor || ''
63
+ return getAuditLog(args.group, actionType, userId, sortOrder, limit, cursor, jar)
64
+ }
@@ -0,0 +1,50 @@
1
+ // Includes
2
+ const http = require('../util/http.js').func
3
+ const RobloxAPIError = require('../util/apiError.js')
4
+
5
+ // Args
6
+ exports.required = ['groupId']
7
+ exports.optional = []
8
+
9
+ // Docs
10
+ /**
11
+ * ✅ Get a group's info.
12
+ * @category Group
13
+ * @alias getGroup
14
+ * @param {number} groupId - The id of the group.
15
+ * @returns {Promise<Group>}
16
+ * @example const noblox = require("noblox.js")
17
+ * const groupInfo = await noblox.getGroup(1)
18
+ **/
19
+
20
+ // Define
21
+ function getGroup (groupId) {
22
+ return new Promise((resolve, reject) => {
23
+ const httpOpt = {
24
+ url: `//groups.roblox.com/v1/groups/${groupId}`,
25
+ options: {
26
+ method: 'GET',
27
+ resolveWithFullResponse: true
28
+ }
29
+ }
30
+ return http(httpOpt)
31
+ .then(function (res) {
32
+ if (res.statusCode === 200) {
33
+ const body = JSON.parse(res.body)
34
+
35
+ if (body.shout) {
36
+ body.shout.created = new Date(body.shout.created)
37
+ body.shout.updated = new Date(body.shout.updated)
38
+ }
39
+
40
+ resolve(body)
41
+ } else {
42
+ reject(new RobloxAPIError(res))
43
+ }
44
+ }).catch(error => reject(error))
45
+ })
46
+ }
47
+
48
+ exports.func = function (args) {
49
+ return getGroup(args.groupId)
50
+ }
@@ -0,0 +1,37 @@
1
+ // Includes
2
+ const getPageResults = require('../util/getPageResults.js').func
3
+
4
+ // Args
5
+ exports.required = ['groupId']
6
+ exports.optional = ['limit', 'sortOrder', 'pageCursor', 'jar']
7
+
8
+ // Docs
9
+ /**
10
+ * 🔐 Gets bans of a group
11
+ * @category Group
12
+ * @alias getGroupBans
13
+ * @param {number} groupId - The ID of the group
14
+ * @param {number=} limit - The number of bans to fetch maximum per page
15
+ * @param {SortOrder=} sortOrder - The order to sort the bans
16
+ * @param {string=} pageCursor - The next or previous page's cursor
17
+ * @returns {Promise<GroupBan[]>}
18
+ * @example const noblox = require("noblox.js")
19
+ * await noblox.getGroupBans({ groupId: 1, limit: 100, sortOrder: "Desc" })
20
+ **/
21
+
22
+ // Define
23
+ exports.func = async function (args) {
24
+ let { groupId, jar, limit, pageCursor, sortOrder } = args
25
+ limit ||= 100
26
+ sortOrder ||= 'Desc'
27
+
28
+ return await getPageResults({
29
+ url: `//groups.roblox.com/v1/groups/${groupId}/bans`,
30
+ query: {
31
+ sortOrder
32
+ },
33
+ pageCursor,
34
+ limit,
35
+ jar
36
+ })
37
+ }
@@ -0,0 +1,41 @@
1
+ // Includes
2
+ const http = require('../util/http.js').func
3
+
4
+ const RobloxAPIError = require('../util/apiError.js')
5
+ // Args
6
+ exports.required = ['groupId']
7
+ exports.optional = ['jar']
8
+
9
+ // Docs
10
+ /**
11
+ * 🔐 Get the social link data associated with a group.
12
+ * @category Group
13
+ * @alias getGroupSocialLinks
14
+ * @param {number} groupId - The id of the group.
15
+ * @returns {Promise<SocialLinkResponse[]>}
16
+ * @example const noblox = require("noblox.js")
17
+ * const groupSocialLinks = await noblox.getGroupSocialLinks(9997719)
18
+ **/
19
+
20
+ // Define
21
+ function getGroupSocialLinks (groupId, jar) {
22
+ return http({
23
+ url: `//groups.roblox.com/v1/groups/${groupId}/social-links`,
24
+ options: {
25
+ jar,
26
+ resolveWithFullResponse: true
27
+ }
28
+ })
29
+ .then((res) => {
30
+ const { data } = JSON.parse(res.body)
31
+ if (res.statusCode === 200 && data) {
32
+ return data
33
+ } else {
34
+ throw new RobloxAPIError(res)
35
+ }
36
+ })
37
+ }
38
+
39
+ exports.func = function ({ groupId, jar }) {
40
+ return getGroupSocialLinks(groupId, jar)
41
+ }