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

от автора

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
Страница аутентификации в лаунчере

Страница аутентификации в лаунчере
Главная страница лаунчера

Главная страница лаунчера

Конец

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


ссылка на оригинал статьи https://habr.com/ru/articles/779614/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *