@@ -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