Skip to content

About

KodYazar Client — Discord Rich Presence, quest, and game-catalog panel. PySide6, KYAL-1.0.

Topics

Resources

Contributing

Security policy

Stars

14 stars

Watchers

1 watching

Forks

Repository files navigation

KY-GamePlayer — KodYazar Client

KodYazar Client

KY-GamePlayer — KodYazar Client
Desktop Discord panel: Rich Presence, 24k-game catalog, quests, HypeSquad, science hours.

Python PySide6 License Author CI

English · Türkçe

Games tab — catalog, RPC editor and presence preview Badges tab

Rendered from the real UI with synthetic demo data.

Author : Batuhan (KodYazicam)
Project: KY-GamePlayer (KodYazar Client)
Source : https://github.com/KodYazicam/KY-GamePlayer

KYAL-1.0 — free to use and modify. Attribution is mandatory in LICENSE, this README, and any public product that ships this code. Example credit: Powered by KY-GamePlayer — KodYazicam.

Not on PyPI. Clone the repo. Discord Stable / Canary / PTB / Vesktop / Vencord on Linux, Windows, macOS.

This is a local user client. It reads the already-logged-in Discord token on this machine and talks to Discord IPC + API v9. It does not send credentials to KodYazicam. Unofficial user-token automation can violate Discord’s terms — you run it at your own risk. See SECURITY.md.


Table of contents

  1. What this is (and is not)
  2. Feature surface
  3. Requirements
  4. Install and first boot
  5. Windows EXE and antivirus
  6. Membership lock
  7. Tabs
  8. Games / Rich Presence
  9. Science farm
  10. Quests
  11. Account, badges, privacy
  12. Data on disk
  13. Keyboard
  14. Project layout
  15. Development plan
  16. Tests and CI
  17. Troubleshooting
  18. FAQ
  19. License

Long form:


What this is (and is not)

Is: a PySide6 desktop app named KodYazar Client. After you join the KodYazar Discord server, it can:

  • Set Discord Rich Presence from Discord’s detectable game catalog (24 314 titles in games.json)
  • Detect a running .exe / binary and push that game as Playing
  • Rotate games (random + weights), cycle details/state text, schedule hours, pin extra IPC slots
  • Join/leave HypeSquad houses, set profile visibility, custom status, clan tag
  • List and complete accepted Discord Quests (video ticks / play-stream heartbeats)
  • POST Discord /science launch + heartbeat events so “hours played” / “games played” counters can move

Is not: a Discord bot, a hosted SaaS, a game launcher, a cheat client, or a way to obtain Staff/Partner/Bug Hunter badges. Gift/Nitro milestone art is a catalog, not an unlocker.


Feature surface

Area What ships in 1.2.0
Shell Dark theme (design tokens + app-wide style sheet), tray, single instance, TR/EN, autostart (Linux/Windows/macOS)
Lock Harvest token from Discord/Vesktop Local Storage; optional paste; guild membership required
Games Search, theme/store/OS/icon/cover/overlay filters, favorites, playlist, exclude, weights
RPC Playing/Streaming/Listening/Watching/Custom/Competing, assets, party, buttons xor secrets, flags
Detect Process scan every 5 s; Proton/Wine exe tokens; PID fill
Responsiveness REST, credential harvest and process scans run off the GUI thread (ui/tasks.py)
Secrets Keyring (Secret Service / Keychain) on Linux/macOS; DPAPI on Windows
Random Weighted pool, no-repeat N, countdown, Ctrl+R
Extras Up to 8 extra IPC connections (Vesktop may stack; official Discord shows one Playing)
Cycle / schedule Line-based frames; time window; idle clear; auto-reconnect
Science Hours or “played 1 min”; batch/delay/jitter; pull credentials; DPAPI on Windows; dry-run; 2000-game hard cap with confirm
Quests Scan, enroll, video 1 s, heartbeat ~20 s, claim
Badges HypeSquad apply/leave; owned flags; gift/Nitro catalog
Privacy Private / limited / public cards
Account Custom status, clan/primary guild, entitlement count
Editor Per-game templates, Spotify-style Listening helper, script hooks (.py returning ActivityConfig)
Settings Help tab: log level, credential harvest on/off, membership lock timeout; window geometry persisted
Packaging kurulum.bat / windows.bat; onedir + optional onefile PyInstaller; macOS .app; catalog_sync CLI

