definitions

package
v0.2.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jan 11, 2026 License: MIT Imports: 2 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

View Source
var HDDolbyDefinition = &v2.SiteDefinition{
	ID:             "hddolby",
	Name:           "HD Dolby",
	Aka:            []string{"高清杜比"},
	Description:    "高清杜比",
	Schema:         "NexusPHP",
	URLs:           []string{"https://www.hddolby.com/"},
	LegacyURLs:     []string{"https://hddolby.com/"},
	FaviconURL:     "https://www.hddolby.com/favicon.ico",
	TimezoneOffset: "+0800",
	UserInfo: &v2.UserInfoConfig{
		PickLast:     []string{"id"},
		RequestDelay: 500,
		Process: []v2.UserInfoProcess{
			{
				RequestConfig: v2.RequestConfig{
					URL:          "/index.php",
					ResponseType: "document",
				},
				Fields: []string{"id", "name", "seeding", "leeching", "bonus", "seedingBonus", "uploaded", "downloaded", "ratio", "levelName"},
			},
			{
				RequestConfig: v2.RequestConfig{
					URL:          "/userdetails.php",
					ResponseType: "document",
				},
				Assertion: map[string]string{"id": "params.id"},
				Fields: []string{
					"joinTime", "messageCount",
				},
			},
			{
				RequestConfig: v2.RequestConfig{
					URL:          "/mybonus.php",
					ResponseType: "document",
				},
				Fields: []string{"bonusPerHour"},
			},
		},
		Selectors: map[string]v2.FieldSelector{

			"id": {
				Selector: []string{
					"#info_block a[href*='userdetails.php'][class*='_Name']",
					"#info_block a[href*='userdetails.php']",
					"a[href*='userdetails.php'][class*='_Name']",
				},
				Attr:    "href",
				Filters: []v2.Filter{{Name: "querystring", Args: []interface{}{"id"}}},
			},

			"name": {
				Selector: []string{
					"#info_block a[href*='userdetails.php'][class*='_Name'] b",
					"#info_block a[href*='userdetails.php'][class*='_Name']",
					"#info_block a[href*='userdetails.php']",
				},
			},

			"uploaded": {
				Selector: []string{
					"#info_block",
				},
				Attr: "html",
				Filters: []v2.Filter{
					{Name: "regex", Args: []interface{}{`上传量[::</font>\s]*([\d.,]+\s*[KMGTP]?i?B)`}},
					{Name: "parseSize"},
				},
			},

			"downloaded": {
				Selector: []string{
					"#info_block",
				},
				Attr: "html",
				Filters: []v2.Filter{
					{Name: "regex", Args: []interface{}{`下载量[::</font>\s]*([\d.,]+\s*[KMGTP]?i?B)`}},
					{Name: "parseSize"},
				},
			},

			"ratio": {
				Selector: []string{
					"#info_block",
				},
				Attr: "html",
				Filters: []v2.Filter{
					{Name: "regex", Args: []interface{}{`分享率[::</font>\s]*([\d.,]+|∞|Inf)`}},
					{Name: "parseNumber"},
				},
			},

			"levelName": {
				Selector: []string{
					"#info_block a[href*='userdetails.php'][class*='_Name']",
				},
				Attr: "class",
				Filters: []v2.Filter{
					{Name: "regex", Args: []interface{}{`^(\w+)_Name$`}},
				},
			},

			"bonus": {
				Selector: []string{
					"#info_block",
				},
				Attr: "html",
				Filters: []v2.Filter{
					{Name: "regex", Args: []interface{}{`鲸币[^::]*[::]\s*([\d,]+\.?\d*)`}},
					{Name: "parseNumber"},
				},
			},

			"seedingBonus": {
				Selector: []string{
					"#info_block",
				},
				Attr: "html",
				Filters: []v2.Filter{
					{Name: "regex", Args: []interface{}{`做种积分[::\s</font>]*([\d,]+\.?\d*)`}},
					{Name: "parseNumber"},
				},
			},

			"bonusPerHour": {
				Selector: []string{
					"table tr:contains('合计') td:last-child",
					"tr:contains('合计') td:last-child",
				},
				Filters: []v2.Filter{
					{Name: "split", Args: []interface{}{"/", 0}},
					{Name: "parseNumber"},
				},
			},

			"seeding": {
				Selector: []string{
					"#info_block",
				},
				Attr: "html",
				Filters: []v2.Filter{
					{Name: "regex", Args: []interface{}{`title="当前做种"[^>]*/>(\d+)`}},
					{Name: "parseNumber"},
				},
			},

			"leeching": {
				Selector: []string{
					"#info_block",
				},
				Attr: "html",
				Filters: []v2.Filter{
					{Name: "regex", Args: []interface{}{`title="当前下载"[^>]*/>(\d+)`}},
					{Name: "parseNumber"},
				},
			},

			"joinTime": {
				Selector: []string{
					"td.rowhead:contains('加入日期') + td",
					"td.rowhead.nowrap:contains('加入日期') + td",
				},
				Filters: []v2.Filter{
					{Name: "regex", Args: []interface{}{`(\d{4}-\d{2}-\d{2}\s+\d{2}:\d{2}:\d{2})`}},
					{Name: "parseTime"},
				},
			},

			"messageCount": {
				Text: "0",
				Selector: []string{
					"#info_block a[href*='messages.php'] img[title*='新短讯']",
				},
				Attr: "title",
				Filters: []v2.Filter{
					{Name: "regex", Args: []interface{}{`\((\d+)\s*新\)`}},
					{Name: "parseNumber"},
				},
			},
		},
	},
	LevelRequirements: []v2.SiteLevelRequirement{
		{
			ID:        1,
			Name:      "User",
			Privilege: "新用户的默认级别。",
		},
		{
			ID:           2,
			Name:         "Power User",
			Interval:     "P2W",
			Downloaded:   "120GB",
			Ratio:        2.0,
			SeedingBonus: 60000,
			Privilege:    "得到0个邀请名额;可以直接发布种子;可以查看NFO文档;可以查看用户列表;可以请求续种;可以查看排行榜;可以查看其它用户的种子历史;可以删除自己上传的字幕。",
		},
		{
			ID:           3,
			Name:         "(连长)Elite User",
			NameAka:      []string{"Elite User"},
			Interval:     "P4W",
			Downloaded:   "256GB",
			Ratio:        2.5,
			SeedingBonus: 120000,
			Privilege:    "Elite User及以上用户封存账号后不会被删除。",
		},
		{
			ID:           4,
			Name:         "Crazy User",
			Interval:     "P8W",
			Downloaded:   "512GB",
			Ratio:        3.0,
			SeedingBonus: 240000,
			Privilege:    "得到0个邀请名额;可以在做种/下载/发布的时候选择匿名模式。",
		},
		{
			ID:           5,
			Name:         "Insane User",
			Interval:     "P12W",
			Downloaded:   "768GB",
			Ratio:        3.5,
			SeedingBonus: 360000,
			Privilege:    "无",
		},
		{
			ID:           6,
			Name:         "Veteran User",
			Interval:     "P20W",
			Downloaded:   "1TB",
			Ratio:        4.0,
			SeedingBonus: 600000,
			Privilege:    "可以查看其它用户的评论、帖子历史。",
		},
		{
			ID:           7,
			Name:         "Extreme User",
			Interval:     "P28W",
			Downloaded:   "2TB",
			Ratio:        4.5,
			SeedingBonus: 720000,
			Privilege:    "Extreme User及以上用户会永远保留账号。",
		},
		{
			ID:           8,
			Name:         "Ultimate User",
			Interval:     "P40W",
			Downloaded:   "4TB",
			Ratio:        5.0,
			SeedingBonus: 1200000,
			Privilege:    "无",
		},
		{
			ID:           9,
			Name:         "Nexus Master",
			Interval:     "P56W",
			Downloaded:   "8TB",
			Ratio:        5.5,
			SeedingBonus: 1680000,
			Privilege:    "无",
		},
	},
}

