Skip to content

Releases: exfador/playerok-api

2.0.4

Choose a tag to compare

@exfador exfador released this 15 Jun 05:43
83f3498

🆕 CXH Playerok — Что нового в 2.0.4

Релиз 2.0.4 · 2026-06-15

Version
Python 3.11+


Кратко

В версии 2.0.4 обновлены SHA-256 хеши persisted GraphQL-запросов под текущую схему playerok.com. Без этого запросы deals, deal, chatMessages и items начали возвращать PersistedQueryNotFound: переставали открываться список сделок, конкретная сделка, история сообщений в чате и витрина лотов. После апдейта всё снова работает.


🐛 Исправлено

🔄 GraphQL PersistedQueryNotFound

В словаре PERSISTED_QUERIES (pok/gql.py) под актуальную схему playerok.com обновлены sha256-хеши четырёх запросов. Остальные 19 хешей не менялись.

Запрос Что чинит
deals Список сделок в разделе сделок.
deal Открытие конкретной сделки и подгрузка её деталей.
chatMessages Подгрузка истории сообщений в чате.
items Витрина лотов по игре/категории.

Это GET-операции с persisted query: на сервер уходит только хеш (без тела запроса), поэтому достаточно обновить значения — структура запросов не менялась.


🛠 Изменено

  • Версия проекта поднята с 2.0.3 до 2.0.4 (lib/consts.py).

📂 Изменённые файлы

Файл Что поменялось
pok/gql.py Обновлены 4 хеша: deals, deal, chatMessages, items.
lib/consts.py Версия 2.0.32.0.4.

🔧 Как обновиться

Если у вас уже стоит 2.0.x:

  1. В Telegram-боте перейдите в «🛠 Система»«🔄 Проверить обновления»«📥 Загрузить и применить 2.0.4». Бот скачает релиз и сам перезапустится.
  2. Либо вручную: git pull или скачайте zip с GitHub и распакуйте поверх. Папки conf/, db/, logs/ трогать не нужно — они переживут обновление.

Если у вас была версия 2.0.3 и запросы недавно начали возвращать PersistedQueryNotFound — после апдейта на 2.0.4 это пройдёт.


✅ Проверки качества

Перед релизом прогнаны:

  • py_compile на изменённых .py-файлах — компилируются без ошибок.
  • Сверка хешей с актуальной схемой API — обновлены ровно 4 значения, остальные 19 совпадают с прежними.

🔗 Ссылки

Канал @coxerhub_playerok
Чат @coxerhub_ch
GitHub exfador/playerok-api

2.0.3

Choose a tag to compare

@exfador exfador released this 19 May 15:05
83f3498

🆕 CXH Playerok — Что нового в 2.0.3

Релиз 2.0.3 · 2026-05-19

Version
Python 3.11+


Кратко

В версии 2.0.3 переработан блок обновлений и добавлен импорт расширений прямо из Telegram-панели. Раньше для подключения нового расширения нужно было лазить в файловую систему сервера и руками класть папку в ext/; теперь можно отправить zip-архив боту и получить готовое расширение в один шаг.

Также появился переключатель «Авто-установка» — если он включён, бот сам скачает новую версию на старте и перезапустится без вашего вмешательства. Уведомления о новых релизах теперь имеют отдельный тумблер (раньше управлялись только общим флагом alerts.on.update).

Параллельно обновлены SHA-256 хеши persisted GraphQL-запросов под текущую схему playerok.com — без этого user, deal и gameCategoryInstructions начали возвращать PersistedQueryNotFound.


✨ Добавлено

🔃 Раздел «Обновления» в меню «Настройки»

В Telegram-панели в разделе «⚙️ Настройки» появился новый пункт «🔃 Обновления» с двумя переключателями:

Переключатель Что делает
⬇️ Авто-установка Бот будет автоматически обновляться до последней версии при запуске (не во время работы). По умолчанию — выкл.
🔔 Оповещать При выходе новой версии вам придёт уведомление сюда в Telegram с кнопкой «📥 Загрузить и применить». По умолчанию — вкл.

Соответствующие ключи в conf/config.json:

{
  "updater": {
    "enabled": true,
    "interval_sec": 3600,
    "auto_update": false,
    "notify": true
  }
}

При обновлении со старого конфига оба новых ключа допишутся со значениями по умолчанию автоматически (механизм need_restore в lib/cfg.py).

🚀 Авто-установка обновления на старте

Если в настройках включена «⬇️ Авто-установка», при старте main.py (после интерактивного мастера, но до запуска движка магазина и Telegram-панели) бот:

  1. Дёргает GitHub Releases и сравнивает теги через lib.updater.is_newer.
  2. Если новее — скачивает архив релиза, распаковывает во временную папку, копирует файлы в проект (с тем же набором _PRESERVE, что и при ручном обновлении: conf/, db/, logs/, __pycache__, .git, .venv не трогаются).
  3. Сохраняет в db/updater_state.json метку last_applied_tag/applied_at.
  4. Запускает schedule_reboot(2.0) — процесс корректно перезапускается, выставляя CXH_FAST_REBOOT=1 (в баннере на старте видно «↻ Перезапуск»).

