中文PT站官邀查询器

中国私人追踪器官方招募路线

目前為 2024-08-23 提交的版本,檢視 最新版本

// ==UserScript==
// @name         中文PT站官邀查询器
// @namespace    https://greasyfork.org
// @version      0.1
// @description  中国私人追踪器官方招募路线
// @author       ChatGPT, cO_ob
// @match        https://tieba.baidu.com/*pt*
// @grant        none
// @license      MIT
// ==/UserScript==

(function() {
    'use strict';
    window.addEventListener('load', function() {

        const routeInfo = {
			'AgsvPT': {
				'XingTan': [90, '', '', 2408],
				'Vicomo': [0, 'Power User', '', 2404]
			},
			'Audiences': {
				'GGPT': [0, '', '', 2311],
				'Hares': [0, '', '', 2408],
				'HDPT': [0, '', '', 2407],
				'HTPT': [0, '', '', 2311],
				'PANDA': [0, '', '', 2401],
				'TTG': [0, 'Extreme User', '做种时间 2000天', 2406],
				'U2': [540, 'Veteran User', '发布5个相关种子', 2405]
			},
			'BTSCHOOL': {
				'ECUSTPT': [0, 'Power User', '发布数 1', 2404],
				'Hares': [0, 'Crazy User', '', 2403],
				'HDPT': [0, 'Elite User', '', 2402],
				'PigGo': [0, 'Crazy User', '', 2408],
				'ZmPT': [0, 'Elite User', '做种体积 1T', 2310]
			},
			'DIC': {
				'GPW': [0, 'Power User', '发布数 5', 2407],
				'PuTao': [180, 'Elite', '注册时间 1年 或 Torrent Master', 2402],
				'Vicomo': [0, 'Power User', '', 2401],
				'ZmPT': [0, 'Power User', '', 2309]
			},
			'GPW': {
				'AgsvPT': [0, 'Power User', '', 2404],
				'M-Team': [60, 'Elite', '', 2401],
				'PuTao': [180, 'Elite', '注册时间 1年 或 Torrent Master', 2402],
				'U2': [84, 'Power User', '已审核ACG发布数 5', 2404],
				'Vicomo': [0, 'Power User', '', 2401],
				'ZmPT': [180, 'Elite', '', 2309]
			},
			'HDDolby': {
				'HDCity': [0, 'Elite User', '', 2406],
				'Hares': [0, 'Power User', '', 2408],
				'HUDBT': [0, 'Power User', '', 2406],
				'ptsbao': [0, 'Power User', '', 2407],
				'RedLeaves': [90, 'Power User', '', 2407]
			},
			'HHCLUB': {
				'ECUSTPT': [0, 'Power User', '', 2408],
				'HDPT': [0, 'Power User', '', 2406],
				'PigGo': [0, 'Crazy User', '', 2405]
			},
			'HD4FANS': {
				'PTerClub': [180, 'Crazy User', '', 2407],
				'TorrentCCF': [90, 'Power User', '', 2403],
				'Vicomo': [0, 'Power User', '', 2401]
			},
			'HDArea': {
				'Hares': [0, 'Crazy User', '', 2402]
			},
			'HDAtmos': {
				'ECUSTPT': [0, 'Power User', '发布数 1', 2404]
			},
			'HDFans': {
				'ECUSTPT': [0, 'Power User', '发布数 1', 2405],
				'HDKylin': [0, '', '', 2408],
				'HUDBT': [0, 'Power User', '学习类发布数 5 或上传量 50GB', 2407],
				'HDPT': [0, 'Elite User', '', 2408],
				'Hares': [0, 'Crazy User', '', 2408],
				'RedLeaves': [180, 'Veteran User', '做种体积 2T', 2406],
				'ZmPT': [0, 'Elite User', '做种体积 1T', 2309]
			},
			'HDHome': {
				'HDVideo': [0, 'Elite User', '', 2403],
				'HDKylin': [0, 'Power User', '', 2407],
				'Hares': [0, 'Crazy User', '', 2402],
				'RedLeaves': [0, 'Elite User', '做种体积 5TB', 2405],
				'U2': [210, 'Veteran User', 'ACG发布数 5', 2407]
			},
			'HDSky': {
				'DaJiao': [0, 'Elite User', '', 2407],
				'GPW': [0, 'Elite User', '发布数 1', 2401],
				'PT@KEEPFRDS': [0, 'Insane User', '做种时间 2000天', 2407],
				'HTPT': [0, 'Power User', '', 2408],
				'RedLeaves': [90, 'Veteran User', '或 官种 5T', 2405]
			},
			'M-Team': {
				'HDKylin': [0, '', '', 2408],
				'HDPT': [0, 'Elite User', '', 2408],
				'FSM': [0, '', '', 2408],
				'GPW': [84, 'Crazy User', '发布数 1 上传量 500GB', 2405],
				'DiscFan': [200, 'Elite User', '', 2408],
				'Hares': [0, 'Elite User', '', 2406],
				'ilolicon': [0, 'Crazy User', '', 2408],
				'DaJiao': [0, 'Elite User', '', 2405],
				'DragonHD': [0, '', '上传量 2TB 分享率 1', 2406],
				'RedLeaves': [90, 'Veteran User', '官种做种体积 2TB', 2407]
			},
			'OpenCD': {
				'PTerClub': [180, 'Crazy User', '', 2401],
				'SSD': [360, 'Veteran User', '已审核ACG发布数 5', 2402],
				'BYRBT': [0, '', '上传量 200G', 2407]
			},
			'OurBits': {
				'RedLeaves': [90, 'Power User', '', 2404],
				'SSD': [360, 'Veteran User', '发布数 10 注册时间 12月 做种时间 50000天', 2404],
				'MonikaDesign': [56, 'Elite User', '', 2406],
				'DiscFan': [56, 'Elite User', '', 2408]
			},
			'PT@KEEPFRDS': {
				'FSM': [0, 'Power User', '', 2312],
				'HDPOST': [0, 'Elite User', '', 2407],
				'PTerClub': [180, 'Crazy User', '', 2407],
				'TorrentCCF': [30, 'Crazy User', '', 2404]
			},
			'PTerClub': {
				'TorrentCCF': [180, 'Crazy User', '发布数 1', 2407],
				'PuTao': [180, 'Insane User', '', 2405],
				'M-Team': [0, 'Crazy User', '发布数 10 或 Insane User', 2408],
				'HITPT': [0, 'Power User', '', 2408],
				'XingTan': [0, 'Power User', '', 2406],
				'FSM': [0, '', '', 2408],
				'PT@KEEPFRDS': [0, 'Insane User', 'FRDS资源做种体积 1TB', 2408],
				'DaJiao': [0, 'Elite User', '', 2408],
				'Hares': [0, 'Power User', '', 2406],
				'OpenCD': [280, 'Veteran User', '已审核音乐发布数 10', 2407],
				'GPW': [0, 'Crazy User', '影视或音乐发布数 1', 2402],
				'HDFans': [0, 'Power User', '', 2405],
				'HDPT': [0, 'Power User', '', 2406],
				'HDVideo': [0, 'Elite User', '', 2403],
				'kamePT': [0, 'Elite User', '', 2406],
				'MonikaDesign': [56, 'Power User', '', 2405],
				'OKPT': [30, 'Power User', '', 2406],
				'U2': [112, 'Crazy User', 'ACG发布数 5', 2404],
				'TLFBits': [90, 'Crazy User', 'TLF资源 1TB', 2407],
				'SSD': [300, '', '1.下载量1024GB;2.分享率 3.55;3.做种积分 1500000;4.已审核存活发布数 30', 2407],
				'PigGo': [0, 'Crazy User', '', 2408],
				'PANDA': [0, 'Power User', '', 2405],
				'HUDBT': [0, 'Power User', '', 2401]
			},
			'RedLeaves': {
				'OKPT': [0, '', '', 2311],
				'ECUSTPT': [0, 'Power User', '发布数 1', 2402],
				'AgsvPT': [0, 'Elite User', '已审核发布数 10', 2402],
				'XingTan': [0, '', '', 2404],
				'BTSCHOOL': [0, '', '', 2403],
				'qingwa': [0, 'Power User', '', 2403],
				'HDKylin': [0, 'Power User', '', 2407],
				'HDFans': [0, 'Power User', '', 2404],
				'Vicomo': [0, 'Power User', '', 2311],
				'Ubits': [0, 'Power User', '', 2311],
				'GGPT': [0, '', '', 2403],
				'kamePT': [0, 'Crazy User', '上传量 5GB', 2404]
			},
			'SSD': {
				'PuTao': [210, 'Elite', '1.发布数 20 或 保种积分 800000 或 下载量 2TB 上传量 10TB', 2405],
				'PTerClub': [180, 'Elite', '保种上传 20GB/月 或 100GB 或 发布数 3', 2407],
				'HDVideo': [0, 'Elite', '', 2407],
				'U2': [175, 'Elite', '1.做种积分 400000;2.发布1相关种子或保种上传 500GB', 2406],
				'PigGo': [180, '', '', 2407],
				'FSM': [0, '', '', 2408],
				'TorrentCCF': [30, '', '发布数 1', 2407],
				'TTG': [0, 'Master', '做种时间 2000天', 2311],
				'OpenCD': [180, 'God', '保种上传 1024GB', 2406],
				'OurBits': [0, 'Master', '发布数 10;保种上传 300GB', 2403]
			},
			'TLFBits': {
				'Hares': [0, 'Power User', '', 2402],
				'Soulvoice': [0, 'Crazy User', '', 2407],
				'PTerClub': [180, 'Crazy User', '', 2407]
			},
			'TorrentCCF': {
				'BYRBT': [0, '', '上传量 500GB', 2402],
				'RedLeaves': [180, 'Veteran User', '', 2407],
				'PTerClub': [0, 'Veteran User', '发布数 5', 2407],
				'HITPT': [0, 'Power User', '', 2406]
			},
			'tjupt': {
				'TLFBits': [0, '', '', 2408],
				'PuTao': [180, 'Power User', '1.发布数 10 HnR 90或 2.Crazy User 且 做种 5000天 HnR 95', 2402],
				'PTerClub': [90, 'Crazy User', '', 2401],
				'RedLeaves': [180, 'Veteran User', '', 2406],
				'HDCity': [0, 'Elite User', '', 2406],
				'HDFans': [0, 'Power User', 'HnR 100', 2312],
				'XingTan': [90, 'Power User', '', 2408],
				'GPW': [0, 'Crazy User', '', 2404],
				'MonikaDesign': [0, '', '', 2309]
			},
			'TTG': {
				'Audiences': [0, 'PetaByte', '1.(Audiences官种发布数 10 且 Audiences做种数100 且 Audiences做种体积 1TB) 或 (Audiences做种数100 且 Audiences做种体积 2TB)', 2408],
				'TLFBits': [0, 'TeraByte', '', 2407],
				'SSD': [0, 'BrontoByte', '发布数 5 做种时间 40000天', 2404]
			},
			'U2': {
				'HDCity': [0, '', '上传量 500GB 或 (上传量300GB 且 下载量100GB)', 2406],
				'kamePT': [0, 'Elite User', '', 2408],
				'OpenCD': [180, 'Ultimate User', '', 2407],
				'SSD': [0, 'Insane User', '做种体积×做种天数 1000000', 2407],
				'XingTan': [0, 'Power User', '', 2407],
				'PTerClub': [180, 'Insane User', '', 2402],
				'GPW': [0, 'Crazy User', '发布数 1', 2404],
				'MonikaDesign': [28, 'Power User', '', 2406],
				'PigGo': [0, 'Insane User', '', 2407]
			},
			'Ubits': {
				'Vicomo': [0, 'Power User', '', 2311],
				'RedLeaves': [90, 'Veteran User', '做种体积 5T', 2405],
				'qingwa': [0, 'Power User', '', 2403],
				'HDKylin': [0, '', '', 2408],
				'DaJiao': [0, 'Power User', '', 2311],
				'PigGo': [0, 'Crazy User', '', 2408]
			},
			'ZHUQUE': {
				'Hares': [0, '结丹', '', 2309],
				'qingwa': [0, '元婴', '', 2406],
				'FSM': [0, '', '', 2401],
				'RedLeaves': [180, '合体', '', 2405],
				'ECUSTPT': [0, '结丹', '发布数 1', 2404],
				'ZmPT': ['', '原石 300000', 2309]
			},
        };
        const unlockInviteClass = {
			'AgsvPT': '',
			'Audiences': 'Elite User',
			'BTSCHOOL': '',
			'DIC': 'Power User',
			'GPW': 'Power User',
			'HDDolby': 'Elite User',
			'HHCLUB': '',
			'HD4FANS': '',
			'HDArea': '',
			'HDAtmos': '',
			'HDFans': '',
			'HDHome': 'Crazy User',
			'HDSky': 'Elite User',
			'M-Team': 'Elite User',
			'OpenCD': 'Elite User',
			'OurBits': 'Elite User',
			'PT@KEEPFRDS': 'Elite User',
			'PTerClub': 'Power User',
			'RedLeaves': '',
			'SSD': 'Elite',
			'TLFBits': '',
			'TorrentCCF': 'Elite User',
			'tjupt': '',
			'TTG': 'TeraByte',
			'U2': '',
			'Ubits': '',
			'ZHUQUE': ''
        }
        const classInfo = {
            'AgsvPT': {
                'Power User': [28, '50GB', 1.05, '做种积分 40000'],
                'Elite User': [56, '120GB', 1.55, '做种积分 80000'],
                'Crazy User': [84, '300GB', 2.05, '做种积分 150000'],
                'Insane User': [140, '500GB', 2.55, '做种积分 400000'],
                'Veteran User': [196, '750GB', 4.05, '做种积分 800000'],
                'Extreme User': [280, '1TB', 5.05, '做种积分 1400000'],
                'Ultimate User': [364, '1.5TB', 6.05, '做种积分 2200000'],
                'Nexus Master': [490, '3TB', 7.05, '做种积分 3200000']
            },
            'Audiences': {
                'Power User': [35, '120GB', 2.0, '做种积分 100000'],
                'Elite User': [105, '240GB', 2.5, '做种积分 200000'],
                'Crazy User': [168, '400GB', 3.0, '做种积分 400000'],
                'Insane User': [280, '600GB', 3.5, '做种积分 640000'],
                'Veteran User': [420, '1TB', 4.0, '做种积分 880000'],
                'Extreme User': [560, '2TB', 4.5, '做种积分 1200000'],
                'Ultimate User': [700, '4TB', 5.0, '做种积分 1500000'],
                'Nexus Master': [784, '8TB', 6.0, '做种积分 1800000']
            },
			'BTSCHOOL': {
				'Power User': [28, '50GB', 2.0, '做种积分 40000'],
				'Elite User': [56, '100GB', 2.5, '做种积分 80000'],
				'Crazy User': [105, '300GB', 3.0, '做种积分 150000'],
				'Insane User': [175, '500GB', 3.5, '做种积分 250000'],
				'Veteran User': [280, '1TB', 4.0, '做种积分 400000'],
				'Extreme User': [420, '2TB', 4.5, '做种积分 600000'],
				'Ultimate User': [560, '5TB', 5.0, '做种积分 800000'],
				'Nexus Master': [700, '10TB', 5.5, '做种积分 1000000']
			},
			'DIC': {
				'Member': [7, '10GB', 0.7, '注册时间 1周'],
				'Power User': [14, '25GB', 1.05, '注册时间 2周, 发布数 5'],
				'Elite': [28, '75GB', 1.05, '注册时间 4周, 发布数 50'],
				'Torrent Master': [56, '200GB', 1.05, '注册时间 8周, 发布数 150'],
				'Power Torrent Master': [56, '375GB', 1.05, '注册时间 8周, 独特分组发布数 300'],
				'Elite Torrent Master': [84, '600GB', 1.05, '注册时间 12周, FLAC/WAV完美发布数 500'],
				'Elite Torrent Master Plus': [84, '600GB', 1.05, '注册时间 12周, FLAC完美发布数 500'],
				'Guru': [112, '1.2TB', 1.05, '注册时间 16周, FLAC完美发布数 1000']
			},
			'GPW': {
				'Member': [7, '80GB', 0.8, '注册时间 1周'],
				'Power User': [14, '200GB', 1.2, '注册时间 2周, 发布数 1'],
				'Elite': [28, '500GB', 1.2, '注册时间 4周, 发布数 25'],
				'Torrent Master': [56, '1TB', 1.2, '注册时间 8周, 发布数 100'],
				'Power Torrent Master': [84, '2TB', 1.2, '注册时间 12周, 发布数 250'],
				'Elite Torrent Master': [112, '5TB', 1.2, '注册时间 16周, 发布数 500'],
				'Guru': [140, '10TB', 1.2, '注册时间 20周, 发布数 1000']
			},
			'HHCLUB': {
				'Power User': [28, '50GB', 1.05, '做种积分 80000'],
				'Elite User': [56, '120GB', 1.55, '做种积分 150000'],
				'Crazy User': [105, '300GB', 2.05, '做种积分 300000'],
				'Insane User': [175, '500GB', 2.55, '做种积分 500000'],
				'Veteran User': [280, '750GB', 3.05, '做种积分 900000'],
				'Extreme User': [420, '1TB', 3.55, '做种积分 1100000'],
				'Ultimate User': [560, '1.5TB', 4.05, '做种积分 1300000'],
				'Nexus Master': [700, '3TB', 4.55, '做种积分 1500000']
			},
			'HD4FANS': {
				'Power User': [28, '50GB', 1.05, '做种积分 40000'],
				'Elite User': [56, '120GB', 1.55, '做种积分 80000'],
				'Crazy User': [105, '300GB', 2.05, '做种积分 150000'],
				'Insane User': [175, '500GB', 2.55, '做种积分 250000'],
				'Veteran User': [280, '750GB', 3.05, '做种积分 400000'],
				'Extreme User': [420, '1TB', 3.55, '做种积分 600000'],
				'Ultimate User': [560, '1.5TB', 4.05, '做种积分 800000'],
				'Nexus Master': [700, '3TB', 4.55, '做种积分 1000000']
			},
			'HDArea': {
				'Power User': [28, '50GB', 1.05, ''],
				'Elite User': [56, '120GB', 3.0, ''],
				'Crazy User': [70, '300GB', 3.5, ''],
				'Insane User': [84, '750GB', 4.0, ''],
				'Veteran User': [140, '1TB', 4.5, ''],
				'Extreme User': [175, '2TB', 5.0, ''],
				'Ultimate User': [210, '5TB', 5.5, ''],
				'Nexus Master': [280, '10TB', 6.0, '']
			},
			'HDAtmos': {
				'Power User': [28, '50GB', 1.05, ''],
				'Elite User': [56, '120GB', 1.55, ''],
				'Crazy User': [105, '300GB', 2.05, ''],
				'Insane User': [175, '500GB', 2.55, ''],
				'Veteran User': [280, '750GB', 3.05, ''],
				'Extreme User': [420, '1TB', 3.55, ''],
				'Ultimate User': [560, '1.5TB', 4.05, ''],
				'Nexus Master': [700, '3TB', 4.55, '']
			},
				'HDDolby': {
				'Power User': [14, '120GB', 2.0, '做种积分 60000'],
				'Elite User': [28, '256GB', 2.5, '做种积分 120000'],
				'Crazy User': [56, '512GB', 3.0, '做种积分 240000'],
				'Insane User': [84, '768GB', 3.5, '做种积分 360000'],
				'Veteran User': [140, '1TB', 4.0, '做种积分 600000'],
				'Extreme User': [196, '2TB', 4.5, '做种积分 720000'],
				'Ultimate User': [280, '4TB', 5.0, '做种积分 1200000'],
				'Nexus Master': [392, '8TB', 5.5, '做种积分 1680000']
			},
			'HDFans': {
				'Power User': [28, '50GB', 1.0, '做种积分 50000'],
				'Elite User': [56, '120GB', 1.5, '做种积分 100000'],
				'Crazy User': [105, '256GB', 2.0, '做种积分 250000'],
				'Insane User': [210, '512GB', 2.5, '做种积分 400000'],
				'Veteran User': [280, '1TB', 3.0, '做种积分 600000'],
				'Extreme User': [350, '2TB', 3.5, '做种积分 800000'],
				'Ultimate User': [420, '4TB', 4.0, '做种积分 1000000'],
				'Nexus Master': [700, '10TB', 5.0, '做种积分 1688888']
			},
			'HDHome': {
				'Power User': [35, '256GB', 2.0, '做种积分 40000'],
				'Elite User': [56, '386GB', 2.5, '做种积分 100000'],
				'Crazy User': [84, '512GB', 3.0, '做种积分 180000'],
				'Insane User': [112, '768GB', 3.5, '做种积分 280000'],
				'Veteran User': [140, '1TB', 4.0, '做种积分 400000'],
				'Extreme User': [168, '2TB', 4.5, '做种积分 540000'],
				'Ultimate User': [210, '8TB', 5.0, '做种积分 700000'],
				'Nexus Master': [252, '10TB', 10.0, '做种积分 1000000']
			},
			'HDSky': {
				'Power User': [35, '200GB', 2.0, ''],
				'Elite User': [70, '500GB', 2.5, ''],
				'Crazy User': [105, '1TB', 3.0, ''],
				'Insane User': [140, '2TB', 3.5, ''],
				'Veteran User': [175, '4TB', 4.0, ''],
				'Extreme User': [210, '6TB', 4.5, ''],
				'Ultimate User': [315, '8TB', 5.0, ''],
				'Nexus Master': [455, '10TB', 5.5, '']
			},
			'M-Team': {
				'Power User': [28, '200GB', 2.0, ''],
				'Elite User': [56, '400GB', 3.0, ''],
				'Crazy User': [84, '500GB', 4.0, ''],
				'Insane User': [112, '800GB', 5.0, ''],
				'Veteran User': [140, '1000GB', 6.0, ''],
				'Extreme User': [168, '2000GB', 7.0, ''],
				'Ultimate User': [196, '2500GB', 8.0, ''],
				'Nexus Master': [224, '3000GB', 9.0, '']
			},
			'OpenCD': {
				'Power User': [28, '20GB', 1.5, ''],
				'Elite User': [56, '60GB', 2.0, ''],
				'Crazy User': [105, '200GB', 2.5, ''],
				'Insane User': [140, '400GB', 3.0, ''],
				'Veteran User': [175, '600GB', 3.5, ''],
				'Extreme User': [175, '1TB', 4.0, ''],
				'Ultimate User': [210, '2TB', 4.5, ''],
				'Nexus Master': [210, '3TB', 5.0, '']
			},
			'OurBits': {
				'Power User': [35, '100GB', 2.0, ''],
				'Elite User': [70, '350GB', 2.5, ''],
				'Crazy User': [105, '500GB', 3.0, ''],
				'Insane User': [140, '1TB', 3.5, ''],
				'Veteran User': [175, '2TB', 4.0, ''],
				'Extreme User': [210, '4TB', 4.5, ''],
				'Ultimate User': [280, '6TB', 5.0, ''],
				'Nexus Master': [364, '8TB', 5.5, '']
			},
			'PT@KEEPFRDS': {
				'Power User': [35, '50GB', 1.0, '积分 3200'],
				'Elite User': [70, '150GB', 1.5, '积分 19200'],
				'Crazy User': [105, '300GB', 2.0, '积分 76800'],
				'Insane User': [210, '500GB', 2.5, '积分 256000'],
				'Veteran User': [420, '1TB', 3.5, '积分 640000'],
				'Extreme User': [630, '2TB', 4.0, '积分 1280000'],
				'Ultimate User': [840, '3TB', 4.5, '积分 1920000'],
				'Nexus Master': [1050, '4TB', 5.0, '积分 2560000']
			},
			'PTerClub': {
				'Power User': [35, '50GB', 1.05, '做种积分 10000'],
				'Elite User': [70, '120GB', 1.55, '做种积分 30000'],
				'Crazy User': [168, '300GB', 2.05, '做种积分 80000'],
				'Insane User': [224, '500GB', 2.55, '做种积分 150000'],
				'Veteran User': [280, '750GB', 3.05, '做种积分 300000 或 做种积分 900000 发布数 10'],
				'Extreme User': [336, '1TB', 3.55, '做种积分 600000 或 做种积分 1800000 发布数 10'],
				'Ultimate User': [392, '1.5TB', 4.05, '做种积分 1200000 或 做种积分 3600000 发布数 10'],
				'Nexus Master': [784, '3TB', 4.55, '做种积分 2400000 或 做种积分 9600000 发布数 10']
			},
			'RedLeaves': {
				'Power User': [28, '100GB', 1.05, '做种积分 60000'],
				'Elite User': [56, '200GB', 1.55, '做种积分 120000'],
				'Crazy User': [105, '400GB', 2.05, '做种积分 200000'],
				'Insane User': [175, '800GB', 2.55, '做种积分 400000'],
				'Veteran User': [280, '1600GB', 3.05, '做种积分 600000'],
				'Extreme User': [420, '2400GB', 3.55, '做种积分 800000'],
				'Ultimate User': [560, '3200GB', 4.05, '做种积分 1000000'],
				'Nexus Master': [700, '4000GB', 4.55, '做种积分 2000000']
			},
			'SSD': {
				'Elite': [105, '500GB', 1.2, '做种积分 100000 或 做种积分 150000'],
				'Master': [210, '1TB', 1.2, '做种积分 500000 或 做种积分 1000000'],
				'God': [420, '3TB', 2.0, '做种积分 1200000 或 做种积分 2400000']
			},
			'TLFBits': {
				'Power User': [28, '50GB', 1.5, '注册时间 4周'],
				'Elite User': [56, '120GB', 2.55, '注册时间 8周'],
				'Crazy User': [105, '300GB', 3.05, '注册时间 15周'],
				'Insane User': [175, '500GB', 4.55, '注册时间 25周'],
				'Veteran User': [280, '750GB', 5.05, '注册时间 40周'],
				'Extreme User': [315, '1TB', 6.55, '注册时间 45周'],
				'Ultimate User': [350, '1.5TB', 7.05, '注册时间 50周'],
				'Nexus Master': [385, '3TB', 8.55, '注册时间 55周']
			},
			'TorrentCCF': {
				'Power User': [14, '64GB', 1.05, '注册时间 2周'],
				'Elite User': [42, '128GB', 1.55, '注册时间 6周'],
				'Crazy User': [98, '258GB', 2.05, '注册时间 14周'],
				'Insane User': [182, '512GB', 2.55, '注册时间 26周'],
				'Veteran User': [266, '1TB', 3.05, '注册时间 38周'],
				'Extreme User': [378, '2TB', 3.55, '注册时间 54周'],
				'Ultimate User': [490, '4TB', 4.05, '注册时间 70周'],
				'Nexus Master': [616, '8TB', 4.55, '注册时间 88周']
			},
			'tjupt': {
				'Power User': [28, '50GB', 1.0, '积分消耗 10000'],
				'Elite User': [56, '200GB', 1.0, '积分消耗 30000'],
				'Crazy User': [112, '800GB', 1.0, '积分消耗 80000'],
				'Insane User': [168, '2000GB', 1.0, '积分消耗 150000'],
				'Veteran User': [336, '5000GB', 1.0, '积分消耗 300000'],
				'Extreme User': [504, '10000GB', 1.0, '积分消耗 400000'],
				'Ultimate User': [700, '20000GB', 1.0, '积分消耗 600000'],
				'Nexus Master': [924, '50000GB', 1.0, '积分消耗 1000000']
			},
			'TTG': {
				'KiloByte': [35, '60GB', 1.1, '注册时间 5周'],
				'MegaByte': [56, '150GB', 2.0, '注册时间 8周'],
				'GigaByte': [56, '250GB', 2.0, '注册时间 8周'],
				'TeraByte': [56, '500GB', 2.5, '注册时间 8周'],
				'PetaByte': [112, '750GB', 2.5, '注册时间 16周'],
				'ExaByte': [168, '1TB', 3.0, '注册时间 24周'],
				'ZettaByte': [168, '1.5TB', 3.5, '注册时间 24周'],
				'YottaByte': [168, '2.5TB', 4.0, '注册时间 24周'],
				'BrontoByte': [224, '3.5TB', 5.0, '注册时间 32周'],
				'NonaByte': [336, '5TB', 6.0, '注册时间 48周'],
				'DoggaByte': [336, '10TB', 6.0, '注册时间 48周']
			},
			'U2': {
				'Power User': [28, '50GB', 1.05, '注册时间 4周'],
				'Elite User': [56, '120GB', 1.55, '注册时间 8周'],
				'Crazy User': [105, '300GB', 2.05, '注册时间 15周'],
				'Insane User': [175, '500GB', 2.55, '注册时间 25周'],
				'Veteran User': [280, '750GB', 3.05, '注册时间 40周'],
				'Extreme User': [420, '1TB', 3.55, '注册时间 60周'],
				'Ultimate User': [560, '1.5TB', 4.05, '注册时间 80周'],
				'Nexus Master': [700, '3TB', 4.55, '注册时间 100周']
			},
			'Ubits': {
				'Power User': [35, '200GB', 2.0, '做种积分 80000'],
				'Elite User': [70, '500GB', 3.0, '做种积分 150000'],
				'Crazy User': [105, '800GB', 4.0, '做种积分 300000'],
				'Insane User': [140, '1TB', 5.0, '做种积分 650000'],
				'Veteran User': [175, '1.5TB', 6.0, '做种积分 1000000'],
				'Extreme User': [210, '2TB', 7.0, '做种积分 2000000'],
				'Ultimate User': [280, '3TB', 8.0, '做种积分 3000000'],
				'Nexus Master': [420, '4TB', 10.0, '做种积分 5000000']
			},
			'ZHUQUE': {
				'结丹': [35, '10GiB', 2.0, ''],
				'元婴': [70, '25GiB', 2.0, ''],
				'出窍': [105, '50GiB', 2.0, ''],
				'炼虚': [140, '100GiB', 2.0, ''],
				'合体': [175, '200GiB', 4.0, ''],
				'大乘': [210, '300GiB', 6.0, ''],
				'真仙': [245, '400GiB', 8.0, '']
			},
        };
		const nicknameList = {
			'AgsvPT': '末日',
			'Audiences': '人人',
			'BTSCHOOL': '学校',
			'BYRBT': '北邮',
			'DaJiao': '打胶',
			'DIC': '海豚',
			'DiscFan': '碟粉',
			'DragonHD': '龙',
			'ECUSTPT': '花梨',
			'FSM': '拉面',
			'GGPT': 'GGPT',
			'GPW': '海豹',
			'Hares': '白兔',
			'HD4FANS': '兽',
			'HDArea': '好大',
			'HDAtmos': '阿童木',
			'HDCity': '城市',
			'HDDolby': '杜比',
			'HDFans': '红豆',
			'HDHome': '家园',
			'HDKylin': '麒麟',
			'HDPOST': '普斯特',
			'HDPT': '明教',
			'HDSky': '天空',
			'HdVideo': 'HdVideo',
			'HHCLUB': '聪明',
			'HITPT': '百川',
			'HTPT': '海棠',
			'HUDBT': '蝴蝶',
			'ilolicon': 'ilolicon',
			'kamePT': 'kamePT',
			'M-Team': '馒头',
			'MonikaDesign': '莫妮卡',
			'OurBits': '我堡',
			'OKPT': 'OKPT',
			'OpenCD': '皇后',
			'PANDA': '熊猫',
			'PigGo': '猪',
			'PT@KEEPFRDS': '月',
			'PTerClub': '猫',
			'ptsbao': '烧包',
			'PuTao': '葡萄',
			'qingwa': '青蛙',
			'RedLeaves': '红叶',
			'Soulvoice': '聆音',
			'SSD': '草莓',
			'tjupt': '北洋',
			'TLFBits': '吐鲁番',
			'TorrentCCF': '吹风',
			'TTG': '听歌',
			'U2': '花园',
			'Ubits': '你堡',
			'Vicomo': '象',
			'XingTan': '杏坛',
			'ZHUQUE': '朱雀',
			'ZmPT': '织梦'
        }

		var style = document.createElement('style');
		style.textContent = `
            #tb_header_search_form {
            align-items: center;
            flex-wrap: nowrap;
            overflow: hidden;
            white-space: nowrap;
			}
			.search_btn_wrap {
				margin-right: 5px;
			}
			.search_btn {
				display: inline-block;
				vertical-align: middle;
				text-decoration: none;
			}
			.official_invite {
				background-color: #fff;
				color: #38f !important;
				padding: 5px 10px;
				text-align: center;
				white-space: nowrap;
			}
			#routeCalcForm {
				--light: hsl(0, 0%, 100%);
				--background: linear-gradient(to right bottom, hsl(236, 50%, 50%), hsl(195, 50%, 50%));
				position: fixed;
				top: 50%;
				left: 50%;
				transform: translate(-50%, -50%);
				width: 700px;
				height: 400px;
				background: var(--background);
				border-radius: 12px;
				padding: 20px;
				user-select: none;
				z-index: 9999;
			}

			#routeCalcForm label {
				display: block;
				margin-bottom: 5px;
			}

			#routeCalcForm select {
				background: transparent;
				color: var(--light);
			}

			#routeCalcForm button {
				margin-bottom: 10px;
				padding: 16px 20px;
				color: var(--light);
				background: transparent;
				font-size: 16px;
				font-family: inherit;
				letter-spacing: 2px;
				transition: .2s;
				cursor: pointer;
			}

			#routeCalcForm #result {
				margin-top: 10px;
			}

			#routeContainer {
				display: flex;
				margin-top: 30px;
				align-items: center;
				justify-content: space-between;
				padding: 10px;
				position: relative;
			}

			#routeTitle {
				color: var(--light);
				background: transparent;
				font-size: 18px;
				text-align: center;
			}

			#routeCalcForm #leftButton {
				position: absolute;
				top: 40px;
				left: 100px;
				width: 180px;
				display: flex;
				flex-direction: column;
				justify-content: space-between;
			}

			#routeCalcForm #rightButton {
				position: absolute;
				top: 40px;
				right: 100px;
				width: 180px;
				display: flex;
				flex-direction: column;
				justify-content: space-between;
			}

            #routeCalcForm #rightButton #target,
            #routeCalcForm #leftButton #source {
                margin-top: -90px;
                padding: 80px 30px 30px 30px;
                color: var(--light);
                background: transparent;
                font-size: 16px;
                font-weight: bold;
                font-family: inherit;
                letter-spacing: 2px;
                transition: .2s;
                cursor: pointer;
                z-index: 6000;
            }

			#routeCalcForm #leftButton button,
            #routeCalcForm #rightButton button{
				margin-top: 10px;
				border: none;
				padding: 16px 25px;
				color: var(--light);
				background: transparent;
				font-size: 32px;
				font-family: inherit;
				letter-spacing: 2px;
				transition: .2s;
				cursor: pointer;
			}

			#routeCalcForm #bottomButtons {
				position: absolute;
				bottom: 20px;
				right: 20px;
			}

			#routeCalcForm #bottomButtons button {
				margin: 0;
				padding: 16px 25px;
				border: 1px solid hsla(0, 0%, 100%, .6);
				border-radius: 1600px;
				color: var(--light);
				background: transparent;
				font-size: 16px;
				font-family: inherit;
				letter-spacing: 2px;
				transition: .2s;
				cursor: pointer;
                right: 20px;
			}
			#prevroute, #nextroute {
				display: none;
				position: absolute;
				bottom: 0;
				padding: 8px 16px;
				color: var(--light);
				background: transparent;
				font-size: 48px;
				font-family: inherit;
				letter-spacing: 1px;
				cursor: pointer;
			}

			#prevroute {
				left: 0;
			}

			#nextroute {
				right: 0;
			}

			#routeText {
				padding: 10px;
				margin-top: 10px;
				color: var(--light);
				font-size: 13px;
				max-height: 200px;
				overflow: auto;
				line-height: 1.6;
			}

			#routeText::-webkit-scrollbar {
				width: 0;
				height: 0;
			}

			#routeText::-webkit-scrollbar-track {
				background: transparent;
			}

			#routeText::-webkit-scrollbar-thumb {
				background: transparent;
			}

			.separator {
				height: 1px;
				background-color: hsla(0, 0%, 100%, .4);
				margin: 10px 0;
			}

			#gridContainer {
				display: none;
				position: absolute;
				width: 700px;
				top: 120px;
				left: 60px;
				background: #f9f9f9;
				padding: 10px;
				box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
				border-radius: 8px;
				z-index: 10000;
			}

			#gridContainer div {
				padding: 8px;
				background: #fff;
				text-align: center;
				cursor: pointer;
			}
		`;
		document.head.appendChild(style);

        var form = document.querySelector('#tb_header_search_form');
		if (!form) return;

		var enterBaBtn = form.querySelector('.search_btn_enter_ba');
		var searchPostBtn = form.querySelector('.j_search_post');
		if (!enterBaBtn || !searchPostBtn) return;

		var newButton = document.createElement('span');
		newButton.className = 'search_btn_wrap';
		newButton.innerHTML = '<a rel="noopener" class="search_btn official_invite" href="#" onclick="return false;" onmousedown="this.className+=\' search_btn_down\'" onmouseout="this.className=this.className.replace(\' search_btn_down\',\'\')">车票查询</a>';
		enterBaBtn.parentNode.insertAdjacentElement('afterend', newButton);

		const inviteForm = document.createElement('form');
		inviteForm.id = 'routeCalcForm';
		inviteForm.style.display = 'none';
		inviteForm.innerHTML = `

			<div id="leftButton">
				<button type="button" id="sourcenick">始发站</button>
				<button type="button" id="source">From</button>
			</div>
			<div id="rightButton">
				<button type="button" id="targetnick">终点站</button>
				<button type="button" id="target">To</button>
			</div>
			<div id="routeContainer">
				<div id="routeTitle"></div>
				<div id="prevroute">&#8249;&#8249;</div>
				<div id="nextroute">&#8250;&#8250;</div>
			</div>
			<div id="routeText"></div>
			<div id="gridContainer"></div>
			<div id="bottomButtons">
				<button type="button" id="exit">佛系观影</button>
			</div>

		`;
		let allRoutes = [];
		let currentRouteIndex = 0;

		document.body.appendChild(inviteForm);
        document.querySelector('.official_invite').addEventListener('click', () => {
            inviteForm.style.display = inviteForm.style.display === 'none' ? 'block' : 'none';
        });

		waitForElement('a.search_btn.j_search_post', (button) => {
			button.remove();
		});

		document.getElementById('exit').addEventListener('click', function() {
			document.getElementById('routeCalcForm').style.display = 'none';
		});

		document.getElementById('source').addEventListener('click', function() {
			const gridContainer = document.getElementById('gridContainer');
			if (gridContainer.style.display === 'none' || gridContainer.style.display === '') {
				populateGrid('source');
				gridContainer.style.display = 'block';
			} else {
				gridContainer.style.display = 'none';
			}
		});

		document.getElementById('target').addEventListener('click', function() {
			const gridContainer = document.getElementById('gridContainer');
			if (gridContainer.style.display === 'none' || gridContainer.style.display === '') {
				populateGrid('target');
				gridContainer.style.display = 'block';
			} else {
				gridContainer.style.display = 'none';
			}
		});

		document.getElementById('prevroute').addEventListener('click', function() {
			showRoute(-1);
		});

		document.getElementById('nextroute').addEventListener('click', function() {
			showRoute(1);
		});

		function populateGrid(buttonId) {
			const gridContainer = document.getElementById('gridContainer');
			gridContainer.innerHTML = '';

			const uniqueKeys = Array.from(new Set(
			  Object.keys(routeInfo)
				.flatMap(startKey => [startKey, ...Object.keys(routeInfo[startKey])])
			))
			  .sort((a, b) => a.toLowerCase().localeCompare(b.toLowerCase()));

			if (buttonId === 'source') {
				uniqueKeys.unshift('From');
			} else if (buttonId === 'target') {
				uniqueKeys.unshift('To');
			}

			const container = document.createElement('div');
			container.style.display = 'grid';
			container.style.gridTemplateColumns = 'repeat(auto-fit, minmax(100px, auto))';
			container.style.gap = '0px';

			uniqueKeys.forEach(key => {
				const item = document.createElement('div');
				item.textContent = key;
				item.style.padding = '8px';
				item.style.background = '#fff';
				item.style.textAlign = 'center';
				item.style.cursor = 'pointer';
				item.style.whiteSpace = 'nowrap';
				item.style.minWidth = 'max-content';
				item.addEventListener('click', () => {
					if (buttonId === 'source') {
						if (key === 'From') {
							setTextContent('source', 'From');
							setTextContent('sourcenick', '始发站');
						} else {
							setTextContent('source', key);
							setTextContent('sourcenick', nicknameList[key] || key);
						}
					} else if (buttonId === 'target') {
						if (key === 'To') {
							setTextContent('target', 'To');
							setTextContent('targetnick', '终点站');
						} else {
							setTextContent('target', key);
							setTextContent('targetnick', nicknameList[key] || key);
						}
					}
					gridContainer.style.display = 'none';
                    calculateRoute();
				});
				container.appendChild(item);
			});

			gridContainer.appendChild(container);
		}

		function calculateRoute() {

            const routeContainer = document.getElementById('routeContainer');
			const resultTitle = document.getElementById('routeTitle');
			const resultDescription = document.getElementById('routeText');
			const prevRouteButton = document.getElementById('prevroute');
			const nextRouteButton = document.getElementById('nextroute');

			resultTitle.innerText = '';
			resultDescription.innerHTML = '';
			prevRouteButton.style.display = 'none';
			nextRouteButton.style.display = 'none';

			const start = document.getElementById('source').textContent.trim();
			const end = document.getElementById('target').textContent.trim();

			if (start === end) {
				resultTitle.innerText = '同站';
				resultDescription.innerText = '';
				routeContainer.style.display = 'block';
				return;
			}

			if (start === 'From') {
				if (end === 'To') {
					resultTitle.innerText = '至少选一个';
					resultDescription.innerText = '';
					routeContainer.style.display = 'block';
					return;
				}
				allRoutes = Object.keys(routeInfo)
					.filter(node => routeInfo[node] && routeInfo[node][end])
					.map(node => [node, end]);
			} else if (end === 'To') {
				if (!routeInfo[start]) {
					resultTitle.innerText = '没有';
					resultDescription.innerText = '';
					routeContainer.style.display = 'block';
					return;
				}
				allRoutes = Object.keys(routeInfo[start])
					.map(node => [start, node])
					.filter(([from, to]) => routeInfo[from] && routeInfo[from][to])
					.map(([from, to]) => [from, to]);
			} else {
				if (!routeInfo[start]) {
					resultTitle.innerText = '没有';
					resultDescription.innerText = '';
					routeContainer.style.display = 'block';
					return;
				}
				allRoutes = findAllRoutes(start, end);
			}

			if (allRoutes.length === 0) {
				resultTitle.innerText = '到不了';
				resultDescription.innerText = '';
				routeContainer.style.display = 'block';
				return;
			}

			allRoutes = allRoutes.sort((a, b) => {
				const timeA = a.reduce((sum, node, index) => {
					if (index < a.length - 1 && routeInfo[node] && routeInfo[node][a[index + 1]]) {
						return sum + getMaxDays(node, a[index + 1]);
					}
					return sum;
				}, 0);

				const timeB = b.reduce((sum, node, index) => {
					if (index < b.length - 1 && routeInfo[node] && routeInfo[node][b[index + 1]]) {
						return sum + getMaxDays(node, b[index + 1]);
					}
					return sum;
				}, 0);

				return timeA - timeB;
			});

			currentRouteIndex = 0;
			showRoute(0);
		}

		function showRoute(direction) {
			if (allRoutes.length === 0) return;

			currentRouteIndex = (currentRouteIndex + direction + allRoutes.length) % allRoutes.length;

			const route = allRoutes[currentRouteIndex];
			const routeContainer = document.getElementById('routeContainer');
			const resultTitle = document.getElementById('routeTitle');
			const resultDescription = document.getElementById('routeText');
			const prevRouteButton = document.getElementById('prevroute');
			const nextRouteButton = document.getElementById('nextroute');

			resultTitle.innerText = `换乘 ${route.length - 2} 次\n耗时 ${route.reduce((sum, node, index) => {
				if (index < route.length - 1 && routeInfo[node] && routeInfo[node][route[index + 1]]) {
					return sum + getMaxDays(node, route[index + 1]);
				}
				return sum;
			}, 0)} 天`;

			const details = route.map((node, index) => {
				console.log("Processing node:", node);
				if (index < route.length - 1 && routeInfo[node] && routeInfo[node][route[index + 1]]) {
					const nextNode = route[index + 1];
					const maxDays = getMaxDays(node, nextNode);
					const [time, userclass, requirement, lastActivity] = routeInfo[node][nextNode];
					const formattedDate = formatDate(lastActivity);

					const fromUserClassIndex = Object.keys(classInfo[node]).indexOf(userclass);
					const unlockUserClassIndex = Object.keys(classInfo[node]).indexOf(unlockInviteClass[node]);

					const higherUserClass = (unlockUserClassIndex !== -1)
						? (fromUserClassIndex > unlockUserClassIndex ? userclass : unlockInviteClass[node])
						: userclass;

					const upgradeReq = classInfo[node][higherUserClass] || [0, 0, 0, '无'];
					const upgradeReqText = `${upgradeReq[0]}天,下载量${upgradeReq[1]},分享率${upgradeReq[2]},${upgradeReq[3]}`;

					let baseText = `<div class="separator"></div>${node} -> ${nextNode} 时间:${maxDays}天 ${userclass ? `申请等级:${userclass} ` : ''}${unlockInviteClass[node] ? `解锁等级:${unlockInviteClass[node]} ` : ''}最近活动:${formattedDate}`;

					if (userclass || unlockInviteClass[node]) {
						baseText += `<br>升级要求:${upgradeReqText}`;
					}

					if (requirement) {
						baseText += `<br>额外要求:${requirement}`;
					}

					return baseText;
				}
				return '';
			});


			resultDescription.innerHTML = details.join('');

			prevRouteButton.style.display = currentRouteIndex === 0 ? 'none' : 'inline';
			nextRouteButton.style.display = currentRouteIndex === allRoutes.length - 1 ? 'none' : 'inline';
			routeContainer.style.display = 'block';
		}

		function getMaxDays(start, end) {
			const days1 = routeInfo[start][end][0];
			const userclassRequirement = routeInfo[start][end][1];
			const days2 = (userclassRequirement === '') ? 0 : classInfo[start][userclassRequirement][0];
			let days3 = 0;
			const unlockUserClass = unlockInviteClass[start];
			if (unlockUserClass) {
				days3 = classInfo[start][unlockUserClass][0];
			}
			return Math.max(days1, days2, days3);
		}

		function findAllRoutes(start, end) {
			const result = [];
			const stack = [[start, [start]]];
			const visited = new Set();

			while (stack.length) {
				const [node, route] = stack.pop();

				if (node === end) {
					result.push(route);
					continue;
				}

				visited.add(node);

				for (const [next, _] of Object.entries(routeInfo[node] || {})) {
					if (!route.includes(next) && !visited.has(next)) {
						stack.push([next, [...route, next]]);
					}
				}
			}

			return result;
		}

		function formatDate(dateString) {
			const year = Math.floor(dateString / 100);
			const month = dateString % 100;
			return `20${year}年${month.toString().padStart(2, '0')}月`;
		}

		function waitForElement(selector, callback) {
			const interval = setInterval(() => {
				const element = document.querySelector(selector);
				if (element) {
					clearInterval(interval);
					callback(element);
				}
			}, 100);
		}

		function setTextContent(id, text) {
			document.getElementById(id).textContent = text;
		}
});
})();