HDDolbyDefinition is the site definition for HD Dolby Note: HDDolby may require 2FA verification, which can limit access to userdetails.php Most data is fetched from index.php info_block instead

View Source
var HDSkyDefinition = &v2.SiteDefinition{
	ID:             "hdsky",
	Name:           "HDSky",
	Aka:            []string{"HDS", "天空"},
	Description:    "高清发烧友后花园PT",
	Schema:         "NexusPHP",
	URLs:           []string{"https://hdsky.me/"},
	FaviconURL:     "https://hdsky.me/favicon.ico",
	TimezoneOffset: "+0800",
	UserInfo: &v2.UserInfoConfig{
		PickLast:     []string{"id"},
		RequestDelay: 500,
		Process: []v2.UserInfoProcess{
			{
				RequestConfig: v2.RequestConfig{
					URL:          "/index.php",
					ResponseType: "document",
				},
				Fields: []string{"id", "name", "seeding", "leeching"},
			},
			{
				RequestConfig: v2.RequestConfig{
					URL:          "/userdetails.php",
					ResponseType: "document",
				},
				Assertion: map[string]string{"id": "params.id"},
				Fields: []string{
					"name", "uploaded", "downloaded", "ratio", "levelName",
					"bonus", "seedingBonus", "joinTime",
					"hnrUnsatisfied", "hnrPreWarning", "messageCount",
				},
			},
			{
				RequestConfig: v2.RequestConfig{
					URL:          "/mybonus.php",
					ResponseType: "document",
				},
				Fields: []string{"bonusPerHour", "seedingBonusPerHour"},
			},
		},
		Selectors: map[string]v2.FieldSelector{
			"id": {
				Selector: []string{
					"a[href*='userdetails.php'][class*='Name']",
					"a.User_Name[href*='userdetails.php']",
					"#info_block a[href*='userdetails.php']",
					"a[href*='userdetails.php']",
				},
				Attr:    "href",
				Filters: []v2.Filter{{Name: "querystring", Args: []interface{}{"id"}}},
			},
			"name": {
				Selector: []string{
					"a[href*='userdetails.php'][class*='Name']",
					"a.User_Name[href*='userdetails.php']",
					"#info_block a[href*='userdetails.php']",
				},
			},
			"uploaded": {
				Selector: []string{

					"td.rowhead:contains('传输') + td",
					"td.rowhead:contains('傳輸') + td",
					"td.rowhead:contains('Transfer') + td",

					"td.rowhead:contains('上传量') + td",
					"td.rowhead:contains('上傳量') + td",
					"td.rowhead:contains('Uploaded') + td",
				},
				Attr: "html",
				Filters: []v2.Filter{

					{Name: "regex", Args: []interface{}{`上[传傳][量]?</strong>[::\s]*\s*([\d.,]+\s*[KMGTP]?i?B)`}},
					{Name: "parseSize"},
				},
			},
			"downloaded": {
				Selector: []string{

					"td.rowhead:contains('传输') + td",
					"td.rowhead:contains('傳輸') + td",
					"td.rowhead:contains('Transfer') + td",

					"td.rowhead:contains('下载量') + td",
					"td.rowhead:contains('下載量') + td",
					"td.rowhead:contains('Downloaded') + td",
				},
				Attr: "html",
				Filters: []v2.Filter{

					{Name: "regex", Args: []interface{}{`下[载載][量]?</strong>[::\s]*\s*([\d.,]+\s*[KMGTP]?i?B)`}},
					{Name: "parseSize"},
				},
			},
			"ratio": {
				Selector: []string{

					"td.rowhead:contains('传输') + td",
					"td.rowhead:contains('傳輸') + td",
					"td.rowhead:contains('Transfer') + td",

					"td.rowhead:contains('分享率') + td font",
					"td.rowhead:contains('分享率') + td > font",
					"td.rowhead:contains('分享率') + td",
					"td.rowhead:contains('Ratio') + td font",
					"td.rowhead:contains('Ratio') + td",
				},
				Attr: "html",
				Filters: []v2.Filter{

					{Name: "regex", Args: []interface{}{`分享率</strong>[::\s]*\s*(?:<font[^>]*>)?([\d.,]+|∞|Inf)`}},
					{Name: "parseNumber"},
				},
			},
			"levelName": {
				Selector: []string{
					"td.rowhead:contains('等级') + td > img",
					"td.rowhead:contains('等級') + td > img",
					"td.rowhead:contains('Class') + td > img",

					"td.rowhead:contains('等级') + td img",
					"td.rowhead:contains('等級') + td img",
					"td.rowhead:contains('Class') + td img",
				},
				Attr: "title",
			},
			"bonus": {
				Selector: []string{
					"td.rowhead:contains('魔力值') + td",
					"td.rowhead:contains('魔力') + td",
					"td.rowhead:contains('Bonus') + td",
				},
				Filters: []v2.Filter{{Name: "parseNumber"}},
			},
			"seedingBonus": {
				Selector: []string{
					"td.rowhead:contains('做种积分') + td",
					"td.rowhead:contains('做種積分') + td",
				},
				Filters: []v2.Filter{{Name: "parseNumber"}},
			},
			"bonusPerHour": {
				Selector: []string{
					"#outer td[rowspan]",
					"div:contains('你当前每小时能获取')",
				},
				Filters: []v2.Filter{{Name: "parseNumber"}},
			},
			"messageCount": {
				Text:     "0",
				Selector: []string{"td[style*='background: red'] a[href*='messages.php']"},
				Filters:  []v2.Filter{{Name: "parseNumber"}},
			},
			"joinTime": {
				Selector: []string{
					"td.rowhead:contains('加入日期') + td",
					"td.rowhead:contains('Join') + td",
				},
				Filters: []v2.Filter{
					{Name: "split", Args: []interface{}{" (", 0}},
					{Name: "parseTime"},
				},
			},
			"seeding": {
				Selector: []string{

					"#info_block",
				},
				Attr: "html",
				Filters: []v2.Filter{
					{Name: "regex", Args: []interface{}{`class="arrowup"[^>]*/>(\d+)`}},
					{Name: "parseNumber"},
				},
			},
			"leeching": {
				Selector: []string{

					"#info_block",
				},
				Attr: "html",
				Filters: []v2.Filter{
					{Name: "regex", Args: []interface{}{`class="arrowdown"[^>]*/>(\d+)`}},
					{Name: "parseNumber"},
				},
			},
			"hnrUnsatisfied": {
				Text:     "0",
				Selector: []string{"#info_block a[href*='myhr.php']"},
				Filters: []v2.Filter{
					{Name: "regex", Args: []interface{}{`\d+\s*/\s*(\d+)`}},
					{Name: "parseNumber"},
				},
			},
			"hnrPreWarning": {
				Text:     "0",
				Selector: []string{"#info_block a[href*='myhr.php']"},
				Filters: []v2.Filter{
					{Name: "regex", Args: []interface{}{`^(\d+)`}},
					{Name: "parseNumber"},
				},
			},
		},
	},

	Selectors: &v2.SiteSelectors{

		TableRows: "table.torrents > tbody > tr:has(table.torrentname), table.torrents > tr:has(table.torrentname)",

		Title:     "table.torrentname a[href*='details.php']",
		TitleLink: "table.torrentname a[href*='details.php']",

		Subtitle: "table.torrentname td.embedded > span:not(.optiontag)",

		DetailDownloadLink: "td.rowhead:contains('下载链接') + td a[href*='download.php']",

		DetailSubtitle: "td.rowhead:contains('副标题') + td",
	},
	LevelRequirements: hdSkyNewLevelRequirements,
}