Requirements

  • Python 3.11+
  • PySide6>=6.6,<7
  • cryptography>=42 (Chromium cookie v10/v11 AES-GCM)
  • keyring>=24 on Linux/macOS (token storage; KODYAZAR_NO_KEYRING=1 disables it)
  • Discord desktop (or Vesktop / Vencord) running for IPC
  • Membership in KodYazar Client (1549516395010854912)

Chrome App-Bound cookies (v20) are not decrypted. Paste cookie if harvest fails.


Install and first boot

git clone https://github.com/KodYazicam/KY-GamePlayer.git
cd KY-GamePlayer
python3 -m pip install -r requirements.txt
python3 run.py

Windows:

  • Release zip: Releases → unzip the whole folder → KodYazar\KodYazar.exe (leave _internal next to it). SmartScreen may warn; that is expected — see Windows EXE and antivirus.
  • From source: kurulum.bat once, then windows.bat.
  • Local EXE: packaging\windows\build.bat → dist\KodYazar\KodYazar.exe.

macOS: same pip + run.py. Token/IPC under Application Support / tmp.

First boot:

  1. Open Discord and log in.
  2. Join https://discord.gg/rS42FCPfKZ
  3. Start this app. Lock harvests the token. Paste if files are locked.
  4. Main UI unlocks only when the account is in the guild.

Ctrl+C / SIGTERM quit. Close-to-tray when a tray icon exists.

Full OS notes: docs/install.md.


Windows EXE and antivirus

The GitHub Release is an unsigned PyInstaller folder, not a signed installer from Microsoft Store. Windows has never seen this publisher, so SmartScreen / Defender often say “Windows protected your PC” or quarantine the file. That is normal for this kind of build. It is not a signature from us that the file is malware, and it is not a signature that it is perfectly clean either.

If you do not want to trust a packed exe, skip the zip. Clone this repo and run python run.py (or kurulum.bat / windows.bat). Same program, no packer.

What VirusTotal actually showed (v1.0.0, 17 Sep 2026)

We uploaded both the zip and KodYazar.exe. They are scored separately:

What you download Score Link
The zip 0 / 66 analysis
KodYazar.exe inside it 3 / 65 detection · behavior

0/66 on the zip does not mean the exe is clean. VirusTotal looked at the container. Windows looks at the PE. Use the exe row.

The three flags on the exe:

  1. Microsoft — Trojan:Win32/Wacatac.B!ml
    The !ml means machine learning, not a hand-written signature. Microsoft uses this label a lot on unsigned, packed programs. It is a generic bucket, not “we identified KodYazar as Wacatac.”
  2. Arctic Wolf — Unsafe (no family name)
  3. SecureAge — Malicious (no family name)

Kaspersky, ESET, Bitdefender, Malwarebytes, CrowdStrike, ClamAV, Avast, Sophos, Symantec did not flag it. VirusTotal’s headline “trojan” is just those three rows rolled into a word.

Then the sandboxes ran it (CAPE and Zenbox). That report is the useful one:

  • no extra files dropped
  • no network connections
  • no IDS / Sigma hits
  • the only process was KodYazar.exe itself

What did look “weird” to static engines is the overlay: about 1.8 MB of high-entropy bytes stuck on the end of the PE (entropy ~8.0). That is how PyInstaller ships the Python payload. Heuristics read “packed / obfuscated” and stop there. The compile time on the PE is 17 Sep 2026 19:26 UTC — the same minute GitHub Actions built it.

Hashes so you can check the bytes yourself: docs/HASHES-v1.0.0.md.

If Windows still blocks it

  1. Prefer source (python run.py) if you can.
  2. If you use the zip: keep _internal beside the exe. Copying only KodYazar.exe to the Desktop is how the sandbox looked — the app cannot find Qt or games.json.
  3. SmartScreen: More info → Run anyway. Defender: restore from quarantine if you decided to trust this repo.

We will not paste a fake “0/70” badge. Those numbers change every reanalyze.


