@@ -23,53 +23,105 @@ enum class RegionFilterVerdict {
2323object RegionGroup {
2424 @JvmField
2525 val ASIA : IRegionFilter = object : IRegionFilter {
26- val regions = listOf (VoiceRegion .SIDNEY , VoiceRegion .INDIA , VoiceRegion .JAPAN , VoiceRegion .HONGKONG , VoiceRegion .SOUTH_AFRICA )
26+ val regions = listOf (VoiceRegion .SYDNEY , VoiceRegion .INDIA , VoiceRegion .JAPAN , VoiceRegion .HONGKONG , VoiceRegion .SINGAPORE , VoiceRegion . SOUTH_KOREA )
2727
2828 override fun isRegionAllowed (node : LavalinkNode , region : VoiceRegion ): RegionFilterVerdict {
2929 return if (region in regions) RegionFilterVerdict .PASS else RegionFilterVerdict .SOFT_BLOCK
3030 }
3131 }
3232 @JvmField
3333 val EUROPE : IRegionFilter = object : IRegionFilter {
34- val regions = listOf (VoiceRegion .ROTTERDAM , VoiceRegion .RUSSIA )
34+ val regions = listOf (VoiceRegion .ROTTERDAM , VoiceRegion .RUSSIA , VoiceRegion .AMSTERDAM , VoiceRegion .MADRID , VoiceRegion .MILAN ,
35+ VoiceRegion .BUCHAREST , VoiceRegion .EUROPE , VoiceRegion .LONDON , VoiceRegion .FINLAND , VoiceRegion .FRANKFURT , VoiceRegion .STOCKHOLM )
3536
3637 override fun isRegionAllowed (node : LavalinkNode , region : VoiceRegion ): RegionFilterVerdict {
3738 return if (region in regions) RegionFilterVerdict .PASS else RegionFilterVerdict .SOFT_BLOCK
3839 }
3940 }
4041 @JvmField
4142 val US : IRegionFilter = object : IRegionFilter {
42- val regions = listOf (VoiceRegion .BRAZIL , VoiceRegion .SIDNEY , VoiceRegion .US_CENTRAL , VoiceRegion .US_EAST , VoiceRegion .US_SOUTH , VoiceRegion .US_WEST )
43+ val regions = listOf (VoiceRegion .US_CENTRAL , VoiceRegion .US_EAST , VoiceRegion .US_SOUTH , VoiceRegion .US_WEST , VoiceRegion .ATLANTA ,
44+ VoiceRegion .SEATTLE , VoiceRegion .SANTA_CLARA , VoiceRegion .NEWARK , VoiceRegion .MONTREAL , VoiceRegion .OREGON , VoiceRegion .ST_PETE )
45+
46+ override fun isRegionAllowed (node : LavalinkNode , region : VoiceRegion ): RegionFilterVerdict {
47+ return if (region in regions) RegionFilterVerdict .PASS else RegionFilterVerdict .SOFT_BLOCK
48+ }
49+ }
50+ @JvmField
51+ val SOUTH_AMERICA : IRegionFilter = object : IRegionFilter {
52+ val regions = listOf (VoiceRegion .BRAZIL , VoiceRegion .SANTIAGO , VoiceRegion .BUENOS_AIRES )
53+
54+ override fun isRegionAllowed (node : LavalinkNode , region : VoiceRegion ): RegionFilterVerdict {
55+ return if (region in regions) RegionFilterVerdict .PASS else RegionFilterVerdict .SOFT_BLOCK
56+ }
57+ }
58+ @JvmField
59+ val AFRICA : IRegionFilter = object : IRegionFilter {
60+ val regions = listOf (VoiceRegion .SOUTH_AFRICA )
61+
62+ override fun isRegionAllowed (node : LavalinkNode , region : VoiceRegion ): RegionFilterVerdict {
63+ return if (region in regions) RegionFilterVerdict .PASS else RegionFilterVerdict .SOFT_BLOCK
64+ }
65+ }
66+ @JvmField
67+ val MIDDLE_EAST : IRegionFilter = object : IRegionFilter {
68+ val regions = listOf (VoiceRegion .TEL_AVIV , VoiceRegion .DUBAI )
4369
4470 override fun isRegionAllowed (node : LavalinkNode , region : VoiceRegion ): RegionFilterVerdict {
4571 return if (region in regions) RegionFilterVerdict .PASS else RegionFilterVerdict .SOFT_BLOCK
4672 }
4773 }
4874
75+
4976 /* *
5077 * Gets a [RegionGroup] from a string. This method is case-insensitive.
5178 *
52- * @param region The region to get the [RegionGroup] for. Valid values are [ASIA], [EUROPE], and [US].
79+ * @param region The region to get the [RegionGroup] for.
80+ * Valid values are [AFRICA], [ASIA], [EUROPE], [MIDDLE_EAST], [SOUTH_AMERICA] and [US].
5381 */
5482 fun valueOf (region : String ) = when (region.uppercase()) {
83+ " AFRICA" -> AFRICA
5584 " ASIA" -> ASIA
5685 " EUROPE" -> EUROPE
86+ " MIDDLE_EAST" -> MIDDLE_EAST
87+ " SOUTH_AMERICA" -> SOUTH_AMERICA
5788 " US" -> US
5889 else -> throw IllegalArgumentException (" No region constant: $region " )
5990 }
6091}
6192
6293// TODO In case no exact server match, should it look for the closest node in that same region?
6394enum class VoiceRegion (val id : String , val visibleName : String ) {
95+ AMSTERDAM (" amsterdam" , " Amsterdam" ),
96+ ATLANTA (" atlanta" , " Atlanta" ),
6497 BRAZIL (" brazil" , " Brazil" ),
98+ BUCHAREST (" bucharest" , " Bucharest" ),
99+ BUENOS_AIRES (" buenos-aires" , " Brazil" ),
100+ DUBAI (" dubai" , " Dubai" ),
101+ EUROPE (" europe" , " Europe" ),
102+ FINLAND (" finland" , " Finland" ),
103+ FRANKFURT (" frankfurt" , " Frankfurt" ),
65104 HONGKONG (" hongkong" , " Hong Kong" ),
66105 INDIA (" india" , " India" ),
67- JAPAN (" japan" , " Japan" ),
68- ROTTERDAM (" rotterdam" , " Rotterdam" ),
106+ JAPAN (" japan" ," Japan" ),
107+ LONDON (" london" , " London" ),
108+ MADRID (" madrid" , " Madrid" ),
109+ MILAN (" milan" , " Milan" ),
110+ MONTREAL (" montreal" , " Montreal" ),
111+ NEWARK (" newark" , " Newark" ),
112+ OREGON (" oregon" , " Oregon" ),
113+ ROTTERDAM (" rotterdam" ," Rotterdam" ),
69114 RUSSIA (" russia" , " Russia" ),
115+ SANTA_CLARA (" santa-clara" , " Santa Clara" ),
116+ SANTIAGO (" santiago" , " Santiago" ),
117+ SEATTLE (" seattle" , " Seattle" ),
70118 SINGAPORE (" singapore" , " Singapore" ),
71- SOUTH_AFRICA (" southafrica" , " South Africa" ),
72- SIDNEY (" sidney" , " Sidney" ),
119+ SOUTH_AFRICA (" southafrica" ," South Africa" ),
120+ SOUTH_KOREA (" south-korea" , " South Korea" ),
121+ ST_PETE (" st-pete" , " St Pete" ),
122+ STOCKHOLM (" stockholm" , " Stockholm" ),
123+ SYDNEY (" sydney" , " Sydney" ),
124+ TEL_AVIV (" tel-aviv" , " Tel Aviv" ),
73125 US_CENTRAL (" us-central" , " US Central" ),
74126 US_EAST (" us-east" , " US East" ),
75127 US_SOUTH (" us-south" , " US South" ),
@@ -80,10 +132,10 @@ enum class VoiceRegion(val id: String, val visibleName: String) {
80132 companion object {
81133 @JvmStatic
82134 fun fromEndpoint (endpoint : String ): VoiceRegion {
135+ // Endpoints come in format like "seattle1865.discord.gg", trim to subdomain with no numbers
83136 val endpointRegex = " ^([a-z\\ -]+)[0-9]+.*:443\$ " .toRegex()
84137 val match = endpointRegex.find(endpoint) ? : return UNKNOWN
85138 val idFromEndpoint = match.groupValues[1 ]
86-
87139 return entries.find { it.id == idFromEndpoint } ? : UNKNOWN
88140 }
89141 }
0 commit comments