HDSkyDefinition is the site definition for HDSky

View Source
var HDSkyNewRequirementsDate = time.Date(2025, 3, 1, 0, 0, 0, 0, time.FixedZone("CST", 8*3600))

HDSkyNewRequirementsDate is the date after which new level requirements apply

View Source
var MTeamDefinition = &v2.SiteDefinition{
	ID:          "mteam",
	Name:        "M-Team - TP",
	Aka:         []string{"MTeam", "馒头"},
	Description: "综合性网站,有分享率要求",
	Schema:      "mTorrent",
	URLs: []string{
		"https://kp.m-team.cc/",
		"https://zp.m-team.io/",
		"https://xp.m-team.cc/",
		"https://ap.m-team.cc/",
		"https://next.m-team.cc/",
		"https://ob.m-team.cc/",
	},
	LegacyURLs:     []string{"https://xp.m-team.io/", "https://pt.m-team.cc/", "https://tp.m-team.cc/"},
	FaviconURL:     "https://kp.m-team.cc/favicon.ico",
	TimezoneOffset: "+0800",
	UserInfo: &v2.UserInfoConfig{
		PickLast:     []string{"id", "name", "joinTime"},
		RequestDelay: 300,
		Process: []v2.UserInfoProcess{
			{
				RequestConfig: v2.RequestConfig{
					URL:          "/api/member/profile",
					Method:       "POST",
					ResponseType: "json",
				},
				Fields: []string{
					"id", "name", "joinTime", "uploaded", "downloaded",
					"levelName", "levelId", "bonus", "lastAccessAt",
				},
			},
			{
				RequestConfig: v2.RequestConfig{
					URL:          "/api/tracker/myPeerStatistics",
					Method:       "POST",
					ResponseType: "json",
				},
				Fields: []string{"seeding", "seedingSize", "uploads"},
			},
			{
				RequestConfig: v2.RequestConfig{
					URL:          "/api/tracker/mybonus",
					Method:       "POST",
					ResponseType: "json",
				},
				Fields: []string{"bonusPerHour"},
			},
			{
				RequestConfig: v2.RequestConfig{
					URL:          "/api/msg/notify/statistic",
					Method:       "POST",
					ResponseType: "json",
				},
				Fields: []string{"messageCount"},
			},
		},
		Selectors: map[string]v2.FieldSelector{
			"id": {
				Selector: []string{"data.id"},
				Filters:  []v2.Filter{{Name: "parseNumber"}},
			},
			"name": {
				Selector: []string{"data.username"},
			},
			"joinTime": {
				Selector: []string{"data.createdDate"},
				Filters:  []v2.Filter{{Name: "parseTime"}},
			},
			"uploaded": {
				Selector: []string{"data.memberCount.uploaded"},
				Filters:  []v2.Filter{{Name: "parseNumber"}},
			},
			"downloaded": {
				Selector: []string{"data.memberCount.downloaded"},
				Filters:  []v2.Filter{{Name: "parseNumber"}},
			},
			"levelName": {
				Selector: []string{"data.role"},
			},
			"levelId": {
				Selector: []string{"data.role"},
				Filters:  []v2.Filter{{Name: "parseNumber"}},
			},
			"bonus": {
				Selector: []string{"data.memberCount.bonus"},
				Filters:  []v2.Filter{{Name: "parseNumber"}},
			},
			"lastAccessAt": {
				Selector: []string{"data.memberStatus.lastBrowse"},
				Filters:  []v2.Filter{{Name: "parseTime"}},
			},
			"seeding": {
				Selector: []string{"data.seederCount"},
				Filters:  []v2.Filter{{Name: "parseNumber"}},
			},
			"seedingSize": {
				Selector: []string{"data.seederSize"},
				Filters:  []v2.Filter{{Name: "parseNumber"}},
			},
			"uploads": {
				Selector: []string{"data.uploadCount"},
				Filters:  []v2.Filter{{Name: "parseNumber"}},
			},
			"bonusPerHour": {
				Selector: []string{"data.formulaParams.finalBs"},
				Filters:  []v2.Filter{{Name: "parseNumber"}},
			},
			"messageCount": {
				Selector: []string{"data.unMake"},
				Filters:  []v2.Filter{{Name: "parseNumber"}},
			},
		},
	},
	LevelRequirements: []v2.SiteLevelRequirement{
		{
			ID:   1,
			Name: "User",
		},
		{
			ID:         2,
			Name:       "Power User",
			Interval:   "P4W",
			Downloaded: "200GB",
			Ratio:      2,
			Privilege:  "魔力值加成:+1%;可以使用匿名發表候選種子;可以上傳字幕",
		},
		{
			ID:         3,
			Name:       "Elite User",
			Interval:   "P8W",
			Downloaded: "400GB",
			Ratio:      3,
			Privilege:  "魔力值加成:+2%;可以發送邀請;可以管理自己上傳的字幕;可以檢視別人的下載紀錄;可以使用個性條",
		},
		{
			ID:         4,
			Name:       "Crazy User",
			Interval:   "P12W",
			Downloaded: "500GB",
			Ratio:      4,
			Privilege:  "魔力值加成:+3%",
		},
		{
			ID:         5,
			Name:       "Insane User",
			Interval:   "P16W",
			Downloaded: "800GB",
			Ratio:      5,
			Privilege:  "魔力值加成:+4%;可以檢視排行榜",
		},
		{
			ID:         6,
			Name:       "Veteran User",
			Interval:   "P20W",
			Downloaded: "1000GB",
			Ratio:      6,
			Privilege:  "魔力值加成:+5%;封存帳號後不會被刪除帳號",
		},
		{
			ID:         7,
			Name:       "Extreme User",
			Interval:   "P24W",
			Downloaded: "2000GB",
			Ratio:      7,
			Privilege:  "魔力值加成:+6%;永遠保留",
		},
		{
			ID:         8,
			Name:       "Ultimate User",
			Interval:   "P28W",
			Downloaded: "2500GB",
			Ratio:      8,
			Privilege:  "魔力值加成:+7%",
		},
		{
			ID:         9,
			Name:       "Nexus Master",
			Interval:   "P32W",
			Downloaded: "3000GB",
			Ratio:      9,
			Privilege:  "魔力值加成:+8%",
		},
		{
			ID:        100,
			Name:      "VIP",
			GroupType: v2.LevelGroupVIP,
		},
	},
}