Membership lock

brand.py constants:

Guild KodYazar Client
Id 1549516395010854912
Invite https://discord.gg/rS42FCPfKZ

Check: GET /users/@me then paginated /users/@me/guilds, fallback guild member routes. Timeout 20 s. Changing the guild means changing brand.py and this README together.


Tabs

Order in the window:

  1. Rozet kontrol / Badge control — Bravery / Brilliance / Balance
  2. Tüm rozetler / All badges — catalog + owned flags
  3. Oyun menüsü / Games — catalog + RPC editor (the large tab)
  4. Profil gizliliği / Profile privacy
  5. Görevler / Quests
  6. Hesap / Account
  7. Yardım / Help

Every widget: docs/features.md.


Games / Rich Presence

games.json is Discord’s detectable list (24 314 games, ~12.7 MB). Each row is an application id you handshake as client_id.

The Games tab keeps the common path short: search, scope chips and the list, with filters and technical details folded away. The editor on the right is split into Yayın / Presence, Gelişmiş / Advanced, Otomasyon / Automation, Bilim / Science and Günlük / Log sub-tabs, so the presence basics are not buried in a 12-group form.

Connect talks Discord RPC:

  • Windows \\.\pipe\discord-ipc-0 … -9
  • Linux $XDG_RUNTIME_DIR/discord-ipc-N plus Flatpak/Snap/Vesktop subdirs
  • macOS tmp + Application Support

SET_ACTIVITY payload is built in activity.ActivityConfig (type, details/state + URLs, timestamps, assets, party, buttons or secrets, flags, emoji, instance). Preview paints a Discord-like card.

Detect maps running process names to executables[] (launchers skipped).


Science farm

Not Rich Presence. POST https://discord.com/api/v9/science with launch_game + running_game_heartbeat events, using analytics_token from GET /users/@me?with_analytics_token=true.

Mode Effect
Saat ekle / Add hours duration_tracked_ms = hours × 3600 × 1000
Oynandı / Played 60 s duration; successful ids stored in profiles.json played

Needs token + cookie. Fingerprint (executable_fingerprint) from Discord’s own detect improves counters. Autonomous checkboxes fire on RPC update / random / detect. Do not blast all 24k games without reading docs/discord.md and Discord’s terms.

Safety rails: dry-run builds and logs events without POSTing, and sources larger than 2000 games (e.g. “all”) require a confirm dialog — the engine itself refuses to exceed the cap without explicit confirmation. The identity-tab fingerprint capture button copies the value from Discord’s own disk state.

Credentials: science_state.json (Windows DPAPI KY1\x00 prefix; on Linux/macOS the secrets live in the OS keyring, the file keeps mode 0600).


Quests

GET /quests/@me. Supported tasks: WATCH_VIDEO, WATCH_VIDEO_ON_MOBILE, PLAY_ON_DESKTOP, STREAM_ON_DESKTOP, PLAY_ACTIVITY. Video ≈ 1 s ticks. Play/stream ≈ 20 s heartbeats with stream_key from a DM. Then claim-reward fallbacks. Accept the quest in Discord Quest Home first.


Account, badges, privacy

  • HypeSquad: POST/DELETE /hypesquad/online
  • Privacy cards: profile_visibility + friend_source_flags
  • Custom status + clan / primary guild
  • Entitlements length (Orbs balance stays in Discord’s wallet)
  • Badge tab explains Staff/Partner/etc. — this app cannot grant them

Data on disk

Config Cache / log
Windows %APPDATA%\kodyazar %LOCALAPPDATA%\kodyazar
Linux ~/.config/kodyazar ~/.cache/kodyazar
macOS ~/Library/Application Support/kodyazar ~/Library/Caches/kodyazar
File Sensitivity
science_state.json High — token, cookie, analytics in the OS keyring; fingerprint in the file
profiles.json RPC presets, favorites, settings (no token)
logs/kodyazar-YYYYMMDD.log IPC / quest / science status
cdn/ Downloaded PNG icons

Schemas: docs/data.md.


Keyboard

