Initial commit: Telegram Management System
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:
你的用户名
2025-11-04 15:37:50 +08:00
commit 237c7802e5
3674 changed files with 525172 additions and 0 deletions

View File

@@ -0,0 +1,9 @@
-- Adds extended fields required by the proxy platform configuration wizard
ALTER TABLE `proxy_platform`
ADD COLUMN `displayName` VARCHAR(255) NULL AFTER `platform`,
ADD COLUMN `connectionStatus` VARCHAR(50) NOT NULL DEFAULT 'unknown' COMMENT '最近一次连接状态' AFTER `rotationInterval`,
ADD COLUMN `proxyCount` INT NOT NULL DEFAULT 0 COMMENT '最近同步的可用代理数量' AFTER `connectionStatus`,
ADD COLUMN `avgResponseTime` INT NULL COMMENT '最近一次连接测试响应时间 (ms)' AFTER `proxyCount`,
ADD COLUMN `successRate` FLOAT NULL COMMENT '连接成功率 (0-1)' AFTER `avgResponseTime`,
ADD COLUMN `lastTestAt` DATETIME NULL COMMENT '最近一次连接测试时间' AFTER `successRate`,
ADD COLUMN `lastTestResult` TEXT NULL COMMENT '最近一次连接测试结果详情(JSON)' AFTER `lastTestAt`;

View File

@@ -0,0 +1,48 @@
-- 添加Rola-IP代理平台到数据库
-- 执行此SQL文件将Rola-IP平台配置插入到proxy_platform表中
-- 检查是否已存在Rola-IP配置
SELECT COUNT(*) as existing_count FROM proxy_platform WHERE platform = 'rola-ip';
-- 插入Rola-IP平台配置如果不存在
INSERT INTO proxy_platform (
platform,
description,
apiUrl,
authType,
apiKey,
username,
password,
proxyTypes,
countries,
concurrentLimit,
rotationInterval,
remark,
isEnabled,
createdAt,
updatedAt
)
SELECT * FROM (
SELECT
'rola-ip' as platform,
'Rola-IP专业代理IP服务平台支持住宅IP、数据中心IP、移动IP等多种类型' as description,
'https://admin.rola-ip.co' as apiUrl,
'userPass' as authType,
'' as apiKey,
'' as username,
'' as password,
'residential,datacenter,mobile,static_residential,ipv6' as proxyTypes,
'US,UK,DE,FR,JP,KR,AU,CA,BR,IN,SG,HK,TW,RU,NL' as countries,
100 as concurrentLimit,
300 as rotationInterval,
'支持多种代理类型和15个国家/地区提供住宅IP、数据中心IP、移动IP、静态住宅IP和IPv6代理服务。需要配置用户名和密码后启用。' as remark,
0 as isEnabled,
NOW() as createdAt,
NOW() as updatedAt
) AS tmp
WHERE NOT EXISTS (
SELECT 1 FROM proxy_platform WHERE platform = 'rola-ip'
);
-- 验证插入结果
SELECT * FROM proxy_platform WHERE platform = 'rola-ip';

View File

@@ -0,0 +1,27 @@
-- Initialize Telegram Data Centers
USE tg_manage;
-- Create table if not exists
CREATE TABLE IF NOT EXISTS `tg_dc` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`ip` varchar(255) NOT NULL COMMENT 'IP地址',
`port` varchar(255) NOT NULL COMMENT '端口',
`address` varchar(255) NOT NULL COMMENT '地址,1美国,2荷兰,3美国,4荷兰,5新加坡',
`createdAt` datetime DEFAULT CURRENT_TIMESTAMP,
`updatedAt` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='Telegram数据中心表';
-- Clear existing data
TRUNCATE TABLE `tg_dc`;
-- Insert Telegram Data Centers
INSERT INTO `tg_dc` (`id`, `ip`, `port`, `address`) VALUES
(1, '149.154.175.50', '443', '1'), -- DC1 Miami, USA
(2, '149.154.167.50', '443', '2'), -- DC2 Amsterdam, Netherlands
(3, '149.154.175.100', '443', '3'), -- DC3 Miami, USA
(4, '149.154.167.91', '443', '4'), -- DC4 Amsterdam, Netherlands
(5, '91.108.56.100', '443', '5'); -- DC5 Singapore
-- Verify data
SELECT * FROM `tg_dc`;

