This is my current implementation:
ServerRegion.lua
local HttpService = game:GetService('HttpService');
local RegionMapping = require(script:WaitForChild("RegionMapping"))
local CountryFlag = require(script:WaitForChild("CountryFlag"))
local module = {}
function module:QueryServerCountryCodeAsync()
local location_data = nil
local success = pcall(function()
location_data = HttpService:JSONDecode(HttpService:GetAsync('https://web-api.nordvpn.com/v1/ips/info'));
end);
if (success) then
if (location_data) then
return location_data.country_code
end
end
end
function module:GetServerRegion(country_code: string)
return RegionMapping[country_code] or RegionMapping.UNKNOWN
end
function module:GetServerFlagEmoji(country_code: string)
local data = CountryFlag[country_code] or CountryFlag.UNKNOWN
return data.Emoji
end
return module
RegionMapping.lua
local regionMap = {
-- North America
US = "NA", CA = "NA", MX = "NA",
-- South America
AR = "SA", BR = "SA", CL = "SA", CO = "SA", PE = "SA", VE = "SA",
-- Europe
GB = "EU", FR = "EU", DE = "EU", ES = "EU", IT = "EU", PL = "EU", RU = "EU", NL = "EU",
-- Asia
CN = "AS", JP = "AS", KR = "AS", IN = "AS", ID = "AS", PH = "AS", TH = "AS", VN = "AS", SG = "AS", HK = "AS", TW = "AS",
-- Oceania (Also asia)
AU = "AS", NZ = "AS",
-- Africa
ZA = "AF", EG = "AF", DZ = "AF", NG = "AF", KE = "AF",
-- Middle East
SA = "ME", AE = "ME", TR = "ME", IL = "ME", QA = "ME",
-- Unknown
UNKNOWN = "UNKNOWN"
}
return regionMap
CountryFlag.lua
local Region = {
UNKNOWN = {
Emoji = "๐",
Name = "UNKNOWN",
},
TJ = {
Emoji = "๐น๐ฏ",
Name = "Tajikistan"
},
HR = {
Emoji = "๐ญ๐ท",
Name = "Croatia"
},
KE = {
Emoji = "๐ฐ๐ช",
Name = "Kenya"
},
CR = {
Emoji = "๐จ๐ท",
Name = "CostaRica"
},
BR = {
Emoji = "๐ง๐ท",
Name = "Brazil"
},
SB = {
Emoji = "๐ธ๐ง",
Name = "SolomonIslands"
},
BJ = {
Emoji = "๐ง๐ฏ",
Name = "Benin"
},
TR = {
Emoji = "๐น๐ท",
Name = "Turkey"
},
PR = {
Emoji = "๐ต๐ท",
Name = "PuertoRico"
},
UZ = {
Emoji = "๐บ๐ฟ",
Name = "Uzbekistan"
},
MR = {
Emoji = "๐ฒ๐ท",
Name = "Mauritania"
},
MM = {
Emoji = "๐ฒ๐ฒ",
Name = "Myanmar(Burma)"
},
OM = {
Emoji = "๐ด๐ฒ",
Name = "Oman"
},
PM = {
Emoji = "๐ต๐ฒ",
Name = "St.Pierre & Miquelon"
},
HU = {
Emoji = "๐ญ๐บ",
Name = "Hungary"
},
SM = {
Emoji = "๐ธ๐ฒ",
Name = "SanMarino"
},
TM = {
Emoji = "๐น๐ฒ",
Name = "Turkmenistan"
},
PE = {
Emoji = "๐ต๐ช",
Name = "Peru"
},
ZM = {
Emoji = "๐ฟ๐ฒ",
Name = "Zambia"
},
AU = {
Emoji = "๐ฆ๐บ",
Name = "Australia"
},
GE = {
Emoji = "๐ฌ๐ช",
Name = "Georgia"
},
IE = {
Emoji = "๐ฎ๐ช",
Name = "Ireland"
},
JE = {
Emoji = "๐ฏ๐ช",
Name = "Jersey"
},
AM = {
Emoji = "๐ฆ๐ฒ",
Name = "Armenia"
},
BM = {
Emoji = "๐ง๐ฒ",
Name = "Bermuda"
},
NE = {
Emoji = "๐ณ๐ช",
Name = "(Censored due to dev forum post rules. This is a countries name...)"
},
HM = {
Emoji = "๐ญ๐ฒ",
Name = "Heard & McDonaldIslands"
},
IM = {
Emoji = "๐ฎ๐ฒ",
Name = "IsleofMan"
},
ER = {
Emoji = "๐ช๐ท",
Name = "Eritrea"
},
BZ = {
Emoji = "๐ง๐ฟ",
Name = "Belize"
},
RU = {
Emoji = "๐ท๐บ",
Name = "Russia"
},
NL = {
Emoji = "๐ณ๐ฑ",
Name = "Netherlands"
},
ML = {
Emoji = "๐ฒ๐ฑ",
Name = "Mali"
},
MU = {
Emoji = "๐ฒ๐บ",
Name = "Mauritius"
},
TL = {
Emoji = "๐น๐ฑ",
Name = "Timor-Leste"
},
IN = {
Emoji = "๐ฎ๐ณ",
Name = "India"
},
UA = {
Emoji = "๐บ๐ฆ",
Name = "Ukraine"
},
TD = {
Emoji = "๐น๐ฉ",
Name = "Chad"
},
SD = {
Emoji = "๐ธ๐ฉ",
Name = "Sudan"
},
AT = {
Emoji = "๐ฆ๐น",
Name = "Austria"
},
TT = {
Emoji = "๐น๐น",
Name = "Trinidad & Tobago"
},
ST = {
Emoji = "๐ธ๐น",
Name = "SรฃoTomรฉ & Prรญncipe"
},
MD = {
Emoji = "๐ฒ๐ฉ",
Name = "Moldova"
},
AL = {
Emoji = "๐ฆ๐ฑ",
Name = "Albania"
},
CM = {
Emoji = "๐จ๐ฒ",
Name = "Cameroon"
},
BB = {
Emoji = "๐ง๐ง",
Name = "Barbados"
},
BD = {
Emoji = "๐ง๐ฉ",
Name = "Bangladesh"
},
MZ = {
Emoji = "๐ฒ๐ฟ",
Name = "Mozambique"
},
AD = {
Emoji = "๐ฆ๐ฉ",
Name = "Andorra"
},
PT = {
Emoji = "๐ต๐น",
Name = "Portugal"
},
IL = {
Emoji = "๐ฎ๐ฑ",
Name = "Israel"
},
ME = {
Emoji = "๐ฒ๐ช",
Name = "Montenegro"
},
SZ = {
Emoji = "๐ธ๐ฟ",
Name = "Swaziland"
},
VG = {
Emoji = "๐ป๐ฌ",
Name = "BritishVirginIslands"
},
KR = {
Emoji = "๐ฐ๐ท",
Name = "SouthKorea"
},
LU = {
Emoji = "๐ฑ๐บ",
Name = "Luxembourg"
},
MO = {
Emoji = "๐ฒ๐ด",
Name = "MacauSARChina"
},
NO = {
Emoji = "๐ณ๐ด",
Name = "Norway"
},
SO = {
Emoji = "๐ธ๐ด",
Name = "Somalia"
},
DM = {
Emoji = "๐ฉ๐ฒ",
Name = "Dominica"
},
DO = {
Emoji = "๐ฉ๐ด",
Name = "DominicanRepublic"
},
VE = {
Emoji = "๐ป๐ช",
Name = "Venezuela"
},
GL = {
Emoji = "๐ฌ๐ฑ",
Name = "Greenland"
},
BW = {
Emoji = "๐ง๐ผ",
Name = "Botswana"
},
GG = {
Emoji = "๐ฌ๐ฌ",
Name = "Guernsey"
},
MG = {
Emoji = "๐ฒ๐ฌ",
Name = "Madagascar"
},
NG = {
Emoji = "๐ณ๐ฌ",
Name = "Nigeria"
},
KG = {
Emoji = "๐ฐ๐ฌ",
Name = "Kyrgyzstan"
},
FO = {
Emoji = "๐ซ๐ด",
Name = "FaroeIslands"
},
MK = {
Emoji = "๐ฒ๐ฐ",
Name = "Macedonia"
},
EG = {
Emoji = "๐ช๐ฌ",
Name = "Egypt"
},
CW = {
Emoji = "๐จ๐ผ",
Name = "Curaรงao"
},
CV = {
Emoji = "๐จ๐ป",
Name = "CapeVerde"
},
TN = {
Emoji = "๐น๐ณ",
Name = "Tunisia"
},
AX = {
Emoji = "๐ฆ๐ฝ",
Name = "ร
landIslands"
},
TF = {
Emoji = "๐น๐ซ",
Name = "FrenchSouthernTerritories"
},
GR = {
Emoji = "๐ฌ๐ท",
Name = "Greece"
},
TH = {
Emoji = "๐น๐ญ",
Name = "Thailand"
},
RS = {
Emoji = "๐ท๐ธ",
Name = "Serbia"
},
TV = {
Emoji = "๐น๐ป",
Name = "Tuvalu"
},
SV = {
Emoji = "๐ธ๐ป",
Name = "ElSalvador"
},
BO = {
Emoji = "๐ง๐ด",
Name = "Bolivia"
},
CN = {
Emoji = "๐จ๐ณ",
Name = "China"
},
BN = {
Emoji = "๐ง๐ณ",
Name = "Brunei"
},
UG = {
Emoji = "๐บ๐ฌ",
Name = "Uganda"
},
JO = {
Emoji = "๐ฏ๐ด",
Name = "Jordan"
},
GU = {
Emoji = "๐ฌ๐บ",
Name = "Guam"
},
LB = {
Emoji = "๐ฑ๐ง",
Name = "Lebanon"
},
AW = {
Emoji = "๐ฆ๐ผ",
Name = "Aruba"
},
BF = {
Emoji = "๐ง๐ซ",
Name = "BurkinaFaso"
},
RW = {
Emoji = "๐ท๐ผ",
Name = "Rwanda"
},
KW = {
Emoji = "๐ฐ๐ผ",
Name = "Kuwait"
},
SG = {
Emoji = "๐ธ๐ฌ",
Name = "Singapore"
},
AF = {
Emoji = "๐ฆ๐ซ",
Name = "Afghanistan"
},
YE = {
Emoji = "๐พ๐ช",
Name = "Yemen"
},
CG = {
Emoji = "๐จ๐ฌ",
Name = "Congo-Brazzaville"
},
CK = {
Emoji = "๐จ๐ฐ",
Name = "CookIslands"
},
IQ = {
Emoji = "๐ฎ๐ถ",
Name = "Iraq"
},
FJ = {
Emoji = "๐ซ๐ฏ",
Name = "Fiji"
},
PF = {
Emoji = "๐ต๐ซ",
Name = "FrenchPolynesia"
},
SN = {
Emoji = "๐ธ๐ณ",
Name = "Senegal"
},
BV = {
Emoji = "๐ง๐ป",
Name = "BouvetIsland"
},
DE = {
Emoji = "๐ฉ๐ช",
Name = "Germany"
},
NI = {
Emoji = "๐ณ๐ฎ",
Name = "Nicaragua"
},
QA = {
Emoji = "๐ถ๐ฆ",
Name = "Qatar"
},
ZA = {
Emoji = "๐ฟ๐ฆ",
Name = "SouthAfrica"
},
CY = {
Emoji = "๐จ๐พ",
Name = "Cyprus"
},
MF = {
Emoji = "๐ฒ๐ซ",
Name = "St.Martin"
},
CI = {
Emoji = "๐จ๐ฎ",
Name = "CรดtedโIvoire"
},
NA = {
Emoji = "๐ณ๐ฆ",
Name = "Namibia"
},
NU = {
Emoji = "๐ณ๐บ",
Name = "Niue"
},
IO = {
Emoji = "๐ฎ๐ด",
Name = "BritishIndianOceanTerritory"
},
KZ = {
Emoji = "๐ฐ๐ฟ",
Name = "Kazakhstan"
},
LY = {
Emoji = "๐ฑ๐พ",
Name = "Libya"
},
MY = {
Emoji = "๐ฒ๐พ",
Name = "Malaysia"
},
BY = {
Emoji = "๐ง๐พ",
Name = "Belarus"
},
RO = {
Emoji = "๐ท๐ด",
Name = "Romania"
},
VC = {
Emoji = "๐ป๐จ",
Name = "St.Vincent & Grenadines"
},
BQ = {
Emoji = "๐ง๐ถ",
Name = "CaribbeanNetherlands"
},
DJ = {
Emoji = "๐ฉ๐ฏ",
Name = "Djibouti"
},
TO = {
Emoji = "๐น๐ด",
Name = "Tonga"
},
AI = {
Emoji = "๐ฆ๐ฎ",
Name = "Anguilla"
},
CZ = {
Emoji = "๐จ๐ฟ",
Name = "Czechia"
},
MT = {
Emoji = "๐ฒ๐น",
Name = "Malta"
},
GA = {
Emoji = "๐ฌ๐ฆ",
Name = "Gabon"
},
FR = {
Emoji = "๐ซ๐ท",
Name = "France"
},
TZ = {
Emoji = "๐น๐ฟ",
Name = "Tanzania"
},
UM = {
Emoji = "๐บ๐ฒ",
Name = "U.S.OutlyingIslands"
},
FI = {
Emoji = "๐ซ๐ฎ",
Name = "Finland"
},
LI = {
Emoji = "๐ฑ๐ฎ",
Name = "Liechtenstein"
},
JP = {
Emoji = "๐ฏ๐ต",
Name = "Japan"
},
PW = {
Emoji = "๐ต๐ผ",
Name = "Palau"
},
PH = {
Emoji = "๐ต๐ญ",
Name = "Philippines"
},
MQ = {
Emoji = "๐ฒ๐ถ",
Name = "Martinique"
},
GW = {
Emoji = "๐ฌ๐ผ",
Name = "Guinea-Bissau"
},
TG = {
Emoji = "๐น๐ฌ",
Name = "Togo"
},
NF = {
Emoji = "๐ณ๐ซ",
Name = "NorfolkIsland"
},
JM = {
Emoji = "๐ฏ๐ฒ",
Name = "Jamaica"
},
HT = {
Emoji = "๐ญ๐น",
Name = "Haiti"
},
GT = {
Emoji = "๐ฌ๐น",
Name = "Guatemala"
},
LV = {
Emoji = "๐ฑ๐ป",
Name = "Latvia"
},
ZW = {
Emoji = "๐ฟ๐ผ",
Name = "Zimbabwe"
},
CU = {
Emoji = "๐จ๐บ",
Name = "Cuba"
},
LR = {
Emoji = "๐ฑ๐ท",
Name = "Liberia"
},
SH = {
Emoji = "๐ธ๐ญ",
Name = "St.Helena"
},
KI = {
Emoji = "๐ฐ๐ฎ",
Name = "Kiribati"
},
RE = {
Emoji = "๐ท๐ช",
Name = "Rรฉunion"
},
CX = {
Emoji = "๐จ๐ฝ",
Name = "ChristmasIsland"
},
WF = {
Emoji = "๐ผ๐ซ",
Name = "Wallis & Futuna"
},
SA = {
Emoji = "๐ธ๐ฆ",
Name = "SaudiArabia"
},
HN = {
Emoji = "๐ญ๐ณ",
Name = "Honduras"
},
VN = {
Emoji = "๐ป๐ณ",
Name = "Vietnam"
},
CH = {
Emoji = "๐จ๐ญ",
Name = "Switzerland"
},
BT = {
Emoji = "๐ง๐น",
Name = "Bhutan"
},
EH = {
Emoji = "๐ช๐ญ",
Name = "WesternSahara"
},
TW = {
Emoji = "๐น๐ผ",
Name = "Taiwan"
},
GD = {
Emoji = "๐ฌ๐ฉ",
Name = "Grenada"
},
KH = {
Emoji = "๐ฐ๐ญ",
Name = "Cambodia"
},
BA = {
Emoji = "๐ง๐ฆ",
Name = "Bosnia & Herzegovina"
},
VA = {
Emoji = "๐ป๐ฆ",
Name = "VaticanCity"
},
MA = {
Emoji = "๐ฒ๐ฆ",
Name = "Morocco"
},
GP = {
Emoji = "๐ฌ๐ต",
Name = "Guadeloupe"
},
BL = {
Emoji = "๐ง๐ฑ",
Name = "St.Barthรฉlemy"
},
GY = {
Emoji = "๐ฌ๐พ",
Name = "Guyana"
},
TK = {
Emoji = "๐น๐ฐ",
Name = "Tokelau"
},
MH = {
Emoji = "๐ฒ๐ญ",
Name = "MarshallIslands"
},
SR = {
Emoji = "๐ธ๐ท",
Name = "Suriname"
},
AE = {
Emoji = "๐ฆ๐ช",
Name = "UnitedArabEmirates"
},
KP = {
Emoji = "๐ฐ๐ต",
Name = "NorthKorea"
},
GN = {
Emoji = "๐ฌ๐ณ",
Name = "Guinea"
},
GB = {
Emoji = "๐ฌ๐ง",
Name = "UnitedKingdom"
},
GH = {
Emoji = "๐ฌ๐ญ",
Name = "Ghana"
},
UY = {
Emoji = "๐บ๐พ",
Name = "Uruguay"
},
SL = {
Emoji = "๐ธ๐ฑ",
Name = "SierraLeone"
},
SJ = {
Emoji = "๐ธ๐ฏ",
Name = "Svalbard & JanMayen"
},
IS = {
Emoji = "๐ฎ๐ธ",
Name = "Iceland"
},
PN = {
Emoji = "๐ต๐ณ",
Name = "PitcairnIslands"
},
YT = {
Emoji = "๐พ๐น",
Name = "Mayotte"
},
FM = {
Emoji = "๐ซ๐ฒ",
Name = "Micronesia"
},
AZ = {
Emoji = "๐ฆ๐ฟ",
Name = "Azerbaijan"
},
GI = {
Emoji = "๐ฌ๐ฎ",
Name = "Gibraltar"
},
CF = {
Emoji = "๐จ๐ซ",
Name = "CentralAfricanRepublic"
},
PK = {
Emoji = "๐ต๐ฐ",
Name = "Pakistan"
},
SE = {
Emoji = "๐ธ๐ช",
Name = "Sweden"
},
CL = {
Emoji = "๐จ๐ฑ",
Name = "Chile"
},
FK = {
Emoji = "๐ซ๐ฐ",
Name = "FalklandIslands"
},
MW = {
Emoji = "๐ฒ๐ผ",
Name = "Malawi"
},
GM = {
Emoji = "๐ฌ๐ฒ",
Name = "Gambia"
},
SK = {
Emoji = "๐ธ๐ฐ",
Name = "Slovakia"
},
GS = {
Emoji = "๐ฌ๐ธ",
Name = "SouthGeorgia & SouthSandwichIslands"
},
MV = {
Emoji = "๐ฒ๐ป",
Name = "Maldives"
},
IT = {
Emoji = "๐ฎ๐น",
Name = "Italy"
},
PY = {
Emoji = "๐ต๐พ",
Name = "Paraguay"
},
ES = {
Emoji = "๐ช๐ธ",
Name = "Spain"
},
NR = {
Emoji = "๐ณ๐ท",
Name = "Nauru"
},
GQ = {
Emoji = "๐ฌ๐ถ",
Name = "EquatorialGuinea"
},
MN = {
Emoji = "๐ฒ๐ณ",
Name = "Mongolia"
},
PL = {
Emoji = "๐ต๐ฑ",
Name = "Poland"
},
SC = {
Emoji = "๐ธ๐จ",
Name = "Seychelles"
},
PG = {
Emoji = "๐ต๐ฌ",
Name = "PapuaNewGuinea"
},
AQ = {
Emoji = "๐ฆ๐ถ",
Name = "Antarctica"
},
BG = {
Emoji = "๐ง๐ฌ",
Name = "Bulgaria"
},
TC = {
Emoji = "๐น๐จ",
Name = "Turks & CaicosIslands"
},
VU = {
Emoji = "๐ป๐บ",
Name = "Vanuatu"
},
MP = {
Emoji = "๐ฒ๐ต",
Name = "NorthernMarianaIslands"
},
BI = {
Emoji = "๐ง๐ฎ",
Name = "Burundi"
},
AR = {
Emoji = "๐ฆ๐ท",
Name = "Argentina"
},
LT = {
Emoji = "๐ฑ๐น",
Name = "Lithuania"
},
AO = {
Emoji = "๐ฆ๐ด",
Name = "Angola"
},
NP = {
Emoji = "๐ณ๐ต",
Name = "Nepal"
},
DK = {
Emoji = "๐ฉ๐ฐ",
Name = "Denmark"
},
KY = {
Emoji = "๐ฐ๐พ",
Name = "CaymanIslands"
},
CD = {
Emoji = "๐จ๐ฉ",
Name = "Congo-Kinshasa"
},
EE = {
Emoji = "๐ช๐ช",
Name = "Estonia"
},
CA = {
Emoji = "๐จ๐ฆ",
Name = "Canada"
},
MC = {
Emoji = "๐ฒ๐จ",
Name = "Monaco"
},
NZ = {
Emoji = "๐ณ๐ฟ",
Name = "NewZealand"
},
KN = {
Emoji = "๐ฐ๐ณ",
Name = "St.Kitts & Nevis"
},
DZ = {
Emoji = "๐ฉ๐ฟ",
Name = "Algeria"
},
WS = {
Emoji = "๐ผ๐ธ",
Name = "Samoa"
},
NC = {
Emoji = "๐ณ๐จ",
Name = "NewCaledonia"
},
GF = {
Emoji = "๐ฌ๐ซ",
Name = "FrenchGuiana"
},
PA = {
Emoji = "๐ต๐ฆ",
Name = "Panama"
},
BH = {
Emoji = "๐ง๐ญ",
Name = "Bahrain"
},
PS = {
Emoji = "๐ต๐ธ",
Name = "PalestinianTerritories"
},
HK = {
Emoji = "๐ญ๐ฐ",
Name = "HongKongSARChina"
},
SI = {
Emoji = "๐ธ๐ฎ",
Name = "Slovenia"
},
LK = {
Emoji = "๐ฑ๐ฐ",
Name = "SriLanka"
},
SS = {
Emoji = "๐ธ๐ธ",
Name = "SouthSudan"
},
CC = {
Emoji = "๐จ๐จ",
Name = "Cocos(Keeling)Islands"
},
US = {
Emoji = "๐บ๐ธ",
Name = "UnitedStates"
},
EC = {
Emoji = "๐ช๐จ",
Name = "Ecuador"
},
SY = {
Emoji = "๐ธ๐พ",
Name = "Syria"
},
IR = {
Emoji = "๐ฎ๐ท",
Name = "Iran"
},
BE = {
Emoji = "๐ง๐ช",
Name = "Belgium"
},
AG = {
Emoji = "๐ฆ๐ฌ",
Name = "Antigua & Barbuda"
},
LS = {
Emoji = "๐ฑ๐ธ",
Name = "Lesotho"
},
MS = {
Emoji = "๐ฒ๐ธ",
Name = "Montserrat"
},
BS = {
Emoji = "๐ง๐ธ",
Name = "Bahamas"
},
SX = {
Emoji = "๐ธ๐ฝ",
Name = "SintMaarten"
},
KM = {
Emoji = "๐ฐ๐ฒ",
Name = "Comoros"
},
LA = {
Emoji = "๐ฑ๐ฆ",
Name = "Laos"
},
ID = {
Emoji = "๐ฎ๐ฉ",
Name = "Indonesia"
},
CO = {
Emoji = "๐จ๐ด",
Name = "Colombia"
},
MX = {
Emoji = "๐ฒ๐ฝ",
Name = "Mexico"
},
ET = {
Emoji = "๐ช๐น",
Name = "Ethiopia"
},
LC = {
Emoji = "๐ฑ๐จ",
Name = "St.Lucia"
},
VI = {
Emoji = "๐ป๐ฎ",
Name = "U.S.VirginIslands"
},
AS = {
Emoji = "๐ฆ๐ธ",
Name = "AmericanSamoa"
}
}
return Region