diff --git a/README.md b/README.md index 0fa705e..ea521a1 100644 --- a/README.md +++ b/README.md @@ -14,7 +14,7 @@ and most of the codebase was rewritten to be more modular and perfomant. Here are some noteworthy changes: - Bot now uses inline keyboards instead of reply ones -- Most of the bot messages stay in one, reducing the clutter in messages +- Most of the bot messages stay in one, reducing the clutter in message history - More user-friendly approach for inline queries with the help of tags - Personal settings (only language settings available for now) - Translated on **8** different languages, thanks to our beloved community @@ -31,7 +31,7 @@ We also have plans on adding more functionality and QoL features. - Extended Inline Keyboard Markups (**ExtendedIKM**s), made to integrate extra functionality into regular **IKM**s (e.g. localization, selection indicators) - Use of decorators to support transitions between menus and clean up the codebase -- Using sqlite instead of csv for database! +- Using sqlite instead of csv for a database! ### How can I contribute? diff --git a/collectors/core.py b/collectors/core.py index b1bf1f9..b850ae3 100644 --- a/collectors/core.py +++ b/collectors/core.py @@ -33,12 +33,12 @@ ('netherlands', 'amsterdam'): 'EU Holland', ('austria', 'vienna'): 'EU Austria', ('poland', 'warsaw'): 'EU Poland', - ('us_north', 'northcentral', 'chicago'): 'US Chicago', - ('us_north', 'northeast', 'sterling'): 'US Virginia', - ('us_north', 'northwest', 'new_york'): 'US NewYork', - ('us_north', 'northwest', 'seattle'): 'US Seattle', - ('us_south', 'southwest', 'los_angeles'): 'US California', - ('us_south', 'southeast', 'atlanta'): 'US Atlanta', + ('us_east', 'chicago'): 'US Chicago', + ('us_east', 'sterling'): 'US Virginia', + ('us_east', 'new_york'): 'US NewYork', + ('us_east', 'atlanta'): 'US Atlanta', + ('us_west', 'seattle'): 'US Seattle', + ('us_west', 'los_angeles'): 'US California', ('brazil', 'sao_paulo'): 'Brazil', ('chile', 'santiago'): 'Chile', ('peru', 'lima'): 'Peru', @@ -46,6 +46,7 @@ 'hongkong': 'Hong Kong', ('india', 'mumbai'): 'India Mumbai', ('india', 'chennai'): 'India Chennai', + ('india', 'bombay'): 'India Bombay', ('china', 'shanghai'): 'China Shanghai', ('china', 'tianjin'): 'China Tianjin', ('china', 'guangzhou'): 'China Guangzhou', @@ -164,6 +165,9 @@ async def unique_monthly(): with open(config.CACHE_FILE_PATH, encoding='utf-8') as f: cache = json.load(f) + if cache.get('monthly_unique_players') is None: + cache['monthly_unique_players'] = data + if data != cache.get('monthly_unique_players'): await send_alert('monthly_unique_players', (cache['monthly_unique_players'], data)) diff --git a/functions/datacenter_handlers.py b/functions/datacenter_handlers.py index 6a9f59a..72f3845 100644 --- a/functions/datacenter_handlers.py +++ b/functions/datacenter_handlers.py @@ -89,12 +89,12 @@ def sweden(locale: Locale): return _format_dc_data(DatacenterAtlas.SWEDEN, locale) -def us_north(locale: Locale): - return _format_dc_data(DatacenterAtlas.US_NORTH, locale) +def us_east(locale: Locale): + return _format_dc_data(DatacenterAtlas.US_EAST, locale) -def us_south(locale: Locale): - return _format_dc_data(DatacenterAtlas.US_SOUTH, locale) +def us_west(locale: Locale): + return _format_dc_data(DatacenterAtlas.US_WEST, locale) def argentina(locale: Locale): diff --git a/functions/info_formatters.py b/functions/info_formatters.py index ba56b44..5efb970 100644 --- a/functions/info_formatters.py +++ b/functions/info_formatters.py @@ -156,7 +156,10 @@ def format_game_world_leaderboard(data: list[LeaderboardStats], locale: Locale) for person in data: name = person.name.replace('`', r"'") # escape for formatting - text += f'`{person.rank:2d}.` `{name:<35} {person.rating:,}` {person.region}\n' + name_span_limit = 19 + if len(name) > name_span_limit: + name = name[:name_span_limit - 2] = '...' + text += f'`{person.rank:2d}.` `{name:<{name_span_limit}}` `{person.rating:>6,}` `{person.region}`\n' text += f'\n{link_text}' return text @@ -173,7 +176,10 @@ def format_game_regional_leaderboard(region: str, data: list[LeaderboardStats], for person in data: name = person.name.replace('`', r"'") # escape for formatting - text += f'`{person.rank:2d}.` `{name:<35} {person.rating:,}`\n' + name_span_limit = 21 + if len(name) > name_span_limit: + name = name[:name_span_limit - 2] = '...' + text += f'`{person.rank:2d}.` `{name:<{name_span_limit}}` `{person.rating:>6,}`\n' text += f'\n{link_text}' return text diff --git a/keyboards.py b/keyboards.py index d918154..4320331 100644 --- a/keyboards.py +++ b/keyboards.py @@ -129,11 +129,11 @@ # DC USA -_us_northwest = ExtendedIKB(LK.dc_north, LK.dc_us_north) -_us_southwest = ExtendedIKB(LK.dc_south, LK.dc_us_south) +_us_east = ExtendedIKB(LK.dc_east, LK.dc_us_east) +_us_west = ExtendedIKB(LK.dc_west, LK.dc_us_west) dc_us_markup = ExtendedIKM([ - [_us_northwest, _us_southwest], + [_us_east, _us_west], [back_button] ]) diff --git a/l10n/README.md b/l10n/README.md index 5cabb5e..4b8a4f9 100644 --- a/l10n/README.md +++ b/l10n/README.md @@ -9,16 +9,30 @@ Then check [Contributing](#contributing) section to know how to start translatin Here you can see translations' progress and contributors' list: -| Code | Language | Progress | Summary | Contributors | -|:----:|--------------|:---------------:|:----------------------------------------------:|:--------------------------:| -| gb | English | ██████████ 100% | built in | | -| ru | Russian | ██████████ 100% | built in | | -| fa | Persian | █████████▒ 80% | settings, leaderboard missing | [@A460N] (telegram) | -| tr | Turkish | ███████▒▒▒ 70% | settings, leaderboard, tags missing | [@ITMiroN] (telegram) | -| uz | Uzbek | ███████▒▒▒ 70% | user game stats, settings, leaderboard missing | [@d1az1337] (telegram) | -| uk | Ukrainian | █████████▒ 90% | leaderboard missing | [akimerslys], [Agent47Dev] | -| be | Belarusian | █████████▒ 90% | leaderboard missing | [HiddenDeath] | -| it | Italian | █████████▒ 90% | leaderboard missing | [MrJiavo] | +| Code | Language | Progress | Summary | Contributors | +|:----:|--------------|:---------------:|:----------------------------------------------------------------:|:--------------------------:| +| en | English | ██████████ 100% | built in | | +| ru | Russian | ██████████ 100% | built in | | +| ar | Arabic | ▒▒▒▒▒▒▒▒▒▒ 0% | contributors needed | | +| be | Belarusian | ██████████ 100% | fully done | [HiddenDeath] | +| da | Danish | ▒▒▒▒▒▒▒▒▒▒ 0% | contributors needed | | +| de | German | ▒▒▒▒▒▒▒▒▒▒ 0% | contributors needed | | +| es | Spanish | ▒▒▒▒▒▒▒▒▒▒ 0% | contributors needed | | +| fa | Persian | ████████▒▒ 80% | missing: settings, leaderboard, USA DC | [@A460N] | +| fi | Finnish | ▒▒▒▒▒▒▒▒▒▒ 0% | contributors needed | | +| fr | French | ▒▒▒▒▒▒▒▒▒▒ 0% | contributors needed | | +| hi | Hindi | ▒▒▒▒▒▒▒▒▒▒ 0% | contributors needed | | +| it | Italian | ████████▒▒ 80% | missing: leaderboard, USA DC | [MrJiavo] | +| ja | Japanese | ▒▒▒▒▒▒▒▒▒▒ 0% | contributors needed | | +| no | Norwegian | ▒▒▒▒▒▒▒▒▒▒ 0% | contributors needed | | +| pl | Polish | ▒▒▒▒▒▒▒▒▒▒ 0% | contributors needed | | +| pt | Portuguese | ▒▒▒▒▒▒▒▒▒▒ 0% | contributors needed | | +| sv | Swedish | ▒▒▒▒▒▒▒▒▒▒ 0% | contributors needed | | +| tr | Turkish | ███████▒▒▒ 70% | missing: settings, leaderboard, tags, USA DC | [@ITMiroN] | +| uk | Ukrainian | ████████▒▒ 80% | missing: leaderboard, USA DC | [akimerslys], [Agent47Dev] | +| uz | Uzbek | ███████▒▒▒ 70% | missing: user game stats, settings, leaderboard, USA DC | [@d1az1337] | +| zh | Chinese | ▒▒▒▒▒▒▒▒▒▒ 0% | contributors needed | | + ## Contributing @@ -29,7 +43,7 @@ Here you can see translations' progress and contributors' list: ### Steps -1. Fork this repository. [100%] +1. Fork this repository. \ ![forking repository](../media/fork_repo.png) 2. Open Git Bash and clone the forked repository: `git clone {your fork link}`. @@ -46,8 +60,8 @@ Here you can see translations' progress and contributors' list: Just copy `en.json` and rename it with ISO 639-1 code of prefered language (e.g. `de.json`). - [List of ISO 639-1 codes](https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes) 5. Open the file and start translating it based on string keys and original text. - - We highly recommend checking the bot functionality to have more text context. -6. You can also add some tags in your language to `tags.json`. + - We highly recommend checking the bot functionality to have more context. +6. Remember to add some tags in your language to `tags.json`. 7. In Git, add new files, then commit and push all the changes. \ ![commiting changes](../media/commit_changes.png) diff --git a/l10n/data/be.json b/l10n/data/be.json index 2e06acd..c0d8fd9 100644 --- a/l10n/data/be.json +++ b/l10n/data/be.json @@ -93,6 +93,8 @@ ], "dc_north": "Поўнач", "dc_south": "Поўдзень", + "dc_east": "East", + "dc_west": "West", "dc_africa_title": "дата-цэнтра Паўднёвай Афрыкі", "dc_africa_inline_title": "Афрыканскі ДЦ", "dc_africa_johannesburg": "Ёханэсбург", @@ -128,21 +130,18 @@ "dc_spain_inline_title": "Іспанскі ДЦ", "dc_spain_madrid": "Мадрыд", "dc_us": "ЗША", - "dc_us_north": "dc_us_north / internally used key, no need to translate it", - "dc_us_south": "dc_us_south / internally used key, no need to translate it", - "dc_us_north_inline_title": "ДЦ паўночнай часткі ЗША", - "dc_us_north_central_title": "паўночна-цэнтральнага дата-цэнтра", - "dc_us_north_central_chicago": "Чыкага", - "dc_us_north_east_title": "паўночна-ўсходняга дата-цэнтра", - "dc_us_north_east_sterling": "Стэрлінг", - "dc_us_north_west_title": "паўночна-заходняга дата-цэнтра", - "dc_us_north_west_new_york": "Нью-Ёрк", - "dc_us_north_west_seattle": "Сіэтл", - "dc_us_south_inline_title": "ДЦ паўднёвай часткі ЗША", - "dc_us_south_east_title": "паўднёва-ўсходняга дата-цэнтра", - "dc_us_south_east_atlanta": "Атланта", - "dc_us_south_west_title": "паўднёва-заходняга дата-цэнтра", - "dc_us_south_west_los_angeles": "Лос-Анджэлес", + "dc_us_east": "dc_us_east / internally used key, no need to translate it", + "dc_us_east_title": "усходніх дата-цэнтраў ЗША", + "dc_us_east_inline_title": "ДЦ усходняй часткі ЗША", + "dc_us_chicago": "Чыкага", + "dc_us_sterling": "Стэрлінг", + "dc_us_new_york": "Нью-Ёрк", + "dc_us_atlanta": "Атланта", + "dc_us_west": "dc_us_west / internally used key, no need to translate it", + "dc_us_west_title": "заходніх дата-цэнтраў ЗША", + "dc_us_west_inline_title": "ДЦ заходняй часткі ЗША", + "dc_us_seattle": "Сіэтл", + "dc_us_los_angeles": "Лос-Анджэлес", "dc_argentina": "Аргенціна", "dc_argentina_title": "дата-цэнтра Аргенціны", "dc_argentina_inline_title": "Аргентынскі ДЦ", @@ -163,6 +162,7 @@ "dc_india_title": "дата-цэнтраў Індыі", "dc_india_inline_title": "Індыйскія ДЦ", "dc_india_mumbai": "Мумбаі", + "dc_india_bombay": "Bombay", "dc_india_chennai": "Чэннай", "dc_japan": "Японія", "dc_japan_title": "дата-цэнтра Японіі", @@ -245,7 +245,7 @@ "exchangerate_inline_text_default": [ "Выкарыстуйце код або назву валюты: ", "`@INCS2bot price {валюта}`", - "(например, `@INCS2bot price rub` або `@INCS2bot price рубель`)" + "(напрыклад, `@INCS2bot price rub` або `@INCS2bot price рубель`)" ], "exchangerate_inline_title_selected": "Паглядзець кошт ключа ў {}", "exchangerate_inline_description_selected": "1x Ключ ад кейса ў Counter-Strike каштуе {} {}", @@ -276,11 +276,11 @@ "game_dropcaptimer_inline_title": "Скід абмежаванняў", "game_dropcaptimer_inline_description": "Час да скіду абмежаванняў вопыту і дропу", "game_dropcaptimer_text": "⏳ Час да скіду абмежаванняў вопыту і дропу: {} д. {} г. {} мін. {} сек.", - "game_leaderboard_button_title": "🆕 Таблица лидеров CS2", + "game_leaderboard_button_title": "🆕 Табліца лідэраў CS2", "game_leaderboard_world": "Свет", - "game_leaderboard_header_world": "Лучшие игроки CS2 по миру:", - "game_leaderboard_header_regional": "Лучшие игроки CS2 по этому региону:", - "game_leaderboard_detailed_link": "Полную таблицу лидеров, а также подробную статистику игроков можно посмотреть [тут]({}).", + "game_leaderboard_header_world": "Лепшыя гульцы CS2 па свеце:", + "game_leaderboard_header_regional": "Лепшыя гульцы CS2 па гэтым рэгіёне:", + "game_leaderboard_detailed_link": "Поўную табліцу лідэраў, а таксама падрабязную статыстыку гульцоў можна паглядзець [тут]({}).", "gun_button_text": "Дадзеныя аб зброі", "gun_select_category": "#️⃣ Выберыце катэгорыю, якая Вас цікавіць:", "gun_pistols": "Пісталеты", @@ -330,7 +330,7 @@ "gun_origin_uk": "Злучанае Каралеўства", "gun_origin_south_africa": "Паўднёвая Афрыка", "latest_data_update": "Апошняе абнаўленне дадзеных: {}", - "data_not_found": "Данные не найдены.", + "data_not_found": "Дадзеныя не знойдзены.", "notifs_build_public": [ "⚡️ [Публічная зборка](https://t.me/cstracker/28) Counter-Strike была абноўлена.", "", @@ -396,7 +396,7 @@ "regions_australia": "Аўстралія", "regions_china": "Кітай", "regions_europe": "Еўропа", - "regions_northamerica": "Северная Америка", + "regions_northamerica": "Паўночная Амерыка", "regions_southamerica": "Паўднёвая Амерыка", "states_low": "нізкая", "states_medium": "сярэдняя", @@ -464,7 +464,7 @@ "user_gamestats_shots": "Стрэлаў:", "user_gamestats_hits": "Пападанняў:", "user_gamestats_aim_accuracy": "Дакладнасць стральбы:", - "user_gamestats_hs_percentage": "Працэнт пападанняў ў галаву:", + "user_gamestats_hs_percentage": "Працэнт пападанняў у галаву:", "user_gamestats_maps_stats": "🗺️ Статыстыка карт:", "user_gamestats_best_map": "Найлепшая карта:", "user_gamestats_misc_stats": "🔰 Іншае:", @@ -495,6 +495,7 @@ "user_gamestats_share": "Падзяліцца", "user_invalidlink_error": "⚠️ Адпраўленая вамі спасылка несапраўдная, праверце яе правільнасць і паспрабуйце яшчэ раз.", "user_invalidrequest_error": "⚠️ Няправільны запыт.", + "user_nostatsavailable_error": "⚠️ Для дадзенага профіля няма даступнай статыстыкі CS2.", "user_telegraph_error": "⚠️ Адбылася ўнутраная памылка Telegraph, калі ласка, увядзіце спасылку нанова.", "user_privateprofile_error": "❕ Гэты акаўнт прыватны, немагчыма атрымаць статыстыку. Калі ласка, змяніце настройкі прыватнасці.", "user_profileinfo_title": "Блакіроўкі і абмежаванні", diff --git a/l10n/data/en.json b/l10n/data/en.json index 49f907f..d89851b 100644 --- a/l10n/data/en.json +++ b/l10n/data/en.json @@ -93,6 +93,8 @@ ], "dc_north": "North", "dc_south": "South", + "dc_east": "East", + "dc_west": "West", "dc_africa_title": "South Africaʼs DC", "dc_africa_inline_title": "African DC", "dc_africa_johannesburg": "Johannesburg", @@ -128,21 +130,18 @@ "dc_spain_inline_title": "Spanish DC", "dc_spain_madrid": "Madrid", "dc_us": "USA", - "dc_us_north": "dc_us_north / internally used key, no need to translate it", - "dc_us_south": "dc_us_south / internally used key, no need to translate it", - "dc_us_north_inline_title": "Northern USA DC", - "dc_us_north_central_title": "Northcentral DC", - "dc_us_north_central_chicago": "Chicago", - "dc_us_north_east_title": "Northeast DC", - "dc_us_north_east_sterling": "Sterling", - "dc_us_north_west_title": "Northwest DC", - "dc_us_north_west_new_york": "New York", - "dc_us_north_west_seattle": "Seattle", - "dc_us_south_inline_title": "Southern USA DC", - "dc_us_south_east_title": "Southeast DC", - "dc_us_south_east_atlanta": "Atlanta", - "dc_us_south_west_title": "Southwest DC", - "dc_us_south_west_los_angeles": "Los Angeles", + "dc_us_east": "dc_us_east / internally used key, no need to translate it", + "dc_us_east_title": "East USA DC", + "dc_us_east_inline_title": "Eastern USA DC", + "dc_us_chicago": "Chicago", + "dc_us_sterling": "Sterling", + "dc_us_new_york": "New York", + "dc_us_atlanta": "Atlanta", + "dc_us_west": "dc_us_west / internally used key, no need to translate it", + "dc_us_west_title": "West USA DC", + "dc_us_west_inline_title": "Western USA DC", + "dc_us_seattle": "Seattle", + "dc_us_los_angeles": "Los Angeles", "dc_argentina": "Argentina", "dc_argentina_title": "Argentinaʼs DC", "dc_argentina_inline_title": "Argentinian DC", @@ -163,6 +162,7 @@ "dc_india_title": "Indiaʼs DC", "dc_india_inline_title": "Indian DC", "dc_india_mumbai": "Mumbai", + "dc_india_bombay": "Bombay", "dc_india_chennai": "Chennai", "dc_japan": "Japan", "dc_japan_title": "Japanʼs DC", @@ -470,6 +470,7 @@ "user_gamestats_share": "Share", "user_invalidlink_error": "⚠️ The link you sent is invalid, please check if it's correct and try again.", "user_invalidrequest_error": "⚠️ Invalid request.", + "user_nostatsavailable_error": "⚠️ There are no available CS2 stats for this account.", "user_telegraph_error": "⚠️ Internal Telegraph error, please re-enter your link.", "user_privateprofile_error": "❕ This account is private, statistics are not available. Please, change your privacy settings.", "user_profileinfo_title": "Bans and restrictions", diff --git a/l10n/data/fa.json b/l10n/data/fa.json index 302ed3d..5d11b0a 100644 --- a/l10n/data/fa.json +++ b/l10n/data/fa.json @@ -93,6 +93,8 @@ ], "dc_north": "شمال", "dc_south": "جنوب", + "dc_east": "East", + "dc_west": "West", "dc_africa_title": "افریقاجنوبی ", "dc_africa_inline_title": "افریقایی ", "dc_africa_johannesburg": "جواهنسنبرگ", @@ -128,21 +130,18 @@ "dc_spain_inline_title": "مرکز داده اسپانیا", "dc_spain_madrid": "مادرید", "dc_us": "آمریکا", - "dc_us_north": "dc_us_north / internally used key, no need to translate it", - "dc_us_south": "dc_us_south / internally used key, no need to translate it", - "dc_us_north_inline_title": "آمریکای شمالی ", - "dc_us_north_central_title": "شمال مرکزی ", - "dc_us_north_central_chicago": "شیکاگو", - "dc_us_north_east_title": "شمال شرقی", - "dc_us_north_east_sterling": "استرلینگ", - "dc_us_north_west_title": "شمال غربی", - "dc_us_north_west_new_york": "نیویورک", - "dc_us_north_west_seattle": "سیاتل", - "dc_us_south_inline_title": "امریکا جنوبی", - "dc_us_south_east_title": "جنوب شرقی", - "dc_us_south_east_atlanta": "اتلانتا", - "dc_us_south_west_title": "جنوب شرقی", - "dc_us_south_west_los_angeles": "لس آنجلس", + "dc_us_east": "dc_us_east / internally used key, no need to translate it", + "dc_us_east_title": "East USA DC", + "dc_us_east_inline_title": "Eastern USA DC", + "dc_us_chicago": "شیکاگو", + "dc_us_sterling": "استرلینگ", + "dc_us_new_york": "نیویورک", + "dc_us_atlanta": "اتلانتا", + "dc_us_west": "dc_us_west / internally used key, no need to translate it", + "dc_us_west_title": "West USA DC", + "dc_us_west_inline_title": "Western USA DC", + "dc_us_seattle": "سیاتل", + "dc_us_los_angeles": "لس آنجلس", "dc_argentina": "آرژانتین", "dc_argentina_title": "آرژانتین", "dc_argentina_inline_title": "مرکز داده آرژانتینی", @@ -163,6 +162,7 @@ "dc_india_title": "هندوستان", "dc_india_inline_title": "دیتا سنتر هند", "dc_india_mumbai": "مامبی", + "dc_india_bombay": "Bombay", "dc_india_chennai": "چنای", "dc_japan": "ژاپن", "dc_japan_title": "ژاپن", @@ -470,6 +470,7 @@ "user_gamestats_share": "اشتراک گذاری", "user_invalidlink_error": "⚠️ لینکی که ارسال کردید نامعتبر است، لطفاً بررسی کنید که درست است و دوباره امتحان کنید.", "user_invalidrequest_error": "⚠️ درخواست نامعتبر.", + "user_nostatsavailable_error": "⚠️ There are no available CS2 stats for this account.", "user_telegraph_error": "⚠️ خطا از طرف تلگرام لطفا لینک خود را دوباره وارد کنید.", "user_privateprofile_error": "❕ این اکانت خصوصی است برای نشان داده شدن آمار آن را به حالت عمومی تغییر دهید.", "user_profileinfo_title": "بن و محدودیت ها", diff --git a/l10n/data/it.json b/l10n/data/it.json index 4dc1861..fa9ebb9 100644 --- a/l10n/data/it.json +++ b/l10n/data/it.json @@ -93,6 +93,8 @@ ], "dc_north": "Nord", "dc_south": "Sud", + "dc_east": "East", + "dc_west": "West", "dc_africa_title": "del CED del Sud Africa", "dc_africa_inline_title": "CED Africano", "dc_africa_johannesburg": "Johannesburg", @@ -128,21 +130,18 @@ "dc_spain_inline_title": "CED Spagnolo", "dc_spain_madrid": "Madrid", "dc_us": "USA", - "dc_us_north": "dc_us_north / internally used key, no need to translate it", - "dc_us_south": "dc_us_south / internally used key, no need to translate it", - "dc_us_north_inline_title": "CED degli Stati Uniti Settentrionali", - "dc_us_north_central_title": "del CED Centro-settentrionale", - "dc_us_north_central_chicago": "Chicago", - "dc_us_north_east_title": "del CED del Nord-Est ", - "dc_us_north_east_sterling": "Sterling", - "dc_us_north_west_title": "del CED del Nord-Ovest", - "dc_us_north_west_new_york": "New York", - "dc_us_north_west_seattle": "Seattle", - "dc_us_south_inline_title": "CED degli Stati Uniti Meridionali", - "dc_us_south_east_title": "del CED del Sud-Est", - "dc_us_south_east_atlanta": "Atlanta", - "dc_us_south_west_title": "del CED del Sud-Ovest", - "dc_us_south_west_los_angeles": "Los Angeles", + "dc_us_east": "dc_us_east / internally used key, no need to translate it", + "dc_us_east_title": "East USA DC", + "dc_us_east_inline_title": "Eastern USA DC", + "dc_us_chicago": "Chicago", + "dc_us_sterling": "Sterling", + "dc_us_new_york": "New York", + "dc_us_atlanta": "Atlanta", + "dc_us_west": "dc_us_west / internally used key, no need to translate it", + "dc_us_west_title": "West USA DC", + "dc_us_west_inline_title": "Western USA DC", + "dc_us_seattle": "Seattle", + "dc_us_los_angeles": "Los Angeles", "dc_argentina": "Argentina", "dc_argentina_title": "del CED dell’Argentina", "dc_argentina_inline_title": "CED Argentino", @@ -163,6 +162,7 @@ "dc_india_title": "del CED dell’ India", "dc_india_inline_title": "CED Indiano", "dc_india_mumbai": "Mumbai", + "dc_india_bombay": "Bombay", "dc_india_chennai": "Chennai", "dc_japan": "Giappone", "dc_japan_title": "del CED del Giappone", @@ -470,6 +470,7 @@ "user_gamestats_share": "Condividi", "user_invalidlink_error": "⚠️ Il link inviato non è valido, controlla se è corretto e riprova.", "user_invalidrequest_error": "⚠️ Richiesta non valida.", + "user_nostatsavailable_error": "⚠️ There are no available CS2 stats for this account.", "user_telegraph_error": "⚠️ Errore telegrafico interno, inserisci nuovamente il link.", "user_privateprofile_error": "❕ Questo account è privato, le statistiche non sono disponibili. Per favore, modifica le tue impostazioni sulla privacy.", "user_profileinfo_title": "Ban e restrizioni", diff --git a/l10n/data/ru.json b/l10n/data/ru.json index 7a24bda..cee2798 100644 --- a/l10n/data/ru.json +++ b/l10n/data/ru.json @@ -93,6 +93,8 @@ ], "dc_north": "Север", "dc_south": "Юг", + "dc_east": "Восток", + "dc_west": "Запад", "dc_africa_title": "дата-центра Южной Африки", "dc_africa_inline_title": "Африканский ДЦ", "dc_africa_johannesburg": "Йоханнесбург", @@ -128,21 +130,18 @@ "dc_spain_inline_title": "Испанский ДЦ", "dc_spain_madrid": "Мадрид", "dc_us": "США", - "dc_us_north": "dc_us_north / internally used key, no need to translate it", - "dc_us_south": "dc_us_south / internally used key, no need to translate it", - "dc_us_north_inline_title": "ДЦ северной части США", - "dc_us_north_central_title": "северо-центрального дата-центра", - "dc_us_north_central_chicago": "Чикаго", - "dc_us_north_east_title": "северо-восточного дата-центра", - "dc_us_north_east_sterling": "Стерлинг", - "dc_us_north_west_title": "северо-западного дата-центра", - "dc_us_north_west_new_york": "Нью-Йорк", - "dc_us_north_west_seattle": "Сиэтл", - "dc_us_south_inline_title": "ДЦ южной части США", - "dc_us_south_east_title": "юго-восточного дата-центра", - "dc_us_south_east_atlanta": "Атланта", - "dc_us_south_west_title": "юго-западного дата-центра", - "dc_us_south_west_los_angeles": "Лос-Анджелес", + "dc_us_east": "dc_us_east / internally used key, no need to translate it", + "dc_us_east_title": "восточных дата-центров США", + "dc_us_east_inline_title": "ДЦ восточной части США", + "dc_us_chicago": "Чикаго", + "dc_us_sterling": "Стерлинг", + "dc_us_new_york": "Нью-Йорк", + "dc_us_atlanta": "Атланта", + "dc_us_west": "dc_us_west / internally used key, no need to translate it", + "dc_us_west_title": "западных дата-центров США", + "dc_us_west_inline_title": "ДЦ западной части США", + "dc_us_seattle": "Сиэтл", + "dc_us_los_angeles": "Лос-Анджелес", "dc_argentina": "Аргентина", "dc_argentina_title": "дата-центра Аргентины", "dc_argentina_inline_title": "Аргентинский ДЦ", @@ -163,6 +162,7 @@ "dc_india_title": "дата-центров Индии", "dc_india_inline_title": "Индийские ДЦ", "dc_india_mumbai": "Мумбаи", + "dc_india_bombay": "Bombay", "dc_india_chennai": "Ченнай", "dc_japan": "Япония", "dc_japan_title": "дата-центра Японии", @@ -387,7 +387,7 @@ "Количество игроков: {:,}" ], "notifs_new_monthlyunique": [ - "📊 Количество ежемесячных уникальных игроков Counter-Strike было обновлено!", + "📊 Количество ежемесячных уникальных игроков Counter-Strike было обновлено.", "", "{:,} ➡️ {:,}" ], @@ -495,6 +495,7 @@ "user_gamestats_share": "Поделиться", "user_invalidlink_error": "⚠️ Отправленная вами ссылка недействительна, проверьте ее правильность и повторите попытку.", "user_invalidrequest_error": "⚠️ Неверный запрос.", + "user_nostatsavailable_error": "⚠️ Для данного профиля нет доступной статистики CS2.", "user_telegraph_error": "⚠️ Произошла внутренняя ошибка Telegraph, пожалуйста, введите ссылку заново.", "user_privateprofile_error": "❕ Этот аккаунт приватный, невозможно получить статистику. Пожалуйста, поменяйте настройки приватности.", "user_profileinfo_title": "Блокировки и ограничения", diff --git a/l10n/data/tags.json b/l10n/data/tags.json index 3dfe888..5e57b51 100644 --- a/l10n/data/tags.json +++ b/l10n/data/tags.json @@ -233,8 +233,6 @@ "united states of america", "америка", "амерыка", - "запад", - "захад", "соединённые штаты америки", "злучаныя штаты амерыкі", "сша", @@ -244,90 +242,37 @@ "آمریکا", "stati uniti d'america" ], - "dc_us_north": [ - "northcentral", - "northeast", - "northweast", - "north central", + "dc_us_east": [ "east", - "west", "chicago", "sterling", - "moses lake", - "северо-центр", - "северо-восток", - "северо-запад", - "северо центр", - "северо восток", - "северо запад", - "центр", - "цэнтр", + "new york", + "atlanta", "восток", "чикаго", + "атланта", "чыкага", "стерлинг", "стэрлінг", - "мозез лейк", - "мазэс лэйк", - "shimoli-markaziy", - "shimoli-sharqiy", - "shimoli-g'arbiy", - "shimoliy", - "markaziy", "sharqiy", - "g'arbiy", "chikago", - "mozes leyk", "чікаго", "کانادا", "شیکاگو", - "centro-settentrionale", - "centro settentrionale", - "nord-est", - "nord est", - "nord-ovest", - "nord ovest", - "centro-nord", - "centro nord", - "centro", - "nord", - "est", - "ovest" + "est" ], - "dc_us_south": [ - "southeast", - "southweast", - "south", - "east", + "dc_us_west": [ "west", "los angeles", - "atlanta", - "юго-запад", - "юго-восток", - "юго запад", - "юго восток", - "восток", + "seattle", "запад", "лос-анджелес", "лос анджелес", "лос-анджэлес", "лос анджэлес", - "атланта", - "janubi-sharqiy", - "janibi-g'arbiy", - "janubi sharqiy", - "janibi g'arbiy", - "janubiy", - "sharqiy", "g'arbiy", "los anjeles", "لس آنچلس", - "sud-est", - "sud est", - "sud-ovest", - "sud ovest", - "sud", - "est", "ovest" ], "dc_asia": [ @@ -341,6 +286,7 @@ "🇮🇳", "india", "mumbai", + "bombay", "chennai", "индия", "мумбаи", diff --git a/l10n/data/tr.json b/l10n/data/tr.json index ff44f78..2997a51 100644 --- a/l10n/data/tr.json +++ b/l10n/data/tr.json @@ -93,6 +93,8 @@ ], "dc_north": "Kuzey", "dc_south": "Güney", + "dc_east": "East", + "dc_west": "West", "dc_africa_title": "Güney Afrika'daki veri merkezi", "dc_africa_inline_title": "Afrika DC", "dc_africa_johannesburg": "Johannesburg", @@ -128,21 +130,18 @@ "dc_spain_inline_title": "İspanyol DC", "dc_spain_madrid": "Madrid", "dc_us": "ABD", - "dc_us_north": "dc_us_north / internally used key, no need to translate it", - "dc_us_south": "dc_us_south / internally used key, no need to translate it", - "dc_us_north_inline_title": "Kuzey ABD DC", - "dc_us_north_central_title": "kuzey-merkezi veri merkezi", - "dc_us_north_central_chicago": "Chicago", - "dc_us_north_east_title": "kuzeydoğu veri merkezi", - "dc_us_north_east_sterling": "Sterlin", - "dc_us_north_west_title": "kuzeybatı veri merkezi", - "dc_us_north_west_new_york": "New York", - "dc_us_north_west_seattle": "Seattle", - "dc_us_south_inline_title": "Güney ABD DC", - "dc_us_south_east_title": "güneydoğu veri merkezi", - "dc_us_south_east_atlanta": "Atlanta", - "dc_us_south_west_title": "güneybatı veri merkezi", - "dc_us_south_west_los_angeles": "Los Angeles", + "dc_us_east": "dc_us_east / internally used key, no need to translate it", + "dc_us_east_title": "East USA DC", + "dc_us_east_inline_title": "Eastern USA DC", + "dc_us_chicago": "Chicago", + "dc_us_sterling": "Sterlin", + "dc_us_new_york": "New York", + "dc_us_atlanta": "Atlanta", + "dc_us_west": "dc_us_west / internally used key, no need to translate it", + "dc_us_west_title": "West USA DC", + "dc_us_west_inline_title": "Western USA DC", + "dc_us_seattle": "Seattle", + "dc_us_los_angeles": "Los Angeles", "dc_argentina": "Arjantin", "dc_argentina_title": "Arjantin'deki veri merkezi", "dc_argentina_inline_title": "Arjantin DC", @@ -163,6 +162,7 @@ "dc_india_title": "Hindistan'daki veri merkezleri", "dc_india_inline_title": "Hint DC'leri", "dc_india_mumbai": "Bombay", + "dc_india_bombay": "Bombay", "dc_india_chennai": "Chennai", "dc_japan": "Japonya", "dc_japan_title": "Japonya'daki veri merkezi", @@ -471,6 +471,7 @@ "user_gamestats_share": "Paylaşmak", "user_invalidlink_error": "⚠️ Gönderdiğiniz bağlantı geçersiz, lütfen doğruluğunu kontrol edin ve tekrar deneyin.", "user_invalidrequest_error": "⚠️ Geçersiz istek.", + "user_nostatsavailable_error": "⚠️ There are no available CS2 stats for this account.", "user_telegraph_error": "⚠️ Internal Telegraph error, please re-enter your link.", "user_privateprofile_error": "❕ Bu hesap gizlidir, istatistik almak imkansızdır. Lütfen gizlilik ayarlarınızı değiştirin.", "user_profileinfo_title": "Bloklar ve kısıtlamalar", diff --git a/l10n/data/uk.json b/l10n/data/uk.json index 2f4e775..8bf8e9b 100644 --- a/l10n/data/uk.json +++ b/l10n/data/uk.json @@ -2,19 +2,19 @@ "lang": "🇺🇦 Український", "bot_start_text": [ "👋🏼 Привітики, {}!", - "Цей бот призначенний для перевiрки кiлькостi гравцiв у онлайнi та доступнiсть серверiв Counter-Strike.", + "Цей бот призначенний для перевiрки кiлькостi гравцiв онлайн, доступнiсть серверiв Counter-Strike, та багато іншого", "", - "Для деталей використовуйте /help." + "Для більшого використовуйте /help." ], "bot_help_text": [ "[‎](https://telegra.ph/Detalnij-opis-08-14)ℹ️ Цей бот розроблений каналом @INCS2. Програмний код можна знайти на [GitHub](https://github.com/aquaismissing/INCS2bot).", "", "https://telegra.ph/Detalnij-opis-08-14" ], - "bot_feedback_text": "💬 Будь ласка, розповідь про ваші побажання чи проблеми, з якими ви зіткнулися під час використання бота.", + "bot_feedback_text": "💬 Будь ласка, напишіть нам ваші враження від користування ботом", "bot_choose_cmd": "📖 Використовуйте одну з запропонованих команд:", "bot_choose_func": "🔖 Оберіть бажану функцію:", - "bot_choose_setting": "⚙️ Воспользуйтесь одной из приведённых настроек:", + "bot_choose_setting": "⚙️ Використовуйте одне з запроповонованих налаштувань:", "bot_use_cancel": "Використовуйте /cancel, щоб скасувати запит.", "bot_feedback_success": "Чудово! Ваше повідомлення надісланно.", "bot_pmonly_text": "Ця команда працює тільки в приватних повідомленнях.", @@ -23,16 +23,16 @@ "bot_author_text": "🔫 Оновлення Counter-Strike", "bot_author_link": "https://t.me/INCS2", "bot_servers_stats": "Статистика серверів", - "bot_profile_info": "Інформация про користувача", + "bot_profile_info": "Інформація про гравця", "bot_extras": "Додаткові функції", - "bot_settings": "🆕 Настройки", + "bot_settings": "🆕 Налаштування", "crosshair": "Приціл", "crosshair_generate": "Створити", "crosshair_decode": "Розшифрувати", "crosshair_decode_example": "📖 Будь ласка, введіть код приціла (напр.: `CSGO-O4Jsi-V36wY-rTMGK-9w7qF-jQ8WB`).", "crosshair_decode_error": "⚠️ Невірний код, спробуйте ще раз.", "crosshair_decode_result": [ - "🧬 Розшифровка коду приціла:", + "🧬 Розшифрування коду приціла:", "", "`{}`" ], @@ -78,7 +78,7 @@ "currencies_tags": "`{}` - {} (доступні теги: {})", "dc_status_title": "Стан дата-центрів", "dc_status_inline_description": "Перевірити стан дата-центрів", - "dc_status_choose_region": "📶 Виберіть регіон, який Вам цікавий, щоб отримати інформацію про стан дата-центрів:", + "dc_status_choose_region": "📶 Виберіть регіон дата-центрів:", "dc_status_specify_region": "📍 Виберіть регіон:", "dc_status_specify_country": "📍 Виберіть країну:", "dc_status_text_title": "{} Стан {}:", @@ -93,6 +93,8 @@ ], "dc_north": "Північ", "dc_south": "Південь", + "dc_east": "East", + "dc_west": "West", "dc_africa_title": "дата-центру Південної Африки", "dc_africa_inline_title": "Африканский ДЦ", "dc_africa_johannesburg": "Йоханнесбург", @@ -128,21 +130,18 @@ "dc_spain_inline_title": "Іспанський ДЦ", "dc_spain_madrid": "Мадрид", "dc_us": "США", - "dc_us_north": "dc_us_north / internally used key, no need to translate it", - "dc_us_south": "dc_us_south / internally used key, no need to translate it", - "dc_us_north_inline_title": "ДЦ північної частини США", - "dc_us_north_central_title": "північно-центрального дата-центра", - "dc_us_north_central_chicago": "Чикаго", - "dc_us_north_east_title": "північно-східного дата-центру", - "dc_us_north_east_sterling": "Стерлінг", - "dc_us_north_west_title": "північно-західного дата-центру", - "dc_us_north_west_new_york": "Нью-Йорк", - "dc_us_north_west_seattle": "Сіетл", - "dc_us_south_inline_title": "ДЦ південної частини США", - "dc_us_south_east_title": "південно-східного дата-центру", - "dc_us_south_east_atlanta": "Атланта", - "dc_us_south_west_title": "південно-західного дата-центра", - "dc_us_south_west_los_angeles": "Лос-Анджелесс", + "dc_us_east": "dc_us_east / internally used key, no need to translate it", + "dc_us_east_title": "East USA DC", + "dc_us_east_inline_title": "Eastern USA DC", + "dc_us_chicago": "Чикаго", + "dc_us_sterling": "Стерлінг", + "dc_us_new_york": "Нью-Йорк", + "dc_us_atlanta": "Атланта", + "dc_us_west": "dc_us_west / internally used key, no need to translate it", + "dc_us_west_title": "West USA DC", + "dc_us_west_inline_title": "Western USA DC", + "dc_us_seattle": "Сіетл", + "dc_us_los_angeles": "Лос-Анджелес", "dc_argentina": "Аргентина", "dc_argentina_title": "дата-центру Аргентини", "dc_argentina_inline_title": "Аргентинський ДЦ", @@ -163,6 +162,7 @@ "dc_india_title": "дата-центрів Індії", "dc_india_inline_title": "Індійські ДЦ", "dc_india_mumbai": "Мумбаї", + "dc_india_bombay": "Bombay", "dc_india_chennai": "Ченнай", "dc_japan": "Японія", "dc_japan_title": "дата-центру Японії", @@ -188,13 +188,13 @@ "dc_southkorea_title": "дата-центру Південної Кореї", "dc_southkorea_inline_title": "південнокорейський ДЦ", "dc_southkorea_seoul": "Сеул", - "error_internal": "🧐 Пробачте, щось пішло не так. Будь ласка, спробуйте пізніше.", + "error_internal": "🧐 Вибачаємось, щось пішло не так. Будь ласка, спробуйте пізніше.", "error_unknownrequest": "⚠️ Нічого не знайдено, будь ласка, використовуйте одну з запропонованних команд:", "error_wip": "💤 Розробляється...", - "error_session_timeout": "⚠️ Cессія була прервана, час очікування вийшов.", + "error_session_timeout": "⚠️ Cессія була скасована, час очікування вийшов.", "exchangerate_button_title": "Курс CS", "exchangerate_text": [ - "💸 Вартість одного ключа в Counter-Strike:", + "💸 Вартість одного ключа у Counter-Strike:", "", "🇺🇸 USD: $ {}", "🇬🇧 GBP: £ {}", @@ -395,9 +395,9 @@ "stats_matchmaking_text": [ "⁠📊 **Статистика матчмейкінгу:**", "", - "• Сервери онлайн: {:,}", + "• Сервера онлайн: {:,}", "• Гравці онлайн: {:,}", - "• Активі гравці: {:,}", + "• Активні гравці: {:,}", "• Гравці в черзі: {:,}", "• Приблизний час пошуку гри: {} с." ], @@ -412,7 +412,7 @@ "🔗 Будь ласка, введіть один із запропонованих варіантів:", "", "• Посилання на профіль (напр.: `https://steamcommunity.com/id/unavenyyy`)", - "• Єдине посилання на профіль (напр.: `https://steamcommunity.com/profiles/76561199029594485`)", + "• Незмінне посилання на профіль (напр.: `https://steamcommunity.com/profiles/76561199029594485`)", "• SteamID (напр.: `76561199029594485`)", "• Персональне посилання (напр.: `unavenyyy`)" ], @@ -420,7 +420,7 @@ "settings_language_choose": [ "🔖 Оберіть бажану мову:", "", - "Ваша поточна мова: {}." + "Ваша мова: {}." ], "user_gamestats_button_title": "Статистика CS", "user_gamestats_inline_title": "Ваша статистика", @@ -466,13 +466,14 @@ "user_gamestats_pistols_stats": "🔫 Статистика пістолетів:", "user_gamestats_heavy_stats": "🔫 Статистика важкої зброї:", "user_gamestats_smgs_stats": "🔫 Статистика пістолетів-кулеметів:", - "user_gamestats_rifles_stats": "🔫 Статистика штурмових винтовок:", - "user_gamestats_snipers_stats": "🔫 Статистика снайперських винтовок:", + "user_gamestats_rifles_stats": "🔫 Статистика штурмових гвинтівок:", + "user_gamestats_snipers_stats": "🔫 Статистика снайперських гвинтівок:", "user_gamestats_share": "Поділитися", "user_invalidlink_error": "⚠️ Посилання недійсне, перевірте її та спробуйте знову.", "user_invalidrequest_error": "⚠️ Невірний запит.", + "user_nostatsavailable_error": "⚠️ Для данного профиля нет доступной статистики CS2.", "user_telegraph_error": "⚠️ Помилка Telegraph, будь ласка, спробуйте знову.", - "user_privateprofile_error": "❕ Цей аккаунт приватний, неможливо отримати статистику. Будь ласка, змініть настройки приватності.", + "user_privateprofile_error": "❕ Цей аккаунт приватний, неможливо отримати статистику. Будь ласка, змініть налаштування приватності.", "user_profileinfo_title": "Блокування та обмеження", "user_profileinfo_text": [ "🔍 **Загальна Інформація профілю:**", @@ -497,13 +498,13 @@ "• Блокування в спільноті: {}", "• Обмеження на обмін: {}" ], - "user_profileinfo_notset": "не вказана", - "user_profileinfo_notfound": "не знайдена", - "user_profileinfo_none": "нема", + "user_profileinfo_notset": "не вказано", + "user_profileinfo_notfound": "не знайдено", + "user_profileinfo_none": "немає", "user_profileinfo_banned": "заблоковано", "valve_hqtime_button_title": "Час у штаб-кв. Valve", "valve_hqtime_inline_title": "Час у Белвью", - "valve_hqtime_inline_description": "Час в штаб-кв. Valve", - "valve_hqtime_text": "{} Час в Белвью (штаб-кв. Valve): {}", - "valve_steam_maintenance_text": "🛠️ **Steam вимикається на короткочасне технічне обслуговування кожен вівторок.**" + "valve_hqtime_inline_description": "Час у штаб-кв. Valve", + "valve_hqtime_text": "{} Час у Белвью (штаб-кв. Valve): {}", + "valve_steam_maintenance_text": "🛠️ **Steam вимикається на короткочасне технічне обслуговування щовівторка.**" } \ No newline at end of file diff --git a/l10n/data/uz.json b/l10n/data/uz.json index f75ad1c..8c7d405 100644 --- a/l10n/data/uz.json +++ b/l10n/data/uz.json @@ -93,6 +93,8 @@ ], "dc_north": "Shimoliy", "dc_south": "Janubiy", + "dc_east": "East", + "dc_west": "West", "dc_africa_title": "Janubiy Afrika data-centre", "dc_africa_inline_title": "Afrika DC", "dc_africa_johannesburg": "Yoxannesburg", @@ -128,21 +130,18 @@ "dc_spain_inline_title": "Ispaniya DC", "dc_spain_madrid": "Madrid", "dc_us": "AQSh", - "dc_us_north": "dc_us_north / internally used key, no need to translate it", - "dc_us_south": "dc_us_south / internally used key, no need to translate it", - "dc_us_north_inline_title": "Shimoliy AQSh DC", - "dc_us_north_central_title": "Shimoli-markaziy data-centre", - "dc_us_north_central_chicago": "Chikago", - "dc_us_north_east_title": "Shimoli-sharqiy data-centre", - "dc_us_north_east_sterling": "Sterling", - "dc_us_north_west_title": "Shimoli-g'arbiy data-centre", - "dc_us_north_west_new_york": "Nyu-York", - "dc_us_north_west_seattle": "Sietl", - "dc_us_south_inline_title": "DC Janubiy AQSh", - "dc_us_south_east_title": "Janubi-sharqiy data-centre", - "dc_us_south_east_atlanta": "Atlanta", - "dc_us_south_west_title": "Janibi-g'arbiy data-centre", - "dc_us_south_west_los_angeles": "Los Anjeles", + "dc_us_east": "dc_us_east / internally used key, no need to translate it", + "dc_us_east_title": "East USA DC", + "dc_us_east_inline_title": "Eastern USA DC", + "dc_us_chicago": "Chikago", + "dc_us_sterling": "Sterling", + "dc_us_new_york": "Nyu-York", + "dc_us_atlanta": "Atlanta", + "dc_us_west": "dc_us_west / internally used key, no need to translate it", + "dc_us_west_title": "West USA DC", + "dc_us_west_inline_title": "Western USA DC", + "dc_us_seattle": "Sietl", + "dc_us_los_angeles": "Los Anjeles", "dc_argentina": "Argentina", "dc_argentina_title": "Argentinadagi data-centre", "dc_argentina_inline_title": "Argentina DC", @@ -163,6 +162,7 @@ "dc_india_title": "Hindistondagi data-centre", "dc_india_inline_title": "Hindiston DC", "dc_india_mumbai": "Mumbay", + "dc_india_bombay": "Bombay", "dc_india_chennai": "Chennai", "dc_japan": "Yaponiya", "dc_japan_title": "Yaponiyadagi data-centre", @@ -471,6 +471,7 @@ "user_gamestats_share": "Repost", "user_invalidlink_error": "⚠️ Siz yuborgan havola yaroqsiz, uning toʻgʻriligini tekshiring va qaytadan urinib koʻring.", "user_invalidrequest_error": "⚠️ So‘rov noto‘g‘ri.", + "user_nostatsavailable_error": "⚠️ Для данного профиля нет доступной статистики CS2.", "user_telegraph_error": "⚠️ Произошла внутренняя ошибка Telegraph, пожалуйста, введите ссылку заново.", "user_privateprofile_error": "❕ Bu akkaunt shaxsiydir, statistikani olish mumkin emas. Iltimos, maxfiylik sozlamalaringizni o'zgartiring.", "user_profileinfo_title": "Bloklar va cheklovlar", diff --git a/l10n/l10n.py b/l10n/l10n.py index f709583..31e845d 100644 --- a/l10n/l10n.py +++ b/l10n/l10n.py @@ -95,6 +95,8 @@ class Locale(SLocale): dc_north: str # North dc_south: str # South + dc_east: str # East + dc_west: str # West dc_africa_title: str # South Africaʼs DC dc_africa_inline_title: str # African DC @@ -134,21 +136,18 @@ class Locale(SLocale): dc_spain_madrid: str # Madrid dc_us: str # USA - dc_us_north: str # North - dc_us_south: str # South - dc_us_north_inline_title: str # Northern USA DC - dc_us_north_central_title: str # Northcentral DC - dc_us_north_central_chicago: str # Chicago - dc_us_north_east_title: str # Northeast DC - dc_us_north_east_sterling: str # Sterling - dc_us_north_west_title: str # Northwest DC - dc_us_north_west_new_york: str # New York - dc_us_north_west_seattle: str # Seattle - dc_us_south_inline_title: str # Southern USA DC - dc_us_south_east_title: str # Southeast DC - dc_us_south_east_atlanta: str # Atlanta - dc_us_south_west_title: str # Southwest DC - dc_us_south_west_los_angeles: str # Los Angeles + dc_us_east: str # East + dc_us_east_title: str # East USA DC + dc_us_east_inline_title: str # Eastern USA DC + dc_us_chicago: str # Chicago + dc_us_sterling: str # Sterling + dc_us_new_york: str # New York + dc_us_atlanta: str # Atlanta + dc_us_west: str # West + dc_us_west_title: str # West USA DC + dc_us_west_inline_title: str # Western USA DC + dc_us_seattle: str # Seattle + dc_us_los_angeles: str # Los Angeles dc_argentina: str # Argentina dc_argentina_title: str # Argentinaʼs DC @@ -171,6 +170,7 @@ class Locale(SLocale): dc_india_title: str # Indiaʼs DC dc_india_inline_title: str # Indian DC dc_india_mumbai: str # Mumbai + dc_india_bombay: str # Bombay dc_india_chennai: str # Chennai dc_japan: str # Japan dc_japan_title: str # Japanʼs DC @@ -376,6 +376,7 @@ class Locale(SLocale): user_gamestats_share: str user_invalidlink_error: str user_invalidrequest_error: str + user_nostatsavailable_error: str user_telegraph_error: str user_privateprofile_error: str user_profileinfo_title: str diff --git a/l10n/tags.py b/l10n/tags.py index 3fb6700..e89eb3e 100644 --- a/l10n/tags.py +++ b/l10n/tags.py @@ -46,8 +46,8 @@ class Tags(NamedTuple): dc_europe_sweden: list # Sweden dc_us: list # USA - dc_us_north: list # North - dc_us_south: list # South + dc_us_east: list # East + dc_us_west: list # West dc_asia: list # Asia dc_asia_india: list # India diff --git a/main.py b/main.py index b76cff7..31892e8 100644 --- a/main.py +++ b/main.py @@ -1,4 +1,5 @@ import asyncio +from asyncio.exceptions import TimeoutError import datetime as dt import json import traceback @@ -432,6 +433,8 @@ async def user_info_handle_error(_, session: UserSession, user_input: Message, e elif exc.code == ErrorCode.PROFILE_IS_PRIVATE: error_msg = '' + \ session.locale.user_privateprofile_error + elif exc.code == ErrorCode.NO_STATS_AVAILABLE: + error_msg = session.locale.user_nostatsavailable_error return error_msg @@ -690,7 +693,7 @@ async def smgs_process(client: BotClient, session: UserSession, callback_query: chosen_gun = callback_query.data bot_message = callback_query.message - + if chosen_gun in GUNS_INFO: keyboards.smgs_markup.select_button_by_key(chosen_gun) return await send_gun_info(client, session, bot_message, smgs, GUNS_INFO[chosen_gun], @@ -721,7 +724,7 @@ async def rifles_process(client: BotClient, session: UserSession, callback_query chosen_gun = callback_query.data bot_message = callback_query.message - + if chosen_gun in GUNS_INFO: keyboards.rifles_markup.select_button_by_key(chosen_gun) return await send_gun_info(client, session, bot_message, rifles, GUNS_INFO[chosen_gun], @@ -781,7 +784,7 @@ async def language_process(client: BotClient, session: UserSession, callback_que chosen_lang = callback_query.data bot_message = callback_query.message - + if chosen_lang == LK.bot_back: return await client.go_back(session, bot_message) if chosen_lang in AVAILABLE_LANGUAGES: @@ -816,7 +819,12 @@ async def leave_feedback(client: BotClient, session: UserSession, message: Messa text = session.locale.bot_feedback_text + '\n\n' + session.locale.bot_use_cancel - feedback = await client.ask_message(message.chat.id, text) + try: + feedback = await client.ask_message(message.chat.id, text, timeout=ASK_TIMEOUT) + except TimeoutError: + await client.send_message(message.chat.id, 'Timed out.') # todo: добавить строку локализации + session.current_menu_id = main_menu.id + return await message.reply(session.locale.bot_choose_cmd, reply_markup=keyboards.main_markup(session.locale)) if feedback.text == '/cancel': await feedback.delete() diff --git a/plugins/incs2chat.py b/plugins/incs2chat.py index c68dc83..1cf0468 100644 --- a/plugins/incs2chat.py +++ b/plugins/incs2chat.py @@ -1,14 +1,31 @@ import asyncio from pyrogram import Client, filters -from pyrogram.enums import ChatMembersFilter -from pyrogram.types import Message +from pyrogram.enums import ChatMembersFilter, MessageEntityType +from pyrogram.types import Message, MessageEntity # noinspection PyUnresolvedReferences import env import config +def correct_message_entity(entities: list[MessageEntity] | None, + original_text: str, new_text: str) -> list[MessageEntity] | None: + """Correct message entities (a.k.a. Markdown formatting) for edited text.""" + + if entities is None: + return + + length_diff = len(original_text) - len(new_text) + for entity in entities: + if entity.type == MessageEntityType.BOT_COMMAND: + del entity + else: + entity.offset -= length_diff + + return entities + + @Client.on_message(filters.chat(config.INCS2CHAT) & filters.command("ban")) async def ban(client: Client, message: Message): chat = await client.get_chat(config.INCS2CHAT) @@ -55,7 +72,7 @@ async def warn(client: Client, message: Message): await message.delete() -@Client.on_message(filters.chat(config.INCS2CHAT) & filters.command("echo")) +@Client.on_message(filters.chat(config.INCS2CHAT) & filters.command('echo')) async def echo(client: Client, message: Message): # todo: more attachments? chat = await client.get_chat(config.INCS2CHAT) admins = chat.get_members(filter=ChatMembersFilter.ADMINISTRATORS) @@ -72,35 +89,36 @@ async def echo(client: Client, message: Message): # todo: more attachments? reply_to = message should_reply = False + if message.text: + text = message.text.removeprefix('/echo').strip() + entities = correct_message_entity(message.entities, message.text, text) + + if not text: + msg = await message.reply('Пустой текст.', quote=False) + await asyncio.sleep(5) + await msg.delete() + return + + return await reply_to.reply(text, entities=entities, quote=should_reply, disable_web_page_preview=True) + + caption = message.caption.removeprefix('/echo').strip() + entities = correct_message_entity(message.entities, message.caption, caption) + if message.animation: animation = message.animation.file_id - caption = message.caption.removeprefix('/echo').strip() - return await reply_to.reply_animation(animation, quote=should_reply, caption=caption) + return await reply_to.reply_animation(animation, quote=should_reply, caption=caption, caption_entities=entities) if message.audio: audio = message.audio.file_id - caption = message.caption.removeprefix('/echo').strip() - return await reply_to.reply_audio(audio, quote=should_reply, caption=caption) + return await reply_to.reply_audio(audio, quote=should_reply, caption=caption, caption_entities=entities) if message.photo: photo = message.photo.file_id - caption = message.caption.removeprefix('/echo').strip() - return await reply_to.reply_photo(photo, quote=should_reply, caption=caption) - - if message.text: - text = message.text.removeprefix('/echo').strip() - if not text: - msg = await message.reply("Пустой текст.", quote=False) - await asyncio.sleep(5) - await msg.delete() - return - - return await reply_to.reply(text, quote=should_reply) + return await reply_to.reply_photo(photo, quote=should_reply, caption=caption, caption_entities=entities) if message.video: video = message.video.file_id - caption = message.caption.removeprefix('/echo').strip() - return await reply_to.reply_video(video, quote=should_reply, caption=caption) + return await reply_to.reply_video(video, quote=should_reply, caption=caption, caption_entities=entities) @Client.on_message(filters.linked_channel & filters.chat(config.INCS2CHAT)) diff --git a/plugins/inline.py b/plugins/inline.py index a501d12..16b0ae3 100644 --- a/plugins/inline.py +++ b/plugins/inline.py @@ -193,14 +193,14 @@ async def inline_datacenters(_, session: UserSession, inline_query: InlineQuery) 'https://telegra.ph/file/f552dc251f2c0a4e5be53.png', datacenter_handlers.sweden, TAGS.dc_europe_sweden), - DatacenterInlineResult(session.locale.dc_us_north_inline_title, + DatacenterInlineResult(session.locale.dc_us_east_inline_title, 'https://telegra.ph/file/06119c30872031d1047d0.jpg', - datacenter_handlers.us_north, - TAGS.dc_us_north), - DatacenterInlineResult(session.locale.dc_us_south_inline_title, + datacenter_handlers.us_east, + TAGS.dc_us_east), + DatacenterInlineResult(session.locale.dc_us_west_inline_title, 'https://telegra.ph/file/06119c30872031d1047d0.jpg', - datacenter_handlers.us_south, - TAGS.dc_us_south), + datacenter_handlers.us_west, + TAGS.dc_us_west), DatacenterInlineResult(session.locale.dc_australia_inline_title, 'https://telegra.ph/file/5dc6beef1556ea852284c.jpg', datacenter_handlers.australia, diff --git a/utypes/bclient.py b/utypes/bclient.py new file mode 100644 index 0000000..e69de29 diff --git a/utypes/datacenters.py b/utypes/datacenters.py index 21e4a90..90c74f2 100644 --- a/utypes/datacenters.py +++ b/utypes/datacenters.py @@ -173,77 +173,46 @@ class DatacenterAtlas: LK.dc_sweden_title ) - US_NORTH = DatacenterGroup( - "us_north", + US_EAST = DatacenterRegion( + "us_east", [ - DatacenterRegion( - "northcentral", - [ - Datacenter( - "chicago", - l10n_key_title=LK.dc_us_north_central_chicago - ), - ], - symbol="🇺🇸", - l10n_key_title=LK.dc_us_north_central_title + Datacenter( + "chicago", + l10n_key_title=LK.dc_us_chicago ), - DatacenterRegion( - "northeast", - [ - Datacenter( - "sterling", - l10n_key_title=LK.dc_us_north_east_sterling - ), - ], - symbol="🇺🇸", - l10n_key_title=LK.dc_us_north_east_title + Datacenter( + "sterling", + l10n_key_title=LK.dc_us_sterling ), - DatacenterRegion( - "northwest", - [ - Datacenter( - "new_york", - l10n_key_title=LK.dc_us_north_west_new_york - ), - Datacenter( - "seattle", - l10n_key_title=LK.dc_us_north_west_seattle - ), - ], - symbol="🇺🇸", - l10n_key_title=LK.dc_us_north_west_title + Datacenter( + "new_york", + l10n_key_title=LK.dc_us_new_york + ), + Datacenter( + "atlanta", + l10n_key_title=LK.dc_us_atlanta ) ], - LK.dc_north + "🇺🇸", + LK.dc_east, + LK.dc_us_east_title ) - US_SOUTH = DatacenterGroup( - "us_south", + US_WEST = DatacenterRegion( + "us_west", [ - DatacenterRegion( - "southwest", - [ - Datacenter( - "los_angeles", - l10n_key_title=LK.dc_us_south_west_los_angeles - ), - ], - symbol="🇺🇸", - l10n_key_title=LK.dc_us_south_west_title + Datacenter( + "los_angeles", + l10n_key_title=LK.dc_us_los_angeles ), - DatacenterRegion( - "southeast", - [ - Datacenter( - "atlanta", - l10n_key_title=LK.dc_us_south_east_atlanta - ), - ], - symbol="🇺🇸", - l10n_key_title=LK.dc_us_south_east_title + Datacenter( + "seattle", + l10n_key_title=LK.dc_us_seattle ) ], - LK.dc_south + "🇺🇸", + LK.dc_west, + LK.dc_us_west_title ) ARGENTINA = DatacenterRegion( @@ -315,6 +284,10 @@ class DatacenterAtlas: Datacenter( "chennai", l10n_key_title=LK.dc_india_chennai + ), + Datacenter( + "bombay", + l10n_key_title=LK.dc_india_bombay ) ], "🇮🇳", diff --git a/utypes/game_data.py b/utypes/game_data.py index f746b74..411ddf3 100644 --- a/utypes/game_data.py +++ b/utypes/game_data.py @@ -1,3 +1,5 @@ +from __future__ import annotations + import datetime as dt import json from typing import NamedTuple @@ -327,16 +329,16 @@ def asdict(self): return self._asdict() -def get_monthly_unique_players(): +def get_monthly_unique_players() -> int: response = requests.get(MONTHLY_UNIQUE_PLAYERS_API, headers=HEADERS, timeout=15).json() return int(response['result']['players']) -def is_pdt(_datetime: dt.datetime): +def is_pdt(_datetime: dt.datetime) -> bool: return _datetime.strftime('%Z') == 'PDT' -def drop_cap_reset_timer(): +def drop_cap_reset_timer() -> tuple[int, int, int, int]: """Get drop cap reset time""" wanted_weekday = 1 @@ -353,7 +355,7 @@ def drop_cap_reset_timer(): time_left = wanted_datetime - now - days_left = time_left.days + days_left = time_left.days % 7 hours_left = time_left.seconds // HOUR minutes_left = time_left.seconds % HOUR // MINUTE seconds_left = time_left.seconds % MINUTE diff --git a/utypes/profiles.py b/utypes/profiles.py index b251296..4284702 100644 --- a/utypes/profiles.py +++ b/utypes/profiles.py @@ -36,6 +36,7 @@ class ErrorCode(StrEnum): INVALID_LINK = 'INVALID_LINK' PROFILE_IS_PRIVATE = 'PROFILE_IS_PRIVATE' UNKNOWN_ERROR = 'UNKNOWN_ERROR' + NO_STATS_AVAILABLE = 'NO_STATS_AVAILABLE' class ParseUserStatsError(Exception): @@ -245,6 +246,9 @@ def get(cls, data): if not response: raise ParseUserStatsError(ErrorCode.PROFILE_IS_PRIVATE) + logging.info(response) + if response.get('playerstats') is None or response['playerstats'].get('stats') is None: + raise ParseUserStatsError(ErrorCode.NO_STATS_AVAILABLE) stats_dict = {stat['name']: stat['value'] for stat in response['playerstats']['stats']} stats_dict['steamid'] = steam64 diff --git a/utypes/states.py b/utypes/states.py index 3952a81..b570634 100644 --- a/utypes/states.py +++ b/utypes/states.py @@ -1,3 +1,5 @@ +from __future__ import annotations + from typing import NamedTuple # noinspection PyPep8Naming