Shortcut Action
Ctrl+R Random game now
Ctrl+U Update RPC
Ctrl+L Clear activity
Ctrl+P Pin extra IPC slot
Ctrl+D Scan processes
Ctrl+F Toggle favorite
Ctrl+Shift+S Fill store button from SKU

Project layout

KY-GamePlayer/
  run.py                 CLI entry
  games.json             Discord detectables (~24k)
  requirements.txt
  pyproject.toml         name kodyazar-client, script kodyazar
  kurulum.bat / windows.bat
  kodyazar.desktop.in
  ky_gameplayer/         package — see ky_gameplayer/README.md
    ui/                  window mixins, theme, async TaskRunner
  assets/                app icons
  packaging/windows/     PyInstaller
  tests/                 Qt-free unittest
  docs/                  manuals

Development plan

Full checklist: docs/roadmap.md. Short version:

Stage Goal
1.1.0 Catalog sync CLI, Linux desktop install without rewriting git files, macOS .app, optional one-file EXE, settings block (log level / harvest / lock timeout), persisted window geometry, per-game templates, Listening helper, script hooks, science dry-run + 2000-game confirm cap, fingerprint capture button, rate-limit dashboard, social preview.
1.2.0 now MainWindow split into ky_gameplayer/ui/, blocking REST/harvest moved off the GUI thread, modern theme, keyring on Linux/macOS, per-game search cache, CI on 3.14 + lint + offscreen Qt + Windows.
1.3 Asset browser UI (REST call landed), image upload helper, extra-slot UX when official Discord cannot stack, quest types beyond video/play/stream
2.0 Multi-account identity files, signed binaries. No telemetry unless opt-in

Out of scope: v20 cookie decrypt, hosting tokens, bot-token mode, fake Staff badges.


Tests and CI

python -m compileall -q ky_gameplayer run.py tests
python -m unittest discover -s tests -v

GitHub Actions: unit tests on Python 3.11 / 3.12 / 3.13 / 3.14, ruff, an offscreen PySide6 job (TaskRunner + window smoke test) and a Windows job. Tests cover activity JSON, catalog load/sync and search, science helpers and dry-run, quest parse, profiles and game templates, detect matching, script hooks, rate-limit counters, translations and keyring storage.


Troubleshooting

IPC missing, cookie v20, membership fail, science 401, quest stuck: docs/troubleshooting.md.

Quick hits:

  • Discord must be open before Bağlan
  • Join the guild on the same account as the harvested token
  • WSL cannot see Windows named pipes — run on Windows
  • Copy the whole dist\KodYazar folder, not only the exe
  • SmartScreen on the release zip: unsigned PyInstaller — Windows EXE and antivirus

FAQ

Why harvest a user token? So HypeSquad, quests, science, and membership work as the logged-in desktop user. The token never leaves this machine except toward discord.com.

Why a guild lock? Product gate for KodYazar Client. Forks can change brand.py.

Can I use a custom Application ID? Yes — type it in Identity. Verified catalog games ignore custom name.

Does extra pin show two games? Official Discord: no. Vesktop/arRPC: maybe.

Is games.json complete? It is Discord’s detectable dump at ship time. Nothing updates in the background. Open Games → Kataloğu güncelle / Update catalog to download the official list, review the added/removed/changed preview and confirm. The update is written to your user config (config_dir()/games.json), never over the packaged file, and the previous catalog is kept as games.json.bak; Yedeğe dön / Restore switches back.

The same flow is available without opening the window:

python -m ky_gameplayer.catalog_sync --check   # compare, no write
python -m ky_gameplayer.catalog_sync            # download + atomic write to user config (`.bak` kept)
python -m ky_gameplayer.catalog_sync --restore  # restore games.json.bak

VirusTotal says 3 vendors flagged the exe. Is it malware? We are not going to say “no” as a slogan. We will say what the report actually contains: three generic ML/heuristic labels, no family name, and a sandbox that did not drop files or open the network. If you do not want a packed binary, run python run.py from this tree.


License — KYAL-1.0

See LICENSE. Keep the attribution block above in forks and public binaries.

About

KodYazar Client — Discord Rich Presence, quest, and game-catalog panel. PySide6, KYAL-1.0.

Topics

Resources

Contributing

Security policy

Stars

14 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages