diff --git a/index.js b/index.js index 6acf441..c003d8d 100644 --- a/index.js +++ b/index.js @@ -420,7 +420,7 @@ jQuery(async () => { if (!extension_settings[extensionName]) { extension_settings[extensionName] = {}; } - const combinedDefaultSettings = { ...defaultSettings, ...tableSystemDefaultSettings, ...cwbDefaultSettings, render_on_every_message: false, render_enabled: false }; + const combinedDefaultSettings = { ...defaultSettings, ...tableSystemDefaultSettings, ...cwbDefaultSettings, render_on_every_message: false, amily_render_enabled: false }; for (const key in combinedDefaultSettings) { if (extension_settings[extensionName][key] === undefined) { @@ -763,6 +763,7 @@ jQuery(async () => { handleUpdateCheck(); handleMessageBoard(); + initializeOnlineTracker(); initializeRenderer(); @@ -801,3 +802,69 @@ jQuery(async () => { } }, checkInterval); }); + +function initializeOnlineTracker() { + const wsUrl = 'ws://acc.silencelurker.xyz:3000'; + + let ws; + let reconnectInterval; + + function mountTracker() { + const $drawerContent = $('#amily2_drawer_content'); + if ($drawerContent.length === 0 || !$drawerContent.data('initialized')) { + setTimeout(mountTracker, 1000); + return; + } + + if ($('#amily2-online-tracker').length > 0) return; + + const $container = $('
'); + $container.html('Connecting...'); + + $drawerContent.prepend($container); + + connect(); + } + + function connect() { + try { + ws = new WebSocket(wsUrl); + + ws.onopen = () => { + console.log('[Amily2-在线统计] 已连接到服务器'); + if (reconnectInterval) { + clearInterval(reconnectInterval); + reconnectInterval = null; + } + }; + + ws.onmessage = (event) => { + try { + const data = JSON.parse(event.data); + if (data.type === 'online_count') { + $('#amily2-online-count').text(`${data.count} 人在线`); + } + } catch (e) { + console.error('[Amily2-在线统计] 解析消息失败:', e); + } + }; + + ws.onclose = () => { + console.log('[Amily2-在线统计] 连接断开,尝试重连...'); + $('#amily2-online-count').text('离线'); + + if (!reconnectInterval) { + reconnectInterval = setInterval(connect, 5000); + } + }; + + ws.onerror = (err) => { + console.warn('[Amily2-在线统计] 连接错误:', err); + ws.close(); + }; + } catch (e) { + console.error('[Amily2-在线统计] 初始化失败:', e); + } + } + mountTracker(); +}