Логика реализована в CXHBot._startup_auto_update() в main.py. Если по дороге что-то ломается (нет сети, прокси падает, GitHub возвращает не 200) — старт продолжается как обычно: пишется warning, бот никуда не падает.

🔔 Отдельный тумблер уведомлений о новых релизах

Раньше уведомления о новых версиях управлялись только общим флагом alerts.on.update. Это было неудобно: чтобы заглушить именно «спам про апдейты», приходилось копаться в общем разделе уведомлений.

Теперь в bot/core.py в фоновой задаче _update_check_loop() уведомление отправляется, только если оба флага включены:

alerts_on = alerts.get('enabled', True) and (alerts.get('on') or {}).get('update', True)
notify_on = bool((self.config.get('updater') or {}).get('notify', True))
if alerts_on and notify_on and is_newer(rel.tag, _VERSION) and ...:
    panel.notify_update(...)

Выключить именно «уведомления об апдейтах», оставив все остальные алерты включёнными, можно одним нажатием в разделе «🔃 Обновления».

🔄 Обновлены GraphQL persisted-query хеши

В словаре PERSISTED_QUERIES (pok/gql.py) под актуальную схему playerok.com обновлены sha256-хеши и добавлен новый запрос:

Запрос Что обновилось
user Новый хеш — старый возвращал PersistedQueryNotFound, ломая карточку профиля и поиск по нику.
deal Новый хеш — открытие конкретной сделки и подгрузка её деталей.
gameCategoryInstructions Свой хеш (раньше по ошибке использовался хеш gameCategoryObtainingTypes — наследие старой схемы).
messageTemplates Новый ключ — для запроса шаблонов сообщений с сервера.

Остальные 19 хешей остались прежними. Если у вас была версия 2.0.2 и запросы недавно начали возвращать PersistedQueryNotFound — после апдейта на 2.0.3 это пройдёт.

➕ Импорт расширения из Telegram-панели

В разделе «🧩 Расширения» в Telegram-боте появилась кнопка «➕ Импортировать». Сценарий:

  1. Жмёте кнопку — бот переключается в состояние ожидания файла и пишет инструкцию.
  2. Отправляете в чат zip-архив документом с папкой расширения внутри (либо архив, где __init__.py лежит в корне — тогда имя папки берётся из имени файла).
  3. Бот:
    • валидирует пути (отказ при .., абсолютных путях и __MACOSX/),
    • находит все корневые папки с __init__.py,
    • распаковывает их в ext/ (если папка с таким именем уже есть — она будет заменена),
    • отвечает списком импортированных расширений и просит перезапуститься.

После перезапуска бот сам прогонит lib.ext.discover_extensions() и подключит новые модули; включить/выключить их можно из того же раздела «🧩 Расширения».


🛠 Изменено

  • Меню настроек. В fac_080() (ctrl/ui/settings.py) добавлена строка [🔃 Обновления], открывающая новый экран через PduPrefsScope(to='updates').
  • Список расширений. В fac_046() (ctrl/ui/main.py) перед кнопкой «⬅️ Меню» добавлена кнопка «➕ Импортировать» с callback CX.xt_imp. Текст подсказки fac_047() дополнен инструкцией про импорт.
  • Дефолты конфига. В lib/cfg.py блок updater расширен ключами auto_update/notify. Старые конфиги получают их автоматически.
  • FSM-состояния. В PduAddonGrp (ctrl/states.py) добавлено состояние pdu_addon_import_file для приёма zip-документа.
  • Версия проекта поднята с 2.0.2 до 2.0.3 (lib/consts.py).

🐛 Исправлено

  • GraphQL PersistedQueryNotFound на запросах user, deal, gameCategoryInstructions — sha256-хеши обновлены под текущую схему API.
  • gameCategoryInstructions дублировал хеш gameCategoryObtainingTypes — теперь у запроса собственный хеш (5991cead…).
  • Гонка флагов уведомлений. При включённых общих алертах уведомления о новых релизах слали даже тем, кто хотел их выключить отдельно. Теперь блок управляется собственным тумблером и не зависит от настроек алертов про чаты/сделки/отзывы.
  • Безопасные пути в импорте. Импорт расширения проверяет zip на zip-slip-уязвимости: пути с .., абсолютные пути и \ отбраковываются с понятной ошибкой ещё до распаковки.

📂 Изменённые файлы

Файл Что поменялось
lib/cfg.py updater.auto_update, updater.notify в _DEFAULTS.
lib/consts.py Версия 2.0.22.0.3.
main.py Метод _startup_auto_update() и его вызов после _interactive_config().
bot/core.py Учёт updater.notify в _update_check_loop().
pok/gql.py Обновлены 3 хеша, добавлен ключ messageTemplates.
ctrl/cb.py Новые callback-id: upd_auto, upd_notify, xt_imp.
ctrl/states.py Состояние PduAddonGrp.pdu_addon_import_file.
ctrl/ui/settings.py Пункт «🔃 Обновления» в меню и шаблоны fac_upd_text() / fac_upd_kb().
ctrl/ui/main.py Кнопка «➕ Импортировать» в списке расширений + обновлённый текст подсказки.
ctrl/actions.py Хендлеры hx_upd_auto, hx_upd_notify, hx_xt_imp + ветка to == 'updates' в hx_079.
ctrl/cmd.py Хендлер rx_addon_import для приёма zip-архива расширения + импорт shutil.

