Как стать автором
Обновить

История создания Оптимизатора для ПК: Nuxt.js, Electron и C++ в Одном Проекте

Уровень сложностиПростой
Время на прочтение3 мин
Количество просмотров4.3K

GitHub

tg

Как мне пришла эта идея

На уроке обществознания предложили создать бизнес-план своего проекта. Я начал думать, что я буду описывать. Можно было сделать только план, но я решил сделать целый проект. Тогда, все что я умел программировать - это telegram боты на aiogram и telebot. И в голову пришла идея сделать приложение на PyQt6 и telegram бот для покупки подписок.

Первые попытки

Я пробовал использовать tkinter, все было ок, но дизайн выходил скучным и не было полной поддержки javascript вставок, которые мне были нужны чтобы связать tg бот и само приложение. Была идея, когда пользователь хотел зайти в аккаунт, появлялось бы меню с кнопкой "войти через telegram". Но tkinter нормально не поддерживал js, поэтому я перешел на PyQt6, где была полная его поддержка.

Один из первых макетов лаунчера на tkinter
Один из первых макетов лаунчера на tkinter

Первые дизайны получались откровенно дерьмовыми и я начал использовать либу custom-tkinter. С ней ситуация улучшилась, но все же я не мог сделать аутентификацию через telegram. Я сменил курс на PyQt6 и PyDracula как стартовый шаблон.

Переход на веб-приложения

Главным минусом для меня любых gui на python является их размер. Как я помню, приложение на PyQt6 у меня весило около 600 мегабайт в распакованном виде. При этом там практически ничего не было кроме кнопочек и формочек. Надо было что-то делать. В голове появилась идея перенести интерфейс на сервер и подгружать его когда это нужно. С этой задачею отлично справлялся electron. Я мог просто захостить сайт и подгружать его удаленно с клиента! Меня это воодушевило и в этот момент начался мой путь знакомства с веб фреймворками.

Создание telegram бота

Данные о подписках надо было как-то хранить и я решил юзать sqlite как бд. В самом tg боте была система выдачи ключей. Примерная схема работы была такова:

  1. Генерация ключа

  2. Выдача ключа пользователю

  3. Запись в бд уже зашифрованного ключа

Для представления меню я использовал WebApp. Его код вы можете найти на моем github. Кстати я использовал фишку для проводки разных изображений и цен для разных товаров.

Вот код:

ITEMS = {
    "1": "7",
    "2": "31",
    "3": "365",
    "4": "infinity"
}
ITEMS_IMAGE = {
    "1": "https://raw.githubusercontent.com/alananisimov/ezfps-tg-web-app/main/%D1%82%D0%B5%D1%81%D1%82.png",
    "2": "https://raw.githubusercontent.com/alananisimov/ezfps-tg-web-app/main/1%20%D0%BC%D0%B5%D1%81%D1%8F%D1%86.png",
    "3": "https://raw.githubusercontent.com/alananisimov/ezfps-tg-web-app/main/1%20%D0%B3%D0%BE%D0%B4.png",
    "4": "https://raw.githubusercontent.com/alananisimov/"
         "ezfps-tg-web-app/main/%D0%BD%D0%B0%D0%B2%D1%81%D0%B5%D0%B3%D0%B4%D0%B0.png"
}
await bot.send_invoice(
                    chat_id=web_app_message.chat.id,
                    title='Покупка',
                    description='Высокой FPS за минимальdную стоимость',
                    provider_token="" if mode != "dev" else "",
                    currency='rub',
                    need_email=False,
                    photo_url=ITEMS_IMAGE[f'{web_app_message.web_app_data.data}'],
                    need_phone_number=True,
                    prices=PRICE[f'{web_app_message.web_app_data.data}'],
                    start_parameter='',
                    payload=ITEMS[f'{web_app_message.web_app_data.data}']
  )

Написание Electron приложения

репозиторий приложения

Electron - потрясающая вещь. Он предоставляет возможность нативно управлять ПК через web приложение не храня интерфейс локально. Для оптимизации я сделал отдельный класс ScriptManager . В нем можно удобно управлять, обновлять и удалять exe`шники и взаимодействовать с системой. Вот система оптимизации:

  1. Формирование json файла с параметрами и путями до игр

  2. Скачивание exe`шника с сервера

  3. Запуск с параметрами из json файла

Создание оптимизационного скрипта

репозиторий скрипта

Концепция была такова:

  1. Юзер выбирал степень оптимизации(чем больше - чем больше эффект)

  2. Electron запускал скрипт с параметрами и этой степенью

  3. Скрипт действовал по разному в отличии от системы

Сначала я пытался использовать bash скрипты, но на Windows они не работали, что осложняло разработку. С++ показался мне понятным и я мог полноценно взаимодействовать с системой. В коде я постарался разделить оптимизацию под разную систему используя ее особенности. К примеру на Windows я использовал powershell и изменение регистра. Но одно было везде - оптимизация CSGo и Dota2. Я играл в эти игры и понимал что там можно оптимизировать.

Фоточки

Рекламный сайт ezfps.store
Рекламный сайт ezfps.store
Страница аутентификации в лаунчере
Страница аутентификации в лаунчере
Главная страница лаунчера
Главная страница лаунчера

Конец

Спасибо за прочтение статьи! Я буду стараться и дальше развивать этот проект. Это мой первый проект такого размера. Жду разумную критику в комментариях :-)

Теги:
Хабы:
Всего голосов 14: ↑1 и ↓13-12
Комментарии10

Публикации

Истории

Работа

React разработчик
57 вакансий
Программист C++
106 вакансий
QT разработчик
4 вакансии

Ближайшие события

7 – 8 ноября
Конференция byteoilgas_conf 2024
МоскваОнлайн
7 – 8 ноября
Конференция «Матемаркетинг»
МоскваОнлайн
15 – 16 ноября
IT-конференция Merge Skolkovo
Москва
22 – 24 ноября
Хакатон «AgroCode Hack Genetics'24»
Онлайн
28 ноября
Конференция «TechRec: ITHR CAMPUS»
МоскваОнлайн
25 – 26 апреля
IT-конференция Merge Tatarstan 2025
Казань