diff --git a/config-sub-converter/scripts/external-proxies-sanitizer.js b/config-sub-converter/scripts/external-proxies-sanitizer.js index a74a56e..b156d2b 100644 --- a/config-sub-converter/scripts/external-proxies-sanitizer.js +++ b/config-sub-converter/scripts/external-proxies-sanitizer.js @@ -29,7 +29,7 @@ const NOISE_PATTERNS = [ /\bai\s*studio\b/gi, /\bno\s*p2p\b/gi, /\b10\s*gbit\b/gi, - /\bvless\b/gi, // you said you don't want it in the visible name + /\bvless\b/gi, /\bvmess\b/gi, /\bssr?\b/gi, /\btrojan\b/gi, @@ -50,6 +50,7 @@ const ICON_RULES = [ { regex: /\bPrime\b|\bAmazon\b/gi, icon: "📦" }, { regex: /\bChatGPT\b|\bOpenAI\b/gi, icon: "🤖" }, { regex: /\bSteam\b/gi, icon: "🎮" }, + { regex: /\bTorrent✅\b|Torrent|\bP2P\b|\bP2P-Torrents\b/gi, icon: "🧲" } ]; // 3) Optional “network” tag rules based on NAME text (not $server.network) @@ -62,49 +63,51 @@ const NAME_NETWORK_TAGS = [ // 4) Country detection rules by NAME (regex). First match wins (priority = lower is earlier) const COUNTRY_RULES = [ - // USA - { regex: /\b(USA|US|UNITED\s*STATES|AMERICA|NEW\s*YORK|NYC|LOS\s*ANGELES|LA|DALLAS|CHI(CAGO)?)\b/i, iso3: "USA", flag: "🇺🇸", priority: 10 }, - - // Germany - { regex: /\b(DE|DEU|GER(MANY)?|FRANKFURT|BERLIN|MUNICH|MÜNCHEN)\b/i, iso3: "DEU", flag: "🇩🇪", priority: 20 }, - - // Netherlands - { regex: /\b(NL|NLD|NETHERLANDS|HOLLAND|AMSTERDAM)\b/i, iso3: "NLD", flag: "🇳🇱", priority: 30 }, - - // UK - { regex: /\b(UK|GB|GBR|UNITED\s*KINGDOM|LONDON|MANCHESTER)\b/i, iso3: "GBR", flag: "🇬🇧", priority: 40 }, - - // France - { regex: /\b(FR|FRA|FRANCE|PARIS|MARSEILLE)\b/i, iso3: "FRA", flag: "🇫🇷", priority: 50 }, - - // Poland - { regex: /\b(PL|POL|POLAND|WARSAW|WARSZAWA)\b/i, iso3: "POL", flag: "🇵🇱", priority: 60 }, - - // Finland - { regex: /\b(FI|FIN|FINLAND|HELSINKI)\b/i, iso3: "FIN", flag: "🇫🇮", priority: 70 }, - - // Sweden - { regex: /\b(SE|SWE|SWEDEN|STOCKHOLM)\b/i, iso3: "SWE", flag: "🇸🇪", priority: 80 }, - - // Norway - { regex: /\b(NO|NOR|NORWAY|OSLO)\b/i, iso3: "NOR", flag: "🇳🇴", priority: 90 }, - - // Switzerland - { regex: /\b(CH|CHE|SWITZERLAND|ZURICH|GENEVA)\b/i, iso3: "CHE", flag: "🇨🇭", priority: 100 }, - - // Estonia / Latvia / Lithuania - { regex: /\b(EE|EST|ESTONIA|TALLINN)\b/i, iso3: "EST", flag: "🇪🇪", priority: 110 }, - { regex: /\b(LV|LVA|LATVIA|RIGA)\b/i, iso3: "LVA", flag: "🇱🇻", priority: 120 }, - { regex: /\b(LT|LTU|LITHUANIA|VILNIUS)\b/i, iso3: "LTU", flag: "🇱🇹", priority: 130 }, - - // Turkey - { regex: /\b(TR|TUR|TURKEY|ISTANBUL)\b/i, iso3: "TUR", flag: "🇹🇷", priority: 140 }, - - // Singapore / Japan / Korea / Hong Kong - { regex: /\b(SG|SGP|SINGAPORE)\b/i, iso3: "SGP", flag: "🇸🇬", priority: 200 }, - { regex: /\b(JP|JPN|JAPAN|TOKYO|OSAKA)\b/i, iso3: "JPN", flag: "🇯🇵", priority: 210 }, - { regex: /\b(KR|KOR|KOREA|SEOUL)\b/i, iso3: "KOR", flag: "🇰🇷", priority: 220 }, - { regex: /\b(HK|HKG|HONG\s*KONG)\b/i, iso3: "HKG", flag: "🇭🇰", priority: 230 }, + { regex: /\b(Эстония|EE|EST|ESTONIA|TALLINN)\b/i, iso3: "EST", flag: "🇪🇪", priority: 110 }, // Estonia + { regex: /\b(Финляндия|FI|FIN|FINLAND|HELSINKI)\b/i, iso3: "FIN", flag: "🇫🇮", priority: 70 }, // Finland + { regex: /\b(Япония|JP|JPN|JAPAN|TOKYO|OSAKA)\b/i, iso3: "JPN", flag: "🇯🇵", priority: 210 }, // Japan + { regex: /\b(Гонконг|HK|HKG|HONG\s*KONG)\b/i, iso3: "HKG", flag: "🇭🇰", priority: 230 }, // Hong Kong + { regex: /\b(Германия|DE|DEU|GER(MANY)?|FRANKFURT|BERLIN|MUNICH)\b/i, iso3: "DEU", flag: "🇩🇪", priority: 20 }, // Germany + { regex: /\b(Франция|FR|FRA|FRANCE|PARIS|MARSEILLE)\b/i, iso3: "FRA", flag: "🇫🇷", priority: 50 }, // France + { regex: /\b(Нидерланды|NL|NLD|NETHERLANDS|HOLLAND|AMSTERDAM)\b/i, iso3: "NLD", flag: "🇳🇱", priority: 30 }, // Netherlands + { regex: /\b(Норвегия|NO|NOR|NORWAY|OSLO)\b/i, iso3: "NOR", flag: "🇳🇴", priority: 90 }, // Norway + { regex: /\b(Латвия|LV|LVA|LATVIA|RIGA)\b/i, iso3: "LVA", flag: "🇱🇻", priority: 120 }, // Latvia + { regex: /\b(Литва|LT|LTU|LITHUANIA|VILNIUS)\b/i, iso3: "LTU", flag: "🇱🇹", priority: 130 }, // Lithuania + { regex: /\b(Польша|PL|POL|POLAND|WARSAW|WARSZAWA)\b/i, iso3: "POL", flag: "🇵🇱", priority: 60 }, // Poland + { regex: /\b(Сингапур|SG|SGP|SINGAPORE)\b/i, iso3: "SGP", flag: "🇸🇬", priority: 200 }, // Singapore + { regex: /\b(South Korea|Корея|KR|KOR|KOREA|SEOUL)\b/i, iso3: "KOR", flag: "🇰🇷", priority: 220 }, // South Korea + { regex: /\b(Швеция|SE|SWE|SWEDEN|STOCKHOLM)\b/i, iso3: "SWE", flag: "🇸🇪", priority: 80 }, // Sweden + { regex: /\b(Швейцария|CH|CHE|SWITZERLAND|ZURICH|GENEVA)\b/i, iso3: "CHE", flag: "🇨🇭", priority: 100 }, // Switzerland + { regex: /\b(Турция|TR|TUR|TURKEY|ISTANBUL)\b/i, iso3: "TUR", flag: "🇹🇷", priority: 140 }, // Turkey + { regex: /\b(Великобритания|Англия|England|UK|GB|GBR|UNITED\s*KINGDOM)\b/i, iso3: "GBR", flag: "🇬🇧", priority: 40 }, // UK + { regex: /\b(США|USA|US|UNITED\s*STATES|AMERICA|NEW\s*YORK|NYC)\b/i, iso3: "USA", flag: "🇺🇸", priority: 10 }, // USA + { regex: /\b(Argentina|AR|ARG|ARGENTINA|BUENOS\s*AIRES)\b/i, iso3: "ARG", flag: "🇦🇷", priority: 240 }, // Argentina + { regex: /\b(Australia|AU|AUS|AUSTRALIA|SYDNEY)\b/i, iso3: "AUS", flag: "🇦🇺", priority: 250 }, // Australia + { regex: /\b(Austria|AT|AUT|AUSTRIA|VIENNA)\b/i, iso3: "AUT", flag: "🇦🇹", priority: 260 }, // Austria + { regex: /\b(Brazil|BR|BRA|BRAZIL|SAO\s*PAULO)\b/i, iso3: "BRA", flag: "🇧🇷", priority: 270 }, // Brazil + { regex: /\b(Bulgaria|BG|BGR|BULGARIA|SOFIA)\b/i, iso3: "BGR", flag: "🇧🇬", priority: 280 }, // Bulgaria + { regex: /\b(Canada|CA|CAN|CANADA|TORONTO)\b/i, iso3: "CAN", flag: "🇨🇦", priority: 290 }, // Canada + { regex: /\b(Czech\s*Republic|CZ|CZE|CZECH|PRAGUE)\b/i, iso3: "CZE", flag: "🇨🇿", priority: 300 }, // Czech Republic + { regex: /\b(Denmark|DK|DNK|DENMARK|COPENHAGEN)\b/i, iso3: "DNK", flag: "🇩🇰", priority: 310 }, // Denmark + { regex: /\b(Egypt|EG|EGY|EGYPT|CAIRO)\b/i, iso3: "EGY", flag: "🇪🇬", priority: 320 }, // Egypt + { regex: /\b(Georgia|GE|GEO|GEORGIA|TBILISI)\b/i, iso3: "GEO", flag: "🇬🇪", priority: 330 }, // Georgia + { regex: /\b(India|IN|IND|INDIA|MUMBAI)\b/i, iso3: "IND", flag: "🇮🇳", priority: 340 }, // India + { regex: /\b(Ireland|IE|IRL|IRELAND|DUBLIN)\b/i, iso3: "IRL", flag: "🇮🇪", priority: 350 }, // Ireland + { regex: /\b(Israel|IL|ISR|ISRAEL|TEL\s*AVIV)\b/i, iso3: "ISR", flag: "🇮🇱", priority: 360 }, // Israel + { regex: /\b(Italy|IT|ITA|ITALY|ROME)\b/i, iso3: "ITA", flag: "🇮🇹", priority: 370 }, // Italy + { regex: /\b(Kazakhstan|KZ|KAZ|KAZAKHSTAN|ALMATY)\b/i, iso3: "KAZ", flag: "🇰🇿", priority: 380 }, // Kazakhstan + { regex: /\b(Malaysia|MY|MYS|MALAYSIA|KUALA\s*LUMPUR)\b/i, iso3: "MYS", flag: "🇲🇾", priority: 390 }, // Malaysia + { regex: /\b(Moldova|MD|MDA|MOLDOVA|CHISINAU)\b/i, iso3: "MDA", flag: "🇲🇩", priority: 400 }, // Moldova + { regex: /\b(Nigeria|NG|NGA|NIGERIA|LAGOS)\b/i, iso3: "NGA", flag: "🇳🇬", priority: 410 }, // Nigeria + { regex: /\b(Philippines|PH|PHL|PHILIPPINES|MANILA)\b/i, iso3: "PHL", flag: "🇵🇭", priority: 420 }, // Philippines + { regex: /\b(Portugal|PT|PRT|PORTUGAL|LISBON)\b/i, iso3: "PRT", flag: "🇵🇹", priority: 430 }, // Portugal + { regex: /\b(Romania|RO|ROU|ROMANIA|BUCHAREST)\b/i, iso3: "ROU", flag: "🇷🇴", priority: 440 }, // Romania + { regex: /\b(Russia|RU|RUS|RUSSIA|MOSCOW)\b/i, iso3: "RUS", flag: "🇷🇺", priority: 450 }, // Russia + { regex: /\b(Spain|ES|ESP|SPAIN|MADRID)\b/i, iso3: "ESP", flag: "🇪🇸", priority: 460 }, // Spain + { regex: /\b(Taiwan|TW|TWN|TAIWAN|TAIPEI)\b/i, iso3: "TWN", flag: "🇹🇼", priority: 470 }, // Taiwan + { regex: /\b(Thailand|TH|THA|THAILAND|BANGKOK)\b/i, iso3: "THA", flag: "🇹🇭", priority: 480 }, // Thailand + { regex: /\b(UAE|United\s*Arab\s*Emirates|AE|ARE|DUBAI)\b/i, iso3: "ARE", flag: "🇦🇪", priority: 490 }, // UAE + { regex: /\b(Vietnam|VN|VNM|VIETNAM|HANOI)\b/i, iso3: "VNM", flag: "🇻🇳", priority: 500 } // Vietnam ]; // 5) GeoIP mapping (ISO2 -> ISO3 + flag) used only if utils.geoip.lookup(ip) returns ISO2