MTeamDefinition is the site definition for M-Team

View Source
var MTeamLevelIDMap = map[string]string{
	"1":  "User",
	"2":  "Power User",
	"3":  "Elite User",
	"4":  "Crazy User",
	"5":  "Insane User",
	"6":  "Veteran User",
	"7":  "Extreme User",
	"8":  "Ultimate User",
	"9":  "Nexus Master",
	"10": "VIP",
}

MTeamLevelIDMap maps API role ID to level name

View Source
var SpringSundayDefinition = &v2.SiteDefinition{
	ID:             "springsunday",
	Name:           "SpringSunday",
	Aka:            []string{"SSD"},
	Description:    "Classic Movie Compression Team",
	Schema:         "NexusPHP",
	URLs:           []string{"https://springsunday.net/"},
	LegacyURLs:     []string{"https://hdcmct.org/"},
	FaviconURL:     "https://springsunday.net/favicon.ico",
	TimezoneOffset: "+0800",

	Selectors: &v2.SiteSelectors{

		TableRows: "table.torrents > tbody > tr:has(table.torrentname), table.torrents > tr:has(table.torrentname)",

		Title:     "div.torrent-title > a[href*='details.php']",
		TitleLink: "div.torrent-title > a[href*='details.php']",

		Subtitle: "div.torrent-smalldescr > span[title]:last-of-type",

		Size: "td.rowfollow:nth-child(5)",

		Seeders: "td.rowfollow:nth-child(6)",

		Leechers: "td.rowfollow:nth-child(7)",

		Snatched: "td.rowfollow:nth-child(8)",

		DiscountIcon: "span.torrent-pro-free, span.torrent-pro-2up, span.torrent-pro-50pctdown, span.torrent-pro-30pctdown, span.torrent-pro-2xfree",

		DiscountEndTime: "div.torrent-title span[style*='DimGray'] span[title]",

		DownloadLink: "a[href*='download.php']",

		Category: "td.rowfollow:nth-child(1) img[alt]",

		UploadTime: "td.rowfollow.nowrap span[title]",

		DetailSubtitle: "td.rowhead:contains('副标题') + td.rowfollow",
	},
	UserInfo: &v2.UserInfoConfig{
		PickLast:     []string{"id"},
		RequestDelay: 500,
		Process: []v2.UserInfoProcess{
			{
				RequestConfig: v2.RequestConfig{
					URL:          "/index.php",
					ResponseType: "document",
				},
				Fields: []string{"id", "name", "seeding", "leeching", "bonus"},
			},
			{
				RequestConfig: v2.RequestConfig{
					URL:          "/userdetails.php",
					ResponseType: "document",
				},
				Assertion: map[string]string{"id": "params.id"},
				Fields: []string{
					"name", "uploaded", "downloaded", "ratio", "levelName",
					"seedingBonus", "joinTime", "messageCount",
				},
			},
			{
				RequestConfig: v2.RequestConfig{
					URL:          "/mybonus.php",
					ResponseType: "document",
				},
				Fields: []string{"bonusPerHour"},
			},
		},
		Selectors: map[string]v2.FieldSelector{

			"id": {
				Selector: []string{
					"#info_block a[href*='userdetails.php']",
					"a[href*='userdetails.php']",
				},
				Attr:    "href",
				Filters: []v2.Filter{{Name: "querystring", Args: []interface{}{"id"}}},
			},

			"name": {
				Selector: []string{
					"#info_block a[href*='userdetails.php'] span",
					"#info_block a[href*='userdetails.php']",
				},
			},

			"uploaded": {
				Selector: []string{
					"td.rowhead:contains('传输') + td",
				},
				Attr: "html",
				Filters: []v2.Filter{
					{Name: "regex", Args: []interface{}{`<strong>上传量</strong>[::\s]*([\d.,]+\s*[KMGTP]?i?B)`}},
					{Name: "parseSize"},
				},
			},

			"downloaded": {
				Selector: []string{
					"td.rowhead:contains('传输') + td",
				},
				Attr: "html",
				Filters: []v2.Filter{
					{Name: "regex", Args: []interface{}{`<strong>下载量</strong>[::\s]*([\d.,]+\s*[KMGTP]?i?B)`}},
					{Name: "parseSize"},
				},
			},

			"ratio": {
				Selector: []string{
					"td.rowhead:contains('传输') + td",
				},
				Attr: "html",
				Filters: []v2.Filter{
					{Name: "regex", Args: []interface{}{`<strong>分享率</strong>[::\s]*(?:<font[^>]*>)?([\d.,]+|∞|Inf)`}},
					{Name: "parseNumber"},
				},
			},

			"levelName": {
				Selector: []string{
					"td.rowhead:contains('等级') + td img",
				},
				Attr: "title",
			},

			"bonus": {
				Selector: []string{
					"#info_block a[href*='mybonus.php']",
				},
				Attr: "title",
				Filters: []v2.Filter{
					{Name: "regex", Args: []interface{}{`茉莉[::\s]*([\d.,]+)`}},
					{Name: "parseNumber"},
				},
			},

			"bonusPerHour": {
				Selector: []string{
					"h3:contains('当前每小时') + table tbody",
					"table:has(th:contains('每小时茉莉')) tbody",
				},
				Attr: "html",
				Filters: []v2.Filter{

					{Name: "regex", Args: []interface{}{`我的数据</b></td>(?:<td[^>]*>[\d.,]*</td>){9}<td[^>]*>([\d.,]+)</td>`}},
					{Name: "parseNumber"},
				},
			},

			"seeding": {
				Selector: []string{
					"#info_block",
				},
				Attr: "html",
				Filters: []v2.Filter{
					{Name: "regex", Args: []interface{}{`class="arrowup"[^>]*/>\s*(\d+)`}},
					{Name: "parseNumber"},
				},
			},

			"leeching": {
				Selector: []string{
					"#info_block",
				},
				Attr: "html",
				Filters: []v2.Filter{
					{Name: "regex", Args: []interface{}{`class="arrowdown"[^>]*/>\s*(\d+)`}},
					{Name: "parseNumber"},
				},
			},

			"seedingBonus": {
				Selector: []string{
					"td.rowhead:contains('积分') + td",
				},
				Attr: "html",
				Filters: []v2.Filter{
					{Name: "regex", Args: []interface{}{`做种积分[::</b>\s]*([\d.,]+)`}},
					{Name: "parseNumber"},
				},
			},

			"joinTime": {
				Selector: []string{
					"td.rowhead:contains('加入日期') + td",
				},
				Filters: []v2.Filter{
					{Name: "regex", Args: []interface{}{`^(\d{4}-\d{2}-\d{2}\s+\d{2}:\d{2}:\d{2})`}},
					{Name: "parseTime"},
				},
			},

			"messageCount": {
				Text: "0",
				Selector: []string{

					"body",
				},
				Attr: "html",
				Filters: []v2.Filter{

					{Name: "sumRegexMatches", Args: []interface{}{`你有(\d+)条新`}},
				},
			},
		},
	},
	LevelRequirements: []v2.SiteLevelRequirement{
		{
			ID:        1,
			Name:      "新人(User)",
			Privilege: "新用户的默认级别。可以发种,可以请求续种;可以在做种/下载/发布的时候选择匿名模式;可以上传字幕或删除自己上传的字幕;可以更新过期的外部信息。",
		},
		{
			ID:         2,
			Name:       "精英(Elite)",
			NameAka:    []string{"Elite", "精英"},
			Downloaded: "500GB",
			Ratio:      1.2,
			Alternative: []v2.AlternativeRequirement{
				{SeedingBonus: 100000, Uploads: 1},
				{SeedingBonus: 150000},
			},
			Privilege: "可以在做种/下载/发布的时候选择匿名模式;可以查看用户列表;可以查看排行榜;可以浏览论坛邀请区;自助申请保种员;等级加成 0.05。",
		},
		{
			ID:         3,
			Name:       "大师(Master)",
			NameAka:    []string{"Master", "大师"},
			Downloaded: "1TB",
			Ratio:      1.2,
			Alternative: []v2.AlternativeRequirement{
				{SeedingBonus: 500000, Uploads: 100},
				{SeedingBonus: 1000000},
			},
			Privilege: "可以访问高级用户论坛,等级加成 0.15。",
		},
		{
			ID:         4,
			Name:       "神仙(God)",
			NameAka:    []string{"God", "神仙"},
			Downloaded: "3TB",
			Ratio:      2,
			Alternative: []v2.AlternativeRequirement{
				{SeedingBonus: 1200000, Uploads: 300},
				{SeedingBonus: 2400000},
			},
			Privilege: "彩色 ID 特权;可以查看普通日志;等级加成 0.25。",
		},
		{
			ID:        5,
			Name:      "神王(Immortal)",
			NameAka:   []string{"Immortal", "神王"},
			Privilege: "成为当月神王时奖励当时邀请茉莉价格的一半茉莉,最酷炫的动态彩色 ID 特权;常规时期可以购买及发送邀请;等级加成0.35。",
		},
		{
			ID:        100,
			Name:      "贵宾(VIP)",
			NameAka:   []string{"VIP", "贵宾"},
			GroupType: v2.LevelGroupVIP,
			Privilege: "贵宾(VIP)的权限和神王(Immortal)相同。贵宾(VIP)及其以上等级免除自动降级。",
		},
	},
}

SpringSundayDefinition is the site definition for SpringSunday

Functions

func GetHDSkyLevelRequirements

func GetHDSkyLevelRequirements(joinTime int64) []v2.SiteLevelRequirement

GetHDSkyLevelRequirements returns appropriate level requirements based on join date

func GetMTeamLevelName

func GetMTeamLevelName(roleID string) string

GetMTeamLevelName returns level name from role ID

Types

This section is empty.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL