UNPKG

prismarine-realms

Version:

Library to manage and interact with Minecraft Realms for Java/Bedrock edition

102 lines (88 loc) 3.19 kB
const RealmAPI = require('../index') const Realm = require('../structures/Realm') const Download = require('../structures/Download') module.exports = class BedrockRealmAPI extends RealmAPI { async getRealmAddress (realmId) { const data = await this.rest.get(`/worlds/${realmId}/join`) const [host, port] = data.address.split(':') return { host, port: Number(port) } } async getRealmFromInvite (realmInviteCode, invite = true) { if (!realmInviteCode) throw new Error('Need to provide a realm invite code/link') const clean = realmInviteCode.replace(/https:\/\/realms.gg\//g, '') const data = await this.rest.get(`/worlds/v1/link/${clean}`) if (!data.member && invite) await this.acceptRealmInviteFromCode(realmInviteCode) // If the player isn't a member, accept the invite return new Realm(this, data) } async getRealmInvite (realmId) { const data = await this.rest.get(`/links/v1?worldId=${realmId}`) return { inviteCode: data[0].linkId, ownerXUID: data[0].profileUuid, type: data[0].type, createdOn: data[0].ts, inviteLink: data[0].url, deepLinkUrl: data[0].deepLinkUrl } } async refreshRealmInvite (realmId) { const data = await this.rest.post('/links/v1', { body: { type: 'INFINITE', worldId: realmId } }) return { inviteCode: data.linkId, ownerXUID: data.profileUuid, type: data.type, createdOn: data.ts, inviteLink: data.url, deepLinkUrl: data.deepLinkUrl } } async getPendingInviteCount () { return await this.rest.get('/invites/count/pending') } async getPendingInvites () { const data = await this.rest.get('/invites/pending') return data.invites.map(invite => { return { invitationId: invite.invitationId, worldName: invite.worldName, worldDescription: invite.worldDescription, worldOwnerName: invite.worldOwnerName, worldOwnerXUID: invite.worldOwnerUuid, createdOn: invite.date } }) } async acceptRealmInvitation (invitationId) { await this.rest.put(`/invites/accept/${invitationId}`) } async rejectRealmInvitation (invitationId) { await this.rest.put(`/invites/reject/${invitationId}`) } async acceptRealmInviteFromCode (inviteCode) { if (!inviteCode) throw new Error('Need to provide a realm invite code/link') const clean = inviteCode.replace(/https:\/\/realms.gg\//g, '') await this.rest.post(`/invites/v1/link/accept/${clean}`) } async invitePlayer (realmId, uuid) { const data = await this.rest.put(`/invites/${realmId}/invite/update`, { body: { invites: { [uuid]: 'ADD' } } }) return new Realm(this, data) } async changeRealmState (realmId, state) { return await this.rest.put(`/worlds/${realmId}/${state}`) } async getRealmWorldDownload (realmId, slotId, backupId = 'latest') { const data = await this.rest.get(`/archive/download/world/${realmId}/${slotId}/${backupId}`) // if backupId = latest will get the world as it is now not the most recent backup return new Download(this, data) } }