Initial commit: Telegram Management System
Some checks failed
Deploy / deploy (push) Has been cancelled
Some checks failed
Deploy / deploy (push) Has been cancelled
Full-stack web application for Telegram management - Frontend: Vue 3 + Vben Admin - Backend: NestJS - Features: User management, group broadcast, statistics 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
137
backend/telegram-web-server.js
Normal file
137
backend/telegram-web-server.js
Normal file
@@ -0,0 +1,137 @@
|
||||
const express = require('express');
|
||||
const { createProxyMiddleware } = require('http-proxy-middleware');
|
||||
const bodyParser = require('body-parser');
|
||||
const path = require('path');
|
||||
|
||||
const app = express();
|
||||
const PORT = 8890;
|
||||
|
||||
// 解析JSON请求体
|
||||
app.use(bodyParser.json());
|
||||
|
||||
// 存储session信息
|
||||
const sessions = {};
|
||||
|
||||
// 保存session信息
|
||||
app.post('/api/session', (req, res) => {
|
||||
const { accountId, sessionData } = req.body;
|
||||
sessions[accountId] = sessionData;
|
||||
res.json({ success: true });
|
||||
});
|
||||
|
||||
// 获取session信息
|
||||
app.get('/api/session/:accountId', (req, res) => {
|
||||
const { accountId } = req.params;
|
||||
const sessionData = sessions[accountId];
|
||||
if (sessionData) {
|
||||
res.json({ success: true, data: sessionData });
|
||||
} else {
|
||||
res.json({ success: false, message: 'Session not found' });
|
||||
}
|
||||
});
|
||||
|
||||
// 提供静态HTML页面
|
||||
app.get('/web/:accountId', (req, res) => {
|
||||
res.send(`
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>Telegram Web</title>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<style>
|
||||
body, html {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
height: 100%;
|
||||
overflow: hidden;
|
||||
}
|
||||
#telegram-frame {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
border: none;
|
||||
}
|
||||
.loading {
|
||||
position: fixed;
|
||||
top: 50%;
|
||||
left: 50%;
|
||||
transform: translate(-50%, -50%);
|
||||
text-align: center;
|
||||
font-family: Arial, sans-serif;
|
||||
}
|
||||
.loading-spinner {
|
||||
border: 4px solid #f3f3f3;
|
||||
border-top: 4px solid #3498db;
|
||||
border-radius: 50%;
|
||||
width: 40px;
|
||||
height: 40px;
|
||||
animation: spin 1s linear infinite;
|
||||
margin: 0 auto 20px;
|
||||
}
|
||||
@keyframes spin {
|
||||
0% { transform: rotate(0deg); }
|
||||
100% { transform: rotate(360deg); }
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div id="loading" class="loading">
|
||||
<div class="loading-spinner"></div>
|
||||
<div>正在加载 Telegram Web...</div>
|
||||
</div>
|
||||
<iframe id="telegram-frame" style="display: none;"></iframe>
|
||||
|
||||
<script>
|
||||
const accountId = '${req.params.accountId}';
|
||||
const frame = document.getElementById('telegram-frame');
|
||||
const loading = document.getElementById('loading');
|
||||
|
||||
// 加载Telegram Web
|
||||
frame.src = 'https://web.telegram.org/k/';
|
||||
|
||||
frame.onload = async function() {
|
||||
// 等待Telegram Web加载完成
|
||||
setTimeout(async () => {
|
||||
try {
|
||||
// 获取session数据
|
||||
const response = await fetch('/api/session/' + accountId);
|
||||
const result = await response.json();
|
||||
|
||||
if (result.success && result.data) {
|
||||
// 尝试注入session(注意:由于安全限制,可能无法直接操作iframe内容)
|
||||
console.log('Session data ready for account:', accountId);
|
||||
|
||||
// 可以通过postMessage尝试通信
|
||||
frame.contentWindow.postMessage({
|
||||
type: 'telegram-session',
|
||||
data: result.data
|
||||
}, 'https://web.telegram.org');
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('Failed to load session:', error);
|
||||
}
|
||||
|
||||
// 显示iframe
|
||||
loading.style.display = 'none';
|
||||
frame.style.display = 'block';
|
||||
}, 2000);
|
||||
};
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
`);
|
||||
});
|
||||
|
||||
// 代理Telegram Web请求(可选)
|
||||
app.use('/telegram', createProxyMiddleware({
|
||||
target: 'https://web.telegram.org',
|
||||
changeOrigin: true,
|
||||
pathRewrite: {
|
||||
'^/telegram': ''
|
||||
}
|
||||
}));
|
||||
|
||||
app.listen(PORT, () => {
|
||||
console.log(`Telegram Web Server running on http://localhost:${PORT}`);
|
||||
console.log(`访问 http://localhost:${PORT}/web/{accountId} 来使用Telegram Web`);
|
||||
});
|
||||
Reference in New Issue
Block a user