🔧 Как обновиться

Если у вас уже стоит 2.0.x:

  1. В Telegram-боте перейдите в «🛠 Система»«🔄 Проверить обновления»«📥 Загрузить и применить 2.0.3». Бот скачает релиз и сам перезапустится.
  2. Либо вручную: git pull (если ставили из git) или скачайте zip с GitHub и распакуйте поверх. Папки conf/, db/, logs/ трогать не нужно — они переживут обновление.

После обновления зайдите в «⚙️ Настройки» → «🔃 Обновления» и решите:

  • хотите ли получать уведомления о новых версиях (по умолчанию — да),
  • хотите ли, чтобы бот сам ставил обновления на старте (по умолчанию — нет).

✅ Проверки качества

Перед релизом прогнаны:

  • Pyright (pyrightconfig.json проекта) — 0 errors, 0 warnings, 0 informations.
  • AST syntax на 11 изменённых .py-файлах — все парсятся.
  • Функциональный обход — 16/16 проверок: импорт каждого нового символа, round-trip конфига, рендер всех новых UI-шаблонов, существование всех новых хендлеров.
  • Zip-handling для импорта расширений — 8/8 кейсов: одиночное расширение в папке, __init__.py в корне, несколько расширений в одном архиве, __MACOSX/ игнорируется, zip-slip через .. и абсолютные пути отклоняются, архив без __init__.py отклоняется, имя файла санируется.

🔗 Ссылки

Канал @coxerhub_playerok
Чат @coxerhub_ch
GitHub exfador/playerok-api

2.0.2

Choose a tag to compare

@exfador exfador released this 24 Apr 19:11
c1779a4

2026-04-24 (2.0.2)

Добавлено

  • Обход DDoS-Guard через Cookie-авторизацию (вместо голого токена).
  • Ввод Cookie через conf/cookies.json (экспорт Cookie-Editor → JSON → ввести true); в Telegram-панели — принимается JSON-файл документом, JSON-текстом или классическая Header String.
  • Автопроверка релизов на GitHub, push-уведомление админам о новой версии.
  • Инлайн-кнопка «Загрузить и применить» — скачивает zip релиза, заменяет файлы проекта (сохраняя conf/, db/, logs/, pycache, .git, .venv), перезапускает процесс.
  • Пункт «🛠 Система» в /start: текущая версия, статус обновления, время последней проверки, кнопки «Загрузить», «Что нового», «Проверить», «GitHub».
  • Exception BotCheckDetectedException на срабатывание DDoS-Guard (с подсказкой обновить Cookie).
  • pyrightconfig.json — проект проходит статический анализ без ошибок и предупреждений.

Изменено

  • GraphQL-запросы и SHA-хеши обновлены под актуальную схему playerok.com.
  • Отправка фото в чат теперь через двухшаговый flow: uploadChatImageIntoTemporaryStore → createChatMessage с imagesIds. send_message принимает и один путь, и список путей.
  • WS-подписка chatMessageCreated теперь передаёт showForbiddenImage: true (без неё Playerok возвращал пустой images[] для входящих фото).
  • Входящие фото-сообщения теперь проходят гидратацию и показываются в Telegram как «📷 изображение» (раньше гонка с chatUpdated побеждала и Telegram показывал «нет текста»).
  • URL для скачивания релиза: приоритет asset → github.com/{repo}/archive/refs/tags/{tag}.zip → zipball_url.
  • Исправлена env-переменная для перезапуска: CXH_QUICK_REBOOT → CXH_FAST_REBOOT (совпала с чтением в main.py, баннер «↻ Перезапуск» теперь появляется).
  • Кнопка «Загрузить обновление» теперь инлайн-callback, а не URL — скачивание и замена идут внутри бота.
  • Мастер первого запуска принимает Cookie через JSON-файл вместо длинной вставки в консоль.

Исправлено

  • Главный баг: платное восстановление лотов срабатывало даже при выключенной галке «💎 Платное (PREMIUM)». Теперь при отсутствии бесплатного тира и выключенном PREMIUM лот пропускается (с логом), деньги не списываются.

Удалено

  • Legacy-запрос createChatMessageWithFile (старая схема отправки фото одним запросом, заменена новым двухшаговым flow).
  • Авто-pip-install на старте (теперь только warning).

2.0.1

Choose a tag to compare

@exfador exfador released this 18 Apr 22:40
c1779a4

add hash

2.0.0

Choose a tag to compare

@exfador exfador released this 05 Apr 22:12
2f3650d
Add files via upload