UNPKG

boblox.js

Version:

Wrapper for the vast roblox api.

792 lines (784 loc) 24.9 kB
type Limit = 10|25|50|100; type AvatarImageSize = 30|48|60|75|100|110|140|150|250|352|420|720; type AvatarHeadshotImageSize =48|60|75|100|110|140|150|250|352|420|720; type HumanoidRigType = "R6" | "R15" type AssetType = "Image"|"TShirt"|"Audio"|"Mesh"|"Lua"|"Hat"|"Place"|"Model"|"Shirt"|"Pants"|"Decal"|"Head"|"Face"|"Gear"|"Badge"|"Animation"|"Torso"|"RightArm"|"LeftArm"|"LeftLeg"|"RightLeg"|"Package"|"GamePass"|"Plugin"|"MeshPart"|"HairAccessory"|"FaceAccessory"|"NeckAccessory"|"ShoulderAccessory"|"FrontAccessory"|"BackAccessory"|"WaistAccessory"|"ClimbAnimation"|"DeathAnimation"|"FallAnimation"|"IdleAnimation"|"JumpAnimation"|"RunAnimation"|"SwimAnimation"|"WalkAnimation"|"PoseAnimation"|"EarAccessory"|"EyeAccessory"|"EmoteAnimation"|"Video"|"TShirtAccessory"|"ShirtAccessory"|"PantsAccessory"|"JacketAccessory"|"SweaterAccessory"|"ShortsAccessory"|"LeftShoeAccessory"|"RightShoeAccessory"|"DressSkirtAccessory" type CreatorTypes = "User" |"Group" export class thisClient{ UserID: number; UserName: string; RobuxBalance: number; ThumbnailUrl:string; IsAnyBuildersClubMember:boolean; IsPremium:boolean; DisplayName:string; } export class UniverseCreator{ id:number; name:string; type:CreatorTypes; isRNVAccount:boolean; } export class AssetCreator{ Id:number; Name:string; CreatorType:CreatorTypes; } type RobloxDate= `${number}-${number}-${number}T${number}:${number}:${number}/${number}Z` type UniverseAvatarType = `MorphToR15` | `MorphToR6` type transactionType ="Sale"|"Purchase"|"AffiliateSale"|"DevEx"|"GroupPayout"|"AdImpressionPayout"|"CurrencyPurchase"|"TradeRobux"|"PremiumStipend"|"PendingRobux"|"EngagementPayout"|"GroupEngagementPayout"|"AdSpend"|"Summary"|"IndividualToGroup"|"CSAdjustment" export class Universe{ id:number; rootPlaceId:number; name:string; description?:string; creator:UniverseCreator; price?:number; allowedGearGenres : Array<string>; allowedGearCategories: Array<string>; isGenreEnforced:boolean; copyingAllowed:boolean; playing:number; visits:number; maxPlayers:number; created:RobloxDate; update:RobloxDate; studioAccessToApisAllowed:boolean; createVipServersAllowed:boolean; universeAvatarType:UniverseAvatarType; genre:string; isAllGenre:boolean; gameRating?:Object; // Not so sure about this one but most games dont have one isFavoritedByUser:boolean; favoritedCount:number; } export class IncomingAlerts{ unreadMessageCount:number; friendRequestsCount:number; } export class Asset{ TargetId:number; ProductType?:string AssetId:number; ProductId:number; Name:string; Description?:string; Creator:AssetCreator; IconImageAssetId:number; Created:RobloxDate; Updated:RobloxDate; PriceInRobux?:number; PriceInTickets:null; // RIP TIX Sales:number; IsNew:boolean; IsForSale:boolean; IsPublicDomain:boolean; IsLimited:boolean; IsLimitedUnique:boolean; Remaining?:number; MinimumMembershipLevel:number; } export class GamePass{ TargetId:number; ProductType:"Game Pass" AssetId:number; ProductId:number; Name:string; Description?:string; Creator:AssetCreator; IconImageAssetId:number; Created:RobloxDate; Updated:RobloxDate; PriceInRobux?:number; PriceInTickets:null; // RIP TIX Sales:number; IsNew:boolean; IsForSale:boolean; IsPublicDomain:boolean; IsLimited:boolean; IsLimitedUnique:boolean; Remaining:null; MinimumMembershipLevel:number; } export class DeviceInfo{ PlatformType:string;//PC and etc DeviceType:string //Computer and etc OperatingSystemType: string; //windows linux etc } export class Player{ description?:string; created:RobloxDate; isBanned:boolean; externalAppDisplayName:string; id:number; name:string; displayName:string; } export class UserPresence{ userPresenceType:number; // 0,1,2 etc i cant tell what exactly they mean but 0 is offline and 2 is playing?!?!?! lastLocation:string; // Website and mobile and etc placeId?:number; rootPlaceId?:number; gameId?:string // format according to api: 00000000-0000-0000-0000-000000000000 universeId?:number; userId:number; lastOnline:RobloxDate; } export class Friend { isOnline:boolean; presenceType:number; // 0,1,2 etc i cant tell what exactly they mean but 0 is offline and 2 is playing?!?!?! isDeleted:boolean; friendRequestRank:number; description?:string; created:RobloxDate isBanned:boolean; externalAppDisplayName:string; id:number; name:string; displayName:string; } export class Follower{ isOnline:boolean; presenceType:number; // 0,1,2 etc i cant tell what exactly they mean but 0 is offline and 2 is playing?!?!?! isDeleted:boolean; friendRequestRank:number; description?:string; created:RobloxDate isBanned:boolean; externalAppDisplayName:string; id:number; name:string; displayName:string; } export class Following{ isOnline:boolean; presenceType:number; // 0,1,2 etc i cant tell what exactly they mean but 0 is offline and 2 is playing?!?!?! isDeleted:boolean; friendRequestRank:number; description?:string; created:RobloxDate isBanned:boolean; externalAppDisplayName:string; id:number; name:string; displayName:string; } export class OnlineFriendPresence{ UserPresenceType:string; UserLocationType:string; lastLocation:string; placeId:number; rootPlaceId:number; gameInstanceId?:string;// format according to api: 00000000-0000-0000-0000-000000000000 universeId:number; lastOnline:RobloxDate } export class OnlineFriend{ userPresence:OnlineFriendPresence; id:number; name:string; displayName:string; } export class GameAsset{ assetTypeId:number; //https://developer.roblox.com/en-us/api-reference/enum/AssetType assetType:string; //name for the asset type like Image, YoutubeVideo etc imageId?:number; videoHash?:string; videoTitle?:string; approved:boolean; } export class GroupGame{ id:number; name:string; description?:string; creator:{ id:number; type:"Group"; name:string; }; rootPlace:{ id:number; type:AssetType }; created:RobloxDate; updated:RobloxDate; placeVisits:number; } export class FavGame{ id:number; name:string; description?:string; creator:{ id:number; type:"User"; name:string; }; rootPlace:{ id:number; type:AssetType }; created:RobloxDate; updated:RobloxDate; placeVisits:number; } export class UserGame{ id:number; name:string; description?:string; creator:{ id:number; type:"User"; name:string; }; rootPlace:{ id:number; type:AssetType }; created:RobloxDate; updated:RobloxDate; placeVisits:number; } export class PublicServer{ id:string;//00000000-0000-0000-0000-000000000000 maxPlayers:number; playing:number; playerTokens:Array<string>; fps:number; ping:number; } export class VIPServer{ maxPlayers:number; name:string; vipServerId:number; accessCode:string; ownerUserId:number; } export class GameProductInfo{ universeId:number; isForSale:boolean; productId:number; price?:number; sellerId:number } export class Place{ placeId:number; name:string; description?:string; url:string; builder:string; builderId:number; isPlayable:boolean; reasonProhibited:string; universeId:number; universeRootPlaceId:number; price?:number; imageToken:string; } export class SearchedGameResult{ creatorId:number; creatorName:string; creatorType:CreatorTypes; totalUpVotes:number; totalDownVotes:number; universeId:number; name:string; placeId:number; playerCount:number; imageToken:string; isSponsored:boolean; nativeAdData:string; isShowSponsoredLabel:boolean; price?:number; analyticsIdentifier?:string; gameDescription?:string; genre:string; } export class RecommendedGame{ creatorId:number; creatorName:string; creatorType:CreatorTypes; totalUpVotes:number; totalDownVotes:number; universeId:number; name:string; placeId:number; playerCount:number; imageToken:string; isSponsored:boolean; nativeAdData:string; isShowSponsoredLabel:boolean; price?:number; analyticsIdentifier?:string; gameDescription?:string; genre:string; } export class GamepassResult{ id:number; name:string; description?:string; productId:number; price?:number; } export class GetVIPServerResult{ id:number; name:string; game:{ id:number; name:string; rootPlace:{ id:number; name:string; } }; joinCode?:string; active:boolean; subscription:{ active: boolean; expired: boolean; expirationDate:RobloxDate; price: number; canRenew: boolean; hasInsufficientFunds: boolean; hasRecurringProfile: boolean; hasPriceChanged: boolean; }; permissions:{ clanAllowed:boolean; enemyClanId?:boolean; friendsAllowed:boolean; users:Array<{ id:number; name:string; displayName:string; }>; }; voiceSettings:{ enabled:boolean; } } export class SearchUserResult{ previousUsernames:Array<string>; id:number; name:string; displayName:string; } export class UsernameHistoryObject{ name:string; } export class Outfit{ id:number; name:string; isEditable:boolean; } export class Avatar{ scales: { height: number; width: number; head: number; depth: number; proportion: number; bodyType: number }; playerAvatarType: HumanoidRigType; bodyColors: { headColorId: number; torsoColorId: number; rightArmColorId: number; leftArmColorId: number; rightLegColorId: number; leftLegColorId: number }; assets: Array<{ id: number; name: string; assetType: { id: number; name: string }; currentVersionId: number; meta: { order: number; puffiness: number; version: number; } }> defaultShirtApplied: boolean; defaultPantsApplied: boolean; emotes: Array<{ assetId: number; assetName: string, position: number }> } export class Reseller{ userAssetId:number; seller:{ id:number; type:CreatorTypes; name:string; } price:number; serialNumber?:number } export class GroupInfo{ id: number name: string description: string owner: { buildersClubMembershipType: string userId: number username: string displayName: string } shout: { body: string poster: { buildersClubMembershipType: number; userId: number username: string displayName: string } created: RobloxDate updated: RobloxDate } memberCount: number isBuildersClubOnly: boolean publicEntryAllowed: boolean isLocked: boolean } export class Role{ id: number; name: string; description: string; rank: number; memberCount:number; } export class SocialLink { id:number; type:string; // Facebook, Youtube, Discord etc url:string; title:string; } export class Trade { offers:Array<{ user:{ id:number; name:string; displayName:string; }; userAssets:Array<{ id:number; serialNumber:number; assetId:number; name:string; recentAveragePrice:number; originalPrice?:number; assetStock?:number; membershipType:string; }>; robux:number; }>; id:number; user:{ id:number; name:string; displayName:string; }; created:RobloxDate; expiration:RobloxDate; isActive:boolean; status:string; } export class SearchGroupResult{ id: number; name: string; description: string; memberCount: number; publicEntryAllowed: boolean; created: RobloxDate; updated: RobloxDate; } export class SearchForGroupResult{ id: number; name: string; memberCount: number; } export class Chat{ conversation:{ id: number, title: string, initiator: { type: "User", targetId: number, name: string, displayName: string }; hasUnreadMessages: boolean; participants: Array<{ type: "User", targetId: number, name: string, displayName: string }>; conversationType: "OneToOneConversation"; conversationTitle: { titleForViewer: string, isDefaultTitle: boolean; }; lastUpdated: RobloxDate; conversationUniverse: { universeId: number; rootPlaceId: number }; } } export class DeveloperProduct{ id:number; name:string; Description:string; shopId:number; iconImageAssetId:number; } export class Bundle{ id:number; name:string; description?:string; bundleType:string; items:Array<{ owned:boolean; id:number; name:string; type:"Asset" }> creator:{ id:number; name:string; type:CreatorTypes; } product:{ type:string; isPublicDomain:boolean; isForSale:boolean; priceInRobux?:number; isFree:boolean; noPriceText?:string; } } export class UserInventory{ assetId:number; name:string; assetType:AssetType; created:RobloxDate; } export class Collectible{ userAssetId:number; serialNumber:number; assetId:number; name:string; recentAveragePrice:number; originalPrice?:number; assetStock?:number; buildersClubMembershipType:number; } export class PlaceFromUniverse{ id:number; name:string; description?:string; universeId:number; } export class PurchaseVipServerRes{ id:string; //00000000-0000-0000-0000-000000000000 maxPlayers:number; playing:number; playerTokens:Array<string>; fps:number; ping:number; vipServerId:number; accessCode:string; //00000000-0000-0000-0000-000000000000 ownerUserId:number; } export class UpdatedVipServerSubscription{ active: boolean; expired: boolean; expirationDate: RobloxDate; price: number; canRenew:boolean; hasInsufficientFunds: boolean; hasRecurringProfile:boolean; hasPriceChanged: boolean; } export class UpdatedVipServer{ id:number; name:string; game:{ id:number; name:string; rootPlace:{ id:number; name:string; } }; joinCode?:string; active:boolean; subscription:{ active: boolean; expired: boolean; expirationDate:RobloxDate; price: number; canRenew: boolean; hasInsufficientFunds: boolean; hasRecurringProfile: boolean; hasPriceChanged: boolean; }; permissions:{ clanAllowed:boolean; enemyClanId?:boolean; friendsAllowed:boolean; users:Array<{ id:number; name:string; displayName:string; }>; }; voiceSettings:{ enabled:boolean; } } export class Transactions{ id:number; created:RobloxDate; isPending:boolean; agent:{ id:number, type:CreatorTypes, name: string }; details:{ id:number, name:string, type:string // "Asset" for when i was testing shirt transactions } } export class RobloxClient { cookie:string; csrf:string; // Methods Initialize(cookie: any): Promise<RobloxClient>; IsValidCookie(cookiee: string): Promise<boolean>; GetCSRFToken(): Promise<string>; GetGameInfo(universeId: number): Promise<Universe>; GetUniverseID(placeId: number): Promise<number>; GetIncomingAlerts(): Promise<IncomingAlerts>; GetAssetInfo(assetID: number): Promise<Asset>; GetGamepassInfo(gamepassID: number): Promise<GamePass>; UserOwnsAsset(assetID: number, UserId: number): Promise<boolean>; GetDeviceInfo(): Promise<DeviceInfo>; Block(UserId: number): Promise<void>; Unblock(UserId: number): Promise<void>; GetUserFromID(UserId: number): Promise<Player>; GetUserFromName(username: string): Promise<Player>; CanManageAsset(UserId: number, assetID: number): Promise<boolean>; GetUserPresence(UserId: number): Promise<UserPresence>; FriendCount(UserId: number): Promise<number>; GetFriends(UserId: number): Promise<Array<Friend>>; FollowerCount(UserId: number): Promise<number>; GetFollowers(UserId: number, limit?: Limit): Promise<Array<Follower>>; FollowingCount(UserId: number): Promise<number>; GetFollowings(UserId: number, limit?: Limit): Promise<Array<Following>>; GetCurrentUser():Promise<thisClient>; GetOnlineFriends(): Promise<Array<OnlineFriend>>; DeclineAllPendingFriendRequests(): Promise<void>; AcceptFriendRequest(requesterId: number): Promise<void>; DeclineFriendRequest(requesterId: number): Promise<void>; Unfollow(UserId: number): Promise<void>; Unfriend(UserId: number): Promise<void>; IsFollowing(UserId: number): Promise<boolean>; GetGameMedia(universeId: number): Promise<Array<GameAsset>>; GetGamesByGroup(groupId: number, limit?: Limit): Promise<Array<GroupGame>>; GetFavouriteGames(UserId: number, limit?: Limit): Promise<Array<FavGame>>; GetGamesByUser(UserId: number, limit?: Limit): Promise<Array<UserGame>>; GetGameServerList(placeId: number, serverType: string, limit?: Limit): Promise<Array<PublicServer | VIPServer>>; GetGameProductInfo(universeId: number): Promise<GameProductInfo>; GetPlaceInfo(placeId: number): Promise<Place>; SearchGames(keyword: string, maxRows?: number): Promise<Array<SearchedGameResult>>; IsPlayable(universeId : number): Promise<boolean>; GetRecommendations(universeId : number, maxRows?: number): Promise<Array<RecommendedGame>>; IsFavorited(universeId : number): Promise<boolean>; Favorite(universeId : number, bool: boolean): Promise<void>; GetFavoriteCount(universeId : number): Promise<number>; GetGamepasses(universeId : number, limit?: Limit): Promise<Array<GamepassResult>>; GetUserVoteStatus(universeId : number): Promise<boolean>; VoteGame(universeId : number, bool: boolean): Promise<void>; CanBeInvitedToVIP(UserId: number): Promise<boolean>; GetVIPServer(vipserverId: number): Promise<GetVIPServerResult>; UpdateVIPServer(vipserverId: number, name: string, newJoinCode: boolean, active: boolean): Promise<UpdatedVipServer>; PurchaseVIPServer(universeId : number, name: string, expectedPrice: number): Promise<PurchaseVipServerRes>; UpdateVIPSubscription(vipServerId: number, active: boolean, price: number): Promise<UpdatedVipServerSubscription>; UpdateUserStatus(UserId: number, newStatus: string): Promise<void>; GetUserStatus(UserId: number): Promise<string>; SearchUsers(keyword: string, limit?: Limit): Promise<Array<SearchUserResult>>; GetUserUsernameHistory(UserId: number, limit?: Limit): Promise<Array<UsernameHistoryObject>>; GetAvatarImage(UserId: number, size: AvatarImageSize): Promise<string>; GetAvatarHeadshot(UserId: number, size: AvatarHeadshotImageSize, isCircular?: boolean): Promise<string>; GetOutfits(UserId: number): Promise<Array<Outfit>>; GetAvatarRules(): Promise<Object>; GetAvatarInfo(UserId: number): Promise<Avatar>; RemoveAssetFromAvatar(assetId: number): Promise<void>; WearAssetForAvatar(assetId: number): Promise<void>; RedrawThumbnail(): Promise<void>; SetAvatarRig(type: HumanoidRigType): Promise<void>; SetAvatarScales( height : number, width : number,{ head, depth, proportion, bodyType }: { head?: number; depth?: number; proportion?: number; bodyType?: HumanoidRigType; }): Promise<void>; GetResellers(assetId: number, limit?: Limit): Promise<Array<Reseller>>; GroupPayout(groupId: number, UserId: number, amount: number): Promise<void>; ClaimGroupOwnership(groupId: number): Promise<void>; ChangeGroupOwner(groupId: number, newOwnerUserId: number): Promise<void>; GetGroupInfo(groupId: number): Promise<GroupInfo>; GetGroupFunds(groupId: number): Promise<number>; CreateGroup({ name, description, publicGroup, buildersClubMembersOnly, icon }: { name: string; description: string; publicGroup: boolean; buildersClubMembersOnly: boolean; icon: File; }): Promise<void>; UpdateGroupDescription(groupId: number, description: string): Promise<void>; UpdateGroupStatus(groupId: number, status: string): Promise<void>; UpdateGroupIcon(groupId: number, newIcon: File): Promise<void>; SetRole(UserId: number, groupId: number, roleId: number): Promise<void>; GetRoles(groupId: number): Promise<Array<Role>>; GetSocialLinks(groupId: number): Promise<Array<SocialLink>>; SearchGroups(keyword: any, limit?: Limit): Promise<Array<SearchGroupResult>>; SearchForGroup(groupName: string): Promise<SearchForGroupResult>; SetPrimaryGroup(groupId: number): Promise<void>; // GamePass and Badges will not work. Roblox API Limitation. GetUserInventory(UserId: number, assetTypes: Array<AssetType>, limit?: Limit): Promise<Array<UserInventory>>; GetCollectibles(UserId: number, assetType: AssetType, limit?: Limit): Promise<Array<Collectible>>; SendTrade(targetUserId: number, sendingOffer: {"userAssetIds":[]}, receivingOffer : {"userAssetIds":[]}): Promise<void>; CanTradeWith(UserId: number): Promise<boolean>; AcceptTrade(tradeId: number): Promise<void>; DeclineTrade(tradeId: number): Promise<void>; GetTradeInfo(tradeId: number): Promise<Trade>; SendPrivateMessage(recipientId: number, subject: string, body: string): Promise<void>; SendChatMessage(coversationId: number, message: string): Promise<void>; CreateChatWithUser(participantUserId: number): Promise<Chat>; CreateGroupChat(title: string, participantIds: Array<number>): Promise<void>; AddToGroupChat(conversationId: number, participantIds: Array<number>): Promise<void>; RemoveUserFromGroupChat(participantUserId: number, conversationId: number): Promise<void>; RenameGroupChat(conversationId: number, newTitle: string): Promise<void>; SetConversationUniverse(conversationId: number, universeId : number): Promise<void>; ResetConversationUniverse(conversationId: number): Promise<void>; GetPlacesFromUniverse(universeId : number, limit?: Limit): Promise<Array<PlaceFromUniverse>>; ActivateUniverse(universeId : number): Promise<void>; DectivateUniverse(universeId : number): Promise<void>; CreateDeveloperProduct(universeId : number, name: string, description: string, price: number, iconAssetId: number): Promise<DeveloperProduct>; UserOwnsGamepass(UserId: number, gamePassId: number): Promise<boolean>; GetBundleInfo(bundleId: number): Promise<Bundle>; PurchaseAsset(assetId: number): Promise<void>; GetGameSocialLinks(universeId : number): Promise<Array<SocialLink>>; GetGroupTransactions(groupId:number,transactionType:transactionType ,limit: Limit) : Promise<Array<Transactions>> }