Skip to content

Commit 1d35ffa

Browse files
committed
Prepare for new voice region system
1 parent bf14331 commit 1d35ffa

File tree

1 file changed

+50
-41
lines changed

1 file changed

+50
-41
lines changed

src/main/kotlin/dev/arbjerg/lavalink/client/loadbalancing/regionFiltering.kt

Lines changed: 50 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -116,57 +116,66 @@ object RegionGroup {
116116
}
117117

118118
// TODO In case no exact server match, should it look for the closest node in that same region?
119-
enum class VoiceRegion(val id: String, val visibleName: String) {
120-
AMSTERDAM("amsterdam", "Amsterdam"),
121-
ATLANTA("atlanta", "Atlanta"),
122-
BRAZIL("brazil", "Brazil"),
123-
BUCHAREST("bucharest", "Bucharest"),
124-
BUENOS_AIRES("buenos-aires", "Brazil"),
125-
DUBAI("dubai", "Dubai"),
126-
EUROPE("europe", "Europe"),
127-
FINLAND("finland", "Finland"),
128-
FRANKFURT("frankfurt", "Frankfurt"),
129-
HONGKONG("hongkong", "Hong Kong"),
130-
INDIA("india", "India"),
131-
JAPAN("japan","Japan"),
132-
LONDON("london", "London"),
133-
MADRID("madrid", "Madrid"),
134-
MILAN("milan", "Milan"),
135-
MONTREAL("montreal", "Montreal"),
136-
NEWARK("newark", "Newark"),
137-
OREGON("oregon", "Oregon"),
138-
ROTTERDAM("rotterdam","Rotterdam"),
139-
RUSSIA("russia", "Russia"),
140-
SANTA_CLARA("santa-clara", "Santa Clara"),
141-
SANTIAGO("santiago", "Santiago"),
142-
SEATTLE("seattle", "Seattle"),
143-
SINGAPORE("singapore", "Singapore"),
144-
SOUTH_AFRICA("southafrica","South Africa"),
145-
SOUTH_KOREA("south-korea", "South Korea"),
146-
ST_PETE("st-pete", "St Pete"),
147-
STOCKHOLM("stockholm", "Stockholm"),
148-
SYDNEY("sydney", "Sydney"),
149-
TEL_AVIV("tel-aviv", "Tel Aviv"),
150-
US_CENTRAL("us-central", "US Central"),
151-
US_EAST("us-east", "US East"),
152-
US_SOUTH("us-south", "US South"),
153-
US_WEST("us-west", "US West"),
154-
WARSAW("warsaw", "Warsaw"),
155-
156-
UNKNOWN("", "Unknown");
119+
enum class VoiceRegion(val visibleName: String, val longId: String, vararg val shortIds: String) {
120+
AMSTERDAM("Amsterdam", "amsterdam", "ams"),
121+
ATLANTA("Atlanta", "atlanta"),
122+
BRAZIL("Brazil", "brazil"),
123+
BUCHAREST("Bucharest", "bucharest"),
124+
BUENOS_AIRES("Brazil", "buenos-aires"),
125+
DUBAI("Dubai", "dubai"),
126+
EUROPE("Europe", "europe"),
127+
FINLAND("Finland", "finland"),
128+
FRANKFURT("Frankfurt", "frankfurt"),
129+
HONGKONG("Hong Kong", "hongkong"),
130+
INDIA("India", "india"),
131+
JAPAN("Japan", "japan"),
132+
LONDON("London", "london"),
133+
MADRID("Madrid", "madrid"),
134+
MILAN("Milan", "milan"),
135+
MONTREAL("Montreal", "montreal"),
136+
NEWARK("Newark", "newark"),
137+
OREGON("Oregon", "oregon"),
138+
ROTTERDAM("Rotterdam", "rotterdam"),
139+
RUSSIA("Russia", "russia"),
140+
SANTA_CLARA("Santa Clara", "santa-clara"),
141+
SANTIAGO("Santiago", "santiago"),
142+
SEATTLE("Seattle", "seattle"),
143+
SINGAPORE("Singapore", "singapore"),
144+
SOUTH_AFRICA("South Africa", "southafrica"),
145+
SOUTH_KOREA("South Korea", "south-korea"),
146+
ST_PETE("St Pete", "st-pete"),
147+
STOCKHOLM("Stockholm", "stockholm"),
148+
SYDNEY("Sydney", "sydney"),
149+
TEL_AVIV("Tel Aviv", "tel-aviv"),
150+
US_CENTRAL("US Central", "us-central"),
151+
US_EAST("US East", "us-east"),
152+
US_SOUTH("US South", "us-south", "iad"),
153+
US_WEST("US West", "us-west"),
154+
WARSAW("Warsaw", "warsaw"),
155+
156+
UNKNOWN("Unknown", "");
157157

158158
companion object {
159159
@JvmStatic
160160
fun fromEndpoint(endpoint: String): VoiceRegion {
161161
// Endpoints come in format like "seattle1865.discord.gg", trim to subdomain with no numbers
162-
val endpointRegex = "^([a-z\\-]+)[0-9]+.*:443\$".toRegex()
162+
val endpointRegex = "^([a-z\\-]+)[0-9]+.*:443$".toRegex()
163+
val match = endpointRegex.find(endpoint) ?: return findFromEndpointWithShortId(endpoint)
164+
val idFromEndpoint = match.groupValues[1]
165+
return entries.find { it.longId == idFromEndpoint } ?: UNKNOWN
166+
}
167+
168+
@JvmStatic
169+
fun findFromEndpointWithShortId(endpoint: String): VoiceRegion {
170+
// Endpoints come in format like "c-ams08-44aff7ca.discord.media:8443", extract the info that we need
171+
val endpointRegex = "^[a-z-A-Z0-9]-([a-z]+)[0-9]+-[a-zA-Z0-9]+\\.discord\\.media:[0-9]+$".toRegex()
163172
val match = endpointRegex.find(endpoint) ?: return UNKNOWN
164173
val idFromEndpoint = match.groupValues[1]
165-
return entries.find { it.id == idFromEndpoint } ?: UNKNOWN
174+
return entries.find { it.shortIds.contains(idFromEndpoint) } ?: UNKNOWN
166175
}
167176
}
168177

169178
override fun toString(): String {
170-
return "${name}($id, $visibleName)"
179+
return "$name($visibleName, $longId [${shortIds.joinToString()}])"
171180
}
172181
}

0 commit comments

Comments
 (0)