@@ -8,6 +8,7 @@ import dev.arbjerg.lavalink.client.protocol.toCustom
88import dev.arbjerg.lavalink.client.protocol.toLavalinkLoadResult
99import dev.arbjerg.lavalink.internal.LavalinkRestClient
1010import dev.arbjerg.lavalink.internal.LavalinkSocket
11+ import dev.arbjerg.lavalink.internal.error.RestException
1112import dev.arbjerg.lavalink.internal.fromRawJson
1213import dev.arbjerg.lavalink.internal.loadbalancing.Penalties
1314import dev.arbjerg.lavalink.internal.toLavalinkPlayer
@@ -120,6 +121,7 @@ class LavalinkNode(
120121
121122 /* *
122123 * Gets the player from the guild id. If the player is not cached, it will be retrieved from the server.
124+ * If the player does not exist on the node, it will be created.
123125 *
124126 * @param guildId The guild id of the player.
125127 *
@@ -134,8 +136,14 @@ class LavalinkNode(
134136
135137 return rest.getPlayer(guildId)
136138 .map { it.toLavalinkPlayer(this ) }
137- // TODO: check for 404 status code, if not 404, don't create
138- .onErrorResume { createOrUpdatePlayer(guildId) }
139+ // Create the player if it doesn't exist on the node.
140+ .onErrorResume {
141+ if (it is RestException && it.code == 404 ) {
142+ createOrUpdatePlayer(guildId)
143+ } else {
144+ it.toMono()
145+ }
146+ }
139147 .doOnSuccess {
140148 // Update the player internally upon retrieving it.
141149 playerCache[it.guildId] = it
0 commit comments