From 93b574f09e3e18cb1a9950578f9228bf24449b31 Mon Sep 17 00:00:00 2001 From: exmanka Date: Wed, 17 Jan 2024 20:27:06 +0300 Subject: [PATCH] feat(bot): add instructions texts --- src/handlers/admin.py | 1 + src/handlers/other.py | 1 + src/handlers/user_authorized.py | 30 ++++++-- src/keyboards/other_kb.py | 4 +- src/localizations/en.json | 111 ++++++++++++++++++----------- src/localizations/ru.json | 111 ++++++++++++++++++----------- src/services/internal_functions.py | 2 +- 7 files changed, 174 insertions(+), 86 deletions(-) diff --git a/src/handlers/admin.py b/src/handlers/admin.py index cbb0327..934ebbe 100644 --- a/src/handlers/admin.py +++ b/src/handlers/admin.py @@ -456,6 +456,7 @@ async def send_configuration(message: Message, state: FSMContext): # send message to client, admin and finish FSM for sending configurations await bot.send_message(telegram_id, loc.auth.msgs['config_was_received'], parse_mode='HTML') await internal_functions.send_configuration(telegram_id, file_type, date_of_receipt, os, is_chatgpt_available, name, country, city, bandwidth, ping, telegram_file_id) + await bot.send_message(telegram_id, loc.auth.msgs['configs_rules'], parse_mode='HTML') await message.reply(loc.admn.msgs['config_was_sent'].format(file_type), parse_mode='HTML') await state.finish() diff --git a/src/handlers/other.py b/src/handlers/other.py index 1e85b0e..070ebc7 100644 --- a/src/handlers/other.py +++ b/src/handlers/other.py @@ -61,6 +61,7 @@ async def command_start(message: Message, state: FSMContext = None): if state: await state.finish() await message.answer(loc.other.msgs['already_registered'], reply_markup=user_authorized_kb.menu) + await message.answer(loc.auth.msgs['configs_rules'], parse_mode='HTML') def register_handlers_other(dp: Dispatcher): diff --git a/src/handlers/user_authorized.py b/src/handlers/user_authorized.py index 622c1ab..49aad81 100644 --- a/src/handlers/user_authorized.py +++ b/src/handlers/user_authorized.py @@ -1,7 +1,7 @@ import random from decimal import Decimal from aiogram import Dispatcher -from aiogram.types import Message, CallbackQuery +from aiogram.types import Message, CallbackQuery, MediaGroup from aiogram.dispatcher import FSMContext from aiogram.dispatcher.filters import Text from aiogram.utils.exceptions import MessageToDeleteNotFound @@ -302,7 +302,7 @@ async def account_configurations_request_chatgpt(message: Message, state: FSMCon await internal_functions.send_configuration_request_to_admin({'fullname': message.from_user.full_name, 'username': message.from_user.username, 'id': message.from_user.id}, data._data, is_new_client=False) - await message.answer(loc.auth.msgs['wait_for_admin'], reply_markup=user_authorized_kb.config) + await message.answer(loc.auth.msgs['wait_for_admin'], parse_mode='HTML', reply_markup=user_authorized_kb.config) await message.answer(loc.auth.msgs['i_wanna_sleep']) await state.set_state(user_authorized_fsm.AccountMenu.configs) @@ -574,14 +574,36 @@ async def account_promo_info(message: Message): async def configuration_instruction(call: CallbackQuery): """Send message with instruction for configuration specified by inline button.""" configuration_protocol_name, configuration_os = call.data.split('--') - await call.message.reply(loc.internal.msgs['instructions'][configuration_protocol_name.lower()][configuration_os.lower()]) + + # answer without photos + # await call.message.reply(loc.auth.msgs['instructions'][configuration_protocol_name.lower()][configuration_os.lower()], + # parse_mode='HTML', disable_web_page_preview=True) + + # get objects from localization + instruction_text = loc.auth.msgs['instructions'][configuration_protocol_name.lower()][configuration_os.lower()] + instruction_images_list = loc.auth.tfids['instructions'][configuration_protocol_name.lower()][configuration_os.lower()] + + # use media group builder in aiogram 3.x.x + # create media group with multiple photos and caption as instruction + media_group = MediaGroup() + + # add first image to media group with caption and parse_mode to display caption in instruction + media_group.attach_photo(instruction_images_list[0], caption=instruction_text, parse_mode='HTML') + + # add all other photos to media group + if len(instruction_images_list) > 1: + for telegram_file_id in instruction_images_list[1:]: + media_group.attach_photo(telegram_file_id) + + # send media group to client + await call.message.reply_media_group(media_group) await call.answer() @user_mw.authorized_only() async def show_project_rules(message: Message): """Send message with information about project rules.""" - await message.answer(loc.auth.msgs['rules'], parse_mode='HTML') + await message.answer_photo(loc.auth.tfids['rules'], caption=loc.auth.msgs['rules'], parse_mode='HTML') @user_mw.authorized_only() diff --git a/src/keyboards/other_kb.py b/src/keyboards/other_kb.py index 3380e18..6da2f3c 100644 --- a/src/keyboards/other_kb.py +++ b/src/keyboards/other_kb.py @@ -2,4 +2,6 @@ from src.services import localization as loc -faq_inline = InlineKeyboardMarkup().add(InlineKeyboardButton(loc.other.btns['faq_inline'], callback_data=loc.other.btns['faq_inline_callback'])) \ No newline at end of file +faq_inline = InlineKeyboardMarkup().\ + add(InlineKeyboardButton(loc.other.btns['faq_inline'], callback_data=loc.other.btns['faq_inline_callback'])).\ + add(InlineKeyboardButton(loc.other.btns['tg_channel_inline'], url=loc.other.btns['tg_channel_inline_url'])) \ No newline at end of file diff --git a/src/localizations/en.json b/src/localizations/en.json index 01fae4c..8fd7126 100644 --- a/src/localizations/en.json +++ b/src/localizations/en.json @@ -4,7 +4,7 @@ "messages": { "return_to_main_menu": "Returning to the main menu", "need_define_config": "To connect, I need to define your configuration", - "ask_four_questions": "I will ask 4 short questions!", + "ask_four_questions": "🙋‍♂️ I will ask 4 short questions!", "choose_your_platform": "Choose your platform", "choose_your_os": "Specify the operating system", "choose_chatgpt_option": "Do you use ChatGPT?", @@ -41,7 +41,7 @@ "user_authorized": { "messages": { - "rules": "When working with the service, it is mandatory:\n\n1. It is forbidden to share configurations (QR codes for smartphones or *.conf files for PCs) with other people. One configuration can only be used for one of your devices. At the same time, you can request an unlimited number of additional configurations for your use.\n\n2. It is forbidden to download files via torrent clients. However, the *.torrent extension files themselves can be downloaded.\nExample: You want to download the movie, but the website hosting the files is not available from Russia. You turn on the VPN, go to the website and download the filmexample.torrent file. Next, you turn off the VPN and start downloading the movie itself in your torrent client.\n\n\nWhen working with the service, it is recommended:\n\n1. Do not use a VPN at times when you do not need it. Thanks to this, you will not experience problems with your applications.", + "rules": "By using the service, you agree to the rules:\n\n1. It is forbidden to share configurations with other people.\nOne configuration can only be used for one of your devices. At the same time, you can request an unlimited number of additional configurations for your use within a reasonable framework.\n\n2. It is forbidden to download files via torrent clients using a VPN.\nHowever, the files themselves of the *.torrent extension can be downloaded.\nExample: You want to download the movie, but the website hosting the files is not available from Russia. You turn on the VPN, go to the site and download the file film-example.torrent. Next, you turn off the VPN and start downloading the movie itself in your torrent client.\n\n3. It is recommended not to use a VPN when it is not necessary.Thanks to this, you will not experience problems with your applications.\n\n❌ Violation of rules 1-2 may result in immediate blocking of the user.", "sub_isnt_active": "The subscription has not been activated yet, as the administrator has not yet sent the configuration! Don't worry, the subscription expiration time report will start only after you receive it!", "sub_active": "🔥 The subscription is active!", "sub_is_free": "🔥 The subscription is active forever!", @@ -69,11 +69,11 @@ "go_settings": "Going to settings", "return_to_personal_account": "Returning to personal account", "configs_info": "Information about all your configurations, now you do not need to search for them through the dialogue with the bot!\n\n All configurations {0}.", - "configs_rules": "I remind you of the basic rules /rules:\n\n1. One device is one configuration.\n2. Sharing configurations with other people is prohibited!", + "configs_rules": "I remind you of the basic rules /rules:\n\n1. One device is one configuration.\n2. Sharing configurations with other people is prohibited!\n3. Downloading files via torrent clients is prohibited!\n\n❌ Violation of any of the rules may result in the immediate blocking of the user.", "return_to_configs_menu": "Returning to the configuration menu", "cant_request_config": "To request a new configuration, you need to renew your subscription!", "ask_three_questions": "You will need to answer 3 questions to request a new configuration from the administrator!\n\nMore of your configurations: {0}", - "wait_for_admin": "Great! Now we are waiting for a response from the developer: soon he will check your current configurations and send a new one!", + "wait_for_admin": "🎉 Great, now we are waiting for a response from the developer!\n\nHe will check your current configurations soon and send a new one!", "i_wanna_sleep": "Please do not forget that he is also a human being, and periodically sleeps (although in fact extremely rarely)", "return_to_settings": "Returning to the settings", "go_settings_chatgpt": "Going to the ChatGPT mode settings", @@ -117,7 +117,35 @@ "local_promos_str": "💎 Used special promo codes:\n{local_promo_row_str}\n", "local_promo_row_str": "{0}. {1} for {2} days of subscription.\nLED {3}.\n", "no_promo_entered": "You have not entered any promo codes yet. Follow the news! 🚀", - "config_was_received": "✨ Hooray, the configuration is received!" + "config_was_received": "✨ Hooray, the configuration is received!", + "instructions": { + "wireguard": + { + "android": "⚙️ Instructions for installing WireGuard on Android:\n1. Download and install the official Wireguard app (link to the Play Market).\n2. After launching, click on the «+» icon in the lower right corner of the screen.3. Select the option «Create from QR code»/«Scan from QR code», allow access to the camera and scan the QR code.\n4. Enter the name of your VPN tunnel! You can specify any name, but it is recommended to name the tunnel by the country of location (Netherlands/Germany/Latvia/USA).\n\n🎉 Instructions for use:\n1.To turn on the VPN, just click on the switch to the right of the tunnel name. For the first time, the phone may issue a notification about adding a new VPN connection - you must agree.\n2. To turn off the VPN, you need to change the switch position again.", + "ios": "⚙️ Instructions for installing WireGuard on iOS:\n1. Download and install the official Wireguard app (link in the App Store).\n2. After launching, click on the «+» icon in the lower right corner of the screen.3. Select the option «Create from QR code»/«Scan from QR code», allow access to the camera and scan the QR code.\n4. Enter the name of your VPN tunnel! You can specify any name, but it is recommended to name the tunnel by the country of location (Netherlands/Germany/Latvia/USA).\n\n🎉 Instructions for use:\n1.To turn on the VPN, just click on the switch to the right of the tunnel name. For the first time, the phone may issue a notification about adding a new VPN connection - you must agree.\n2. To turn off the VPN, you need to change the switch position again.", + "windows": "⚙️ Instructions for installing WireGuard on Windows:\n1. Download and install the Wireguard app (link to the official website).\n2. After launching, click «Add tunnel»/«Add tunnel» and select the extension file *.conf sent to you.\n\n🎉 Instructions for use:\n1. To enable VPN, just select a tunnel and click «Connect».\n2. To turn off the VPN, just click «Disable».", + "macos": "⚙️ Instructions for installing WireGuard on macOS:\n1. Download and install the official Wireguard app (link in the App Store).\n2. After launching, click «Add tunnel»/«Add tunnel» and select the extension file *.conf sent to you.\n\n🎉 Instructions for use:\n1. To enable VPN, just select a tunnel and click «Connect».\n2. To turn off the VPN, just click «Disable».", + "linux": "⚙️ Instructions for installing and using WireGuard on GNU/Linux:\nOh, you're not little anymore, since you're using Linux!I send you great respect and a link to the documentation: https://www.wireguard.com/install/#ubuntu-module-tools\n\nПодсказки Installation instructions can be found here: https://shrub-coriander-4a3.notion.site/Linux-Mint-Cinnamon-21-1-29cda1060f4d4ab48c483cfa70948e46?pvs=4 " + }, + + "xray vless xtls-reality": + { + "android": "⚙️ Instructions for installing XTLS-Reality on Android:\n1. Download and install the official v2rayNG app (link to the Play Market).\n2. After launching, click on the «+» icon next to the Profile.\n3. Select «Import profile from QR code», allow access to the camera and scan the QR code.\n\n🎉 Instructions for use:\n1.To turn on the VPN, just click on the switch in the lower right corner.For the first time, the phone may issue a notification about adding a new VPN connection - you must agree.\n2. To turn off the VPN, you need to change the switch position again.", + "ios": "⚙️ Instructions for installing XTLS-Reality on iOS:\n1. Download and install the official FoXray app (link in the App Store).\n2. After launching, click on the QR code icon or Image at the top of the application.\n3. Scan the sent QR code through the camera or select its image in the gallery.\n\n🎉 Instructions for use:\n1. To enable VPN, just click on the switch to the right of the configuration name.For the first time, the phone may issue a notification about when adding a new VPN connection, you must agree.\n2. To turn off the VPN, you need to change the switch position again.", + "windows": "⚙️ Instructions for installing XTLS-Reality on Windows:\n1. Upgrade to the latest release of the nekoray app by the link.\n2. Download the Windows version.\n3. Unzip the archive (RMB archive«Extract all...»«Extract»)\n4. Run the file in the archive nekoray.exe .\n5. At the first launch, Windows will notify you that the application is being released by an unknown publisher. Don't be scared, NekoBox is an open source application. It is completely safe and does not carry any viruses.\n6. To continue, click «More details»«Execute anyway».\n7. Select «sing-box» in the start dialog box.\n8. Copy the link given to you and hold Ctrl+V in the application. The configuration will be added automatically.\n\n🎉 Instructions for use:\n1. Before switching on, be sure to select «TUN mode». To do this, you will need to restart the program as an administrator.\n2. You can enable and disable VPN in the program itself or in the tray.", + "macos": "⚙️ Instructions for installing XTLS-Reality on macOS:\n1. Download and install the official FoXray app (link in the App Store).\n2. After launching, click on the Notepad icon and paste the link sent to you.\n\n🎉 Instructions for use:\n1. To enable VPN, just click on the switch to the right of the configuration name.For the first time, the device may issue a notification about adding a new VPN connection — It is necessary to agree.\n2. To turn off the VPN, you need to change the switch position again.", + "linux": "⚙️ Instructions for installing and using XTLS-Reality on GNU/Linux:\nOh, you're not little anymore, since you use Linux!I send you great respect and a link to the documentation: https://github.com/MatsuriDayo/nekoray/tree/3.21 " + }, + + "shadowsocks-2022": + { + "android": "The Shadowsocks-2022 protocol is currently used only by the testing team.\n\nIf you are reading this message without being a tester, it means that the administrator made a mistake when creating the configuration. Write to him to clarify the problem!", + "ios": "The Shadowsocks-2022 protocol is currently used only by the testing team.\n\nIf you are reading this message without being a tester, it means that the administrator made a mistake when creating the configuration. Write to him to clarify the problem!", + "windows": "The Shadowsocks-2022 protocol is currently used only by the testing team.\n\nIf you are reading this message without being a tester, it means that the administrator made a mistake when creating the configuration. Write to him to clarify the problem!", + "macos": "The Shadowsocks-2022 protocol is currently used only by the testing team.\n\nIf you are reading this message without being a tester, it means that the administrator made a mistake when creating the configuration. Write to him to clarify the problem!", + "linux": "The Shadowsocks-2022 protocol is currently used only by the testing team.\n\nIf you are reading this message without being a tester, it means that the administrator made a mistake when creating the configuration. Write to him to clarify the problem!" +} +} }, "keyboard_buttons": { @@ -163,7 +191,36 @@ }, "telegram_file_ids": { - "ref_program_info": "AgACAgIAAxkBAAIBt2T4tvKfh4vtyw9E0esmv5ez8oipAAJH0jEba5XBS205NYeWh2RdAQADAgADcwADMAQ" + "rules": "AgACAgIAAxkBAAJUyGWoBkWcqxDLR5T7rxSAgxD9k8LJAALd1DEbxdRBSUXUhjzY2aggAQADAgADcwADNAQ", + "ref_program_info": "AgACAgIAAxkBAAJUv2WoBaYCCxzAlLwaiIEttY5NnqytAALa1DEbxdRBSdtn1kU78RbOAQADAgADcwADNAQ", + "instructions": { + "wireguard": + { + "android": ["AgACAgIAAxkBAAIBt2T4tvKfh4vtyw9E0esmv5ez8oipAAJH0jEba5XBS205NYeWh2RdAQADAgADcwADMAQ", "AgACAgIAAxkBAAIBZWT4pf2JcOWwWqzq6BrDBplE_LefAALD0TEba5XBSwtXi502wnAvAQADAgADcwADMAQ"], + "ios": ["AgACAgIAAxkBAAIBt2T4tvKfh4vtyw9E0esmv5ez8oipAAJH0jEba5XBS205NYeWh2RdAQADAgADcwADMAQ"], + "windows": ["AgACAgIAAxkBAAIBt2T4tvKfh4vtyw9E0esmv5ez8oipAAJH0jEba5XBS205NYeWh2RdAQADAgADcwADMAQ"], + "macos": ["AgACAgIAAxkBAAIBt2T4tvKfh4vtyw9E0esmv5ez8oipAAJH0jEba5XBS205NYeWh2RdAQADAgADcwADMAQ"], + "linux": ["AgACAgIAAxkBAAIBt2T4tvKfh4vtyw9E0esmv5ez8oipAAJH0jEba5XBS205NYeWh2RdAQADAgADcwADMAQ"] + }, + + "xray vless xtls-reality": + { + "android": ["AgACAgIAAxkBAAIBt2T4tvKfh4vtyw9E0esmv5ez8oipAAJH0jEba5XBS205NYeWh2RdAQADAgADcwADMAQ"], + "ios": ["AgACAgIAAxkBAAIBt2T4tvKfh4vtyw9E0esmv5ez8oipAAJH0jEba5XBS205NYeWh2RdAQADAgADcwADMAQ"], + "windows": ["AgACAgIAAxkBAAIBt2T4tvKfh4vtyw9E0esmv5ez8oipAAJH0jEba5XBS205NYeWh2RdAQADAgADcwADMAQ"], + "macos": ["AgACAgIAAxkBAAIBt2T4tvKfh4vtyw9E0esmv5ez8oipAAJH0jEba5XBS205NYeWh2RdAQADAgADcwADMAQ"], + "linux": ["AgACAgIAAxkBAAIBt2T4tvKfh4vtyw9E0esmv5ez8oipAAJH0jEba5XBS205NYeWh2RdAQADAgADcwADMAQ"] + }, + + "shadowsocks-2022": + { + "android": ["AgACAgIAAxkBAAIBt2T4tvKfh4vtyw9E0esmv5ez8oipAAJH0jEba5XBS205NYeWh2RdAQADAgADcwADMAQ"], + "ios": ["AgACAgIAAxkBAAIBt2T4tvKfh4vtyw9E0esmv5ez8oipAAJH0jEba5XBS205NYeWh2RdAQADAgADcwADMAQ"], + "windows": ["AgACAgIAAxkBAAIBt2T4tvKfh4vtyw9E0esmv5ez8oipAAJH0jEba5XBS205NYeWh2RdAQADAgADcwADMAQ"], + "macos": ["AgACAgIAAxkBAAIBt2T4tvKfh4vtyw9E0esmv5ez8oipAAJH0jEba5XBS205NYeWh2RdAQADAgADcwADMAQ"], + "linux": ["AgACAgIAAxkBAAIBt2T4tvKfh4vtyw9E0esmv5ez8oipAAJH0jEba5XBS205NYeWh2RdAQADAgADcwADMAQ"] + } + } } }, @@ -236,7 +293,7 @@ "chatgpt_only_for_active_sub": "ChatGPT mode is available only to clients with an active subscription!", "unrecognized_message": "Sorry, I don't understand you 🤔\n\nYou can give me unlimited power by enabling ChatGPT mode in the settings or by entering the command /chatgpt_mode", "already_registered": "✨ Wow! You are already in our system! I'm teleporting to my personal account!", - "github": "Special thanks\n\nto the UX/UI designer of the project:\n🦩 to Olga @KoberO https://band.link/Dmt3l\n\n The testing team:\n🍒 Egor @Y0gu4t EASTEREGGPROMO1032201661\n🎀 Karina @Howtofindmee\n🍆 Denis @seregin_denis\n— they tried very hard to find bugs, but they never found them." + "github": "Special thanks\n\nto the UX/UI designer of the project:\n🦩 to Olga @KoberO https://band.link/Dmt3l\n\n The testing team:\n🍒 Egor @Y0gu4t EASTEREGGPROMO1032201661\n🎀 Karina @Howtofindmee\n🍆 Denis @seregin_denis" }, "keyboard_buttons": { @@ -244,12 +301,14 @@ "about_project": "About project", "about_service": "About service", "faq_inline": "FAQ", - "faq_inline_callback": "faq" + "faq_inline_callback": "faq", + "tg_channel_inline": "Telegram channel", + "tg_channel_inline_url": "https://t.me/+5cDIKThNG-kzZjgy" }, "telegram_file_ids": { - "project_info": "AgACAgIAAxkBAAIBt2T4tvKfh4vtyw9E0esmv5ez8oipAAJH0jEba5XBS205NYeWh2RdAQADAgADcwADMAQ", - "hello_message": "AgACAgIAAxkBAAIBZWT4pf2JcOWwWqzq6BrDBplE_LefAALD0TEba5XBSwtXi502wnAvAQADAgADcwADMAQ" + "project_info": "AgACAgIAAxkBAAJUvWWoBX0os4xG-jw1vCeJKpf9QLsfAAKt1TEb7uNASSFIHuOuRnb0AQADAgADcwADNAQ", + "hello_message": "AgACAgIAAxkBAAJUtGWoBQKB7zYQK7mjyS989TmZm3ncAALW1DEbxdRBSTwqicJoelJXAQADAgADcwADNAQ" } }, @@ -276,37 +335,9 @@ "error_bad_os": "incorrect OS input (third argument)!", "error_bad_link": "incorrect vless link input (fourth argument)!", "ref_client_paid_for_sub": "🕊 Wow! The client {0}{1} who joined the project using your referral promo code has paid for the subscription for the first time!\n\nYou get a month of subscription for free!", - "wait_for_admin_answer": "Great! Now we are waiting for a response from the developer: soon he will check your registration and send you the configuration! In the meantime, you can explore the bot!", + "wait_for_admin_answer": "🎉 Great, now we are waiting for a response from the developer!\n\n He will check your registration soon and send you the configuration. In the meantime, you can explore the bot's functions!", "discount_str": "(discount {0:g}₽)", - "payment_successful": "The payment was made successfully!\n\nPayment identifier: #{0}", - "instructions": { - "wireguard": - { - "android": "", - "ios": "", - "windows": "", - "macos": "", - "linux": "" - }, - - "xray vless xtls-reality": - { - "android": "", - "ios": "", - "windows": "", - "macos": "", - "linux": "" - }, - - "shadowsocks-2022": - { - "android": "", - "ios": "", - "windows": "", - "macos": "", - "linux": "" - } - } + "payment_successful": "The payment was made successfully!\n\nPayment identifier: #{0}" }, "keyboard_buttons": { diff --git a/src/localizations/ru.json b/src/localizations/ru.json index 9786a54..06a78e3 100644 --- a/src/localizations/ru.json +++ b/src/localizations/ru.json @@ -4,7 +4,7 @@ "messages": { "return_to_main_menu": "Возвращаю в главное меню", "need_define_config": "Для подключения мне необходимо определить Вашу конфигурацию", - "ask_four_questions": "🙋‍♂️ Задам 4 коротких вопроса!", + "ask_four_questions": "🙋‍♂️ Задам 4 коротких вопроса!", "choose_your_platform": "Выберите свою платформу", "choose_your_os": "Укажите операционную систему", "choose_chatgpt_option": "Используете ли Вы ChatGPT?", @@ -41,7 +41,7 @@ "user_authorized": { "messages": { - "rules": "При работе с сервисом обязательно:\n\n1. Запрещается делиться конфигурациями (QR-кодами для смартфонов или файлами *.conf для ПК) с другими людьми. Одна конфигурация может быть использована только для одного Вашего устройства. При этом для своего пользования Вы можете запросить неограниченное количество дополнительных конфигураций.\n\n2. Запрещается загружать файлы через торрент-клиенты. Однако сами файлы расширения *.torrent скачивать можно.\nПример: Вы хотите скачать фильм, однако сайт, на котором размещены файлы, недоступен из России. Вы включаете VPN, заходите на сайт и загружаете файл filmexample.torrent. Далее Вы отключаете VPN и приступаете к загрузке самого фильма в Вашем торрент-клиенте.\n\n\nПри работе с сервисом рекомендуется:\n\n1. Не использовать VPN в моментах, когда он Вам не нужен. Благодаря этому, Вы не будете испытывать проблем с Вашими приложениями.", + "rules": "Используя сервис, Вы соглашаетесь с правилами:\n\n1. Запрещается делиться конфигурациями с другими людьми.\nОдна конфигурация может быть использована только для одного Вашего устройства. При этом для своего пользования Вы можете запросить неограниченное число дополнительных конфигураций в рамках разумного.\n\n2. Запрещается загружать файлы через торрент-клиенты с использованием VPN.\nОднако сами файлы расширения *.torrent скачивать можно.\nПример: Вы хотите скачать фильм, однако сайт, на котором размещены файлы, недоступен из России. Вы включаете VPN, заходите на сайт и загружаете файл film-example.torrent. Далее Вы отключаете VPN и приступаете к загрузке самого фильма в Вашем торрент-клиенте.\n\n3. Рекомендуется не использовать VPN, когда в нем нет необходимости.\nБлагодаря этому Вы не будете испытывать проблем с Вашими приложениями.\n\n❌ Нарушение правил 1-2 может привести к незамедлительной блокировке пользователя.", "sub_isnt_active": "Подписка еще не активирована, так как администратор пока что не прислал конфигурацию! Не переживайте, отчет времени истечения подписки начнется только после ее получения!", "sub_is_free": "🔥 Подписка активна вечно!", "sub_active": "🔥 Подписка активна!", @@ -69,11 +69,11 @@ "go_settings": "Перехожу в меню настроек", "return_to_personal_account": "Возвращаю в личный кабинет", "configs_info": "Информация о всех ваших конфигурациях, теперь не нужно искать их по диалогу с ботом!\n\nВсего конфигураций {0}.", - "configs_rules": "Напоминаю основные правила /rules:\n\n1. Одно устройство — одна конфигурация.\n2. Делиться конфигурациями с другими людьми запрещено!", + "configs_rules": "Напоминаю основные правила /rules:\n\n1. Одно устройство — одна конфигурация.\n2. Делиться конфигурациями с другими людьми запрещено!\n3. Скачивать файлы через торрент-клиенты запрещено!\n\n❌ Нарушение любого из правил может привести к незамедлительной блокировке пользователя.", "return_to_configs_menu": "Возвращаю в меню конфигураций", "cant_request_config": "Для запроса новой конфигурации необходимо продлить подписку!", "ask_three_questions": "Понадобиться ответить на 3 вопроса, чтобы запросить новую конфигурацию у администратора!\n\nОбщее число Ваших конфигураций: {0}", - "wait_for_admin": "Отлично! Теперь ждем ответа от разработчика: в скором времени он проверит ваши текущие конфигурации и вышлет новую!", + "wait_for_admin": "🎉 Отлично, теперь ждем ответа от разработчика!\n\nВ скором времени он проверит Ваши текущие конфигурации и вышлет новую!", "i_wanna_sleep": "Пожалуйста, не забывайте, что он тоже человек, и периодически спит (хотя на самом деле крайне редко) 😅", "return_to_settings": "Возвращаю в меню настроек", "go_settings_chatgpt": "Перехожу в настройки режима ChatGPT", @@ -117,7 +117,35 @@ "local_promos_str": "💎 Использованные специальные промокоды:\n{local_promo_row_str}\n", "local_promo_row_str": "{0}. {1} на {2} дней подписки.\nВведен {3}.\n", "no_promo_entered": "Вы еще не вводили ни одного промокода. Следите за новостями! 🚀", - "config_was_received": "✨ Ура, конфигурация получена!" + "config_was_received": "✨ Ура, конфигурация получена!", + "instructions": { + "wireguard": + { + "android": "⚙️ Инструкция по установке WireGuard на Android:\n1. Скачать и установить официальное приложение Wireguard (ссылка в Play Market).\n2. После запуска нажать на значок «+» в нижнем правом углу экрана.\n3. Выбрать опцию «Создать из QR-кода»/«Scan from QR code», разрешить доступ к камере и отсканировать QR-код.\n4. Ввести название Вашего VPN-туннеля! Именование можно задавать любое, но рекомендуется называть туннель страной расположения (Netherlands/Germany/Latvia/USA).\n\n🎉 Инструкция по использованию:\n1. Для включения VPN достаточно нажать на переключатель справа от названия туннеля. В первый раз телефон может выдать уведомление о добавлении нового VPN-соединения — необходимо согласиться.\n2. Для выключения VPN нужно снова изменить положение переключателя.", + "ios": "⚙️ Инструкция по установке WireGuard на IOS:\n1. Скачать и установить официальное приложение Wireguard (ссылка в App Store).\n2. После запуска нажать на значок «+» в нижнем правом углу экрана.\n3. Выбрать опцию «Создать из QR-кода»/«Scan from QR code», разрешить доступ к камере и отсканировать QR-код.\n4. Ввести название Вашего VPN-туннеля! Именование можно задавать любое, но рекомендуется называть туннель страной расположения (Netherlands/Germany/Latvia/USA).\n\n🎉 Инструкция по использованию:\n1. Для включения VPN достаточно нажать на переключатель справа от названия туннеля. В первый раз телефон может выдать уведомление о добавлении нового VPN-соединения — необходимо согласиться.\n2. Для выключения VPN нужно снова изменить положение переключателя.", + "windows": "⚙️ Инструкция по установке WireGuard на Windows:\n1. Скачать и установить приложение Wireguard (ссылка на официальный сайт).\n2. После запуска нажать на кнопку «Добавить туннель»/«Add tunnel» и выбрать отправленный Вам файл расширения *.conf.\n\n🎉 Инструкция по использованию:\n1. Для включения VPN достаточно выбрать туннель и нажать «Подключить».\n2. Для выключения VPN достаточно нажать «Отключить».", + "macos": "⚙️ Инструкция по установке WireGuard на macOS:\n1. Скачать и установить официальное приложение Wireguard (ссылка в App Store).\n2. После запуска нажать на кнопку «Добавить туннель»/«Add tunnel» и выбрать отправленный Вам файл расширения *.conf.\n\n🎉 Инструкция по использованию:\n1. Для включения VPN достаточно выбрать туннель и нажать «Подключить».\n2. Для выключения VPN достаточно нажать «Отключить».", + "linux": "⚙️ Инструкция по установке и использованию WireGuard на GNU/Linux:\nОй-ой, Вы уже не маленькие, раз используете Linux!\nОтправляю Вам большой респект и ссылку на документацию: https://www.wireguard.com/install/#ubuntu-module-tools\n\nПодсказки по установки можно найти здесь: https://shrub-coriander-4a3.notion.site/Linux-Mint-Cinnamon-21-1-29cda1060f4d4ab48c483cfa70948e46?pvs=4" + }, + + "xray vless xtls-reality": + { + "android": "⚙️ Инструкция по установке XTLS-Reality на Android:\n1. Скачать и установить официальное приложение v2rayNG (ссылка в Play Market).\n2. После запуска нажать на значок «+» рядом с Профилем.\n3. Выбрать пункт «Импорт профиля из QR-кода», разрешить доступ к камере и отсканировать QR-код.\n\n🎉 Инструкция по использованию:\n1. Для включения VPN достаточно нажать на переключатель в правом нижнем углу.\nВ первый раз телефон может выдать уведомление о добавлении нового VPN-соединения — необходимо согласиться.\n2. Для выключения VPN нужно снова изменить положение переключателя.", + "ios": "⚙️ Инструкция по установке XTLS-Reality на IOS:\n1. Скачать и установить официальное приложение FoXray (ссылка в App Store).\n2. После запуска нажать на значок QR-кода или Изображения вверху приложения.\n3. Отсканировать отправленный QR-код через камеру или выбрать его изображение в галерее.\n\n🎉 Инструкция по использованию:\n1. Для включения VPN достаточно нажать на переключатель справа от названия конфигурации.\nВ первый раз телефон может выдать уведомление о добавлении нового VPN-соединения — необходимо согласиться.\n2. Для выключения VPN нужно снова изменить положение переключателя.", + "windows": "⚙️ Инструкция по установке XTLS-Reality на Windows:\n1. Перейти на последний релиз приложения nekoray по ссылке.\n2. Скачать версию для Windows.\n3. Распаковать архив (ПКМ по архиву«Извлечь все...»«Извлечь»)\n4. В архиве запустить файл nekoray.exe.\n5. При первом запуске Windows уведомит о том, что приложение выпускается неизвестным издателем. Не пугаемся, NekoBox является приложением с открытым исходным кодом. Оно полностью безопасно и не несет никаких вирусов.\n6. Для продолжения нужно нажать «Подробнее»«Выполнить в любом случае».\n7. Выбрать в стартовом диалоговом окне пункт «sing-box».\n8. Скопировать выданную Вам ссылку и зажать Ctrl+V в приложении. Конфигурация добавиться автоматически.\n\n🎉 Инструкция по использованию:\n1. Перед включением обязательно выбрать пункт «Режим TUN». Для этого потребуется перезапустить программу от имени администратора.\n2. Включить и выключить VPN можно в самой программе или в трее.", + "macos": "⚙️ Инструкция по установке XTLS-Reality на macOS:\n1. Скачать и установить официальное приложение FoXray (ссылка в App Store).\n2. После запуска нажать на значок Блокнота и вставить отправленную Вам ссылку.\n\n🎉 Инструкция по использованию:\n1. Для включения VPN достаточно нажать на переключатель справа от названия конфигурации.\nВ первый раз устройство может выдать уведомление о добавлении нового VPN-соединения — необходимо согласиться.\n2. Для выключения VPN нужно снова изменить положение переключателя.", + "linux": "⚙️ Инструкция по установке и использованию XTLS-Reality на GNU/Linux:\nОй-ой, Вы уже не маленькие, раз используете Linux!\nОтправляю Вам большой респект и ссылку на документацию: https://github.com/MatsuriDayo/nekoray/tree/3.21" + }, + + "shadowsocks-2022": + { + "android": "Протокол Shadowsocks-2022 в данный момент используется только командой тестирования.\n\nЕсли Вы читаете данное сообщение, не являясь тестировщиком, значит, администратор ошибся при создании конфигурации. Напишите ему для выяснения проблемы!", + "ios": "Протокол Shadowsocks-2022 в данный момент используется только командой тестирования.\n\nЕсли Вы читаете данное сообщение, не являясь тестировщиком, значит, администратор ошибся при создании конфигурации. Напишите ему для выяснения проблемы!", + "windows": "Протокол Shadowsocks-2022 в данный момент используется только командой тестирования.\n\nЕсли Вы читаете данное сообщение, не являясь тестировщиком, значит, администратор ошибся при создании конфигурации. Напишите ему для выяснения проблемы!", + "macos": "Протокол Shadowsocks-2022 в данный момент используется только командой тестирования.\n\nЕсли Вы читаете данное сообщение, не являясь тестировщиком, значит, администратор ошибся при создании конфигурации. Напишите ему для выяснения проблемы!", + "linux": "Протокол Shadowsocks-2022 в данный момент используется только командой тестирования.\n\nЕсли Вы читаете данное сообщение, не являясь тестировщиком, значит, администратор ошибся при создании конфигурации. Напишите ему для выяснения проблемы!" + } + } }, "keyboard_buttons": { @@ -163,7 +191,36 @@ }, "telegram_file_ids": { - "ref_program_info": "AgACAgIAAxkBAAIBt2T4tvKfh4vtyw9E0esmv5ez8oipAAJH0jEba5XBS205NYeWh2RdAQADAgADcwADMAQ" + "rules": "AgACAgIAAxkBAAJUyGWoBkWcqxDLR5T7rxSAgxD9k8LJAALd1DEbxdRBSUXUhjzY2aggAQADAgADcwADNAQ", + "ref_program_info": "AgACAgIAAxkBAAJUv2WoBaYCCxzAlLwaiIEttY5NnqytAALa1DEbxdRBSdtn1kU78RbOAQADAgADcwADNAQ", + "instructions": { + "wireguard": + { + "android": ["AgACAgIAAxkBAAIBt2T4tvKfh4vtyw9E0esmv5ez8oipAAJH0jEba5XBS205NYeWh2RdAQADAgADcwADMAQ", "AgACAgIAAxkBAAIBZWT4pf2JcOWwWqzq6BrDBplE_LefAALD0TEba5XBSwtXi502wnAvAQADAgADcwADMAQ"], + "ios": ["AgACAgIAAxkBAAIBt2T4tvKfh4vtyw9E0esmv5ez8oipAAJH0jEba5XBS205NYeWh2RdAQADAgADcwADMAQ"], + "windows": ["AgACAgIAAxkBAAIBt2T4tvKfh4vtyw9E0esmv5ez8oipAAJH0jEba5XBS205NYeWh2RdAQADAgADcwADMAQ"], + "macos": ["AgACAgIAAxkBAAIBt2T4tvKfh4vtyw9E0esmv5ez8oipAAJH0jEba5XBS205NYeWh2RdAQADAgADcwADMAQ"], + "linux": ["AgACAgIAAxkBAAIBt2T4tvKfh4vtyw9E0esmv5ez8oipAAJH0jEba5XBS205NYeWh2RdAQADAgADcwADMAQ"] + }, + + "xray vless xtls-reality": + { + "android": ["AgACAgIAAxkBAAIBt2T4tvKfh4vtyw9E0esmv5ez8oipAAJH0jEba5XBS205NYeWh2RdAQADAgADcwADMAQ"], + "ios": ["AgACAgIAAxkBAAIBt2T4tvKfh4vtyw9E0esmv5ez8oipAAJH0jEba5XBS205NYeWh2RdAQADAgADcwADMAQ"], + "windows": ["AgACAgIAAxkBAAIBt2T4tvKfh4vtyw9E0esmv5ez8oipAAJH0jEba5XBS205NYeWh2RdAQADAgADcwADMAQ"], + "macos": ["AgACAgIAAxkBAAIBt2T4tvKfh4vtyw9E0esmv5ez8oipAAJH0jEba5XBS205NYeWh2RdAQADAgADcwADMAQ"], + "linux": ["AgACAgIAAxkBAAIBt2T4tvKfh4vtyw9E0esmv5ez8oipAAJH0jEba5XBS205NYeWh2RdAQADAgADcwADMAQ"] + }, + + "shadowsocks-2022": + { + "android": ["AgACAgIAAxkBAAIBt2T4tvKfh4vtyw9E0esmv5ez8oipAAJH0jEba5XBS205NYeWh2RdAQADAgADcwADMAQ"], + "ios": ["AgACAgIAAxkBAAIBt2T4tvKfh4vtyw9E0esmv5ez8oipAAJH0jEba5XBS205NYeWh2RdAQADAgADcwADMAQ"], + "windows": ["AgACAgIAAxkBAAIBt2T4tvKfh4vtyw9E0esmv5ez8oipAAJH0jEba5XBS205NYeWh2RdAQADAgADcwADMAQ"], + "macos": ["AgACAgIAAxkBAAIBt2T4tvKfh4vtyw9E0esmv5ez8oipAAJH0jEba5XBS205NYeWh2RdAQADAgADcwADMAQ"], + "linux": ["AgACAgIAAxkBAAIBt2T4tvKfh4vtyw9E0esmv5ez8oipAAJH0jEba5XBS205NYeWh2RdAQADAgADcwADMAQ"] + } + } } }, @@ -236,7 +293,7 @@ "chatgpt_only_for_active_sub": "Режим ChatGPT доступен только пользователям с активной подпиской!", "unrecognized_message": "Извините, я вас не понимаю 🤔\n\nВы можете дать мне безграничную силу, включив режим ChatGPT в настройках или введя команду /chatgpt_mode", "already_registered": "✨ Ух ты! Вы уже есть в нашей системе! Телепортирую в личный кабинет!", - "github": "Отдельная благодарность\n\nUX/UI-дизайнеру проекта:\n🦩 Ольге @KoberO https://band.link/Dmt3l\n\nКоманде тестирования:\n🍒 Егору @Y0gu4t EASTEREGGPROMO1032201661\n🎀 Карине @Howtofindmee\n🍆 Денису @seregin_denis\n— они очень старались отыскать баги, но так их и не нашли." + "github": "Отдельная благодарность\n\nUX/UI-дизайнеру проекта:\n🦩 Ольге @KoberO https://band.link/Dmt3l\n\nКоманде тестирования:\n🍒 Егору @Y0gu4t EASTEREGGPROMO1032201661\n🎀 Карине @Howtofindmee\n🍆 Денису @seregin_denis" }, "keyboard_buttons": { @@ -244,12 +301,14 @@ "about_project": "О проекте", "about_service": "О сервисе", "faq_inline": "FAQ", - "faq_inline_callback": "faq" + "faq_inline_callback": "faq", + "tg_channel_inline": "Телеграм-канал проекта", + "tg_channel_inline_url": "https://t.me/+5cDIKThNG-kzZjgy" }, "telegram_file_ids": { - "project_info": "AgACAgIAAxkBAAIBt2T4tvKfh4vtyw9E0esmv5ez8oipAAJH0jEba5XBS205NYeWh2RdAQADAgADcwADMAQ", - "hello_message": "AgACAgIAAxkBAAIBZWT4pf2JcOWwWqzq6BrDBplE_LefAALD0TEba5XBSwtXi502wnAvAQADAgADcwADMAQ" + "project_info": "AgACAgIAAxkBAAJUvWWoBX0os4xG-jw1vCeJKpf9QLsfAAKt1TEb7uNASSFIHuOuRnb0AQADAgADcwADNAQ", + "hello_message": "AgACAgIAAxkBAAJUtGWoBQKB7zYQK7mjyS989TmZm3ncAALW1DEbxdRBSTwqicJoelJXAQADAgADcwADNAQ" } }, @@ -276,37 +335,9 @@ "error_bad_os": "неверный ввод ОС (третий аргумент)!", "error_bad_link": "неверный ввод vless ссылки (четвертый аргумент)!", "ref_client_paid_for_sub": "🕊 Вау! Пользователь {0}{1}, присоединившийся к проекту по Вашему реферальному промокоду, впервые оплатил(а) подписку!\n\nВы получаете месяц подписки бесплатно!", - "wait_for_admin_answer": "Отлично! Теперь ждем ответа от разработчика: в скором времени он проверит Вашу регистрацию и вышлет конфигурацию! А пока вы можете исследовать бота!", + "wait_for_admin_answer": "🎉 Отлично, теперь ждем ответа от разработчика!\n\nВ скором времени он проверит Вашу регистрацию и вышлет конфигурацию. А пока Вы можете исследовать функции бота!", "discount_str": "(скидка {0:g}₽)", - "payment_successful": "Оплата произведена успешно!\n\nИдентификатор платежа: #{0}", - "instructions": { - "wireguard": - { - "android": "<Инструкция по установке WireGuard на Android>", - "ios": "<Инструкция по установке WireGuard на IOS>", - "windows": "<Инструкция по установке WireGuard на Windows>", - "macos": "<Инструкция по установке WireGuard на macOS>", - "linux": "<Инструкция по установке WireGuard на Linux>" - }, - - "xray vless xtls-reality": - { - "android": "<Инструкция по установке XTLS-Reality на Android>", - "ios": "<Инструкция по установке XTLS-Reality на IOS>", - "windows": "<Инструкция по установке XTLS-Reality на Windows>", - "macos": "<Инструкция по установке XTLS-Reality на macOS>", - "linux": "<Инструкция по установке XTLS-Reality на Linux>" - }, - - "shadowsocks-2022": - { - "android": "<Инструкция по установке Shadowsocks-2022 на Android>", - "ios": "<Инструкция по установке Shadowsocks-2022 на IOS>", - "windows": "<Инструкция по установке Shadowsocks-2022 на Windows>", - "macos": "<Инструкция по установке Shadowsocks-2022 на macOS>", - "linux": "<Инструкция по установке Shadowsocks-2022 на Linux>" - } - } + "payment_successful": "Оплата произведена успешно!\n\nИдентификатор платежа: #{0}" }, "keyboard_buttons": { diff --git a/src/services/internal_functions.py b/src/services/internal_functions.py index 25ba627..699dfe4 100644 --- a/src/services/internal_functions.py +++ b/src/services/internal_functions.py @@ -477,7 +477,7 @@ async def authorization_complete(message: Message, state: FSMContext): await postgres_dbms.insert_client(client.first_name, client.id, client.last_name, client.username, used_ref_promo_id, provided_sub_id, bonus_time) await send_configuration_request_to_admin({'fullname': client.full_name, 'username': client.username, 'id': client.id}, data._data, is_new_client=True) - await message.answer(loc.internal.msgs['wait_for_admin_answer'], reply_markup=user_authorized_kb.menu) + await message.answer(loc.internal.msgs['wait_for_admin_answer'], parse_mode='HTML', reply_markup=user_authorized_kb.menu) await message.answer(loc.auth.msgs['i_wanna_sleep']) await state.finish()