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.
\

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.
\

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