From dfca6df62948bec7658c2905c4781b49186dbef7 Mon Sep 17 00:00:00 2001 From: Bashy Date: Wed, 27 May 2026 19:29:23 +0300 Subject: [PATCH] Send Discord snowflake IDs as strings to prevent JS precision loss channel_id and role_id are 64-bit integers that exceed Number.MAX_SAFE_INTEGER, causing silent rounding in the browser. Cast to string in the GET response; PHP stores them back as integers on save (64-bit PHP handles them correctly). Co-Authored-By: Claude Sonnet 4.6 --- web/api/botconfig.php | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/web/api/botconfig.php b/web/api/botconfig.php index 4496972..b4339d5 100644 --- a/web/api/botconfig.php +++ b/web/api/botconfig.php @@ -39,6 +39,13 @@ if ($method === 'GET') { $safe = $config; if (isset($safe['linkedin']['access_token'])) $safe['linkedin']['access_token'] = $safe['linkedin']['access_token'] ? '***' : null; if (isset($safe['linkedin']['refresh_token'])) $safe['linkedin']['refresh_token'] = $safe['linkedin']['refresh_token'] ? '***' : null; + // Discord snowflake IDs exceed JS Number.MAX_SAFE_INTEGER — send as strings + foreach (['twitch', 'rss'] as $section) { + foreach ($safe[$section] ?? [] as $key => $item) { + if (isset($item['channel_id'])) $safe[$section][$key]['channel_id'] = (string)$item['channel_id']; + if (isset($item['role_id']) && $item['role_id'] !== null) $safe[$section][$key]['role_id'] = (string)$item['role_id']; + } + } echo json_encode(['config' => $safe]); exit; }