View File

@@ -0,0 +1,67 @@
-- Create Telegram Users Table
USE tg_manage;
-- 创建 Telegram 用户表
CREATE TABLE IF NOT EXISTS `tg_telegram_users` (
`id` bigint NOT NULL COMMENT 'Telegram用户ID',
`username` varchar(100) DEFAULT NULL COMMENT '用户名',
`first_name` varchar(100) DEFAULT NULL COMMENT '',
`last_name` varchar(100) DEFAULT NULL COMMENT '',
`phone` varchar(20) DEFAULT NULL COMMENT '电话号码',
`bio` text COMMENT '个人简介',
`is_bot` tinyint(1) DEFAULT '0' COMMENT '是否机器人',
`is_verified` tinyint(1) DEFAULT '0' COMMENT '是否认证账号',
`is_premium` tinyint(1) DEFAULT '0' COMMENT '是否Premium用户',
`is_scam` tinyint(1) DEFAULT '0' COMMENT '是否诈骗账号',
`is_fake` tinyint(1) DEFAULT '0' COMMENT '是否虚假账号',
`is_restricted` tinyint(1) DEFAULT '0' COMMENT '是否受限账号',
`is_support` tinyint(1) DEFAULT '0' COMMENT '是否官方支持账号',
`language_code` varchar(10) DEFAULT NULL COMMENT '语言代码',
`status` enum('online','offline','recently','last_week','last_month') DEFAULT 'offline' COMMENT '在线状态',
`profile_photo` text COMMENT '头像URL',
`last_seen_at` datetime DEFAULT NULL COMMENT '最后上线时间',
`created_at` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`updated_at` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`),
KEY `idx_username` (`username`),
KEY `idx_phone` (`phone`),
KEY `idx_status` (`status`),
KEY `idx_is_bot` (`is_bot`),
KEY `idx_is_verified` (`is_verified`),
KEY `idx_is_premium` (`is_premium`),
KEY `idx_created_at` (`created_at`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='Telegram用户表';
-- 插入一些示例数据
INSERT INTO `tg_telegram_users` (`id`, `username`, `first_name`, `last_name`, `phone`, `bio`, `is_bot`, `is_verified`, `is_premium`, `is_scam`, `is_fake`, `is_restricted`, `is_support`, `language_code`, `status`, `profile_photo`, `last_seen_at`) VALUES
(777000, 'Telegram', 'Telegram', NULL, NULL, 'Official Telegram Support', 0, 1, 0, 0, 0, 0, 1, 'en', 'online', 'https://telegram.org/img/t_logo.png', NOW()),
(1087968824, 'GroupAnonymousBot', 'Group', 'Anonymous Bot', NULL, 'Anonymous Admin', 1, 1, 0, 0, 0, 0, 1, 'en', 'online', NULL, NOW()),
(136817688, 'Channel_Bot', 'Channel', 'Bot', NULL, 'Telegram Channel Bot', 1, 1, 0, 0, 0, 0, 1, 'en', 'online', NULL, NOW()),
(12345678, 'john_doe', 'John', 'Doe', '+1234567890', 'Software Developer', 0, 0, 1, 0, 0, 0, 0, 'en', 'recently', NULL, DATE_SUB(NOW(), INTERVAL 30 MINUTE)),
(87654321, 'jane_smith', 'Jane', 'Smith', '+0987654321', 'Designer & Content Creator', 0, 1, 1, 0, 0, 0, 0, 'en', 'last_week', NULL, DATE_SUB(NOW(), INTERVAL 3 DAY)),
(11111111, 'scammer_account', 'Fake', 'User', NULL, 'This is a scam account', 0, 0, 0, 1, 0, 0, 0, 'en', 'offline', NULL, DATE_SUB(NOW(), INTERVAL 30 DAY)),
(22222222, 'fake_profile', 'Fake', 'Profile', NULL, 'Impersonating someone else', 0, 0, 0, 0, 1, 0, 0, 'en', 'offline', NULL, DATE_SUB(NOW(), INTERVAL 15 DAY)),
(33333333, 'restricted_user', 'Restricted', 'User', NULL, 'Account has been restricted', 0, 0, 0, 0, 0, 1, 0, 'zh', 'last_month', NULL, DATE_SUB(NOW(), INTERVAL 20 DAY)),
(44444444, 'premium_user', 'Premium', 'Member', '+1122334455', 'Telegram Premium subscriber', 0, 0, 1, 0, 0, 0, 0, 'es', 'online', NULL, NOW()),
(55555555, 'verified_celeb', 'Celebrity', 'Account', NULL, 'Verified public figure', 0, 1, 1, 0, 0, 0, 0, 'fr', 'recently', NULL, DATE_SUB(NOW(), INTERVAL 2 HOUR)),
(66666666, 'echo_bot', 'Echo', 'Bot', NULL, 'A simple echo bot', 1, 0, 0, 0, 0, 0, 0, 'en', 'online', NULL, NOW()),
(77777777, 'music_lover', 'Music', 'Lover', '+2233445566', 'I love music and concerts', 0, 0, 0, 0, 0, 0, 0, 'de', 'last_week', NULL, DATE_SUB(NOW(), INTERVAL 5 DAY)),
(88888888, 'tech_guru', 'Tech', 'Guru', NULL, 'Technology enthusiast and blogger', 0, 1, 0, 0, 0, 0, 0, 'ja', 'recently', NULL, DATE_SUB(NOW(), INTERVAL 1 HOUR)),
(99999999, 'crypto_trader', 'Crypto', 'Trader', '+3344556677', 'Cryptocurrency trader and investor', 0, 0, 1, 0, 0, 0, 0, 'ko', 'offline', NULL, DATE_SUB(NOW(), INTERVAL 12 HOUR)),
(10101010, 'news_channel', 'News', 'Channel', NULL, 'Daily news and updates', 1, 1, 0, 0, 0, 0, 0, 'en', 'online', NULL, NOW());
-- 验证数据
SELECT COUNT(*) as total_users FROM tg_telegram_users;
SELECT
status,
COUNT(*) as count
FROM tg_telegram_users
GROUP BY status;
SELECT
SUM(CASE WHEN is_bot = 1 THEN 1 ELSE 0 END) as bots,
SUM(CASE WHEN is_verified = 1 THEN 1 ELSE 0 END) as verified,
SUM(CASE WHEN is_premium = 1 THEN 1 ELSE 0 END) as premium,
SUM(CASE WHEN is_scam = 1 THEN 1 ELSE 0 END) as scam,
SUM(CASE WHEN is_fake = 1 THEN 1 ELSE 0 END) as fake
FROM tg_telegram_users;

View File

@@ -0,0 +1,11 @@
-- Initialize database with proper settings
SET SQL_MODE = '';
-- Create database if not exists
CREATE DATABASE IF NOT EXISTS tg_manage CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
USE tg_manage;
-- Grant privileges to user
GRANT ALL PRIVILEGES ON tg_manage.* TO 'tg_manage'@'%';
FLUSH PRIVILEGES;

View File

@@ -0,0 +1,72 @@
-- 禁用外键检查
SET FOREIGN_KEY_CHECKS = 0;
-- 设置SQL模式以允许零日期
SET SQL_MODE = '';
-- 清空目标表避免主键冲突
TRUNCATE TABLE tg_account;
TRUNCATE TABLE tg_firstname;
TRUNCATE TABLE tg_lastname;
TRUNCATE TABLE tg_group;
TRUNCATE TABLE tg_message;
TRUNCATE TABLE tg_config;
TRUNCATE TABLE tg_script;
TRUNCATE TABLE tg_script_article;
TRUNCATE TABLE tg_script_project;
TRUNCATE TABLE tg_script_task;
-- 迁移TG账号数据处理无效日期
INSERT INTO tg_account (id, firstname, lastname, phone, password, usageId, isBan, lastOnline, createdAt, updatedAt, status, session, banTime, nextTime, addGroupIds, about, targetId)
SELECT
id,
firstname,
lastname,
phone,
password,
usageId,
isBan,
CASE WHEN lastOnline = '0000-00-00 00:00:00' THEN NULL ELSE lastOnline END,
createdAt,
updatedAt,
status,
session,
CASE WHEN banTime = '0000-00-00 00:00:00' THEN NULL ELSE banTime END,
nextTime,
addGroupIds,
about,
targetId
FROM c_tg_account;
-- 迁移名字数据
INSERT INTO tg_firstname SELECT * FROM c_firstname;
INSERT INTO tg_lastname SELECT * FROM c_lastname;
-- 迁移群组数据
INSERT IGNORE INTO tg_group SELECT * FROM c_group;
-- 迁移消息数据
INSERT IGNORE INTO tg_message SELECT * FROM c_message;
-- 迁移配置数据
INSERT IGNORE INTO tg_config SELECT * FROM c_config;
-- 迁移脚本相关数据
INSERT IGNORE INTO tg_script SELECT * FROM c_script;
INSERT IGNORE INTO tg_script_article SELECT * FROM c_script_article;
INSERT IGNORE INTO tg_script_project SELECT * FROM c_script_project;
INSERT IGNORE INTO tg_script_task SELECT * FROM c_script_task;
-- 重新启用外键检查
SET FOREIGN_KEY_CHECKS = 1;
-- 查看迁移结果
SELECT 'tg_account' as table_name, COUNT(*) as count FROM tg_account
UNION ALL
SELECT 'tg_firstname', COUNT(*) FROM tg_firstname
UNION ALL
SELECT 'tg_lastname', COUNT(*) FROM tg_lastname
UNION ALL
SELECT 'tg_group', COUNT(*) FROM tg_group
UNION ALL
SELECT 'tg_message', COUNT(*) FROM tg_message;

View File

@@ -0,0 +1,52 @@
-- 禁用外键检查
SET FOREIGN_KEY_CHECKS = 0;
-- 清空目标表避免主键冲突
TRUNCATE TABLE tg_account;
TRUNCATE TABLE tg_firstname;
TRUNCATE TABLE tg_lastname;
TRUNCATE TABLE tg_group;
TRUNCATE TABLE tg_message;
TRUNCATE TABLE tg_config;
TRUNCATE TABLE tg_script;
TRUNCATE TABLE tg_script_article;
TRUNCATE TABLE tg_script_project;
TRUNCATE TABLE tg_script_task;
-- 迁移TG账号数据只迁移共同字段
INSERT INTO tg_account (id, firstname, lastname, phone, password, usageId, isBan, lastOnline, createdAt, updatedAt, status, session, banTime, nextTime, addGroupIds, about, targetId)
SELECT id, firstname, lastname, phone, password, usageId, isBan, lastOnline, createdAt, updatedAt, status, session, banTime, nextTime, addGroupIds, about, targetId
FROM c_tg_account;
-- 迁移名字数据
INSERT INTO tg_firstname SELECT * FROM c_firstname;
INSERT INTO tg_lastname SELECT * FROM c_lastname;
-- 迁移群组数据(检查表结构是否一致)
INSERT IGNORE INTO tg_group SELECT * FROM c_group;
-- 迁移消息数据
INSERT IGNORE INTO tg_message SELECT * FROM c_message;
-- 迁移配置数据
INSERT IGNORE INTO tg_config SELECT * FROM c_config;
-- 迁移脚本相关数据
INSERT IGNORE INTO tg_script SELECT * FROM c_script;
INSERT IGNORE INTO tg_script_article SELECT * FROM c_script_article;
INSERT IGNORE INTO tg_script_project SELECT * FROM c_script_project;
INSERT IGNORE INTO tg_script_task SELECT * FROM c_script_task;
-- 重新启用外键检查
SET FOREIGN_KEY_CHECKS = 1;
-- 查看迁移结果
SELECT 'tg_account' as table_name, COUNT(*) as count FROM tg_account
UNION ALL
SELECT 'tg_firstname', COUNT(*) FROM tg_firstname
UNION ALL
SELECT 'tg_lastname', COUNT(*) FROM tg_lastname
UNION ALL
SELECT 'tg_group', COUNT(*) FROM tg_group
UNION ALL
SELECT 'tg_message', COUNT(*) FROM tg_message;

View File

@@ -0,0 +1,35 @@
-- 清空目标表避免主键冲突
TRUNCATE TABLE tg_account;
TRUNCATE TABLE tg_firstname;
TRUNCATE TABLE tg_lastname;
TRUNCATE TABLE tg_group;
TRUNCATE TABLE tg_message;
TRUNCATE TABLE tg_config;
TRUNCATE TABLE tg_script;
TRUNCATE TABLE tg_script_article;
TRUNCATE TABLE tg_script_project;
TRUNCATE TABLE tg_script_task;
-- 迁移TG账号数据只迁移共同字段
INSERT INTO tg_account (id, firstname, lastname, phone, password, usageId, isBan, lastOnline, createdAt, updatedAt, status, session, banTime, nextTime, addGroupIds, about, targetId)
SELECT id, firstname, lastname, phone, password, usageId, isBan, lastOnline, createdAt, updatedAt, status, session, banTime, nextTime, addGroupIds, about, targetId
FROM c_tg_account;
-- 迁移名字数据
INSERT INTO tg_firstname SELECT * FROM c_firstname;
INSERT INTO tg_lastname SELECT * FROM c_lastname;
-- 迁移群组数据
INSERT INTO tg_group SELECT * FROM c_group;
-- 迁移消息数据
INSERT INTO tg_message SELECT * FROM c_message;
-- 迁移配置数据
INSERT INTO tg_config SELECT * FROM c_config;
-- 迁移脚本相关数据
INSERT INTO tg_script SELECT * FROM c_script;
INSERT INTO tg_script_article SELECT * FROM c_script_article;
INSERT INTO tg_script_project SELECT * FROM c_script_project;
INSERT INTO tg_script_task SELECT * FROM c_script_task;

View File

@@ -0,0 +1,21 @@
-- 迁移TG账号数据
INSERT IGNORE INTO tg_account SELECT * FROM c_tg_account;
-- 迁移名字数据
INSERT IGNORE INTO tg_firstname SELECT * FROM c_firstname;
INSERT IGNORE INTO tg_lastname SELECT * FROM c_lastname;
-- 迁移群组数据
INSERT IGNORE INTO tg_group SELECT * FROM c_group;
-- 迁移消息数据
INSERT IGNORE INTO tg_message SELECT * FROM c_message;
-- 迁移配置数据
INSERT IGNORE INTO tg_config SELECT * FROM c_config;
-- 迁移其他重要数据
INSERT IGNORE INTO tg_script SELECT * FROM c_script;
INSERT IGNORE INTO tg_script_article SELECT * FROM c_script_article;
INSERT IGNORE INTO tg_script_project SELECT * FROM c_script_project;
INSERT IGNORE INTO tg_script_task SELECT * FROM c_script_task;