sync: 2022-12-13 14:28:08 +0000

This commit is contained in:
mosasauroidea-bot
2022-12-13 14:28:08 +00:00
parent e09fd10508
commit 743dd86e85
90 changed files with 2804 additions and 1794 deletions
+2 -1
View File
@@ -43,7 +43,8 @@ echo "Start services..."
mkdir -p /var/www/logs
mkdir -p /var/www/.cache
chmod 777 gazelle:gazelle /var/www/.cache
chmod 777 /var/www/.cache
chown gazelle:gazelle /var/www/.cache
truncate -s0 /var/www/logs/*.log
run_service cron
+1 -6
View File
@@ -1,10 +1,5 @@
module.exports = {
extends: [
'standard',
'prettier',
'plugin:react/recommended',
'plugin:react/jsx-runtime',
],
extends: ['standard', 'prettier', 'plugin:react/recommended', 'plugin:react/jsx-runtime'],
plugins: ['jest'],
env: {
'jest/globals': true,
-4
View File
@@ -101,10 +101,6 @@ RUN apt-get install -y --no-install-recommends \
xdg-utils \
&& rm -rf /var/lib/apt/lists/*
RUN npm install -g git-cz
RUN npm install --save-dev @commitlint/config-conventional @commitlint/cli
# If running Docker >= 1.13.0 use docker run's --init arg to reap zombie processes, otherwise
# uncomment the following lines to have `dumb-init` as PID 1
# ADD https://github.com/Yelp/dumb-init/releases/download/v1.2.0/dumb-init_1.2.0_amd64 /usr/local/bin/dumb-init
+4 -9
View File
@@ -3,14 +3,11 @@
namespace Gazelle\Top10;
class User extends \Gazelle\Base {
public const UPLOADERS = 'uploaders';
public const DOWNLOADERS = 'downloaders';
public const UPLOADS = 'uploads';
public const REQUEST_VOTES = 'request_votes';
public const REQUEST_FILLS = 'request_fills';
public const UPLOAD_SPEED = 'upload_speed';
public const DOWNLOAD_SPEED = 'download_speed';
public const BONUSPOINTS = 'bonus_points';
public const SEEDINGSIZE = 'bonus_points';
private const CACHE_KEY = 'topusers_%s_%d';
@@ -18,10 +15,8 @@ class User extends \Gazelle\Base {
self::UPLOADERS => 'uploaded',
self::DOWNLOADERS => 'downloaded',
self::UPLOADS => 'num_uploads',
self::REQUEST_VOTES => 'request_votes',
self::REQUEST_FILLS => 'request_fills',
self::UPLOAD_SPEED => 'up_speed',
self::DOWNLOAD_SPEED => 'down_speed',
self::BONUSPOINTS => 'bonus_points',
self::SEEDINGSIZE => 'seeding_size',
];
public function fetch(string $type, int $limit) {
+368 -25
View File
@@ -1,37 +1,380 @@
<?
class Stats {
const CACHE_TIME = 24 * 3600 * 1000;
public const PeerCount = 'peer_count';
public const SeederCount = 'seeder_count';
public const LeecherCount = 'leecher_count';
public const DayActive = 'day_active';
public const SeedingUser = 'seeding_user';
private $Names = [
self::PeerCount,
self::SeederCount,
self::LeecherCount,
self::DayActive,
self::SeedingUser
];
public static function record($Name, $Value) {
if (!array_key_exists($Name, self::$Names)) {
error_log('Invalid name: ' . $Name);
return;
}
if (!is_number($Value)) {
error_log('Invalid value: ' . $Value . ' ;name: ' . $Name);
return;
}
G::$DB->prepared_query("INSERT INTO Name, Value, Time VALUES (?, ?, ?)", $Name, $Value, sqltime());
}
public static function peersCount() {
global $DB, $Cache, $WINDOW_DATA;
$DataKey = 'statsPeersCount';
$LastDay = 30;
if (!$Value = $Cache->get_value('stats_peers_count')) {
$DB->query(
"SELECT Name, DATE_FORMAT(Time,'%Y-%m-%d') as Date, Value
FROM stats WHERE Name in ('peer_count', 'seeder_count', 'leecher_count') AND DATE_SUB(CURDATE(), INTERVAL $LastDay Day) <= date(Time)"
);
$Value = $DB->to_array(false, MYSQLI_NUM);
$Data = [];
foreach ($Value as $V) {
list($Name, $Date, $Value) = $V;
$Data[$Date][$Name] = $Value;
}
$Value = $Data;
$Cache->cache_value('stats_peers_count', $Value, 3600 * 24);
}
$WData = [];
foreach ($Data as $Date => $Value) {
$WData[] = [
'date' => $Date,
'peer_count' => intval($Value['peer_count']),
'seeder_count' => intval($Value['seeder_count']),
'leecher_count' => intval($Value['leecher_count']),
];
}
$WINDOW_DATA[$DataKey] = $WData;
}
public static function seedingUser() {
global $DB, $Cache, $WINDOW_DATA;
$DataKey = 'statsSeedingUser';
$LastDay = 30;
if (!$Value = $Cache->get_value('stats_seeding_user')) {
$DB->query(
"SELECT Name, DATE_FORMAT(Time,'%Y-%m-%d') as Date, Value
FROM stats WHERE Name = 'seeding_user' AND DATE_SUB(CURDATE(), INTERVAL $LastDay Day) <= date(Time)"
);
$Value = $DB->to_array(false, MYSQLI_NUM);
$Data = [];
foreach ($Value as $V) {
list($Name, $Date, $Value) = $V;
$Data[$Date][$Name] = $Value;
}
$Value = $Data;
$Cache->cache_value('stats_seeding_user', $Value, 3600 * 24);
}
$WData = [];
foreach ($Data as $Date => $Value) {
$WData[] = [
'date' => $Date,
'seeding_user' => intval($Value['seeding_user']),
];
}
$WINDOW_DATA[$DataKey] = $WData;
}
public static function uv() {
global $DB, $Cache, $WINDOW_DATA;
$DataKey = 'statsUserActive';
$LastDay = 30;
if (!$Value = $Cache->get_value('stats_user_active')) {
$DB->query(
"SELECT Name, DATE_FORMAT(Time,'%Y-%m-%d') as Date, Value
FROM stats WHERE Name = 'day_active' AND DATE_SUB(CURDATE(), INTERVAL $LastDay Day) <= date(Time)"
);
$Value = $DB->to_array(false, MYSQLI_NUM);
$Data = [];
foreach ($Value as $V) {
list($Name, $Date, $Value) = $V;
$Data[$Date][$Name] = $Value;
}
$Value = $Data;
$Cache->cache_value('stats_user_active', $Value, 3600 * 24);
}
$WData = [];
foreach ($Data as $Date => $Value) {
$WData[] = [
'date' => $Date,
'uv' => intval($Value['day_active']),
];
}
$WINDOW_DATA[$DataKey] = $WData;
}
public static function userBrowsers() {
global $DB, $Cache, $WINDOW_DATA;
$DataKey = 'statsUserBrowsers';
if (!$BrowserDistribution = $Cache->get_value('browser_distribution')) {
$DB->query("
SELECT Browser, COUNT(UserID) AS Users
FROM users_sessions
GROUP BY Browser
ORDER BY Users DESC");
$BrowserDistribution = $DB->to_array();
$Cache->cache_value('browser_distribution', $BrowserDistribution, 3600 * 24 * 14);
}
$Data = self::processPieData($BrowserDistribution);
$WINDOW_DATA[$DataKey] = $Data;
}
public static function userClasses() {
global $DB, $Cache, $WINDOW_DATA;
$DataKey = 'statsUserClasses';
if (!$ClassDistribution = $Cache->get_value('class_distribution')) {
$DB->query("
SELECT p.Name, COUNT(m.ID) AS Users
FROM users_main AS m
JOIN permissions AS p ON m.PermissionID = p.ID
WHERE m.Enabled = '1'
GROUP BY p.Name
ORDER BY Users DESC");
$ClassDistribution = $DB->to_array();
$Cache->cache_value('class_distribution', $ClassDistribution, 3600 * 24 * 14);
}
$Data = self::processPieData($ClassDistribution);
$WINDOW_DATA[$DataKey] = $Data;
}
public static function userPlatforms() {
global $DB, $Cache, $WINDOW_DATA;
$DataKey = 'statsUserPlatforms';
if (!$PlatformDistribution = $Cache->get_value('platform_distribution')) {
$DB->query("
SELECT OperatingSystem, COUNT(UserID) AS Users
FROM users_sessions
GROUP BY OperatingSystem
ORDER BY Users DESC");
$PlatformDistribution = $DB->to_array();
$Cache->cache_value('platform_distribution', $PlatformDistribution, 3600 * 24 * 14);
}
$Data = self::processPieData($PlatformDistribution);
$WINDOW_DATA[$DataKey] = $Data;
}
private static function processPieData($Datas) {
$Ret = [];
$Count = 0;
foreach ($Datas as $Data) {
list($Label, $Users) = $Data;
$Count += $Users;
}
$Other = 0;
foreach ($Datas as $Data) {
list($Label, $Users) = $Data;
if (floatval($Users) / $Count < 0.01) {
$Other += $Users;
continue;
}
$Ret[] = [
'name' => $Label,
'value' => intval($Users),
];
}
if ($Other) {
$Ret[] = [
'name' => t('server.common.others'),
'value' => intval($Other),
];
}
return $Ret;
}
public static function userTimeLine() {
global $DB, $Cache, $WINDOW_DATA;
$DataKey = 'statsUserTimeline';
$LastMonth = 12;
if (!$Labels = $Cache->get_value('users_timeline')) {
$DB->query("
SELECT DATE_FORMAT(JoinDate,'%Y-%m-01') AS Month, COUNT(UserID)
FROM users_info WHERE DATE_SUB(CURDATE(), INTERVAL $LastMonth Month) <= date(JoinDate)
GROUP BY Month
ORDER BY JoinDate DESC");
$TimelineIn = array_reverse($DB->to_array());
$DB->query("
SELECT DATE_FORMAT(BanDate,'%Y-%m-01') AS Month, COUNT(UserID)
FROM users_info WHERE DATE_SUB(CURDATE(), INTERVAL $LastMonth Month) <= date(BanDate)
GROUP BY Month
ORDER BY BanDate DESC");
$TimelineOut = array_reverse($DB->to_array());
$Labels = array();
foreach ($TimelineIn as $Month) {
list($Label, $Amount) = $Month;
$Labels[$Label]['in'] = $Amount;
}
foreach ($TimelineOut as $Month) {
list($Label, $Amount) = $Month;
$Labels[$Label]['out'] = $Amount;
}
$Cache->cache_value('users_timeline', $Labels, mktime(0, 0, 0, date('n') + 1, 2)); //Tested: fine for Dec -> Jan
}
$Data = [];
foreach ($Labels as $Label => $Value) {
$Value = [
'date' => $Label,
'in' => intval($Value['in']),
'out' => intval($Value['out']),
];
$Data[] = $Value;
}
$WINDOW_DATA[$DataKey] = $Data;
}
public static function torrentBySpecific() {
global $DB, $Cache, $WINDOW_DATA;
$Keys = ['Processing', 'Codec', 'Container', 'Source', 'Resolution'];
foreach ($Keys as $Key) {
$DataKey = "statsTorrent${Key}s";
if (!$Distribution = $Cache->get_value('stats_torrent_' . strtolower($Key))) {
$DB->query("
SELECT $Key, COUNT(ID) as Count
FROM torrents
GROUP by $Key
ORDER by Count DESC");
$Distribution = $DB->to_array();
$Cache->cache_value('stats_torrent_' . strtolower($Key), $Distribution, 3600 * 24 * 1);
}
$Data = self::processPieData($Distribution);
$WINDOW_DATA[$DataKey] = $Data;
}
$DataKey = "statsTorrentReleaseTypes";
if (!$Distribution = $Cache->get_value('stats_torrent_release_type')) {
$DB->query("
SELECT ReleaseType, COUNT(ID) as Count
FROM torrents_group
GROUP by ReleaseType
ORDER by Count DESC");
$Distribution = $DB->to_array(false, MYSQLI_NUM);
$Cache->cache_value('stats_torrent_release_type', $Distribution, 3600 * 24 * 1);
}
for ($Idx = 0; $Idx < count($Distribution); $Idx++) {
$Distribution[$Idx][0] = t('server.torrents.release_types')[$Distribution[$Idx][0]];
}
$Data = self::processPieData($Distribution);
$WINDOW_DATA[$DataKey] = $Data;
}
public static function torrentByDay() {
global $DB, $WINDOW_DATA, $Cache;
$LastDays = 15;
$DataKey = 'statsTorrentByDay';
if (!$DayLabels = $Cache->get_value('torrents_day_timeline')) {
$DB->query("
SELECT DATE_FORMAT(Time, '%Y-%m-%d') AS Day, COUNT(ID)
FROM log
WHERE Message LIKE 'Torrent % was uploaded by %' and DATE_SUB(CURDATE(), INTERVAL $LastDays DAY) <= date(Time)
GROUP BY Day
ORDER BY Time DESC");
$DayTimelineIn = array_reverse($DB->to_array());
$DB->query("
SELECT DATE_FORMAT(Time, '%Y-%m-%d') AS Day, COUNT(ID)
FROM log
WHERE Message LIKE 'Torrent % was deleted %' and DATE_SUB(CURDATE(), INTERVAL $LastDays DAY) <= date(Time)
GROUP BY Day
ORDER BY Time DESC");
$DayTimelineOut = array_reverse($DB->to_array());
$DB->query("
SELECT DATE_FORMAT(Time, '%Y-%m-%d') AS Day, COUNT(ID)
FROM torrents Where DATE_SUB(CURDATE(), INTERVAL $LastDays DAY) <= date(Time)
GROUP BY Day
ORDER BY Time DESC");
$DayTimelineNet = array_reverse($DB->to_array());
foreach ($DayTimelineIn as $Day) {
list($Label, $Amount) = $Day;
$DayLabels[$Label]['in'] = $Amount;
}
foreach ($DayTimelineOut as $Day) {
list($Label, $Amount) = $Day;
$DayLabels[$Label]['out'] = $Amount;
}
foreach ($DayTimelineNet as $Day) {
list($Label, $Amount) = $Day;
$DayLabels[$Label]['net'] = $Amount;
}
G::$Cache->cache_value('torrents_day_timeline', $DayLabels, mktime(0, 0, 0, date('n'), date('j') + 1));
}
$Data = [];
foreach ($DayLabels as $Label => $Value) {
$Value = [
'date' => $Label,
'net' => intval($Value['net']),
'in' => intval($Value['in']),
'out' => intval($Value['out']),
];
$Data[] = $Value;
}
$WINDOW_DATA[$DataKey] = $Data;
}
public static function torrentByMonth() {
}
public static function torrentByYear() {
global $Cache, $DB, $WINDOW_DATA;
$DataKey = 'statsTorrentByYear';
// $Cache->delete_value($DataKey);
$Data = $Cache->get_value($DataKey);
if (!$Data) {
$DB->query(
"
SELECT DATE_FORMAT(l.Time, '%Y') AS Date, Count(l.ID) AS Count
FROM log l
WHERE l.Message LIKE 'Torrent % was uploaded by %'
GROUP BY Date
ORDER BY Date DESC
"
);
$Uploads = array_reverse($DB->to_array());
$Data = [];
foreach ($Uploads as $Index => $Value) {
$Data[] = [
'date' => $Uploads[$Index]['Date'],
'uploads' => (int) $Uploads[$Index]['Count'] ?: 0,
];
$LastMonth = 12;
$DataKey = 'statsTorrentByMonth';
if (!$Labels = $Cache->get_value('torrents_timeline')) {
$DB->query("
SELECT DATE_FORMAT(Time, '%Y-%m-01') AS Month, COUNT(ID)
FROM log
WHERE Message LIKE 'Torrent % was uploaded by %' AND DATE_SUB(CURDATE(), INTERVAL $LastMonth Month) <= date(Time)
GROUP BY Month
ORDER BY Time DESC");
$TimelineIn = array_reverse($DB->to_array());
$DB->query("
SELECT DATE_FORMAT(Time, '%Y-%m-01') AS Month, COUNT(ID)
FROM log
WHERE Message LIKE 'Torrent % was deleted %' AND DATE_SUB(CURDATE(), INTERVAL $LastMonth Month) <= date(Time)
GROUP BY Month
ORDER BY Time DESC");
$TimelineOut = array_reverse($DB->to_array());
$DB->query("
SELECT DATE_FORMAT(Time, '%Y-%m-01') AS Month, COUNT(ID)
FROM torrents WHERE DATE_SUB(CURDATE(), INTERVAL $LastMonth Month) <= date(Time)
GROUP BY Month
ORDER BY Time DESC");
$TimelineNet = array_reverse($DB->to_array());
foreach ($TimelineIn as $Month) {
list($Label, $Amount) = $Month;
$Labels[$Label]['in'] = $Amount;
}
$Cache->cache_value($DataKey, $Data, self::CACHE_TIME);
foreach ($TimelineOut as $Month) {
list($Label, $Amount) = $Month;
$Labels[$Label]['out'] = $Amount;
}
foreach ($TimelineNet as $Month) {
list($Label, $Amount) = $Month;
$Labels[$Label]['net'] = $Amount;
}
$Cache->cache_value('torrents_timeline', $Labels, mktime(0, 0, 0, date('n') + 1, 2)); //Tested: fine for dec -> jan
}
foreach ($Labels as $Label => $Value) {
$Value = [
'date' => $Label,
'net' => intval($Value['net']),
'in' => intval($Value['in']),
'out' => intval($Value['out']),
];
$Data[] = $Value;
}
$WINDOW_DATA[$DataKey] = $Data;
}
+3 -3
View File
@@ -4,9 +4,9 @@ date_default_timezone_set('UTC');
$CONFIG = [];
// Main settings
$CONFIG['SITE_NAME'] = "GPW DEV"; //The name of your site
$CONFIG['SITE_HOST'] = "localhost"; // The host for your site (e.g. localhost, orpheus.network)
// 主设置 | Main settings
$CONFIG['SITE_NAME'] = "GPW DEV"; //站名 | The name of your site
$CONFIG['SITE_HOST'] = "localhost"; //站点域名 | The host for your site (e.g. localhost, orpheus.network)
$CONFIG['SITE_URL'] = "http://${CONFIG['SITE_HOST']}:9000"; // The base URL to access the site (e.g. http://localhost:8080, https://orpheus.network)
$CONFIG['SERVER_ROOT'] = "/var/www"; //The root of the server, used for includes, purpose is to shorten the path string
$CONFIG['ANNOUNCE_URL'] = "http://${CONFIG['SITE_HOST']}:2710"; //Announce HTTP URL
+36
View File
@@ -0,0 +1,36 @@
<?php
use Phinx\Migration\AbstractMigration;
class Stats extends AbstractMigration {
/**
* Change Method.
*
* Write your reversible migrations using this method.
*
* More information on writing migrations is available here:
* http://docs.phinx.org/en/latest/migrations.html#the-abstractmigration-class
*
* The following commands can be used in this method and Phinx will
* automatically reverse them when rolling back:
*
* createTable
* renameTable
* addColumn
* addCustomColumn
* renameColumn
* addIndex
* addForeignKey
*
* Any other destructive changes will result in an error when trying to
* rollback the migration.
*
* Remember to call "create()" or "update()" and NOT "save()" when working
* with the Table class.
*/
public function change() {
$this->table('stats')->addColumn('Name', 'string')->addColumn('Value', 'integer')->addColumn('Time', 'datetime')
->addIndex(['Name'])
->save();
}
}
-2
View File
@@ -14,7 +14,6 @@ services:
- mysql
volumes:
- .:/var/www:delegated
- node-modules:/var/www/node_modules
- .docker/web/nginx.conf:/etc/nginx/sites-enabled/gazelle.conf
- .docker/web/www.conf:/etc/php/7.3/fpm/pool.d/www.conf
environment:
@@ -67,6 +66,5 @@ services:
- MYSQL_PASSWORD=password
volumes:
node-modules:
mysql-data:
manticore-data:
-42
View File
@@ -1,47 +1,5 @@
<?php
/*
Disabled until we fix Geographical Data
if (!list($Countries, $Rank, $CountryUsers, $CountryMax, $CountryMin, $LogIncrements) = $Cache->get_value('geodistribution')) {
require(__DIR__ . '/../../../classes/charts.class.php');
$DB->prepared_query('
SELECT Code, Users
FROM users_geodistribution');
$Data = $DB->to_array();
$Count = $DB->record_count() - 1;
if ($Count < 30) {
$CountryMinThreshold = $Count;
} else {
$CountryMinThreshold = 30;
}
$CountryMax = ceil(log(Max(1, $Data[0][1])) / log(2)) + 1;
$CountryMin = floor(log(Max(1, $Data[$CountryMinThreshold][1])) / log(2));
$CountryRegions = array('RS' => array('RS-KM')); // Count Kosovo as Serbia as it doesn't have a TLD
foreach ($Data as $Key => $Item) {
list($Country, $UserCount) = $Item;
$Countries[] = $Country;
$CountryUsers[] = number_format((((log($UserCount) / log(2)) - $CountryMin) / ($CountryMax - $CountryMin)) * 100, 2);
$Rank[] = round((1 - ($Key / $Count)) * 100);
if (isset($CountryRegions[$Country])) {
foreach ($CountryRegions[$Country] as $Region) {
$Countries[] = $Region;
$Rank[] = end($Rank);
}
}
}
reset($Rank);
for ($i = $CountryMin; $i <= $CountryMax; $i++) {
$LogIncrements[] = Format::human_format(pow(2, $i));
}
$Cache->cache_value('geodistribution', array($Countries, $Rank, $CountryUsers, $CountryMax, $CountryMin, $LogIncrements), 0);
}
*/
if (!$UserClasses = $Cache->get_value('stats_users_classes')) {
$DB->prepared_query("
SELECT p.Name, COUNT(m.ID) AS Users
+1 -1
View File
@@ -112,7 +112,7 @@ if ($TotalTorrents > 0) {
</h3>
</div>
<div class="BodyNavLinks">
<a class="brackets" href="/wiki.php?action=article&id=47"><?= t('server.bonus.about_bonus_points') ?></a>
<a class="brackets" href="/rules.php?p=bonus"><?= t('server.bonus.about_bonus_points') ?></a>
<a class="brackets" href="/bonus.php"><?= t('server.bonus.bonus_points_shop') ?></a>
<a class="brackets" href="/bonus.php?action=history"><?= t('server.bonus.history') ?></a>
<a class="brackets" href="/top10.php?type=users&limit=10&details=bonus_points"><?= t('server.top10.top') . ' 10 ' . t('server.user.bonus_points') ?></a>
+2 -2
View File
@@ -75,8 +75,8 @@ if (!empty($Err)) {
<tr class="Form-row">
<td class="Form-label"><?= t('server.collages.description') ?></td>
<td class="Form-inputs">
<textarea class="Input" name="description" id="description" cols="60" rows="10"><?= $Description ?></textarea>
<td class="Form-items">
<? new TEXTAREA_PREVIEW("description", "description", display_str($Description)) ?>
</td>
</tr>
<tr class="Form-row">
+2 -2
View File
@@ -64,8 +64,8 @@ if (!check_perms('site_collages_renamepersonal') && $Category === '0') {
</tr>
<tr class="Form-row">
<td class="Form-label"><?= t('server.collages.new_description') ?>:</td>
<td class="Form-inputs">
<textarea class="Input" name="description" id="description" cols="60" rows="10"><?= display_str($Description) ?></textarea>
<td class="Form-items">
<? new TEXTAREA_PREVIEW("description", "description", display_str($Description)) ?>
</td>
</tr>
<tr class="Form-row">
+51 -46
View File
@@ -15,56 +15,61 @@ if (!$DB->has_results()) {
list($PostBody, $AuthorID) = $DB->next_record();
$UserInfo = Users::user_info($AuthorID);
View::show_header('Warn User', '', 'PageCommentWarn');
View::show_header(t('server.forums.comments'), '', 'PageCommentWarn');
?>
<div class="LayoutBody">
<div class="BodyHeader">
<h2 class="BodyHeader-nav">Warning <a href="user.php?id=<?= $AuthorID ?>"><?= $UserInfo['Username'] ?></a></h2>
</div>
<div class="Box">
<div class="Box-body thin">
<form class="create_form" name="warning" action="" onsubmit="quickpostform.submit_button.disabled=true;" method="post">
<input type="hidden" name="postid" value="<?= $PostID ?>" />
<input type="hidden" name="action" value="take_warn" />
<table class="layout" align="center">
<tr>
<td class="label">Reason:</td>
<td>
<input class="Input" type="text" name="reason" size="30" />
</td>
</tr>
<tr>
<td class="label">Length:</td>
<td>
<select class="Input" name="length">
<option class="Select-option" value="verbal">Verbal</option>
<option class="Select-option" value="1">1 week</option>
<option class="Select-option" value="2">2 weeks</option>
<option class="Select-option" value="4">4 weeks</option>
<? if (check_perms('users_mod')) { ?>
<option class="Select-option" value="8">8 weeks</option>
<? } ?>
</select>
</td>
</tr>
<tr>
<td class="label">Private message:</td>
<td>
<textarea class="Input" id="message" style="width: 95%;" tabindex="1" onkeyup="resize('message');" name="privatemessage" cols="90" rows="4"></textarea>
</td>
</tr>
<tr>
<td class="label">Edit post:</td>
<td>
<textarea class="Input" id="body" style="width: 95%;" tabindex="1" onkeyup="resize('body');" name="body" cols="90" rows="8"><?= $PostBody ?></textarea>
<br />
<input class="Button" type="submit" id="submit_button" value="Warn user" tabindex="1" />
</td>
</tr>
</table>
</form>
</div>
<h2 class="BodyHeader-nav"><?= t('server.forums.comments') ?></h2>
</div>
<form class="Form create_form" name="warning" action="" onsubmit="quickpostform.submit_button.disabled=true;" method="post">
<input type="hidden" name="postid" value="<?= $PostID ?>" />
<input type="hidden" name="action" value="take_warn" />
<table class="Form-rowList" variant="header">
<tr class="Form-rowHeader">
<td>
<?= t('server.forums.warn') ?> <a href="user.php?id=<?= $UserID ?>"><?= $UserInfo['Username'] ?></a>
</td>
</tr>
<tr class="Form-row">
<td class="Form-label"><?= t('server.common.reason') ?>:</td>
<td class="Form-inputs">
<input class="Input" type="text" name="reason" size="60" />
</td>
</tr>
<tr class="Form-row">
<td class="Form-label"><?= t('server.common.time_length') ?>:</td>
<td class="Form-inputs">
<select class="Input" name="length">
<option class="Select-option" value="verbal"><?= t('server.forums.verbal') ?></option>
<option class="Select-option" value="1"><?= t('server.user.1_week') ?></option>
<option class="Select-option" value="2"><?= t('server.user.2_week') ?></option>
<option class="Select-option" value="4"><?= t('server.user.4_week') ?></option>
<? if (check_perms('users_mod')) { ?>
<option class="Select-option" value="8"><?= t('server.user.8_week') ?></option>
<? } ?>
</select>
</td>
</tr>
<tr class="Form-row">
<td class="Form-label"><?= t('server.user.pm') ?></td>
<td class="Form-items">
<? new TEXTAREA_PREVIEW("privatemessage", "message") ?>
</td>
</tr>
<tr class="Form-row">
<td class="Form-label"><?= t('server.forums.edit_post') ?>:</td>
<td class="Form-items">
<? new TEXTAREA_PREVIEW("body", "body", $PostBody) ?>
</td>
</tr>
<tr class="Form-row">
<td>
<button class="Button" type="submit" id="submit_button" value="Warn user" tabindex="1"><?= t('server.common.submit') ?></button>
</td>
</tr>
</table>
</form>
</div>
<? View::show_footer();
+53 -40
View File
@@ -29,6 +29,7 @@ if (!empty($_POST['add']) || (!empty($_POST['del']))) {
}
}
$Cache->delete_value('forums_list');
header("Location: forums.php?action=edit_rules&forumid=$ForumID");
}
@@ -40,47 +41,59 @@ $ThreadIDs = $DB->collect('ThreadID');
View::show_header('Edit Forum Rule', '', 'PageForumEditRule');
?>
<div class="Box">
<div class="Box-body thin">
<div class="BodyHeader">
<h2 class="BodyHeader-nav">
<a href="forums.php"><?= t('server.forums.forums') ?></a>
&gt;
<a href="forums.php?action=viewforum&amp;forumid=<?= $ForumID ?>"><?= $Forums[$ForumID]['Name'] ?></a>
&gt;
<?= t('server.forums.edit_forum_specific_rules') ?>
</h2>
</div>
<table class="TableEditRule">
<tr class="Table-rowHeader">
<td class="Table-cell"><?= t('server.forums.thread_id') ?></td>
<td class="Table-cell"></td>
</tr>
<tr>
<form class="add_form" name="forum_rules" action="" method="post">
<input type="hidden" name="auth" value="<?= $LoggedUser['AuthKey'] ?>" />
<td>
<input class="Input" type="text" name="new_thread" size="8" />
</td>
<td>
<input class="Button" type="submit" name="add" value="Add thread" />
</td>
</form>
</tr>
<? foreach ($ThreadIDs as $ThreadID) { ?>
<tr>
<td><?= $ThreadID ?></td>
<td>
<form class="delete_form" name="forum_rules" action="" method="post">
<input type="hidden" name="auth" value="<?= $LoggedUser['AuthKey'] ?>" />
<input type="hidden" name="threadid" value="<?= $ThreadID ?>" />
<input class="Button" type="submit" name="del" value="Delete link" />
</form>
</td>
</tr>
<? } ?>
</table>
<div class="LayoutBody">
<div class="BodyHeader">
<h2 class="BodyHeader-nav">
<a href="forums.php"><?= t('server.forums.forums') ?></a>
&gt;
<a href="forums.php?action=viewforum&amp;forumid=<?= $ForumID ?>"><?= $Forums[$ForumID]['Name'] ?></a>
&gt;
<?= t('server.forums.edit_forum_specific_rules') ?>
</h2>
</div>
<form class="Form add_form" name="forum_rules" action="" method="post">
<input type="hidden" name="auth" value="<?= $LoggedUser['AuthKey'] ?>" />
<table class="Form-rowList" variant="header">
<tr class="Form-rowHeader">
<td>
<?= t('server.forums.new_forum_specific_rule') ?>
</td>
</tr>
<tr class="Form-row">
<td class="Form-label"><?= t('server.forums.thread_id') ?></td>
<td class="Form-inputs">
<input class="Input is-small" type="text" name="new_thread" size="8" />
</td>
</tr>
<tr class="Form-row">
<td>
<button class="Button" type="submit" name="add" value="Add thread"><?= t('server.common.add') ?></button>
</td>
</tr>
</table>
</form>
<table class="Table TableEditRule">
<tr class="Table-rowHeader">
<td class="Table-cell">
<?= t('server.forums.thread_id') ?>
</td>
<td class="Table-cell">
<?= t('server.common.actions') ?>
</td>
</tr>
<? foreach ($ThreadIDs as $ThreadID) { ?>
<tr class="Table-row">
<td class="Table-cell"><?= $ThreadID ?></td>
<td class="Table-cell">
<form class=" delete_form" name="forum_rules" action="" method="post">
<input type="hidden" name="auth" value="<?= $LoggedUser['AuthKey'] ?>" />
<input type="hidden" name="threadid" value="<?= $ThreadID ?>" />
<button class="Button" type="submit" name="del" value="Delete link"><?= t('server.common.delete') ?></button>
</form>
</td>
</tr>
<? } ?>
</table>
</div>
<?
View::show_footer();
+169 -175
View File
@@ -79,6 +79,7 @@ $ForumName = display_str($Forums[$ForumID]['Name']);
if (!Forums::check_forumperm($ForumID)) {
error(403);
}
$Pages = Format::get_pages($Page, $Forums[$ForumID]['NumTopics'], CONFIG['TOPICS_PER_PAGE'], 9);
// Start printing
View::show_header(t('server.forums.forums') . '&gt; ' . $Forums[$ForumID]['Name'], '', $IsDonorForum ? 'donor' : '', 'PageForumShow');
@@ -90,112 +91,108 @@ View::show_header(t('server.forums.forums') . '&gt; ' . $Forums[$ForumID]['Name'
</h2>
<div class="BodyNavLinksWithExpand">
<div class="BodyNavLinks">
<? if (check_perms('site_moderate_forums')) { ?>
<a href="forums.php?action=edit_rules&amp;forumid=<?= $ForumID ?>" class="brackets"><?= t('server.forums.change_specific_rules') ?></a>
<? } ?>
<? if (Forums::check_forumperm($ForumID, 'Write') && Forums::check_forumperm($ForumID, 'Create')) { ?>
<a href="forums.php?action=new&amp;forumid=<?= $ForumID ?>" class="brackets"><?= t('server.forums.new_thread') ?></a>
<? } ?>
<a href="#" onclick="$('#searchforum').gtoggle(); return false;" class="brackets">
<?= t('server.forums.search_this_forum') ?>
</a>
<a href="forums.php?action=catchup&amp;forumid=<?= $ForumID ?>&amp;auth=<?= $LoggedUser['AuthKey'] ?>" class="brackets"><?= t('server.forums.catch_up') ?></a>
</div>
<div class="BodyNavLinks-expand hidden" id="searchforum">
<form class="Form FormForumSearch" name="forum" action="forums.php" method="get">
<table class="Form-rowList" variant="header">
<tr class="Form-rowHeader">
<td class="Form-title"><?= t('server.forums.search_this_forum') ?>
</td>
</tr>
<tr class="Form-row">
<td class="Form-label">
<input type="hidden" name="action" value="search" />
<input type="hidden" name="forums[]" value="<?= $ForumID ?>" />
<strong><?= t('server.forums.search_for') ?>:</strong>
</td>
<td class="Form-inputs">
<input class="Input" type="text" id="searchbox" name="search" size="70" />
</td>
</tr>
<tr class="Form-row">
<td class="Form-label"><?= t('server.forums.search_in') ?>:</td>
<td class="Form-inputs">
<div class="Radio">
<input class="Input" type="radio" name="type" id="type_title" value="title" checked="checked" />
<label class="Radio-label" for="type_title"><?= t('server.forums.titles') ?></label>
</div>
<div class="Radio">
<input class="Input" type="radio" name="type" id="type_body" value="body" />
<label class="Radio-label" for="type_body"><?= t('server.forums.post_bodies') ?></label>
</div>
</td>
</tr>
<tr class="Form-row">
<td class="Form-label"><?= t('server.forums.post_by') ?>:</td>
<td class="Form-inputs">
<input class="Input" type="text" id="username" name="user" placeholder="<?= t('server.forums.username') ?>" size="70" />
</td>
</tr>
<tr class="Form-row">
<td class="Form-submit" colspan="2">
<button class="Button" type="submit" name="submit" value="Search"><?= t('server.common.search') ?></button>
</td>
</tr>
</table>
<form class="Form SearchPage Box FormForumSearch" name="forum" action="forums.php" method="get">
<div class="SearchPageHeader">
<div class="SearchPageHeader-title">
<?= t('server.forums.search_this_forum') ?>
</div>
</div>
<div class="SearchPageBody">
<table class="Form-rowList">
<tr class="Form-row">
<td class="Form-label">
<input type="hidden" name="action" value="search" />
<input type="hidden" name="forums[]" value="<?= $ForumID ?>" />
<strong><?= t('server.forums.search_for') ?>:</strong>
</td>
<td class="Form-inputs">
<input class="Input" type="text" id="searchbox" name="search" size="70" />
</td>
</tr>
<tr class="Form-row">
<td class="Form-label"><?= t('server.forums.search_in') ?>:</td>
<td class="Form-inputs">
<div class="Radio">
<input class="Input" type="radio" name="type" id="type_title" value="title" checked="checked" />
<label class="Radio-label" for="type_title"><?= t('server.forums.titles') ?></label>
</div>
<div class="Radio">
<input class="Input" type="radio" name="type" id="type_body" value="body" />
<label class="Radio-label" for="type_body"><?= t('server.forums.post_bodies') ?></label>
</div>
</td>
</tr>
<tr class="Form-row">
<td class="Form-label"><?= t('server.forums.post_by') ?>:</td>
<td class="Form-inputs">
<input class="Input" type="text" id="username" name="user" placeholder="<?= t('server.forums.username') ?>" size="70" />
</td>
</tr>
</table>
</div>
<div class="SearchPageFooter">
<div class="SearchPageFooter-actions">
<button class="Button" type="submit" name="submit" value="Search"><?= t('server.common.search') ?></button>
</div>
</div>
</form>
</div>
</form>
</div>
<div class="BodyNavLinks">
<a href="forums.php?action=catchup&amp;forumid=<?= $ForumID ?>&amp;auth=<?= $LoggedUser['AuthKey'] ?>" class="brackets"><?= t('server.forums.catch_up') ?></a>
<? if (check_perms('site_moderate_forums')) { ?>
<a href="forums.php?action=edit_rules&amp;forumid=<?= $ForumID ?>" class="brackets"><?= t('server.forums.change_specific_rules') ?></a>
<? } ?>
<? if (!empty($Forums[$ForumID]['SpecificRules'])) { ?>
<strong><?= t('server.forums.forum_specific_rules') ?></strong>
<? foreach ($Forums[$ForumID]['SpecificRules'] as $ThreadIDs) {
$Thread = Forums::get_thread_info($ThreadIDs);
if ($Thread === null) {
error(404);
}
?>
<br />
<a href="forums.php?action=viewthread&amp;threadid=<?= $ThreadIDs ?>" class="brackets"><?= display_str($Thread['Title']) ?></a>
<? } ?>
<? } ?>
</div>
</div>
<div class="BodyContent">
<div class="BodyNavLinks pager">
<?
$Pages = Format::get_pages($Page, $Forums[$ForumID]['NumTopics'], CONFIG['TOPICS_PER_PAGE'], 9);
echo $Pages;
<div class="ForumSpecialHeader">
<? if (!empty($Forums[$ForumID]['SpecificRules'])) { ?>
<?= t('server.forums.forum_specific_rules') ?>:&nbsp;
<? foreach ($Forums[$ForumID]['SpecificRules'] as $ThreadIDs) {
$Thread = Forums::get_thread_info($ThreadIDs);
if ($Thread === null) {
error(404);
}
?>
</div>
<div class="TableContainer">
<table class="TableForum Table">
<tr class="Table-rowHeader">
<td class="TableForum-cellReadStatus Table-cell"></td>
<td class="TableForum-cellPost Table-cell">
<?= t('server.forums.latest') ?>
</td>
<td class="TableForum-cellReplies TableForum-cellValue Table-cell">
<?= t('server.forums.replies') ?>
</td>
<td class="TableForum-cellAuthor TableForum-cellValue Table-cell">
<?= t('server.forums.author') ?>
&nbsp;<a href="forums.php?action=viewthread&amp;threadid=<?= $ThreadIDs ?>" class="brackets"><?= display_str($Thread['Title']) ?></a>
<? } ?>
<? } ?>
</div>
<? View::pages($Pages); ?>
<div class="TableContainer">
<table class="TableForum Table">
<tr class="Table-rowHeader">
<td class="TableForum-cellReadStatus Table-cell"></td>
<td class="TableForum-cellPost Table-cell">
<?= t('server.forums.latest') ?>
</td>
<td class="TableForum-cellReplies TableForum-cellValue Table-cell">
<?= t('server.forums.replies') ?>
</td>
<td class="TableForum-cellAuthor TableForum-cellValue Table-cell">
<?= t('server.forums.author') ?>
</td>
</tr>
<?
// Check that we have content to process
if (count($Forum) === 0) {
?>
<tr class="TableForum-row Table-row">
<td class="TableForum-cellEmptyState Table-cell" colspan="4">
<?= t('server.forums.no_threads_in_forum') ?>
</td>
</tr>
<?
// Check that we have content to process
if (count($Forum) === 0) {
?>
<tr class="TableForum-row Table-row">
<td class="TableForum-cellEmptyState Table-cell" colspan="4">
<?= t('server.forums.no_threads_in_forum') ?>
</td>
</tr>
<?
} else {
// forums_last_read_topics is a record of the last post a user read in a topic, and what page that was on
$DB->query("
} else {
// forums_last_read_topics is a record of the last post a user read in a topic, and what page that was on
$DB->query("
SELECT
l.TopicID,
l.PostID,
@@ -210,100 +207,97 @@ View::show_header(t('server.forums.forums') . '&gt; ' . $Forums[$ForumID]['Name'
WHERE l.TopicID IN (" . implode(', ', array_keys($Forum)) . ')
AND l.UserID = \'' . $LoggedUser['ID'] . '\'');
// Turns the result set into a multi-dimensional array, with
// forums_last_read_topics.TopicID as the key.
// This is done here so we get the benefit of the caching, and we
// don't have to make a database query for each topic on the page
$LastRead = $DB->to_array('TopicID');
// Turns the result set into a multi-dimensional array, with
// forums_last_read_topics.TopicID as the key.
// This is done here so we get the benefit of the caching, and we
// don't have to make a database query for each topic on the page
$LastRead = $DB->to_array('TopicID');
//---------- Begin printing
//---------- Begin printing
$Row = 'a';
foreach ($Forum as $Topic) {
list($TopicID, $Title, $AuthorID, $Locked, $Sticky, $PostCount, $LastID, $LastTime, $LastAuthorID) = array_values($Topic);
$Row = $Row === 'a' ? 'b' : 'a';
// Build list of page links
// Only do this if there is more than one page
$PageLinks = array();
$ShownEllipses = false;
$PagesText = '';
$TopicPages = ceil($PostCount / $PerPage);
$Row = 'a';
foreach ($Forum as $Topic) {
list($TopicID, $Title, $AuthorID, $Locked, $Sticky, $PostCount, $LastID, $LastTime, $LastAuthorID) = array_values($Topic);
$Row = $Row === 'a' ? 'b' : 'a';
// Build list of page links
// Only do this if there is more than one page
$PageLinks = array();
$ShownEllipses = false;
$PagesText = '';
$TopicPages = ceil($PostCount / $PerPage);
if ($TopicPages > 1) {
$PagesText = ' (';
for ($i = 1; $i <= $TopicPages; $i++) {
if ($TopicPages > 4 && ($i > 2 && $i <= $TopicPages - 2)) {
if (!$ShownEllipses) {
$PageLinks[] = '-';
$ShownEllipses = true;
}
continue;
if ($TopicPages > 1) {
$PagesText = ' (';
for ($i = 1; $i <= $TopicPages; $i++) {
if ($TopicPages > 4 && ($i > 2 && $i <= $TopicPages - 2)) {
if (!$ShownEllipses) {
$PageLinks[] = '-';
$ShownEllipses = true;
}
$PageLinks[] = "<a href=\"forums.php?action=viewthread&amp;threadid=$TopicID&amp;page=$i\">$i</a>";
continue;
}
$PagesText .= implode(' ', $PageLinks);
$PagesText .= ')';
$PageLinks[] = "<a href=\"forums.php?action=viewthread&amp;threadid=$TopicID&amp;page=$i\">$i</a>";
}
$PagesText .= implode(' ', $PageLinks);
$PagesText .= ')';
}
// handle read/unread posts - the reason we can't cache the whole page
if ((!$Locked || $Sticky) && ((empty($LastRead[$TopicID]) || $LastRead[$TopicID]['PostID'] < $LastID) && strtotime($LastTime) > $LoggedUser['CatchupTime'])) {
$Read = 'unread';
} else {
$Read = 'read';
}
if ($Locked) {
$Read .= '_locked';
}
if ($Sticky) {
$Read .= '_sticky';
}
?>
<tr class="TableForum-row Table-row">
<td class="TableForum-cellReadStatus Table-cell <?= $Read ?>" data-tooltip="<?= ucwords(str_replace('_', ' ', $Read)) ?>" data-tooltip-theme="<?= $TooltipTheme ?>">
<?= icon("Forum/$Read") ?>
</td>
<td class="TableForum-cellPost Table-cell">
<div class="TableForum-post">
<?
$TopicLength = 200 - (2 * count($PageLinks));
unset($PageLinks);
$DisplayTitle = display_str($Title);
// handle read/unread posts - the reason we can't cache the whole page
if ((!$Locked || $Sticky) && ((empty($LastRead[$TopicID]) || $LastRead[$TopicID]['PostID'] < $LastID) && strtotime($LastTime) > $LoggedUser['CatchupTime'])) {
$Read = 'unread';
} else {
$Read = 'read';
}
if ($Locked) {
$Read .= '_locked';
}
if ($Sticky) {
$Read .= '_sticky';
}
?>
<tr class="TableForum-row Table-row">
<td class="TableForum-cellReadStatus Table-cell <?= $Read ?>" data-tooltip="<?= ucwords(str_replace('_', ' ', $Read)) ?>" data-tooltip-theme="<?= $TooltipTheme ?>">
<?= icon("Forum/$Read") ?>
</td>
<td class="TableForum-cellPost Table-cell">
<div class="TableForum-post">
<?
$TopicLength = 200 - (2 * count($PageLinks));
unset($PageLinks);
$DisplayTitle = display_str($Title);
?>
<a href="forums.php?action=viewthread&amp;threadid=<?= $TopicID ?>" data-title-plain="<?= $DisplayTitle ?>" <?= (strlen($Title) > $TopicLength ? "data-tooltip='" . $DisplayTitle . "'" : "") ?>><?= display_str(Format::cut_string($Title, $TopicLength, true)) ?></a>
<?= $PagesText ?>
<? if (!empty($LastRead[$TopicID])) { ?>
<a class="TableForum-jumpToLastRead " data-tooltip="<?= t('server.forums.jump_to_last_read') ?>" data-tooltip="<?= $TooltipTheme ?>" href="forums.php?action=viewthread&amp;threadid=<?= $TopicID ?>&amp;page=<?= $LastRead[$TopicID]['Page'] ?>#post<?= $LastRead[$TopicID]['PostID'] ?>">
<?= icon('Forum/jump-to-last-read'); ?>
?>
<a href="forums.php?action=viewthread&amp;threadid=<?= $TopicID ?>" data-title-plain="<?= $DisplayTitle ?>" <?= (strlen($Title) > $TopicLength ? "data-tooltip='" . $DisplayTitle . "'" : "") ?>><?= display_str(Format::cut_string($Title, $TopicLength, true)) ?></a>
<?= $PagesText ?>
<? if (!empty($LastRead[$TopicID])) { ?>
<a class="TableForum-jumpToLastRead " data-tooltip="<?= t('server.forums.jump_to_last_read') ?>" data-tooltip="<?= $TooltipTheme ?>" href="forums.php?action=viewthread&amp;threadid=<?= $TopicID ?>&amp;page=<?= $LastRead[$TopicID]['Page'] ?>#post<?= $LastRead[$TopicID]['PostID'] ?>">
<?= icon('Forum/jump-to-last-read'); ?>
</a>
<? } ?>
<span class="TableForum-lastPoster">
<?= t('server.forums.by') ?>
<span> </span>
<?= Users::format_username($LastAuthorID, false, false, false, false, false, $IsDonorForum) ?>
<span> </span>
<?= time_diff($LastTime, 1) ?>
</span>
</div>
</td>
<td class="TableForum-cellReplies TableForum-cellValue Table-cell">
<?= number_format($PostCount - 1) ?>
</td>
<td class="TableForum-cellAuthor TableForum-cellValue Table-cell">
<?= Users::format_username($AuthorID, false, false, false, false, false, $IsDonorForum) ?>
</td>
</tr>
<? }
} ?>
</table>
</div>
<!--<div class="breadcrumbs">
</a>
<? } ?>
<span class="TableForum-lastPoster">
<?= t('server.forums.by') ?>
<span> </span>
<?= Users::format_username($LastAuthorID, false, false, false, false, false, $IsDonorForum) ?>
<span> </span>
<?= time_diff($LastTime, 1) ?>
</span>
</div>
</td>
<td class="TableForum-cellReplies TableForum-cellValue Table-cell">
<?= number_format($PostCount - 1) ?>
</td>
<td class="TableForum-cellAuthor TableForum-cellValue Table-cell">
<?= Users::format_username($AuthorID, false, false, false, false, false, $IsDonorForum) ?>
</td>
</tr>
<? }
} ?>
</table>
</div>
<!--<div class="breadcrumbs">
<a href="forums.php">Forums</a> &gt; <?= $ForumName ?>
</div>-->
<div class="BodyNavLinks pager">
<?= $Pages ?>
</div>
</div>
<? View::pages($Pages); ?>
</div>
<? View::show_footer(); ?>
+1 -1
View File
@@ -36,7 +36,7 @@ $DB->query("
('$UserID', '" . db_string($AdminComment) . "')
ON DUPLICATE KEY UPDATE
Comment = CONCAT('" . db_string($AdminComment) . "', Comment)");
Misc::send_pm_with_tpl($UserID, 'verbal_warning', ['Length' => $WarningLength, 'URL' => $URL]);
Misc::send_pm_with_tpl($UserID, 'verbal_warning', ['Length' => $WarningLength, 'URL' => $URL, 'PrivateMessage' => $PrivateMessage]);
//edit the post
$DB->query("
+53 -47
View File
@@ -13,56 +13,62 @@ $DB->query("
JOIN forums_topics AS t ON p.TopicID = t.ID
WHERE p.ID = '$PostID'");
list($PostBody, $ForumID) = $DB->next_record();
View::show_header('Warn User', '', 'PageForumWarn');
View::show_header(t('server.forums.forums'), '', 'PageForumWarn');
?>
<div class="LayoutBody">
<div class="BodyHeader">
<h2 class="BodyHeader-nav">Warning <a href="user.php?id=<?= $UserID ?>"><?= $UserInfo['Username'] ?></a></h2>
</div>
<div class="Box thin">
<form class="Box-body send_form" name="warning" action="" onsubmit="quickpostform.submit_button.disabled = true;" method="post">
<input type="hidden" name="postid" value="<?= $PostID ?>" />
<input type="hidden" name="userid" value="<?= $UserID ?>" />
<input type="hidden" name="key" value="<?= $Key ?>" />
<input type="hidden" name="auth" value="<?= $LoggedUser['AuthKey'] ?>" />
<input type="hidden" name="action" value="take_warn" />
<table class="layout" align="center">
<tr>
<td class="label">Reason:</td>
<td>
<input class="Input" type="text" name="reason" size="60" />
</td>
</tr>
<tr>
<td class="label">Length:</td>
<td>
<select class="Input" name="length">
<option class="Select-option" value="verbal">Verbal</option>
<option class="Select-option" value="1">1 week</option>
<option class="Select-option" value="2">2 weeks</option>
<option class="Select-option" value="4">4 weeks</option>
<? if (check_perms('users_mod')) { ?>
<option class="Select-option" value="8">8 weeks</option>
<? } ?>
</select>
</td>
</tr>
<tr>
<td class="label">Private message:</td>
<td>
<textarea class="Input" id="message" style="width: 95%;" tabindex="1" onkeyup="resize('message');" name="privatemessage" cols="90" rows="4"></textarea>
</td>
</tr>
<tr>
<td class="label">Edit post:</td>
<td>
<textarea class="Input" id="body" style="width: 95%;" tabindex="1" onkeyup="resize('body');" name="body" cols="90" rows="8"><?= $PostBody ?></textarea>
<br />
<input class="Button" type="submit" id="submit_button" value="Warn user" tabindex="1" />
</td>
</tr>
</table>
</form>
<div class="BodyHeader-nav"><?= t('server.forums.forums') ?></div>
</div>
<form class="Form send_form" name="warning" action="" onsubmit="quickpostform.submit_button.disabled = true;" method="post">
<input type="hidden" name="postid" value="<?= $PostID ?>" />
<input type="hidden" name="userid" value="<?= $UserID ?>" />
<input type="hidden" name="key" value="<?= $Key ?>" />
<input type="hidden" name="auth" value="<?= $LoggedUser['AuthKey'] ?>" />
<input type="hidden" name="action" value="take_warn" />
<table class="Form-rowList" variant="header">
<tr class="Form-rowHeader">
<td>
<?= t('server.forums.warn') ?> <a href="user.php?id=<?= $UserID ?>"><?= $UserInfo['Username'] ?></a>
</td>
</tr>
<tr class="Form-row">
<td class="Form-label"><?= t('server.common.reason') ?>:</td>
<td class="Form-inputs">
<input class="Input" type="text" name="reason" size="60" />
</td>
</tr>
<tr class="Form-row">
<td class="Form-label"><?= t('server.common.time_length') ?>:</td>
<td class="Form-inputs">
<select class="Input" name="length">
<option class="Select-option" value="verbal"><?= t('server.forums.verbal') ?></option>
<option class="Select-option" value="1"><?= t('server.user.1_week') ?></option>
<option class="Select-option" value="2"><?= t('server.user.2_week') ?></option>
<option class="Select-option" value="4"><?= t('server.user.4_week') ?></option>
<? if (check_perms('users_mod')) { ?>
<option class="Select-option" value="8"><?= t('server.user.8_week') ?></option>
<? } ?>
</select>
</td>
</tr>
<tr class="Form-row">
<td class="Form-label"><?= t('server.user.pm') ?></td>
<td class="Form-items">
<? new TEXTAREA_PREVIEW("privatemessage", "message") ?>
</td>
</tr>
<tr class="Form-row">
<td class="Form-label"><?= t('server.forums.edit_post') ?>:</td>
<td class="Form-items">
<? new TEXTAREA_PREVIEW("body", "body", $PostBody) ?>
</td>
</tr>
<tr class="Form-row">
<td>
<button class="Button" type="submit" id="submit_button" value="Warn user" tabindex="1"><?= t('server.common.submit') ?></button>
</td>
</tr>
</table>
</form>
</div>
<? View::show_footer(); ?>
+3 -2
View File
@@ -96,7 +96,8 @@ list($Results) = $DB->next_record();
&nbsp;<?= t('server.friends.down') ?>: <strong><?= Format::get_size($Downloaded) ?></strong>
<? } ?>
</span>
<span style="float: right">
&nbsp;
<span>
<? if (check_paranoia('lastseen', $Paranoia, $Class, $FriendID)) { ?>
<span><?= time_diff($LastAccess) ?></span>
<? } ?>
@@ -112,7 +113,7 @@ list($Results) = $DB->next_record();
<? } ?>
<td valign="top">
<input type="hidden" name="friendid" value="<?= $FriendID ?>" />
<? new TEXTAREA_PREVIEW('comment', "comment$FriendID", '', 60, 8, true, true, false); ?>
<? new TEXTAREA_PREVIEW('comment', "comment$FriendID", display_str($Comment), 60, 8, true, true, false); ?>
</td>
</tr>
+12 -20
View File
@@ -309,7 +309,12 @@ View::show_header(t('server.index.index'), 'comments', 'PageHome');
<!-- Stats -->
<div class="SidebarItemStats SidebarItem Box">
<div class="SidebarItem-header Box-header">
<?= t('server.index.stats') ?>
<div class="SidebarItem-headerTitle">
<?= t('server.index.stats') ?>
</div>
<div class="SidebarItem-headerActions">
</div>
</div>
<ul class="SidebarItem-body Box-body SidebarList">
<? if (CONFIG['USER_LIMIT'] > 0) { ?>
@@ -328,7 +333,8 @@ View::show_header(t('server.index.index'), 'comments', 'PageHome');
?>
<li class="SidebarList-item">
<?= t('server.index.enable_users') ?>:
<?= number_format($UserCount) ?>
<?= number_format($UserCount) ?>&nbsp;
<a href="stats.php?action=users" class="brackets"><?= t('server.index.details') ?></a>
</li>
<?
if (($UserStats = $Cache->get_value('stats_users')) === false) {
@@ -388,7 +394,8 @@ View::show_header(t('server.index.index'), 'comments', 'PageHome');
$Cache->cache_value('stats_artist_count', $ArtistCount, 604860); // staggered 1 week cache
}
?>
<li class="SidebarList-item"><?= t('server.common.torrents') ?>: <?= number_format($TorrentCount) ?></li>
<li class="SidebarList-item"><?= t('server.common.torrents') ?>: <?= number_format($TorrentCount) ?>&nbsp;<a href="stats.php?action=torrents" class="brackets"><?= t('server.index.details') ?></a>
</li>
<li class="SidebarList-item"><?= t('server.index.moviegroups') ?>: <?= number_format($MoviesCount) ?></li>
<li class="SidebarList-item"><?= t('server.common.artist') ?>: <?= number_format($ArtistCount) ?></li>
<?
@@ -457,7 +464,7 @@ View::show_header(t('server.index.index'), 'comments', 'PageHome');
$PeerCount = $SeederCount = $LeecherCount = $Ratio = 'Server busy';
}
?>
<li class="SidebarList-item"><?= t('server.index.peers') ?>: <?= $PeerCount ?></li>
<li class="SidebarList-item"><?= t('server.index.peers') ?>: <?= $PeerCount ?>&nbsp;<a href="stats.php?action=peers" class="brackets"><?= t('server.index.details') ?></a></li>
<li class="SidebarList-item"><?= t('server.common.seeders') ?>: <?= $SeederCount ?></li>
<li class="SidebarList-item"><?= t('server.common.leechers') ?>: <?= $LeecherCount ?></li>
<li><?= t('server.index.s_l_ratio') ?>: <?= $Ratio ?></li>
@@ -572,26 +579,11 @@ View::show_header(t('server.index.index'), 'comments', 'PageHome');
</div>
</div>
<? } ?>
<? if (CONFIG['IS_DEV']) { ?>
<div class="Home-stats Group">
<div class="Group-header">
<div class="Group-headerTitle">
<a href="/stats.php">
<?= t('server.index.stats') ?>
</a>
</div>
</div>
<div class="Group-body" id="root-stats"></div>
</div>
<? } ?>
</div>
</div>
<?
if ($CONFIG['IS_DEV']) {
Stats::torrentByDay();
}
View::show_footer(array('disclaimer' => true), 'home.jsx');
View::show_footer(array('disclaimer' => true));
function contest() {
global $DB, $Cache, $LoggedUser;
+1 -3
View File
@@ -106,9 +106,7 @@ if (!empty($_REQUEST['confirm'])) {
if ($UserCount) {
$Err = t('server.register.someone_registered_with_that_email');
$_REQUEST['email'] = '';
}
if ($_REQUEST['invite']) {
} else if ($_REQUEST['invite']) {
$DB->query("
SELECT InviterID, Email, Reason, InviteID
FROM invites
+1 -3
View File
@@ -414,9 +414,7 @@ View::show_header(($NewRequest ? t('server.requests.new_create') : t('server.req
<tr class="Form-row">
<td class="Form-label"><?= t('server.requests.description') ?>:</td>
<td class="Form-items">
<div class="Form-inputs">
<textarea class="Input" name="description" cols="70" rows="7"><?= (!empty($Request['Description']) ? $Request['Description'] : '') ?></textarea>
</div>
<? new TEXTAREA_PREVIEW("description", "description", (!empty($Request['Description']) ? display_str($Request['Description']) : '')) ?>
<div>
<?= t('server.requests.description_note') ?>
</div>
+20
View File
@@ -0,0 +1,20 @@
<?
View::show_header(t('server.rules.blacklist_title'), '', 'PageRuleBlacklist');
?>
<div class="LayoutBody">
<? include('jump.php'); ?>
<div class="Post">
<div class="HtmlText Post-body" id="Rules-Blacklist-mdx" mdx></div>
</div>
</div>
<script>
document.addEventListener('DOMContentLoaded', () => {
lang.render('Rules/Blacklist.mdx')
})
</script>
<?
View::show_footer();
?>
+20
View File
@@ -0,0 +1,20 @@
<?
View::show_header(t('server.rules.bonus_title'), '', 'PageRuleBonus');
?>
<div class="LayoutBody">
<? include('jump.php'); ?>
<div class="Post">
<div class="HtmlText Post-body" id="Rules-Bonus-mdx" mdx></div>
</div>
</div>
<script>
document.addEventListener('DOMContentLoaded', () => {
lang.render('Rules/Bonus.mdx')
})
</script>
<?
View::show_footer();
?>
+10
View File
@@ -26,6 +26,16 @@ if (!isset($_GET['p'])) {
case 'tag':
require(CONFIG['SERVER_ROOT'] . '/sections/rules/tag.php');
break;
case 'bonus':
require(CONFIG['SERVER_ROOT'] . '/sections/rules/bonus.php');
break;
case 'invite':
require(CONFIG['SERVER_ROOT'] . '/sections/rules/invite.php');
break;
case 'blacklist':
require(CONFIG['SERVER_ROOT'] . '/sections/rules/blacklist.php');
break;
default:
error(0);
}
+20
View File
@@ -0,0 +1,20 @@
<?
View::show_header(t('server.rules.invite_title'), '', 'PageRuleInvite');
?>
<div class="LayoutBody">
<? include('jump.php'); ?>
<div class="Post">
<div class="HtmlText Post-body" id="Rules-Invite-mdx" mdx></div>
</div>
</div>
<script>
document.addEventListener('DOMContentLoaded', () => {
lang.render('Rules/Invite.mdx')
})
</script>
<?
View::show_footer();
?>
+24
View File
@@ -71,6 +71,30 @@
<?= t('server.rules.tags_title_de') ?>
</td>
</tr>
<tr class="Table-row">
<td class="Table-cell">
<a href="rules.php?p=bonus"><?= t('server.rules.bonus_title') ?></a>
</td>
<td class="Table-cell">
<?= t('server.rules.bonus_title_de') ?>
</td>
</tr>
<tr class="Table-row">
<td class="Table-cell">
<a href="rules.php?p=invite"><?= t('server.rules.invite_title') ?></a>
</td>
<td class="Table-cell">
<?= t('server.rules.invite_title_de') ?>
</td>
</tr>
<tr class="Table-row">
<td class="Table-cell">
<a href="rules.php?p=blacklist"><?= t('server.rules.blacklist_title') ?></a>
</td>
<td class="Table-cell">
<?= t('server.rules.blacklist_title_de') ?>
</td>
</tr>
</table>
</div>
</div>
@@ -0,0 +1,37 @@
<?
sleep(10);
$DB->query(
"SELECT IF(remaining=0,'Seeding','Leeching') AS Type, COUNT(uid)
FROM xbt_files_users
WHERE active = 1
GROUP BY Type"
);
$PeerCount = $DB->to_array(0, MYSQLI_NUM, false);
$SeederCount = $PeerCount['Seeding'][1] ?: 0;
$LeecherCount = $PeerCount['Leeching'][1] ?: 0;
Stats::record(Stats::PeerCount, $PeerCount);
Stats::record(Stats::SeederCount, $SeederCount);
Stats::record(Stats::LeecherCount, $LeecherCount);
$DB->query(
"SELECT COUNT(ID)
FROM users_main
WHERE Enabled = '1'
AND LastAccess > '" . time_minus(3600 * 24) . "'"
);
list($DayActive) = $DB->next_record();
Stats::record(Stats::DayActive, $DayActive);
$DB->query(
"SELECT COUNT(ID)
FROM users_main
WHERE (
SELECT COUNT(uid)
FROM xbt_files_users
WHERE uid = users_main.ID
) > 0"
);
list($SeedingUser) = $DB->next_record();
Stats::record(Stats::SeedingUser, $SeedingUser);
-59
View File
@@ -1,59 +0,0 @@
<? View::show_header(t('server.stats.stats'), '', 'PageStatsHome'); ?>
<?
$Cache->delete_value('stats_torrent_by_month');
$Data = $Cache->get_value('stats_torrent_by_month');
if (!$Data) {
$DB->query(
"
SELECT DATE_FORMAT(Time,'%b %y') AS Date, COUNT(ID) AS Count
FROM log
WHERE Message LIKE 'Torrent % was uploaded by %'
GROUP BY Date
ORDER BY Time DESC
LIMIT 1, 12
"
);
$TimelineIn = array_reverse($DB->to_array());
// $DB->query(
// "
// SELECT DATE_FORMAT(Time,'%b %y') AS Date, COUNT(ID) As Count
// FROM log
// WHERE Message LIKE 'Torrent % was deleted %'
// GROUP BY Date
// ORDER BY Time DESC
// LIMIT 1, 12
// "
// );
// $TimelineOut = array_reverse($DB->to_array());
// $DB->query(
// "
// SELECT DATE_FORMAT(Time,'%b %y') AS Date, COUNT(ID) As Count
// FROM torrents
// GROUP BY Date
// ORDER BY Time DESC
// LIMIT 1, 12
// "
// );
// $TimelineNet = array_reverse($DB->to_array());
$Data = [];
foreach ($TimelineIn as $Index => $Value) {
$Data['ChartTorrentByMonth'] = [
'date' => $TimelineIn[$Index]['Date'],
'in' => (int) $TimelineIn[$Index]['Count'] ?: 0,
// 'out' => (int) $TimelineOut[$Index]['Count'] ?: 0,
// 'net' => (int) $TimelineNet[$Index]['Count'] ?: 0,
];
}
$Cache->cache_value('stats_torrent_by_month', $Data, mktime(0, 0, 0, date('n') + 1, 2));
}
?>
<div id="root"></div>
<?
if (CONFIG['IS_DEV']) {
Stats::torrentByMonth();
Stats::torrentByYear();
}
View::show_footer([], 'stats/index');
+4 -1
View File
@@ -7,7 +7,10 @@ switch ($_REQUEST['action']) {
case 'torrents':
include(CONFIG['SERVER_ROOT'] . '/sections/stats/torrents.php');
break;
case 'peers':
include(CONFIG['SERVER_ROOT'] . '/sections/stats/peers.php');
break;
default:
include(CONFIG['SERVER_ROOT'] . '/sections/stats/browse.php');
include(CONFIG['SERVER_ROOT'] . '/sections/stats/torrents.php');
break;
}
+25
View File
@@ -0,0 +1,25 @@
<?
View::show_header(t('server.stats.stats'), '', 'PageStatPeer');
?>
<div class="LayoutBody">
<div class="BodyHeader">
<div class="BodyHeader-nav">
<?= t('server.stats.stats') ?>
</div>
<div class="BodyHeader-subNav">
<?= 'Peers' ?>
</div>
<div class="BodyNavLinks">
<a href="stats.php?action=users" class="brackets"><?= t('server.top10.user') ?></a>
<a href="stats.php?action=torrents" class="brackets"><?= t('server.top10.torrents') ?></a>
</div>
</div>
<div class="ChartRoot">
<div id="chart_peers_count"></div>
<div id="chart_seeding_user"></div>
</div>
</div>
<?
Stats::peersCount();
Stats::seedingUser();
View::show_footer([], 'stats/index');
+23 -90
View File
@@ -1,94 +1,27 @@
<?
if (!list($Labels, $InFlow, $OutFlow, $NetFlow, $Max) = $Cache->get_value('torrents_timeline')) {
$DB->query("
SELECT DATE_FORMAT(Time,'%b \'%y') AS Month, COUNT(ID)
FROM log
WHERE Message LIKE 'Torrent % was uploaded by %'
GROUP BY Month
ORDER BY Time DESC
LIMIT 1, 12");
$TimelineIn = array_reverse($DB->to_array());
$DB->query("
SELECT DATE_FORMAT(Time,'%b \'%y') AS Month, COUNT(ID)
FROM log
WHERE Message LIKE 'Torrent % was deleted %'
GROUP BY Month
ORDER BY Time DESC
LIMIT 1, 12");
$TimelineOut = array_reverse($DB->to_array());
$DB->query("
SELECT DATE_FORMAT(Time,'%b \'%y') AS Month, COUNT(ID)
FROM torrents
GROUP BY Month
ORDER BY Time DESC
LIMIT 1, 12");
$TimelineNet = array_reverse($DB->to_array());
foreach ($TimelineIn as $Month) {
list($Label, $Amount) = $Month;
if ($Amount > $Max) {
$Max = $Amount;
}
}
foreach ($TimelineOut as $Month) {
list($Label, $Amount) = $Month;
if ($Amount > $Max) {
$Max = $Amount;
}
}
foreach ($TimelineNet as $Month) {
list($Label, $Amount) = $Month;
if ($Amount > $Max) {
$Max = $Amount;
}
}
foreach ($TimelineIn as $Month) {
list($Label, $Amount) = $Month;
$Labels[] = $Label;
$InFlow[] = number_format(($Amount / $Max) * 100, 4);
}
foreach ($TimelineOut as $Month) {
list($Label, $Amount) = $Month;
$OutFlow[] = number_format(($Amount / $Max) * 100, 4);
}
foreach ($TimelineNet as $Month) {
list($Label, $Amount) = $Month;
$NetFlow[] = number_format(($Amount / $Max) * 100, 4);
}
$Cache->cache_value('torrents_timeline', array($Labels, $InFlow, $OutFlow, $NetFlow, $Max), mktime(0, 0, 0, date('n') + 1, 2)); //Tested: fine for dec -> jan
}
include_once(CONFIG['SERVER_ROOT'] . '/classes/charts.class.php');
$DB->query("
SELECT tg.CategoryID, COUNT(t.ID) AS Torrents
FROM torrents AS t
JOIN torrents_group AS tg ON tg.ID = t.GroupID
GROUP BY tg.CategoryID
ORDER BY Torrents DESC");
$Groups = $DB->to_array();
$Pie = new PIE_CHART(750, 400, array('Other' => 1, 'Percentage' => 1));
foreach ($Groups as $Group) {
list($CategoryID, $Torrents) = $Group;
$CategoryName = $Categories[$CategoryID - 1];
$Pie->add($CategoryName, $Torrents);
}
$Pie->transparent();
$Pie->color('FF33CC');
$Pie->generate();
$Categories = $Pie->url();
View::show_header(t('server.stats.detailed_torrent_statistics'), '', 'PageStatTorrent');
View::show_header(t('server.stats.stats'), '', 'PageStatTorrent');
?>
<div class="BodyNavLinks">
<a href="stats.php?action=users" class="brackets"><?= t('server.stats.user_stats') ?></a>
<div class="LayoutBody">
<div class="BodyHeader">
<div class="BodyHeader-nav">
<?= t('server.stats.stats') ?>
</div>
<div class="BodyHeader-subNav">
<?= t('server.top10.torrents') ?>
</div>
<div class="BodyNavLinks">
<a href="stats.php?action=users" class="brackets"><?= t('server.top10.user') ?></a>
<a href="stats.php?action=peers" class="brackets">Peers</a>
</div>
</div>
<div class="ChartRoot">
<div id="chart_torrent_by_day"></div>
<div id="chart_torrent_by_month"></div>
<div class="ChartPieContainer" id="chart_torrent_specific"></div>
</div>
</div>
<h1 id="Torrent_Upload"><a href="#Torrent_Upload"><?= t('server.stats.uploads_by_month') ?></a></h1>
<div class="BoxBody center">
<img src="https://chart.googleapis.com/chart?cht=lc&amp;chs=880x160&amp;chco=000D99,99000D,00990D&amp;chg=0,-1,1,1&amp;chxt=y,x&amp;chxs=0,h&amp;chxl=1:|<?= implode('|', $Labels) ?>&amp;chxr=0,0,<?= $Max ?>&amp;chd=t:<?= implode(',', $InFlow) ?>|<?= implode(',', $OutFlow) ?>|<?= implode(',', $NetFlow) ?>&amp;chls=2,4,0&amp;chdl=Uploads|Deletions|Remaining&amp;chf=bg,s,FFFFFF00" alt="<?= t('server.stats.torrent_flow_chart') ?>" />
</div>
<!-- <h1 id="Torrent_Category"><a href="#Torrent_Category"><?= t('server.stats.torrents_by_category') ?></a></h1>这是按大类分的,就是音乐种、电子书、软件这样的分类,对我们来说这个统计无用。
<div class="BoxBody center">
<img src="<?= $Categories ?>" alt="" />
</div> -->
<?
View::show_footer();
Stats::torrentByMonth();
Stats::torrentByDay();
Stats::torrentBySpecific();
View::show_footer([], 'stats/index');
+48 -146
View File
@@ -1,6 +1,5 @@
<?
if (!list($Countries, $Rank, $CountryUsers, $CountryMax, $CountryMin, $LogIncrements) = $Cache->get_value('geodistribution')) {
include_once(CONFIG['SERVER_ROOT'] . '/classes/charts.class.php');
$DB->query('
SELECT Code, Users
FROM users_geodistribution');
@@ -38,152 +37,55 @@ if (!list($Countries, $Rank, $CountryUsers, $CountryMax, $CountryMin, $LogIncrem
$Cache->cache_value('geodistribution', array($Countries, $Rank, $CountryUsers, $CountryMax, $CountryMin, $LogIncrements), 0);
}
if (!$ClassDistribution = $Cache->get_value('class_distribution')) {
include_once(CONFIG['SERVER_ROOT'] . '/classes/charts.class.php');
$DB->query("
SELECT p.Name, COUNT(m.ID) AS Users
FROM users_main AS m
JOIN permissions AS p ON m.PermissionID = p.ID
WHERE m.Enabled = '1'
GROUP BY p.Name
ORDER BY Users DESC");
$ClassSizes = $DB->to_array();
$Pie = new PIE_CHART(750, 400, array('Other' => 1, 'Percentage' => 1));
foreach ($ClassSizes as $ClassSize) {
list($Label, $Users) = $ClassSize;
$Pie->add($Label, $Users);
}
$Pie->transparent();
$Pie->color('FF33CC');
$Pie->generate();
$ClassDistribution = $Pie->url();
$Cache->cache_value('class_distribution', $ClassDistribution, 3600 * 24 * 14);
}
if (!$PlatformDistribution = $Cache->get_value('platform_distribution')) {
include_once(CONFIG['SERVER_ROOT'] . '/classes/charts.class.php');
$DB->query("
SELECT OperatingSystem, COUNT(UserID) AS Users
FROM users_sessions
GROUP BY OperatingSystem
ORDER BY Users DESC");
$Platforms = $DB->to_array();
$Pie = new PIE_CHART(750, 400, array('Other' => 1, 'Percentage' => 1));
foreach ($Platforms as $Platform) {
list($Label, $Users) = $Platform;
$Pie->add($Label, $Users);
}
$Pie->transparent();
$Pie->color('8A00B8');
$Pie->generate();
$PlatformDistribution = $Pie->url();
$Cache->cache_value('platform_distribution', $PlatformDistribution, 3600 * 24 * 14);
}
if (!$BrowserDistribution = $Cache->get_value('browser_distribution')) {
include_once(CONFIG['SERVER_ROOT'] . '/classes/charts.class.php');
$DB->query("
SELECT Browser, COUNT(UserID) AS Users
FROM users_sessions
GROUP BY Browser
ORDER BY Users DESC");
$Browsers = $DB->to_array();
$Pie = new PIE_CHART(750, 400, array('Other' => 1, 'Percentage' => 1));
foreach ($Browsers as $Browser) {
list($Label, $Users) = $Browser;
$Pie->add($Label, $Users);
}
$Pie->transparent();
$Pie->color('008AB8');
$Pie->generate();
$BrowserDistribution = $Pie->url();
$Cache->cache_value('browser_distribution', $BrowserDistribution, 3600 * 24 * 14);
}
//Timeline generation
if (!list($Labels, $InFlow, $OutFlow, $Max) = $Cache->get_value('users_timeline')) {
$DB->query("
SELECT DATE_FORMAT(JoinDate,'%b \\'%y') AS Month, COUNT(UserID)
FROM users_info
GROUP BY Month
ORDER BY JoinDate DESC
LIMIT 1, 12");
$TimelineIn = array_reverse($DB->to_array());
$DB->query("
SELECT DATE_FORMAT(BanDate,'%b \\'%y') AS Month, COUNT(UserID)
FROM users_info
GROUP BY Month
ORDER BY BanDate DESC
LIMIT 1, 12");
$TimelineOut = array_reverse($DB->to_array());
foreach ($TimelineIn as $Month) {
list($Label, $Amount) = $Month;
if ($Amount > $Max) {
$Max = $Amount;
}
}
foreach ($TimelineOut as $Month) {
list($Label, $Amount) = $Month;
if ($Amount > $Max) {
$Max = $Amount;
}
}
$Labels = array();
foreach ($TimelineIn as $Month) {
list($Label, $Amount) = $Month;
$Labels[] = $Label;
$InFlow[] = number_format(($Amount / $Max) * 100, 4);
}
foreach ($TimelineOut as $Month) {
list($Label, $Amount) = $Month;
$OutFlow[] = number_format(($Amount / $Max) * 100, 4);
}
$Cache->cache_value('users_timeline', array($Labels, $InFlow, $OutFlow, $Max), mktime(0, 0, 0, date('n') + 1, 2)); //Tested: fine for Dec -> Jan
}
//End timeline generation
View::show_header(t('server.stats.detailed_user_statistics'), '', 'PageStatUser');
View::show_header(t('server.stats.stats'), '', 'PageStatUser');
?>
<div class="BodyNavLinks">
<a href="stats.php?action=torrents" class="brackets"><?= t('server.stats.torrent_stats') ?></a>
<div class="LayoutBody">
<div class="BodyHeader">
<div class="BodyHeader-nav">
<?= t('server.stats.stats') ?>
</div>
<div class="BodyHeader-subNav">
<?= t('server.top10.users') ?>
</div>
<div class="BodyNavLinks">
<a href="stats.php?action=torrents" class="brackets"><?= t('server.top10.torrents') ?></a>
<a href="stats.php?action=peers" class="brackets">Peers</a>
</div>
</div>
<div class="ChartRoot">
<div id="chart_user_timeline"> </div>
<div id="chart_user_day_active"> </div>
<div id="chart_user_home" class="ChartPieContainer"></div>
</div>
<? if (false) { ?>
<div class="Group">
<div class="Group-header">
<div class="Group-headerTitle">
<div id="Geo_Dist_Map"><a href="#Geo_Dist_Map"><?= t('server.stats.geographical_distribution_map') ?></a></div>
</div>
</div>
<div class="Group-body">
<div class=" center">
<img src="https://chart.googleapis.com/chart?cht=map:fixed=-55,-180,73,180&amp;chs=440x220&amp;chd=t:<?= implode(',', $Rank) ?>&amp;chco=FFFFFF,EDEDED,1F0066&amp;chld=<?= implode('|', $Countries) ?>&amp;chf=bg,s,CCD6FF" alt="<?= t('server.stats.geographical_distribution_map') ?>" />
<img src="https://chart.googleapis.com/chart?cht=map:fixed=37,-26,65,67&amp;chs=440x220&amp;chs=440x220&amp;chd=t:<?= implode(',', $Rank) ?>&amp;chco=FFFFFF,EDEDED,1F0066&amp;chld=<?= implode('|', $Countries) ?>&amp;chf=bg,s,CCD6FF" alt="<?= t('server.stats.geographical_distribution_map_europe') ?>" />
<br />
<img src="https://chart.googleapis.com/chart?cht=map:fixed=-46,-132,24,21.5&amp;chs=440x220&amp;chd=t:<?= implode(',', $Rank) ?>&amp;chco=FFFFFF,EDEDED,1F0066&amp;chld=<?= implode('|', $Countries) ?>&amp;chf=bg,s,CCD6FF" alt="<?= t('server.stats.geographical_distribution_map_south_america') ?>" />
<img src="https://chart.googleapis.com/chart?cht=map:fixed=-11,22,50,160&amp;chs=440x220&amp;chd=t:<?= implode(',', $Rank) ?>&amp;chco=FFFFFF,EDEDED,1F0066&amp;chld=<?= implode('|', $Countries) ?>&amp;chf=bg,s,CCD6FF" alt="<?= t('server.stats.geographical_distribution_map_asia') ?>" />
<br />
<img src="https://chart.googleapis.com/chart?cht=map:fixed=-36,-57,37,100&amp;chs=440x220&amp;chd=t:<?= implode(',', $Rank) ?>&amp;chco=FFFFFF,EDEDED,1F0066&amp;chld=<?= implode('|', $Countries) ?>&amp;chf=bg,s,CCD6FF" alt="<?= t('server.stats.geographical_distribution_map_africa') ?>" />
<img src="https://chart.googleapis.com/chart?cht=map:fixed=14.8,15,45,86&amp;chs=440x220&amp;chd=t:<?= implode(',', $Rank) ?>&amp;chco=FFFFFF,EDEDED,1F0066&amp;chld=<?= implode('|', $Countries) ?>&amp;chf=bg,s,CCD6FF" alt="<?= t('server.stats.geographical_distribution_map_middle_east') ?>" />
<br />
<img src="https://chart.googleapis.com/chart?chxt=y,x&amp;chg=0,-1,1,1&amp;chxs=0,h&amp;cht=bvs&amp;chco=76A4FB&amp;chs=880x300&amp;chd=t:<?= implode(',', array_slice($CountryUsers, 0, 31)) ?>&amp;chxl=1:|<?= implode('|', array_slice($Countries, 0, 31)) ?>|0:|<?= implode('|', $LogIncrements) ?>&amp;chf=bg,s,FFFFFF00" alt="<?= t('server.stats.number_of_users_by_country') ?>" />
</div>
</div>
</div>
<? } ?>
</div>
<h1 id="User_Flow"><a href="#User_Flow"><?= t('server.stats.user_flow') ?></a></h1>
<div class="BoxBody center">
<img src="https://chart.googleapis.com/chart?cht=lc&amp;chs=880x160&amp;chco=000D99,99000D&amp;chg=0,-1,1,1&amp;chxt=y,x&amp;chxs=0,h&amp;chxl=1:|<?= implode('|', $Labels) ?>&amp;chxr=0,0,<?= $Max ?>&amp;chd=t:<?= implode(',', $InFlow) ?>|<?= implode(',', $OutFlow) ?>&amp;chls=2,4,0&amp;chdl=New+Registrations|Disabled+Users&amp;chf=bg,s,FFFFFF00" alt="User Flow Chart" />
</div>
<br />
<h1 id="User_Classes"><a href="#User_Classes"><?= t('server.stats.user_classes') ?></a></h1>
<div class="BoxBody center">
<img src="<?= $ClassDistribution ?>" alt="<?= t('server.stats.user_class_distribution') ?>" />
</div>
<br />
<h1 id="User_Platforms"><a href="#User_Platforms"><?= t('server.stats.user_platforms') ?></a></h1>
<div class="BoxBody center">
<img src="<?= $PlatformDistribution ?>" alt="<?= t('server.stats.user_platform_distribution') ?>" />
</div>
<br />
<h1 id="User_Browsers"><a href="#User_Browsers"><?= t('server.stats.user_browsers') ?></a></h1>
<div class="BoxBody center">
<img src="<?= $BrowserDistribution ?>" alt="<?= t('server.stats.user_browsers_market_share') ?>" />
</div>
<!-- <br />根本不能确实显示,而且也涉及到用户隐私,所以注释掉。
<h1 id="Geo_Dist_Map"><a href="#Geo_Dist_Map"><?= t('server.stats.geographical_distribution_map') ?></a></h1>
<div class="box center">
<img src="https://chart.googleapis.com/chart?cht=map:fixed=-55,-180,73,180&amp;chs=440x220&amp;chd=t:<?= implode(',', $Rank) ?>&amp;chco=FFFFFF,EDEDED,1F0066&amp;chld=<?= implode('|', $Countries) ?>&amp;chf=bg,s,CCD6FF" alt="<?= t('server.stats.geographical_distribution_map') ?>" />
<img src="https://chart.googleapis.com/chart?cht=map:fixed=37,-26,65,67&amp;chs=440x220&amp;chs=440x220&amp;chd=t:<?= implode(',', $Rank) ?>&amp;chco=FFFFFF,EDEDED,1F0066&amp;chld=<?= implode('|', $Countries) ?>&amp;chf=bg,s,CCD6FF" alt="<?= t('server.stats.geographical_distribution_map_europe') ?>" />
<br />
<img src="https://chart.googleapis.com/chart?cht=map:fixed=-46,-132,24,21.5&amp;chs=440x220&amp;chd=t:<?= implode(',', $Rank) ?>&amp;chco=FFFFFF,EDEDED,1F0066&amp;chld=<?= implode('|', $Countries) ?>&amp;chf=bg,s,CCD6FF" alt="<?= t('server.stats.geographical_distribution_map_south_america') ?>" />
<img src="https://chart.googleapis.com/chart?cht=map:fixed=-11,22,50,160&amp;chs=440x220&amp;chd=t:<?= implode(',', $Rank) ?>&amp;chco=FFFFFF,EDEDED,1F0066&amp;chld=<?= implode('|', $Countries) ?>&amp;chf=bg,s,CCD6FF" alt="<?= t('server.stats.geographical_distribution_map_asia') ?>" />
<br />
<img src="https://chart.googleapis.com/chart?cht=map:fixed=-36,-57,37,100&amp;chs=440x220&amp;chd=t:<?= implode(',', $Rank) ?>&amp;chco=FFFFFF,EDEDED,1F0066&amp;chld=<?= implode('|', $Countries) ?>&amp;chf=bg,s,CCD6FF" alt="<?= t('server.stats.geographical_distribution_map_africa') ?>" />
<img src="https://chart.googleapis.com/chart?cht=map:fixed=14.8,15,45,86&amp;chs=440x220&amp;chd=t:<?= implode(',', $Rank) ?>&amp;chco=FFFFFF,EDEDED,1F0066&amp;chld=<?= implode('|', $Countries) ?>&amp;chf=bg,s,CCD6FF" alt="<?= t('server.stats.geographical_distribution_map_middle_east') ?>" />
<br />
<img src="https://chart.googleapis.com/chart?chxt=y,x&amp;chg=0,-1,1,1&amp;chxs=0,h&amp;cht=bvs&amp;chco=76A4FB&amp;chs=880x300&amp;chd=t:<?= implode(',', array_slice($CountryUsers, 0, 31)) ?>&amp;chxl=1:|<?= implode('|', array_slice($Countries, 0, 31)) ?>|0:|<?= implode('|', $LogIncrements) ?>&amp;chf=bg,s,FFFFFF00" alt="<?= t('server.stats.number_of_users_by_country') ?>" />
</div> -->
<?
View::show_footer();
Stats::userTimeLine();
Stats::uv();
Stats::userClasses();
Stats::userPlatforms();
Stats::userBrowsers();
View::show_footer([], 'stats/index');
+6 -50
View File
@@ -3,53 +3,6 @@ if (!check_perms('site_view_flow')) {
error(403);
}
//Timeline generation
if (!isset($_GET['page'])) {
if (!list($Labels, $InFlow, $OutFlow, $Max) = $Cache->get_value('users_timeline')) {
$Labels = [];
$InFlow = [];
$OutFlow = [];
$DB->query("
SELECT DATE_FORMAT(JoinDate, '%b \'%y') AS Month, COUNT(UserID)
FROM users_info
GROUP BY Month
ORDER BY JoinDate DESC
LIMIT 1, 12");
$TimelineIn = array_reverse($DB->to_array());
$DB->query("
SELECT DATE_FORMAT(BanDate, '%b \'%y') AS Month, COUNT(UserID)
FROM users_info
GROUP BY Month
ORDER BY BanDate DESC
LIMIT 1, 12");
$TimelineOut = array_reverse($DB->to_array());
foreach ($TimelineIn as $Month) {
list($Label, $Amount) = $Month;
if ($Amount > $Max) {
$Max = $Amount;
}
}
foreach ($TimelineOut as $Month) {
list($Label, $Amount) = $Month;
if ($Amount > $Max) {
$Max = $Amount;
}
}
foreach ($TimelineIn as $Month) {
list($Label, $Amount) = $Month;
$Labels[] = $Label;
$InFlow[] = number_format(($Amount / $Max) * 100, 4);
}
foreach ($TimelineOut as $Month) {
list($Label, $Amount) = $Month;
$OutFlow[] = number_format(($Amount / $Max) * 100, 4);
}
$Cache->cache_value('users_timeline', array($Labels, $InFlow, $OutFlow, $Max), mktime(0, 0, 0, date('n') + 1, 2));
}
}
//End timeline generation
define('DAYS_PER_PAGE', 100);
list($Page, $Limit) = Format::page_limit(DAYS_PER_PAGE);
@@ -123,8 +76,9 @@ $DB->set_query_id($RS);
<h2 class="BodyHeader-nav"><?= t('server.tools.user_flow') ?></h2>
</div>
<? if (!isset($_GET['page'])) { ?>
<div class="BoxBody">
<img src="https://chart.googleapis.com/chart?cht=lc&amp;chs=820x160&amp;chco=000D99,99000D&amp;chg=0,-1,1,1&amp;chxt=y,x&amp;chxs=0,h&amp;chxl=1:|<?= implode('|', $Labels) ?>&amp;chxr=0,0,<?= $Max ?>&amp;chd=t:<?= implode(',', $InFlow) ?>|<?= implode(',', $OutFlow) ?>&amp;chls=2,4,0&amp;chdl=New+Registrations|Disabled+Users&amp;chf=bg,s,FFFFFF00" alt="<?= t('server.tools.user_flow_vs_time') ?>" />
<div class="ChartRoot">
<div id="chart_user_timeline">
</div>
</div>
<? } ?>
<? View::pages($Pages) ?>
@@ -156,4 +110,6 @@ $DB->set_query_id($RS);
</table>
<? View::pages($Pages) ?>
</div>
<? View::show_footer(); ?>
<?
Stats::userTimeLine();
View::show_footer([], 'stats/index'); ?>
+1 -3
View File
@@ -315,9 +315,7 @@ function generate_torrent_table($Caption, $Tag, $Details, $Limit) {
}
}
$tableRender = new UngroupTorrentSimpleListView($TorrentLists);
$tableRender->with_number(true)->render([
'NoActions' => true
]);
$tableRender->with_number(true)->render([]);
?>
</div>
</div>
+57 -19
View File
@@ -22,24 +22,49 @@ View::show_header(t('server.top10.top_10_users'), '', 'PageTop10User');
// defaults to 10 (duh)
$Limit = isset($_GET['limit']) ? intval($_GET['limit']) : 10;
$Limit = in_array($Limit, array(10, 100, 250)) ? $Limit : 10;
$BaseQuery = "
SELECT
u.ID,
ui.JoinDate,
u.Uploaded,
u.Downloaded,
COUNT(t.ID) AS NumUploads,
u.Paranoia,
u.BonusPoints
FROM users_main AS u
JOIN users_info AS ui ON ui.UserID = u.ID
LEFT JOIN torrents AS t ON t.UserID=u.ID
WHERE u.Enabled='1'
And Uploaded>" . CONFIG['STARTING_UPLOAD'] . "
AND (Uploaded>'" . 10 * 1024 * 1024 * 1024 . "'
or Downloaded>'" . 5 * 1024 * 1024 * 1024 . "')
GROUP BY u.ID";
$BaseQuery =
"SELECT
u.ID,
ui.JoinDate,
u.Uploaded,
u.Downloaded,
COUNT(t.ID) AS NumUploads,
u.Paranoia,
u.BonusPoints,
temp.SeedingSize as SeedingSize
FROM
users_main AS u
JOIN users_info AS ui
ON
ui.UserID = u.ID
LEFT JOIN torrents AS t
ON
t.UserID = u.ID
LEFT JOIN(
SELECT
xfu.uid,
SUM(seedingt.Size) AS SeedingSize
FROM
(
SELECT DISTINCT
uid,
fid
FROM
xbt_files_users
WHERE
active = 1 AND remaining = 0 AND mtime > UNIX_TIMESTAMP(NOW() - INTERVAL 1 HOUR)) AS xfu
LEFT JOIN torrents AS seedingt
ON
seedingt.ID = xfu.fid AND seedingt.UserID = xfu.uid
) AS temp
ON
temp.uid = u.id
WHERE
u.Enabled = '1' And Uploaded>" . CONFIG['STARTING_UPLOAD'] . " AND(
u.Uploaded > '" . 10 * 1024 * 1024 * 1024 . "' OR u.Downloaded > '" . 5 * 1024 * 1024 * 1024 . "'
)
GROUP BY
u.ID";
/* upload count */
if ($Details == 'all' || $Details == 'numul') {
if (!$TopUserNumUploads = $Cache->get_value('topuser_numul')) {
@@ -81,6 +106,15 @@ View::show_header(t('server.top10.top_10_users'), '', 'PageTop10User');
generate_user_table(t('server.user.bonus_points'), 'bonus_points', $TopUserBonusPoints, $Limit);
}
if ($Details == 'all' || $Details == 'seeding_size') {
if (!$TopUserUploads = $Cache->get_value('topuser_seeding_size_' . $Limit)) {
$DB->query("$BaseQuery ORDER BY SeedingSize DESC LIMIT $Limit;");
$TopUserSeedingSize = $DB->to_array();
$Cache->cache_value('topuser_seeding_size_' . $Limit, $TopUserSeedingSize, 3600 * 12);
}
generate_user_table(t('server.user.seeding_size'), 'seeding_size', $TopUserSeedingSize, $Limit);
}
echo '</div>';
View::show_footer();
exit;
@@ -93,7 +127,7 @@ View::show_header(t('server.top10.top_10_users'), '', 'PageTop10User');
// generate a table based on data from most recent query to $DB
function generate_user_table($Caption, $Tag, $Details, $Limit) {
$DefaultItems = ['ul', 'dl', 'numul', 'bonus_points', 'ratio'];
$DefaultItems = ['ul', 'dl', 'numul', 'bonus_points', 'ratio', 'seeding_size'];
$Items = create_items($DefaultItems, $Tag);
$Details = array_slice($Details, 0, $Limit);
?>
@@ -149,6 +183,8 @@ View::show_header(t('server.top10.top_10_users'), '', 'PageTop10User');
<td class="Table-cell Table-cellRight"><?= t('server.user.downloaded') ?></td>
<? } else if ($Item === 'ratio') { ?>
<td class="Table-cell Table-cellRight"><?= t('server.user.ratio') ?></td>
<? } else if ($Item == "seeding_size") { ?>
<td class="Table-cell Table-cellRight"><?= t('server.user.seeding_size') ?></td>
<? } ?>
<? } ?>
<td class="Table-cell Table-cellRight"><?= t('server.top10.joined') ?></td>
@@ -175,6 +211,8 @@ View::show_header(t('server.top10.top_10_users'), '', 'PageTop10User');
<td class="Table-cell Table-cellRight"><?= Format::get_size($Detail['Downloaded'], 0) ?></td>
<? } else if ($Item === 'ratio') { ?>
<td class="Table-cell Table-cellRight"><?= Format::get_ratio_html($Detail['Uploaded'], $Detail['Downloaded']) ?></td>
<? } else if ($Item == 'seeding_size') { ?>
<td class="Table-cell Table-cellRight"><?= Format::get_size($Detail['SeedingSize']) ?></td>
<? } ?>
<? } ?>
<td class="Table-cell Table-cellRight"><?= $IsAnonymous ? '--' : (new DateTime($Detail['JoinDate']))->format('Y'); ?></td>
+2 -1
View File
@@ -120,4 +120,5 @@ View::show_header(t('server.user.manage_notifications'), 'jquery.validate,form_v
</div>
</div>
</div>
<? View::show_footer(); ?>
</div>
<? View::show_footer(); ?>
+1 -1
View File
@@ -2021,7 +2021,7 @@ WHERE xs.uid =" . $UserID . " and xs.tstamp >= unix_timestamp(date_format(now(),
</td>
</tr>
<tr class="Form-row">
<td class="Form-label"><?= t('server.user.user_reason') ?></td>
<td class="Form-label" data-tooltip="<?= t('server.user.user_reason_title') ?>"><?= t('server.user.user_reason') ?></td>
<td class="Form-inputs">
<input class="Input" type="text" name="UserReason" />
</td>
+15
View File
@@ -1,9 +1,24 @@
@import '../../forked/highcharts.css';
.ChartRoot {
display: flex;
flex-direction: column;
gap: var(--global-space-lg);
}
.ChartPieContainer {
display: grid;
grid-template-columns: repeat(3, 1fr);
}
.ChartStat {
height: 300px;
}
.highcharts-legend-item:hover text {
fill: var(--Chart-text-hover);
}
/* global */
.highcharts-root text {
stroke: none;
@@ -56,7 +56,6 @@ Where
margin-left: auto;
display: flex;
gap: var(--global-space-sm);
padding-top: 5px;
}
.TableForumPostHeader-info {
display: flex;
@@ -238,6 +238,7 @@
--Chart-color5: rgb(151, 227, 213);
--Chart-background: none;
--Chart-text: currentColor;
--Chart-text-hover: var(--global-onHover-color);
--Chart-gridLine: #d0d7de;
--Chart-axisText: #57606a;
--Chart-axisLine: #d0d7de;
+6
View File
@@ -106,3 +106,9 @@ form.edit_form -> 编辑主题
align-items: center;
padding-top: 3px;
}
.ForumSpecialHeader {
display: flex;
font-size: var(--global-fontSize-lg);
justify-content: center;
}
@@ -0,0 +1,54 @@
import { merge } from 'lodash'
import { Chart } from '#/js/app/components'
import { optionsSingle } from './options'
export const ChartPeersCount = () => {
const options = merge({}, optionsSingle, {
chart: {
type: 'spline',
},
title: {
text: t('client.stats.peers'),
},
series: [
{
name: t('client.stats.peer_count'),
data: window.DATA['statsPeersCount'].map((v) => ({
date: v.date,
x: new Date(v.date).getTime(),
y: v.peer_count,
})),
dataLabels: { enabled: true },
},
{
name: t('client.stats.seeder_count'),
data: window.DATA['statsPeersCount'].map((v) => ({
date: v.date,
x: new Date(v.date).getTime(),
y: v.seeder_count,
})),
dataLabels: { enabled: true },
},
{
name: t('client.stats.leecher_count'),
data: window.DATA['statsPeersCount'].map((v) => ({
date: v.date,
x: new Date(v.date).getTime(),
y: v.leecher_count,
})),
dataLabels: { enabled: true },
},
],
yAxis: {
allowDecimals: false,
},
xAxis: {
type: 'datetime',
dateTimeLabelFormats: {
day: '%m-%d',
},
tickInterval: 24 * 3600 * 1000,
},
})
return <Chart options={options} containerProps={{ className: 'ChartStat ChartPeersCount' }} />
}
@@ -0,0 +1,38 @@
import { merge } from 'lodash'
import { Chart } from '#/js/app/components'
import { optionsSingle } from './options'
export const ChartSeedingUser = () => {
const options = merge({}, optionsSingle, {
chart: {
type: 'spline',
},
title: {
text: t('client.stats.seeding_user'),
},
series: [
{
data: window.DATA['statsSeedingUser'].map((v) => ({
date: v.date,
x: new Date(v.date).getTime(),
y: v.seeding_user,
})),
dataLabels: { enabled: true },
},
],
yAxis: {
allowDecimals: false,
},
xAxis: {
type: 'datetime',
dateTimeLabelFormats: {
day: '%m-%d',
},
tickInterval: 24 * 3600 * 1000,
},
legend: {
enabled: false,
},
})
return <Chart options={options} containerProps={{ className: 'ChartStat ChartSeedingUser' }} />
}
@@ -0,0 +1,24 @@
import { merge } from 'lodash'
import { Chart } from '#/js/app/components'
import { optionsPie } from './options'
export const ChartTorrentByCodecs = () => {
const options = merge({}, optionsPie, {
chart: {
type: 'pie',
},
title: {
text: t('client.stats.codec_distribution'),
},
series: [
{
name: t('client.stats.torrent_count'),
data: window.DATA['statsTorrentCodecs'].map((v) => ({
y: v.value,
name: v.name,
})),
},
],
})
return <Chart options={options} containerProps={{ className: 'ChartStat ChartTorrentByCodecs' }} />
}
@@ -0,0 +1,24 @@
import { merge } from 'lodash'
import { Chart } from '#/js/app/components'
import { optionsPie } from './options'
export const ChartTorrentByContainers = () => {
const options = merge({}, optionsPie, {
chart: {
type: 'pie',
},
title: {
text: t('client.stats.container_distribution'),
},
series: [
{
name: t('client.stats.torrent_count'),
data: window.DATA['statsTorrentContainers'].map((v) => ({
y: v.value,
name: v.name,
})),
},
],
})
return <Chart options={options} containerProps={{ className: 'ChartStat ChartTorrentByContainers' }} />
}
@@ -12,14 +12,36 @@ export const ChartTorrentByDay = () => {
},
series: [
{
name: t('client.stats.uploads'),
data: window.DATA['statsTorrentByDay'].map((v) => ({
date: v.date,
x: new Date(v.date).getTime(),
y: v.uploads,
y: v.in,
})),
dataLabels: { enabled: true },
},
{
name: t('client.stats.delete'),
data: window.DATA['statsTorrentByDay'].map((v) => ({
date: v.date,
x: new Date(v.date).getTime(),
y: v.out,
})),
dataLabels: { enabled: true },
},
{
name: t('client.stats.upload_alive'),
data: window.DATA['statsTorrentByDay'].map((v) => ({
date: v.date,
x: new Date(v.date).getTime(),
y: v.net,
})),
dataLabels: { enabled: true },
},
],
yAxis: {
allowDecimals: false,
},
xAxis: {
type: 'datetime',
dateTimeLabelFormats: {
@@ -3,6 +3,7 @@ import { Chart } from '#/js/app/components'
import { optionsSingle } from './options'
export const ChartTorrentByMonth = () => {
const chartData = window.DATA['statsTorrentByMonth']
const options = merge({}, optionsSingle, {
chart: {
type: 'spline',
@@ -12,14 +13,36 @@ export const ChartTorrentByMonth = () => {
},
series: [
{
data: window.DATA['statsTorrentByMonth'].map((v, i) => ({
name: t('client.stats.uploads'),
data: chartData.map((v, i) => ({
date: v.date,
x: new Date(v.date).getTime(),
y: v.uploads,
y: v.in,
})),
dataLabels: { enabled: true },
},
{
name: t('client.stats.delete'),
data: chartData.map((v, i) => ({
date: v.date,
x: new Date(v.date).getTime(),
y: v.out,
})),
dataLabels: { enabled: true },
},
{
name: t('client.stats.upload_alive'),
data: chartData.map((v, i) => ({
date: v.date,
x: new Date(v.date).getTime(),
y: v.net,
})),
dataLabels: { enabled: true },
},
],
yAxis: {
allowDecimals: false,
},
xAxis: {
type: 'datetime',
dateTimeLabelFormats: {
@@ -0,0 +1,24 @@
import { merge } from 'lodash'
import { Chart } from '#/js/app/components'
import { optionsPie } from './options'
export const ChartTorrentByProcessings = () => {
const options = merge({}, optionsPie, {
chart: {
type: 'pie',
},
title: {
text: t('client.stats.processing_distribution'),
},
series: [
{
name: t('client.stats.torrent_count'),
data: window.DATA['statsTorrentProcessings'].map((v) => ({
y: v.value,
name: v.name,
})),
},
],
})
return <Chart options={options} containerProps={{ className: 'ChartStat ChartTorrentByProcessings' }} />
}
@@ -0,0 +1,24 @@
import { merge } from 'lodash'
import { Chart } from '#/js/app/components'
import { optionsPie } from './options'
export const ChartTorrentByReleaseTypes = () => {
const options = merge({}, optionsPie, {
chart: {
type: 'pie',
},
title: {
text: t('client.stats.release_distribution'),
},
series: [
{
name: t('client.stats.movie_count'),
data: window.DATA['statsTorrentReleaseTypes'].map((v) => ({
y: v.value,
name: v.name,
})),
},
],
})
return <Chart options={options} containerProps={{ className: 'ChartStat ChartTorrentByReleaseTypes' }} />
}
@@ -0,0 +1,24 @@
import { merge } from 'lodash'
import { Chart } from '#/js/app/components'
import { optionsPie } from './options'
export const ChartTorrentByResolutions = () => {
const options = merge({}, optionsPie, {
chart: {
type: 'pie',
},
title: {
text: t('client.stats.resolution_distribution'),
},
series: [
{
name: t('client.stats.torrent_count'),
data: window.DATA['statsTorrentResolutions'].map((v) => ({
y: v.value,
name: v.name,
})),
},
],
})
return <Chart options={options} containerProps={{ className: 'ChartStat ChartTorrentByResolutions' }} />
}
@@ -0,0 +1,24 @@
import { merge } from 'lodash'
import { Chart } from '#/js/app/components'
import { optionsPie } from './options'
export const ChartTorrentBySources = () => {
const options = merge({}, optionsPie, {
chart: {
type: 'pie',
},
title: {
text: t('client.stats.source_distribution'),
},
series: [
{
name: t('client.stats.torrent_count'),
data: window.DATA['statsTorrentSources'].map((v) => ({
y: v.value,
name: v.name,
})),
},
],
})
return <Chart options={options} containerProps={{ className: 'ChartStat ChartTorrentBySources' }} />
}
@@ -0,0 +1,24 @@
import { merge } from 'lodash'
import { Chart } from '#/js/app/components'
import { optionsPie } from './options'
export const ChartUserBrowsers = () => {
const options = merge({}, optionsPie, {
chart: {
type: 'pie',
},
title: {
text: t('client.stats.user_browser_distribution'),
},
series: [
{
name: t('client.stats.user_count'),
data: window.DATA['statsUserBrowsers'].map((v) => ({
y: v.value,
name: v.name,
})),
},
],
})
return <Chart options={options} containerProps={{ className: 'ChartStat ChartUserBrowsers' }} />
}
@@ -0,0 +1,24 @@
import { merge } from 'lodash'
import { Chart } from '#/js/app/components'
import { optionsPie } from './options'
export const ChartUserClasses = () => {
const options = merge({}, optionsPie, {
chart: {
type: 'pie',
},
title: {
text: t('client.stats.user_class_distribution'),
},
series: [
{
name: t('client.stats.user_count'),
data: window.DATA['statsUserClasses'].map((v) => ({
y: v.value,
name: v.name,
})),
},
],
})
return <Chart options={options} containerProps={{ className: 'ChartStat ChartUserClasses' }} />
}
@@ -0,0 +1,38 @@
import { merge } from 'lodash'
import { Chart } from '#/js/app/components'
import { optionsSingle } from './options'
export const ChartUserDayActive = () => {
const options = merge({}, optionsSingle, {
chart: {
type: 'spline',
},
title: {
text: t('client.stats.uv'),
},
series: [
{
data: window.DATA['statsUserActive'].map((v) => ({
date: v.date,
x: new Date(v.date).getTime(),
y: v.uv,
})),
dataLabels: { enabled: true },
},
],
yAxis: {
allowDecimals: false,
},
xAxis: {
type: 'datetime',
dateTimeLabelFormats: {
day: '%m-%d',
},
tickInterval: 24 * 3600 * 1000,
},
legend: {
enabled: false,
},
})
return <Chart options={options} containerProps={{ className: 'ChartStat ChartUserDayActive' }} />
}
@@ -0,0 +1,24 @@
import { merge } from 'lodash'
import { Chart } from '#/js/app/components'
import { optionsPie } from './options'
export const ChartUserPlatforms = () => {
const options = merge({}, optionsPie, {
chart: {
type: 'pie',
},
title: {
text: t('client.stats.user_platform_distribution'),
},
series: [
{
name: t('client.stats.user_count'),
data: window.DATA['statsUserPlatforms'].map((v) => ({
y: v.value,
name: v.name,
})),
},
],
})
return <Chart options={options} containerProps={{ className: 'ChartStat ChartUserPlatforms' }} />
}
@@ -0,0 +1,45 @@
import { merge } from 'lodash'
import { Chart } from '#/js/app/components'
import { optionsSingle } from './options'
export const ChartUserTimeline = () => {
const options = merge({}, optionsSingle, {
chart: {
type: 'spline',
},
title: {
text: t('client.stats.user_timeline'),
},
series: [
{
name: t('client.stats.new_registrations'),
data: window.DATA['statsUserTimeline'].map((v) => ({
date: v.date,
x: new Date(v.date).getTime(),
y: v.in,
})),
dataLabels: { enabled: true },
},
{
name: t('client.stats.disabled_user'),
data: window.DATA['statsUserTimeline'].map((v) => ({
date: v.date,
x: new Date(v.date).getTime(),
y: v.out,
})),
dataLabels: { enabled: true },
},
],
yAxis: {
allowDecimals: false,
},
xAxis: {
type: 'datetime',
dateTimeLabelFormats: {
month: '%Y-%m',
},
tickInterval: 30 * 24 * 3600 * 1000,
},
})
return <Chart options={options} containerProps={{ className: 'ChartStat ChartUserTimeline' }} />
}
+13
View File
@@ -2,3 +2,16 @@ export * from './Chart'
export * from './ChartTorrentByMonth'
export * from './ChartTorrentByDay'
export * from './ChartTorrentByYear'
export * from './ChartUserTimeline'
export * from './ChartUserClasses'
export * from './ChartUserPlatforms'
export * from './ChartUserBrowsers'
export * from './ChartTorrentByCodecs'
export * from './ChartTorrentByResolutions'
export * from './ChartTorrentByContainers'
export * from './ChartTorrentBySources'
export * from './ChartTorrentByProcessings'
export * from './ChartTorrentByReleaseTypes'
export * from './ChartPeersCount'
export * from './ChartUserDayActive'
export * from './ChartSeedingUser'
+17 -2
View File
@@ -7,7 +7,22 @@ export const optionsSingle = {
tooltip: {
enabled: false,
},
legend: {
enabled: false,
}
export const optionsPie = {
accessibility: {
point: {
valueSuffix: '%',
},
},
plotOptions: {
pie: {
allowPointSelect: true,
cursor: 'pointer',
dataLabels: {
enabled: true,
format: '<b>{point.name}</b>: {point.percentage:.1f} %',
},
},
},
}
+13
View File
@@ -23,6 +23,13 @@ import RulesClientsEn from '#/locales/en/Rules/Clients.mdx'
import RulesClientsZhHans from '#/locales/zh-Hans/Rules/Clients.mdx'
import RulesUploadEn from '#/locales/en/Rules/Upload.mdx'
import RulesUploadZhHans from '#/locales/zh-Hans/Rules/Upload.mdx'
import RulesBonusEn from '#/locales/en/Rules/Bonus.mdx'
import RulesBonusZhHans from '#/locales/zh-Hans/Rules/Bonus.mdx'
import RulesInviteEn from '#/locales/en/Rules/Invite.mdx'
import RulesInviteZhHans from '#/locales/zh-Hans/Rules/Invite.mdx'
import RulesBlacklistEn from '#/locales/en/Rules/Blacklist.mdx'
import RulesBlacklistZhHans from '#/locales/zh-Hans/Rules/Blacklist.mdx'
import * as components from '#/js/app/components'
const LOCALES = { en, chs: zhHans }
@@ -41,6 +48,9 @@ const COMPONENTS = {
'Rules/Ratio.mdx': RulesRatioEn,
'Rules/Clients.mdx': RulesClientsEn,
'Rules/Upload.mdx': RulesUploadEn,
'Rules/Bonus.mdx': RulesBonusEn,
'Rules/Invite.mdx': RulesInviteEn,
'Rules/Blacklist.mdx': RulesBlacklistEn,
},
chs: {
'ScreenshotComparisonHelp.mdx': ScreenshotComparisionHelpZhHans,
@@ -53,6 +63,9 @@ const COMPONENTS = {
'Rules/Ratio.mdx': RulesRatioZhHans,
'Rules/Clients.mdx': RulesClientsZhHans,
'Rules/Upload.mdx': RulesUploadZhHans,
'Rules/Bonus.mdx': RulesBonusZhHans,
'Rules/Invite.mdx': RulesInviteZhHans,
'Rules/Blacklist.mdx': RulesBlacklistZhHans,
},
}
-17
View File
@@ -1,17 +0,0 @@
/* private.php */
import { useState } from 'react'
import { render } from 'react-dom'
import { ChartTorrentByDay } from '#/js/app/components'
if (document.querySelector('#root-stats')) {
const StatsHome = () => <ChartTorrentByDay />
render(<StatsHome />, document.querySelector('#root-stats'))
}
// Hide Announcements on mobile
if (window.matchMedia('(max-width: 768px)').matches) {
for (const post of document.querySelectorAll('.PostArticle')) {
post.classList.add('hidden')
}
}
+58 -5
View File
@@ -1,11 +1,64 @@
import { render } from 'react-dom'
import { ChartTorrentByMonth, ChartTorrentByYear } from '#/js/app/components'
import {
ChartUserTimeline,
ChartUserClasses,
ChartUserPlatforms,
ChartUserBrowsers,
ChartTorrentByMonth,
ChartTorrentByDay,
ChartTorrentByProcessings,
ChartTorrentByCodecs,
ChartTorrentByContainers,
ChartTorrentBySources,
ChartTorrentByResolutions,
ChartTorrentByReleaseTypes,
ChartPeersCount,
ChartUserDayActive,
ChartSeedingUser,
} from '#/js/app/components'
const StatsHome = () => (
const ChartUserHome = () => (
<>
<ChartTorrentByMonth />
<ChartTorrentByYear />
<ChartUserClasses />
<ChartUserPlatforms />
<ChartUserBrowsers />
</>
)
render(<StatsHome />, document.querySelector('#root'))
const ChartTorrentSpecific = () => (
<>
<ChartTorrentByReleaseTypes />
<ChartTorrentBySources />
<ChartTorrentByCodecs />
<ChartTorrentByContainers />
<ChartTorrentByResolutions />
<ChartTorrentByProcessings />
</>
)
if (document.querySelector('#chart_user_timeline')) {
render(<ChartUserTimeline />, document.querySelector('#chart_user_timeline'))
}
if (document.querySelector('#chart_user_home')) {
render(<ChartUserHome />, document.querySelector('#chart_user_home'))
}
if (document.querySelector('#chart_torrent_by_month')) {
render(<ChartTorrentByMonth />, document.querySelector('#chart_torrent_by_month'))
}
if (document.querySelector('#chart_torrent_by_day')) {
render(<ChartTorrentByDay />, document.querySelector('#chart_torrent_by_day'))
}
if (document.querySelector('#chart_torrent_specific')) {
render(<ChartTorrentSpecific />, document.querySelector('#chart_torrent_specific'))
}
if (document.querySelector('#chart_peers_count')) {
render(<ChartPeersCount />, document.querySelector('#chart_peers_count'))
}
if (document.querySelector('#chart_user_day_active')) {
render(<ChartUserDayActive />, document.querySelector('#chart_user_day_active'))
}
if (document.querySelector('#chart_seeding_user')) {
render(<ChartSeedingUser />, document.querySelector('#chart_seeding_user'))
}
+19
View File
@@ -0,0 +1,19 @@
<Heading1 id="content">Blacklist</Heading1>
<Heading2 id="image-host">1. Image Host Blacklist</Heading2>
- https://www.imgur.com/
- https://funkyimg.com/
- https://e-cdns-images.dzcdn.net/
- https://fastpic.ru/
<Heading2 id="movie">2. Movie Blacklist</Heading2>
Movies in the list will be deleted immediately after uploading. This list will be updated at any time without any notification. If you are planning to upload a movie that is not on the list, but you are not sure if it fits the rules, then please [ask for staff approval](forums.php?action=viewthread&threadid=21) in advance.
| **Chinese Title** | **English Title** | **Year** | **IMDb ID** | **Note** |
| :----: | :----: | :----: | :----: | :----: |
| 时代革命 | Revolution of Our Times | 2021 | [tt15049118](https://www.imdb.com/title/tt15049118/) | |
| 独生之国 | One Child Nation | 2019 | [tt8923482](https://www.imdb.com/title/tt8923482/) | |
| 阳光灿烂的日子 | In the Heat of the Sun | 1994 | [tt0111786](https://www.imdb.com/title/tt0111786/) | 22.42 GiB Piracy Blu-ray and its encodes are not allowed |
| 西藏七年 | Seven Years in Tibet | 1997 | [tt0120102](https://www.imdb.com/title/tt0120102/) | |
+21
View File
@@ -0,0 +1,21 @@
<Heading1 id="content">Bonus Point Rules</Heading1>
Bonus points are an incentive to all users to help seed while receiving bonus points for seeding activity and uploading. These bonus points can be used to trade for freeleech tokens, ~a badge, ~an invite, a custom title, and other stuff found at the [Bonus Store](bonus.php). You may also view your current [Bonus Point Rates](bonus.php?action=bprates).
<Heading2 id="seeding">1. Seeding BP</Heading2>
Bonus points are calculated through the formula: **BP/hour = Size × (0.025 + (0.06 × ln(1 + Seedtime) ÷ (Seeders^0.6)))**
Size is in GiB, seedtime is in days, and seeders means the total seeder number of a particular torrent. This calculation is run once per hour.
So you can see:
1. The bigger and more you seed, the more BP you get;
1. The longer you seed, the more BP you get;
1. Less the seeder at the same time, the more BP you get;
1. You will get extra BP if you are the only seeder.
<Heading2 id="uploading">2. Uploading BP</Heading2>
300/uploaded torrent.
To access the bonus points page go [here](bonus.php). You can also access this page by going to the top of any page and clicking on the link that says Bonus. Here, you can see what options are available to you depending on what qualifications/requirements you meet, as well as view things like your Bonus Points Rate and Store History.
+1 -1
View File
@@ -28,7 +28,7 @@
Posting with out of tolerance sexual and violent content can result in you being warned or more serious. The correct format is as follows: `[mature=description] ...content... [/mature]`, where "description" is a mandatory description of the post contents. Misleading or inadequate descriptions will be penalized. Topics created specifically for posting adult content will be removed. Adult content (including photo covers) should be content related to your postings in the forum. [PM Staff](/staff.php) first if you are not sure.
<Heading2 id="3">3. IRC Rules</Heading2>
<Heading2 id="3">3. Official Chatting Group Rules</Heading2>
3.1. Do not belittle or slander any other tracker on any occasion under the jurisdiction of {props.SITE_NAME}.
+10 -10
View File
@@ -1,21 +1,21 @@
<Heading1 id="content">Collages Rules</Heading1>
1.1. Collages are not used for a list of an actor/actress or director's filmography as the artist pages already exist for this purpose.
1. Collages are not used for a list of an actor/actress or director's filmography as the artist pages already exist for this purpose.
1.2. Every collage must have at least 3 torrent groups in it, except for collages of type "Production Company", "Personal", and "Staff Picks".
2. Every collage must have at least 3 torrent groups in it, except for collages of type "Production Company", "Personal", and "Staff Picks".
1.3. Vandalizing of collages will be taken very seriously, resulting in collage editing privileges being removed (at a minimum).
3. Vandalizing of collages will be taken very seriously, resulting in collage editing privileges being removed (at a minimum).
1.4. If something is a published Best Of (for instance, "Best Movies of the 1990's") then it should refer to a respected critic, filmmaker, actor, or publication. You may not make a collage for your favorite movies, unless it is a personal collage (available to Power User and above).
4. If something is a published Best Of (for instance, "Best Movies of the 1990's") then it should refer to a respected critic, filmmaker, actor, or publication. You may not make a collage for your favorite movies, unless it is a personal collage (available to Power User and above).
1.5. Collages may focus on: genres, production companies, winners/nominees of awards, a series of movies, or any other quantifiable thing that would connect a group of movies together (eg: Horror Film Remakes, Films about the War in the Middle East, etc).
5. Collages may focus on: genres, production companies, winners/nominees of awards, a series of movies, or any other quantifiable thing that would connect a group of movies together (eg: Horror Film Remakes, Films about the War in the Middle East, etc).
1.6. Please check to see that a similar collage does not already exist. If a similar collage does exist, please contribute to the existing collage.
6. Please check to see that a similar collage does not already exist. If a similar collage does exist, please contribute to the existing collage.
1.7. Make sure the movies fit with the given theme or meet any requirements in the Collage Information before you add them to a specific collage.
7. Make sure the movies fit with the given theme or meet any requirements in the Collage Information before you add them to a specific collage.
1.8. Please give your collage an appropriate title and a decent description explaining its purpose.
8. Please give your collage an appropriate title and a decent description explaining its purpose.
1.9. Collages can be locked by a staff. A locked collage is either definitive or updated regularly. If you find a locked collage missing movies or having other errors, feel free to report it.
9. Collages can be locked by a staff. A locked collage is either definitive or updated regularly. If you find a locked collage missing movies or having other errors, feel free to report it.
1.10. If you are unsure if a collage follows all of the above rules, send a [Staff PM](/staff.php) before creating one.
10. If you are unsure if a collage follows all of the above rules, send a [Staff PM](/staff.php) before creating one.
+13 -13
View File
@@ -4,19 +4,19 @@ The Golden Rules encompass all of {props.SITE_NAME} and the {props.SITE_NAME} IR
<Heading2 id="1.1">1.1. One account per person, per lifetime</Heading2>
Users are allowed one account per lifetime. If your account is disabled, contact staff in <a href={props.TG_DISBALE_CHANNEL}>offical Telegram disabled group</a> or [Staff PM](/staffpm.php). Never make another account, you will be disabled without question.
Users are allowed one account per lifetime. If your account is disabled, contact staff in <a href={props.TG_DISBALE_CHANNEL}>offical Telegram disabled group</a> or [Staff PM](staffpm.php). Never make another account, you will be disabled without question.
<Heading2 id="1.2">1.2. Do not trade, sell, give away, or offer accounts</Heading2>
If you no longer wish to use your account, send a [Staff PM](/staffpm.php) and request that your account be disabled.
If you no longer wish to use your account, send a [Staff PM](staffpm.php) and request that your account be disabled.
<Heading2 id="1.3">1.3. Do not share accounts</Heading2>
Accounts are for personal use only. Granting access to your account in any way (e.g., shared login details, external programs) is prohibited. [Invite](/wiki.php?action=article&name=invite) friends or direct them to our <a href={props.TG_GROUP}>official Telegram group</a>.
Accounts are for personal use only. Granting access to your account in any way (e.g., shared login details, external programs) is prohibited. [Invite](wiki.php?action=article&name=invite) friends or direct them to our <a href={props.TG_GROUP}>official Telegram group</a>.
<Heading2 id="1.4">1.4. Do not let your account become inactive</Heading2>
You agree to log into the site regularly in order to keep your account in good standing. Failure to do so will result in your account being disabled. See [Account Inactivity](/wiki.php?action=article&id=11) for more information.
You agree to log into the site regularly in order to keep your account in good standing. Failure to do so will result in your account being disabled. See [Account Inactivity](wiki.php?action=article&id=11) for more information.
<Heading2 id="2.1">2.1. Do not invite bad users</Heading2>
@@ -28,7 +28,7 @@ Only invite people you know and trust. Do not offer invites via other trackers,
<Heading2 id="2.3">2.3. Do not request invites or accounts</Heading2>
You may visit invite forum of {props.SITE_NAME} when you reach Power User and above. Some trackers only allow offical recruitment, their invites may not be offered or requested on the forums in other trackers. You need to read [Rules on Section of Requesting Invites] and [Do Not Request Invites List](/forums.php?action=viewthread&threadid=100) before you request an invite. You may request invites by messaging users only when they have offered them in the Invites Forum, unsolicited invite requests, even by private message, are prohibited.
You may visit invite forum of {props.SITE_NAME} when you reach Power User and above. Some trackers only allow offical recruitment, their invites may not be offered or requested on the forums in other trackers. You need to read [Rules on Section of Requesting Invites] and [Do Not Request Invites List](rules.php?p=invite) before you request an invite. You may request invites by messaging users only when they have offered them in the Invites Forum, unsolicited invite requests, even by private message, are prohibited.
<Heading2 id="2.4">2.4. Do not reveal site information in public</Heading2>
@@ -36,7 +36,7 @@ Do not mention "{props.SITE_NAME}" in any public area, and do not reveal our sit
<Heading2 id="3.1">3.1. Do not engage in ratio manipulation</Heading2>
Transferring buffer—or increasing your buffer—through unintended uses of the BitTorrent protocol or site features (e.g., [request abuse](rules.php?p=requests")) constitutes ratio manipulation. When in doubt, send a [Staff PM](staffpm.php") asking for more information.
Transferring buffer—or increasing your buffer—through unintended uses of the BitTorrent protocol or site features (e.g., [request abuse](rules.php?p=requests)) constitutes ratio manipulation. When in doubt, send a [Staff PM](staffpm.php) asking for more information.
<Heading2 id="3.2">3.2. Do not report incorrect data to the tracker (i.e., cheating)</Heading2>
@@ -44,7 +44,7 @@ Reporting incorrect data to the tracker constitutes cheating, whether it is acco
<Heading2 id="3.3">3.3. Do not use unapproved clients</Heading2>
Your client must be listed on the [Client Whitelist](rules.php?p=clients"). You must not use clients that have been modified in any way. Developers interested in testing unstable clients must receive staff approval prior to testing.
Your client must be listed on the [Client Whitelist](rules.php?p=clients). You must not use clients that have been modified in any way. Developers interested in testing unstable clients must receive staff approval prior to testing.
<Heading2 id="3.4">3.4. Do not modify {props.SITE_NAME} .torrent files</Heading2>
@@ -92,24 +92,24 @@ You may browse the site through a paid VPN/Proxy service, this includes (for exa
<Heading2 id="5.2">5.2. Do not abuse automated site access</Heading2>
All automated site access must be done through the [API](https://github.com/WhatCD/Gazelle/wiki/JSON-API-Documentation"). API use is limited to 5 requests within any 10-second window. Scripts and other automated processes must not scrape the site's HTML pages. When in doubt, seek advice from staff.
All automated site access must be done through the [API](https://github.com/WhatCD/Gazelle/wiki/JSON-API-Documentation). API use is limited to 5 requests within any 10-second window. Scripts and other automated processes must not scrape the site's HTML pages. When in doubt, seek advice from staff.
<Heading2 id="5.3">5.3. Do not autosnatch freeleech torrents</Heading2>
The automatic snatching of freeleech torrents using any method involving little or no user-input (e.g., API-based scripts, log or site scraping, etc.) is prohibited. See {props.SITE_NAME}'s [Freeleech Autosnatching Policy](wiki.php?action=article&id=63") article for more information.
The automatic snatching of freeleech torrents using any method involving little or no user-input (e.g., API-based scripts, log or site scraping, etc.) is prohibited. See {props.SITE_NAME}'s [Freeleech Autosnatching Policy](wiki.php?action=article&id=63) article for more information.
<Heading2 id="6.1">6.1. Do not seek or exploit live bugs for any reason</Heading2>
Seeking or exploiting bugs in the live site (as opposed to a local development environment) is prohibited. If you discover a critical bug or security vulnerability, immediately report it in accordance with {props.SITE_NAME}'s [Responsible Disclosure Policy](wiki.php?action=article&id=64"). Non-critical bugs can be reported in the [Bugs Forum](forums.php?action=viewforum&forumid=16").
Seeking or exploiting bugs in the live site (as opposed to a local development environment) is prohibited. If you discover a critical bug or security vulnerability, immediately report it in accordance with {props.SITE_NAME}'s [Responsible Disclosure Policy](wiki.php?action=article&id=64). Non-critical bugs can be reported in the [Bugs Forum](forums.php?action=viewforum&forumid=16).
<Heading2 id="6.2">6.2. Do not publish exploits</Heading2>
The publication, organization, dissemination, sharing, technical discussion, or technical facilitation of exploits is prohibited at staff discretion. Exploits are defined as unanticipated or unaccepted uses of internal, external, non-profit, or for-profit services. Exploits are subject to reclassification at any time.
<Heading2 id="7.0">7.0. Be respectful to all staff members</Heading2>
<Heading2 id="7.1">7.1. Be respectful to all staff members</Heading2>
Staff on {props.SITE_NAME} are volunteers who dedicate their time in order to keep the site running, without receiving any compensation. Being disrespectful to them is prohibited, and might result in a warning or worse.
<Heading2 id="7.1">7.1. Staff have the final word on rule interpretations</Heading2>
<Heading2 id="7.2">7.2. Staff have the final word on rule interpretations</Heading2>
All rules on {props.SITE_NAME} may be subject to different interpretations. Since the staff wrote these rules, their interpretation is final. If you need clarification on a rule, or if you think a rule should be restated, please send a [Staff PM](/staffpm.php).
All rules on {props.SITE_NAME} may be subject to different interpretations. Since the staff wrote these rules, their interpretation is final. If you need clarification on a rule, or if you think a rule should be restated, please send a [Staff PM](staffpm.php).
+34
View File
@@ -0,0 +1,34 @@
<Heading1 id="content">Invite Rules</Heading1>
The [invite page](user.php?action=invite) is where you may invite friends to the site. GPW has strict invite rules every user must follow. These are found in the [Golden Rules](rules.php). This page serves as a summary of the invite guidelines and will trump the Golden Rules if ever there is a discrepancy.
**Note: Please be sure to strictly abide by the invite rules. Violating users put their accounts at risk.**
<Heading2 id="forbid">1. Do Not Ask for These Invites</Heading2>
- AnimeBytes (AB)
- DEEPBASSNiNE (DB9)
- HDBits (HDB)
- Passthepopcorn (PTP)
- Redacted (RED)
- RevolutionTT (RTT)
- Music-Vids (MVids)
Welcome you to add more for us.
<Heading2 id="invite-rules">2. Invite Rules</Heading2>
- **Only invite people you know and trust**
- Invites are meant mainly for friends you know personally. You can invite internet friends, but only if you've known them for a long time and you trust them. GPW staff will monitor invitees at any given time.
- **Do not invite bad users. You will be held responsible for the users you invite**
- Invited users who are not able to maintain their ratios will not affect your account. However, invitees who violate the Golden Rules may put your account or privileges at risk.
- **Each user is allowed only one account per lifetime**
- Do not invite any user who has previously had a GPW account. If ever an account is found to be a duplicate, all associating accounts along with the duplicate will be banned. Inviting previously banned users may put your account at risk as well. If they wish to re-enable or recover their account, please refer them to the Telegram group for these matters: [GPW - Disabled](https://t.me/joinchat/77iO6zI6CF85Zjll).
- **Trading invites is prohibited**
- Exchanging invites for access to other private trackers, forums, and the like is not allowed.
- **Selling invites is prohibited**
- Making a profit by selling invites to other users is not allowed.
- **Giving away invites to random users or offering invites in public is not allowed**
- Do not offer invites or respond to invite requests in public areas, including but not limited to message boards, forums, ~~social media,~~sites easily indexed by a search engine, or anywhere that is not a class-restricted/private area. (Exception: people who are selected by GPW Staff can offer invites at the particular place.)
- **Please stay away from inviting trading/selling forums**
- Inviting a user from these sites will most likely get your account and entire invite tree banned.
+12 -15
View File
@@ -1,22 +1,20 @@
<Heading1 id="content">Ratio Rules</Heading1>
<Heading2 id="ratio">Ratio</Heading2>
<Heading3 id="ratio-system-overview">Ratio System Overview</Heading3>
<Heading2 id="ratio-system-overview">1. Ratio System Overview</Heading2>
- Your **ratio** is calculated by dividing the amount of data you've uploaded by the amount of data you've downloaded. You can view your ratio in the site header or in the "stats" section of your user profile.
- To maintain **leeching privileges**, your ratio must remain above a minimum value. This minimum value is your **required ratio**.
- If your ratio falls below your required ratio, you will be given two weeks to raise your ratio back above your required ratio. During this period, you are on **ratio watch**.
- If you fail to raise your ratio above your required ratio in the allotted time, your leeching privileges will be revoked. You will be unable to download more data, your account will remain enabled.
<Heading3 id="required-ratio-overview">Required Ratio Overview</Heading3>
<Heading2 id="required-ratio-overview">2. Required Ratio Overview</Heading2>
- Your required ratio represents the minimum ratio you must maintain to avoid ratio watch. You can view your required ratio in the site header after the word "required" or in the "stats" section of your user profile.
- Your required ratio is unique; each person's required ratio is calculated for their account specifically.
- Your required ratio is calculated using (1) the total amount of data you've downloaded and (2) the total number of torrents you're seeding. The seeding total is not limited to snatched torrents (completed downloads)—the total includes, but is not limited to, your uploaded torrents.
- The required ratio system lowers your required ratio when you seed a greater number of torrents. The more torrents you seed, the lower your required ratio will be. The lower your required ratio is, the less likely it is that you'll enter ratio watch.
<Heading3 id="required-ratio-table">Required Ratio Table</Heading3>
<Heading3 id="required-ratio-table">2.1. Required Ratio Table</Heading3>
| Amount Downloaded | Required Ratio (0% seeded) | Required Ratio (100% seeded) |
| :---------------: | :------------------------: | :--------------------------: |
@@ -31,36 +29,35 @@
| 80-100 GB | 0.60 | 0.50 |
| 100+ GB | 0.60 | 0.60 |
<Heading3 id="required-ratio-calculation">Required Ratio Calculation</Heading3>
<Heading3 id="required-ratio-calculation">2.2. Required Ratio Calculation</Heading3>
**1. Determine the maximum and minimum possible values of your required ratio.**
<Heading4>**2.2.1. Determine the maximum and minimum possible values of your required ratio**</Heading4>
Using the table above, determine your amount downloaded bracket from the first column. Next, locate the values in the adjacent columns. The second column lists the maximum required ratio for each bracket, and the third column lists the minimum required ratio for each bracket. The maximum and minimum required ratios are also referred to as the **0% seeded** and **100% seeded** required ratios, respectively.
**2. Determine the actual required ratio.**
<Heading4>**2.2.2. Determine the actual required ratio**</Heading4>
Your actual required ratio will be a number that falls between the maximum and minimum required ratio values determined in the previous step. To determine your actual required ratio, the system first uses the maximum required ratio (0% seeded) and multiplies it by the value [1 - (`seeding` / `snatched`)]. Formatted differently, the calculation performed by the system looks like this:
<Center>
<Heading2>Required ratio = (Maximum required ratio) x (1 - (Seeding / Snatched))</Heading2>
<Heading3>Required ratio = (Maximum required ratio) x (1 - (Seeding / Snatched))</Heading3>
</Center>
- In this formula, `snatched` is the number of non-deleted unique snatches you have made. If you snatch a torrent twice, it only counts once. If a snatched torrent is deleted from the site, it is not counted at all.
- In this formula, `seeding` is the average number of torrents you've seeded over a 72 hour period within the last week. If you've seeded a torrent for less than 72 hours within the last week, it will not raise your seeding total. Please note that while it is possible to seed more torrents than you have snatched, the system effectively caps the value at 100% of your snatched amount.
**3. Round, if necessary.**
<Heading4>**2.2.3. Round, if necessary**</Heading4>
The value determined in the previous step is rounded up to your minimum required ratio (100% seeded) if necessary. This step is required because most amount downloaded brackets have a minimum required ratio (100% seeded) greater than zero, and the value returned by the above calculation is zero when seeding equals snatched.
<Heading3 id="required-ratio-details">Required Ratio Details</Heading3>
<Heading3 id="required-ratio-details">2.3. Required Ratio Details</Heading3>
- If you stop seeding for one week, your required ratio will become the maximum required ratio (0% seeded) for your amount downloaded bracket. Once you have resumed seeding for a 72 hour period, your required ratio will decrease according to the above calculations.
- If your download total is less than 5 GB, you won't be eligible for ratio watch, and you will not need a required ratio. In this circumstance, your required ratio will be zero regardless of your seeding percentage.
- If your download total is less than 20 GB and you are seeding a number of torrents equal to 100% of your snatches, your required ratio will be zero.
- As your download total increases, your minimum (100% seeded) and maximum (0% seeded) required ratios taper together. After you have downloaded 100 GB, those values become equal to each other. This means that users with download totals greater than or equal to 100 GB have a minimum required ratio (100% seeded) of 0.60 from that point forward.
<Heading3 id="required-ratio-examples">Required Ratio Example</Heading3>
<Heading3 id="required-ratio-examples">2.4. Required Ratio Example</Heading3>
In this example, Rippy has downloaded 25 GB. Rippy falls into the 20-30 GB amount downloaded bracket in the table above. Rippy's maximum required ratio (0% seeded) is 0.30, and his minimum required ratio (100% seeded) is 0.05.
@@ -72,7 +69,7 @@ The resulting required ratio is 0.15, which falls between the maximum required r
If Rippy's on-site required ratio was listed as a value greater than the calculated value, this would be because he hadn't seeded those 45 torrents for a 72 hour period in the last week. In this case, the system would not be counting all 45 torrents as seeded.
<Heading3 id="ratio-watch-overview">Ratio Watch Overview</Heading3>
<Heading2 id="ratio-watch-overview">3. Ratio Watch Overview</Heading2>
- Everyone gets to download their first 5 GB before ratio watch eligibility begins.
- If you've downloaded more than 5 GB and your ratio does not meet or surpass your required ratio, you will be put on ratio watch and have **two weeks** to raise your ratio above your required ratio.
@@ -80,7 +77,7 @@ If Rippy's on-site required ratio was listed as a value greater than the calcula
- If you fail to leave ratio watch within a two week period, you will lose leeching privileges. After losing leeching privileges, you will be unable to download more data. Your account will remain enabled.
- The ratio watch system is automated and cannot be interrupted by staff.
<Heading3 id="leaving-ratio-watch">Leaving Ratio Watch</Heading3>
<Heading3 id="leaving-ratio-watch">3.1。 Leaving Ratio Watch</Heading3>
To leave ratio watch, you must either raise your ratio by uploading more, or lower your required ratio by seeding more. Your ratio must be equal to or above your required ratio in order for ratio watch to end.
+5 -5
View File
@@ -1,21 +1,21 @@
<Heading1 id="content">Requests Rules</Heading1>
<Heading2 id="1.1">1.1. Do not make requests for torrents that break the rules</Heading2>
<Heading2 id="1">1. Do not make requests for torrents that break the rules</Heading2>
It is your responsibility that the request follows the rules. Otherwise,your request will be deleted, and you will not get your bounty back.
<Heading2 id="1.2">1.2. Do not request multiple torrents in a single request</Heading2>
<Heading2 id="2">2. Do not request multiple torrents in a single request</Heading2>
This means no requesting two movies (ie: I am looking for Casablanca and Fight Club) or requesting two torrents of the same movie (ie: I want a high definition rip and a 700MiB AVI) in one request. You may ask for multiple formats, but you cannot specify all of them.
<Heading2 id="1.3">1.3. Do not unfill requests for trivial reasons</Heading2>
<Heading2 id="3">3. Do not unfill requests for trivial reasons</Heading2>
If you did not specify in your request what you wanted (such as bitrates or a particular edition), do not unfill and later change the description. Do not unfill requests if you are unsure of what you are doing (e.g. the filled torrent may be a transcode, but you don't know how to tell). Ask for help from [first-line support or staff](/staff.php) in that case. You may unfill the request if the torrent does not fit your specifications stated clearly in the request.
<Heading2 id="1.4">1.4. All users must have an equal chance to fill a request</Heading2>
<Heading2 id="4">4. All users must have an equal chance to fill a request</Heading2>
Trading upload credit is not allowed. Abusing the request system to exchange favors for other users is not tolerated, that includes making specific requests for certain users (whether explicitly named or not). Making requests for releases, and then unfilling so that one particular user can fill the request is not allowed. If reported, both the requester and user filling the request will receive a warning and lose the request bounty.
<Heading2 id="1.5">1.5. No manipulation of the requester for bounty</Heading2>
<Heading2 id="5">5. No manipulation of the requester for bounty</Heading2>
The bounty is a reward for helping other users&#8202;&mdash;&#8202;it should not be a ransom. Any user who refuses to fill a request unless the bounty is increased will face harsh punishment.
+7 -5
View File
@@ -1,11 +1,13 @@
<Heading1 id="content">Tagging Rules</Heading1>
1.1. Tags should be comma-separated (`,`), and you should use a period (`.`) to separate words inside a tag. Such as `sci.fi` or `post.rock`.
1. Tags should be comma-separated (`,`), and you should use a period (`.`) to separate words inside a tag. Such as `sci.fi` or `post.rock`.
1.2. You can select from the dropdown box on [the torrent upload page](/upload.php). We recommend adding more specific sub-genres manually, but it is fine to use only these official tags if you do not feel qualified to be more specific. Please note that the `2000s` tag refers to music produced between 2000 and 2009.
2. You can select from the dropdown box on [the torrent upload page](/upload.php). We recommend adding more specific sub-genres manually, but it is fine to use only these official tags if you do not feel qualified to be more specific. Please note that the `2000s` tag refers to music produced between 2000 and 2009.
1.3. Do not add 'useless' tags, such as personal opinions or anything you specify elsewhere on the form, `seen.live`, `awesome`, `kung.fu` (containing in `action`) etc.. If an upload contains live contents, you can tag it as `live`.
3. Do not add 'useless' tags, such as personal opinions or anything you specify elsewhere on the form, `seen.live`, `awesome`, `kung.fu` (containing in `action`) etc.. If an upload contains live contents, you can tag it as `live`.
1.4. Only tag information on the movie itself—not the individual release. Tags such as `remux`, `encode`, `blu.ray`, `eac3to` etc. are strictly forbidden. Remember that these tags will be used for other versions of the same movie.
4. Only tag information on the movie itself—not the individual release. Tags such as `remux`, `encode`, `blu.ray`, `eac3to` etc. are strictly forbidden. Remember that these tags will be used for other versions of the same movie.
1.5. If you have questions about the dropdown box on [the torrent upload page](/upload.php), please don't add the tag.
{/*
5. If you have questions about the dropdown box on [the torrent upload page](/upload.php), please don't add the tag.
*/}
+23 -25
View File
@@ -48,7 +48,7 @@ Before you upload anything, if you are still unsure of what a rule means, PLEASE
<Heading4 id="1.2.14">1.2.14. **Series:** Any kind of series is not allowed.</Heading4>
<Heading4 id="1.2.15">1.2.15. **Specifically banned:** Anything listed on our ~~[blacklist](torrents.php?action=do_not_upload_movie_list)~~ (building) is not allowed. **Advertising of any kind is prohibited** (including but not limited to promotional links written in the title of the video or audio track, large promotional images included within the release description, etc.). <Important italic>Update! 2021-08-06</Important></Heading4>
<Heading4 id="1.2.15">1.2.15. **Specifically banned:** Anything listed on our [blacklist](rules.php?p=blacklist) is not allowed. **Advertising of any kind is prohibited** (including but not limited to promotional links written in the title of the video or audio track, large promotional images included within the release description, etc.). <Important italic>Update! 2021-08-06</Important></Heading4>
<Heading2 id="2">2. Required Information</Heading2>
@@ -117,13 +117,13 @@ href='https://imgbox.com'>imgbox.com</a> or [img.pterclub.com](https://img.pterc
<Heading4 id="3.1.2">3.1.2. **SD encodes must use x264 codec and MKV container.**</Heading4>
<Heading4 id="3.1.3">3.1.3. **Wrong codecs, containers, and resolutions can be tolerated when untranscoded preferred formats are not available.** Unless there are huge quality improvements, or wrong formats will not be allowed if there are proper ones. See relevant [Coexisting](#h4.1)/[Trumping](#h5.2) rules or ask [here](forums.php?action=viewthread&threadid=22).</Heading4>
<Heading4 id="3.1.3">3.1.3. **Wrong codecs, containers, and resolutions can be tolerated when untranscoded preferred formats are not available.** Unless there are huge quality improvements, or wrong formats will not be allowed if there are proper ones. See relevant [Coexisting](#4.1)/[Trumping](#5.2) rules or ask [here](forums.php?action=viewthread&threadid=22).</Heading4>
<Heading4 id="3.1.4">3.1.4. **Use encodes as source to rip is strictly forbidden.**</Heading4>
<Heading4 id="3.1.5">3.1.5. **In one movie, once a Blu-ray 720p encode (better quality) uploaded, all SD encodes will be deleted.** Uploading SD encodes is not allowed if a Blu-ray 720p encode has existed. Exception: DVD encodes can coexist with Blu-ray 720p encodes if there is significant different between DVD and Blu-ray discs, or If you think the SD encode that you want to upload is of **special value**, please see [Can I upload this](forums.php?action=viewthread&threadid=21). <Important italic>Update! 2021-08-06</Important></Heading4>
<Heading4 id="3.1.6">3.1.6. See [relevant rules section](#h4.1) for more information on SD coexistence.</Heading4>
<Heading4 id="3.1.6">3.1.6. See [relevant rules section](#4.1) for more information on SD coexistence.</Heading4>
<Heading3 id="3.2">3.2. High Definition (HD)</Heading3>
@@ -131,25 +131,25 @@ href='https://imgbox.com'>imgbox.com</a> or [img.pterclub.com](https://img.pterc
<Heading4 id="3.2.2">3.2.2. **HD encodes must use x264 codec and MKV container.** (HDR x265 1080p encodes are allowed, see [4.2.2](#4.2.2).) </Heading4>
<Heading4 id="3.2.3">3.2.3. **Wrong codecs, containers, and resolutions can be tolerated when untranscoded preferred formats are not available.** Unless there are huge quality improvements, or wrong formats will not be allowed if there are proper ones. See relevant [Coexisting](#h4.1)/[Trumping](#h5.2) rules or ask [here](forums.php?action=viewthread&threadid=22). </Heading4>
<Heading4 id="3.2.3">3.2.3. **Wrong codecs, containers, and resolutions can be tolerated when untranscoded preferred formats are not available.** Unless there are huge quality improvements, or wrong formats will not be allowed if there are proper ones. See relevant [Coexisting](#4.1)/[Trumping](#5.2) rules or ask [here](forums.php?action=viewthread&threadid=22). </Heading4>
<Heading4 id="3.2.4">3.2.4. **The source of HD encodes must be Blu-ray, HD-DVD, HDTV or WEB.** Any other source must be [approved by staff](forums.php?action=viewthread&threadid=21). </Heading4>
<Heading4 id="3.2.5">3.2.5. See [relevant rules section](#h4.2) for more information on HD coexistence. </Heading4>
<Heading4 id="3.2.5">3.2.5. See [relevant rules section](#4.2) for more information on HD coexistence. </Heading4>
<Heading3 id="3.3">3.3. Ultra High Definition (UHD)</Heading3>
<Heading4 id="3.3.1">3.3.1. **2160p (maximum resolution of 4096x2160 pixels) is allowed resolution.**</Heading4>
<Heading4 id="3.3.2">3.3.2. **UHD sources featuring HDR (High Dynamic Range) must be encoded as such.**</Heading4>
<Heading4 id="3.3.2">3.3.2. **UHD sources featuring HDR (High Dynamic Range) or DoVi (Dolby Vision) must be encoded as such and use the MKV container.**</Heading4>
<Heading4 id="3.3.3">3.3.3. **UHD encodes must use x265 codec and MKV container. Web source UHD torrents with x264 codec are allowed.** <Important italic>Update! 2021-08-06</Important></Heading4>
<Heading5 id="3.3.3.1">3.3.3.1. **SDR UHD encodes may use x264 codec if allowed by [4.3.1.2](#4.3.1.2).**</Heading5>
<Heading4 id="3.3.4">3.3.4. **Wrong codecs, containers, and resolutions can be tolerated when untranscoded preferred formats are not available.** Unless there are huge quality improvements, or wrong formats will not be allowed if there are proper ones. See relevant [Coexisting](#h4.1)/[Trumping](#h5.2) rules or ask [here](forums.php?action=viewthread&threadid=22).</Heading4>
<Heading4 id="3.3.4">3.3.4. **Wrong codecs, containers, and resolutions can be tolerated when untranscoded preferred formats are not available.** Unless there are huge quality improvements, or wrong formats will not be allowed if there are proper ones. See relevant [Coexisting](#4.1)/[Trumping](#5.2) rules or ask [here](forums.php?action=viewthread&threadid=22).</Heading4>
<Heading4 id="3.3.5">3.3.5. See [relevant rules section](#h4.2) for more information on HD coexistence.</Heading4>
<Heading4 id="3.3.5">3.3.5. See [relevant rules section](#4.2) for more information on HD coexistence.</Heading4>
<Heading3 id="3.4">3.4. Untouched & Remux</Heading3>
@@ -177,13 +177,11 @@ href='https://imgbox.com'>imgbox.com</a> or [img.pterclub.com](https://img.pterc
<Heading5 id="3.4.5.4">3.4.5.4. **SRT Subtitles are allowed in a remux.**</Heading5>
<Heading5 id="3.4.5.5">3.4.5.5. **Dolby Vision remuxes can use the MP4 container.** See [5.2.1.2](#5.2.1.2) .</Heading5>
<Heading5 id="3.4.5.6">3.4.5.6. **If you checked "Self-Rip" for your remux uploads, you must provide eac3to log.** If you re-post the remux from other places, we advice you to paste the log if possible.</Heading5>
<Heading5 id="3.4.5.5">3.4.5.5. **If you checked "Self-Rip" for your remux uploads, you must provide eac3to log.** If you re-post the remux from other places, we advice you to paste the log if possible.</Heading5>
<Heading4 id="3.4.6">3.4.6. **Untouched rips containing only extra content must be uploaded with the main disc as a single torrent.**</Heading4>
<Heading4 id="3.4.7">3.4.7. See [relevant rules section](#h4.4) for more information on untouched and remux coexistence.</Heading4>
<Heading4 id="3.4.7">3.4.7. See [relevant rules section](#4.4) for more information on untouched and remux coexistence.</Heading4>
<Heading3 id="3.5">3.5. Extra</Heading3>
@@ -193,13 +191,13 @@ href='https://imgbox.com'>imgbox.com</a> or [img.pterclub.com](https://img.pterc
<Heading4 id="3.5.2">3.5.2. **Extras are allowed only in complete packs of official retail releases.**</Heading4>
<Heading5 id="3.5.2.1">3.5.2.1. **Extra content packs must be identified by distributor/edition, see [2.5.2](#2.5.2) for more information.**</Heading5>
<Heading5 id="3.5.2.1">3.5.2.1. **Extra content packs must be identified by distributor/edition, see [2.4.2](#2.4.2) for more information.**</Heading5>
<Heading4 id="3.5.3">3.5.3. **Discs containing only extra content must be uploaded with the main disc as a single torrent.**</Heading4>
<Heading4 id="3.5.4">3.5.4. **An extra with an IMDb page must be uploaded separately.**</Heading4>
<Heading4 id="3.5.5">3.5.5. See [relevant rules section](#h4.5) for more information on extras coexistence.</Heading4>
<Heading4 id="3.5.5">3.5.5. See [relevant rules section](#4.5) for more information on extras coexistence.</Heading4>
<Heading3 id="3.6">3.6. External Subtitles</Heading3>
@@ -259,7 +257,7 @@ href='https://imgbox.com'>imgbox.com</a> or [img.pterclub.com](https://img.pterc
<Heading6 id="4.0.4.3.1">4.0.4.3.1. **Mandarin dub:** Only non-Chinese uploads (Cantonese movies are Chinese movies) can add this mark. Dialect dubs (including Cantonese dubs) are not considered as Mandarin dubs.</Heading6>
<Heading6 id="4.0.3.3.2">4.0.3.3.2. **Special effects subtitle:** Subtitles with special effects such as reflection, flicker, movement, tumble, drift, color, 2D, 3D, split, combination, etc.. The reason why using special effects is to match movie screens as perfect as possible. Only changing the color or font family is not considered as special effects. Please ask on [Help Forum](forums.php?action=viewforum&forumid=31) if you are not sure. You must provide at least two extra screenshot for special effects subtitle (no resolution and format requirements, yet **you must capture effects for plot-related parts of the film** (don't just capture effects about credits or names of filming company or something pointless) adding separately and not counting to [the basic requirement of 3 screenshots](#h2.2), which means at least 5 in total. <Important italic>Update! 2021-08-06</Important></Heading6>
<Heading6 id="4.0.3.3.2">4.0.3.3.2. **Special effects subtitle:** Subtitles with special effects such as reflection, flicker, movement, tumble, drift, color, 2D, 3D, split, combination, etc.. The reason why using special effects is to match movie screens as perfect as possible. Only changing the color or font family is not considered as special effects. Please ask on [Help Forum](forums.php?action=viewforum&forumid=31) if you are not sure. You must provide at least two extra screenshot for special effects subtitle (no resolution and format requirements, yet **you must capture effects for plot-related parts of the film** (don't just capture effects about credits or names of filming company or something pointless) adding separately and not counting to [the basic requirement of 3 screenshots](#2.2), which means at least 5 in total. <Important italic>Update! 2021-08-06</Important></Heading6>
<Heading5 id="4.0.4.4">4.0.4.4. **Remux Slot:** This slot considers mainly the quality of source video and audio tracks.</Heading5>
@@ -273,7 +271,7 @@ href='https://imgbox.com'>imgbox.com</a> or [img.pterclub.com](https://img.pterc
<Heading4 id="4.1.1">4.1.1. **There is a EN Quality slot and a CN Quality slot, 2 slots in total for a given movie.** <Important italic>New! 2021-08-06</Important></Heading4>
<Heading4 id="4.1.2">4.1.2. See [relevant rules section](#h3.1) for more information on SD uploads.</Heading4>
<Heading4 id="4.1.2">4.1.2. See [relevant rules section](#3.1) for more information on SD uploads.</Heading4>
<Heading3 id="4.2">4.2. High Definition (HD)</Heading3>
@@ -283,7 +281,7 @@ href='https://imgbox.com'>imgbox.com</a> or [img.pterclub.com](https://img.pterc
<Heading4 id="4.2.2">4.2.2. **There are 2 extra slots for HDR x265 1080p encodes.** They are independent from the slots defined by [4.2.1](#4.2.1) and does not interfere with them. They should be provided for the highest quality encode available. **SDR x265 1080p encodes are not allowed.** Exception: You may upload SDR 10-bit x265 1080p encodes for Animations. **But uploading SDR 10-bit x264 encodes should be [approved by staff](forums.php?action=viewthread&threadid=21)**, according to their experimental properties, the audio and subtitle requirements can be looser.</Heading4>
<Heading4 id="4.2.3">4.2.3. See [relevant rules section](#h3.2) for more information on HD uploads.</Heading4>
<Heading4 id="4.2.3">4.2.3. See [relevant rules section](#3.2) for more information on HD uploads.</Heading4>
<Heading3 id="4.3">4.3. Ultra High Definition (UHD)</Heading3>
@@ -293,7 +291,7 @@ href='https://imgbox.com'>imgbox.com</a> or [img.pterclub.com](https://img.pterc
<Heading5 id="4.3.1.2">4.3.1.2. **A SDR release may occupy the Retention Slot defined by rule [4.3.1.1](#4.3.1.1), if provided enough comparison screenshots to prove the superiority over existing HD sources.**</Heading5>
<Heading4 id="4.3.2">4.3.2. See [relevant rules section](#h3.3) for more information on UHD uploads.</Heading4>
<Heading4 id="4.3.2">4.3.2. See [relevant rules section](#3.3) for more information on UHD uploads.</Heading4>
<Heading3 id="4.4">4.4. Untouched & Remux</Heading3>
@@ -303,7 +301,7 @@ href='https://imgbox.com'>imgbox.com</a> or [img.pterclub.com](https://img.pterc
<Heading4 id="4.4.3">4.4.3. **One 1080p and one 2160p untouched, one 1080p and one 2160p DIY, one 1080p and one 2160p remux are allowed.** They should be the highest quality source available under the staff's consideration.</Heading4>
<Heading4 id="4.4.4">4.4.4. See [relevant rules section](#h3.4) for more information on untouched uploads.</Heading4>
<Heading4 id="4.4.4">4.4.4. See [relevant rules section](#3.4) for more information on untouched uploads.</Heading4>
<Heading3 id="4.5">4.5. Extra</Heading3>
@@ -334,15 +332,15 @@ href='https://imgbox.com'>imgbox.com</a> or [img.pterclub.com](https://img.pterc
<Heading3 id="5.2">5.2. Quality</Heading3>
<Heading4 id="5.2.1">5.2.1. **Any torrent that not met requirements of [the relevant rules section](#h3) can be trumped by preferred format torrents with a equivalent or superior quality.**</Heading4>
<Heading4 id="5.2.1">5.2.1. **Any torrent that not met requirements of [the relevant rules section](#3) can be trumped by preferred format torrents with a equivalent or superior quality.**</Heading4>
<Heading5 id="5.2.1.1">5.2.1.1. **x264 (SD, HD) and x265 (UHD) are preferred encoders.** H.264 or H.265 files of unknown lineage may occupy x264 or x265 slots defined by [4.1.1](#4.1.1), [4.2.1](#4.2.1) and [4.3.1](#4.3.1), but will be more easily trumped by quality reasons.</Heading5>
<Heading5 id="5.2.1.2">5.2.1.2. **Dolby Vision remuxes and Chinese streaming site WEB-DL can use the MP4 container.** Changing the container to MKV can not trump them. <Important italic>New! 2021-08-14</Important></Heading5>
<Heading4 id="5.2.2">5.2.2. **Uploads occupying Quality Slots defined by [4.1.1.1](#4.1.1.1), [4.2.1.1](#4.2.1.1) and [4.3.1.1](#4.3.1.1) can be trumped by significantly better quality encodes.**</Heading4>
<Heading4 id="5.2.2">5.2.2. **Uploads occupying Quality Slots defined by [4.0.1](#4.0.1) can be trumped by significantly better quality encodes.**</Heading4>
<Heading4 id="5.2.3">5.2.3. **Trumpable uploads are trumpable by uploads that fixed the issue pointed out by the mark.** See [5.4](#h5.4) for a complete list of trumpable marks.</Heading4>
<Heading4 id="5.2.3">5.2.3. **Trumpable uploads are trumpable by uploads that fixed the issue pointed out by the mark.** See [5.4](#5.4) for a complete list of trumpable marks.</Heading4>
<Heading4 id="5.2.4">5.2.4. **Source type uploads (untouched, remuxes) will be effected from an aggressive trumping principles, sources with better viewing experiences can trump inferior ones.**</Heading4>
@@ -475,9 +473,9 @@ href='https://imgbox.com'>imgbox.com</a> or [img.pterclub.com](https://img.pterc
<Heading4 id="5.4.7">5.4.7. **Improperly Synchronized Subtitles:** Subtitles contained with this upload are usable, but not properly synchronized.</Heading4>
<Heading4 id="5.4.8">5.4.8. **Improper Codec/Container:** This upload does not conform to our [preferred formats](#h3).</Heading4>
<Heading4 id="5.4.8">5.4.8. **Improper Codec/Container:** This upload does not conform to our [preferred formats](#3).</Heading4>
<Heading4 id="5.4.9">5.4.9. **Non-Conform Resolution:** This upload does not conform to our [preferred resolutions](#h3).</Heading4>
<Heading4 id="5.4.9">5.4.9. **Non-Conform Resolution:** This upload does not conform to our [preferred resolutions](#3).</Heading4>
<Heading4 id="5.4.10">5.4.10. **Inferior Source:** This source does not provide the best viewing experience currently available.</Heading4>
@@ -519,7 +517,7 @@ href='https://imgbox.com'>imgbox.com</a> or [img.pterclub.com](https://img.pterc
<Heading4 id="6.1">6.1. Don't upload things that you don't have full access to. You have to make sure that you can do anything to the torrents or content before you upload them no matter where they are (locally or on the seedbox).</Heading4>
<Heading4 id="6.2">6.2. Don't upload torrents that you don't plan to seed. We ask you to seed at least 48 hours in 2 weeks or until the ratio reach 1. This rule is also for uploaders, please read [H&R Rules](rules.php?p=ratio) for more information.</Heading4>
<Heading4 id="6.2">6.2. Don't upload torrents that you don't plan to seed. We ask you to seed at least 48 hours in 2 weeks or until the ratio reach 1. This rule is also for uploaders~~, please read [H&R Rules](rules.php?p=ratio) for more information~~.</Heading4>
<Heading4 id="6.3">6.3. Seeding as long as you can. {props.SITE_NAME} plan to be a library for all movies and all formats permanently. Longer seeding, better tracker. As a member of {props.SITE_NAME}, you need to be strict with yourself.</Heading4>
+80 -4
View File
@@ -3205,6 +3205,18 @@ server.rules.tags_title: |-
Tagging
server.rules.tags_title_de: |-
These rules govern what tags can and cannot be added.
server.rules.bonus_title: |-
Bonus Points
server.rules.bonus_title_de: |-
These are the rules that govern bonus.
server.rules.invite_title: |-
Invite
server.rules.invite_title_de: |-
These are the rules that govern invites.
server.rules.blacklist_title: |-
Blacklist
server.rules.blacklist_title_de: |-
These are the rules that govern image hosts and movies.
server.rules.type: |-
Category
server.rules.upload_h13k: |-
@@ -3382,9 +3394,9 @@ server.staffpm.view_your_unanswered: |-
server.staffpm.your_unanswered: |-
Your Unanswered
server.stats.detailed_torrent_statistics: |-
Detailed Torrent Statistics
Torrent Statistics
server.stats.detailed_user_statistics: |-
Detailed User Statistics
User Statistics
server.stats.geographical_distribution_map: |-
Geographical Distribution Map
server.stats.geographical_distribution_map_africa: |-
@@ -7370,7 +7382,7 @@ server.user.upload: |-
server.user.uploaded: |-
Uploaded
server.user.uploaded_title: |-
Upload amount in bytes. Also accepts e.g. +20GB or -35.6364MB on the end.
Upload amount in bytes. Also accepts e.g. +20 GB or -35.6364 MB on the end.
server.user.uploads: |-
Uploads
server.user.user_disable: |-
@@ -7379,6 +7391,8 @@ server.user.user_po: |-
User Promote
server.user.user_reason: |-
User reason
server.user.user_reason_title: |-
This text will be sent to the user.
server.user.user_search: |-
User search
server.user.username: |-
@@ -8356,4 +8370,66 @@ server.reports_report_post: |-
server.reports_report_comment: |-
Comment Report
server.user.show_hot_movie_at_home: |-
Show on homepage
Show on homepage
server.forums.new_forum_specific_rule: |-
Add forum specific rules
server.stats.uploads_by_day: |-
Uploads by day
client.stats.delete: |-
Deletion
client.stats.uploads: |-
Uploads
client.stats.upload_alive: |-
Uploads(alive)
client.stats.user_timeline: |-
User Timeline
client.stats.new_registrations: |-
New registrations
client.stats.disabled_user: |-
Disabled user
client.stats.user_class_distribution: |-
User Class Distribution
client.stats.user_count: |-
User count
client.stats.user_platform_distribution: |-
User Platform Distribution
client.stats.user_browser_distribution: |-
User Browse Distribution
client.stats.geographical_distribution: |-
Geographical Distribution
server.common.time_length: |-
Length
server.comment.verbal: |-
Verbal
server.forums.edit_post: |-
Edit post
server.user.seeding_size: |-
Seeding Size
client.stats.processing_distribution: |-
Processing Distribution
client.stats.source_distribution: |-
Source Distribution
client.stats.codec_distribution: |-
Codec Distribution
client.stats.resolution_distribution: |-
Resolution Distribution
client.stats.container_distribution: |-
Container Distribution
client.stats.release_distribution: |-
Release Type Distribution
client.stats.torrent_count: |-
Torrent Count
client.stats.movie_count: |-
Movie Count
client.stats.peers: |-
Peers
client.stats.peer_count: |-
Peer count
client.stats.seeder_count: |-
Seeder count
client.stats.leecher_count: |-
Leecher count
client.stats.uv: |-
Users active
client.stats.seeding_user: |-
User in seeding status
+14 -2
View File
@@ -3204,6 +3204,18 @@ server.rules.tags_title: |-
Tagging(Marcação)
server.rules.tags_title_de: |-
Essas regras regem quais tags podem e não podem ser adicionadas.
server.rules.bonus_title: |-
server.rules.bonus_title_de: |-
server.rules.invite_title: |-
server.rules.invite_title_de: |-
server.rules.blacklist_title: |-
server.rules.blacklist_title_de: |-
server.rules.type: |-
Categoria
server.rules.upload_h13k: |-
@@ -3380,9 +3392,9 @@ server.staffpm.view_your_unanswered: |-
server.staffpm.your_unanswered: |-
Seu Não Respondido
server.stats.detailed_torrent_statistics: |-
Estatísticas detalhadas do Torrent
Estatísticas do Torrent
server.stats.detailed_user_statistics: |-
Estatísticas detalhadas do usuário
Estatísticas do usuário
server.stats.geographical_distribution_map: |-
Mapa Geográfico de Distribuição
server.stats.geographical_distribution_map_africa: |-
+4 -4
View File
@@ -1,13 +1,13 @@
<DonationProgress>年度目标:已达成{props.data.donationProgress}</DonationProgress>
<DonationProgress>年度目标:已达成 {props.data.donationProgress}</DonationProgress>
## 关于捐助 <Important>(必读)</Important>
感谢你来到捐助页面,你的支持将使 {props.SITE_NAME} 得以更稳定地运行。 如果你有足够的经济条件,请考虑捐助{props.SITE_NAME}。 在捐助前,你需要知晓并确认以下几点:
感谢你来到捐助页面,你的支持将使 {props.SITE_NAME} 得以更稳定地运行。 如果你有足够的经济条件,请考虑捐助 {props.SITE_NAME}。在捐助前,你需要知晓并确认以下几点:
1. {props.SITE_NAME} 是一个非营利性组织,无任何赞助,我们完全免费为用户提供服务。 支持 {props.SITE_NAME} 永远仅出于你的个人意愿。
2. {props.SITE_NAME} 仅会将捐助所得用于支付服务器运营开销。 它们包括服务器的维护、升级,以及主机、带宽、电源等运营费用。
3. 捐助不是向 {props.SITE_NAME} 的工作人员付款。 任何负责网站运营的工作人员或其他个人都不会从用户的捐助中获取经济利益。
4. 捐助行为不是在 “购买” 捐助者的等级、邀请或任何 {props.SITE_NAME} 的特殊权益(如上传量或者下载权限等)。 用户也无法通过捐助恢复任何已经被限制的账号或权益(如账号锁定、下载权限禁用等)。 捐助仅是单纯地帮助 {props.SITE_NAME} 支付账单。
4. 捐助行为不是在「购买」捐助者的等级、邀请或任何 {props.SITE_NAME} 的特殊权益(如上传量或者下载权限等)。 用户也无法通过捐助恢复任何已经被限制的账号或权益(如账号锁定、下载权限禁用等)。 捐助仅是单纯地帮助 {props.SITE_NAME} 支付账单。
5. {props.SITE_NAME} 永远禁止通过捐助(或代捐)的方式获取账号。 任何通过交易的入站邀请都是个人行为。 且通过该方式获取的账号买卖双方都将被永封且不予解封。
6. {props.SITE_NAME} 的捐助等级系统向所有可敬的捐助者开放。 该系统会为捐助者提供一些使用站点时非必要的个性化福利。 例如一些是装饰性的(如 ID 后面的捐助标志),一次性的(如额外的邀请),或者一些额外的个性化选项(如额外的个人介绍槽位,或是私人合集槽位)。
@@ -15,7 +15,7 @@
任何符合最低要求的捐助都会使你获得捐助点数。 在首次获取捐助点数后,你的捐助等级会达到 1 级,该等级是永久的。 通过解锁该等级,你能获得以下福利:
- 我们长久的关爱,就像你名字旁边的那颗红心
- 我们长久的关爱,就像你用户名旁的那颗红心
- ~~一枚捐助纪念印记~~(印记系统暂未开放)
- 更多个性化功能(持续开发中)
- 免疫 [账号不活跃](/wiki.php?action=article&name=不活跃账号)(需要达到特殊等级 1)
+19
View File
@@ -0,0 +1,19 @@
<Heading1 id="content">黑名单</Heading1>
<Heading2 id="image-host">1. 图床黑名单</Heading2>
- https://www.imgur.com/
- https://funkyimg.com/
- https://e-cdns-images.dzcdn.net/
- https://fastpic.ru/
<Heading2 id="movie">2. 电影黑名单</Heading2>
名列其中的电影一经发布即会被删除,此列表随时更新,恕不另行通知。如果你计划发布的电影不在此中,但也不敢肯定其符合发布规则,请提前 [获得批准](forums.php?action=viewthread&threadid=21)。
| 中文名 | 英文名 | 年份 | IMDb ID | 备注 |
| :----: | :----: | :----: | :----: | :----: |
| 时代革命 | Revolution of Our Times | 2021 | [tt15049118](https://www.imdb.com/title/tt15049118/) | |
| 独生之国 | One Child Nation | 2019 | [tt8923482](https://www.imdb.com/title/tt8923482/) | |
| 阳光灿烂的日子 | In the Heat of the Sun | 1994 | [tt0111786](https://www.imdb.com/title/tt0111786/) | 禁止发布 22.42 GiB 盗版蓝光及其压制的 Encode |
| 西藏七年 | Seven Years in Tibet | 1997 | [tt0120102](https://www.imdb.com/title/tt0120102/) | |
+21
View File
@@ -0,0 +1,21 @@
<Heading1 id="content">积分规则</Heading1>
积分用于鼓励所有用户帮助保种,在做种和上传时会获得积分。可以用这些积分在 [积分商城](bonus.php) 兑换免费令牌、~印记、~邀请和头衔等一切列出的内容。你还可以查看当前的 [积分获取速率](bonus.php?action=bprates)。
<Heading2 id="seeding">1. 做种积分</Heading2>
积分计算公式:**积分/时 = 大小 × (0.025 + (0.06 × ln(1 + 做种时长) ÷ (做种数^0.6)))**
其中,「大小」的单位是 GiB,「做种时长」的单位是天,「做种数」指的是单个种子的总保种人数。
**规律:**
1. 保种的总体积越大,保种数量越多,获得的积分越多;
1. 保种时间越长,获得的积分就越多;
1. 同时做种的人数越少,获得的积分就越多;
1. 如果你是唯一的做种者,将会获得额外的积分。
<Heading2 id="uploading">2. 发种积分</Heading2>
300 / 个。
从 [这里](bonus.php) 进入积分页面,你也可以通过任意页面顶部的「积分」链接访问该页面。在那里你可以查看有哪些可用选项,以及查看积分获取速率和消费历史记录等内容,具体取决于你满足什么资格或要求。
+6 -8
View File
@@ -4,7 +4,7 @@
1.1. 无视管理员劝阻继续争吵会造成严重的后果。
1.2. 禁止骚扰管理员或其他用户。 不要对他人的私事妄加评论。
1.2. 禁止骚扰管理员或其他用户。不要对他人的私事妄加评论。
1.3. 禁止发广告、刷屏、辱骂、歧视等。
@@ -16,20 +16,18 @@
2.1. 发帖前先阅读对应版块的版规。
2.2. 不要发布与版块主题无关的帖子。 发布在非邀请区的发邀求邀贴会带来严重的后果。
2.2. 不要发布与版块主题无关的帖子。发布在非邀请区的发邀求邀贴会带来严重的后果。
2.3. 禁止通过非交易区帖子获取经济利益。
2.4. 不要不分场合地大肆宣传你发布的资源。
2.5. 不要过度引用。 在引用他人的发言时,请尽量只引用必要的一小部分。 尤其是避免引用图片!
2.5. 不要过度引用。在引用他人的发言时,请尽量只引用必要的一小部分。尤其是避免引用图片!
2.6. 不要发布不合适的成人内容
2.6. 不要发布不合适的成人内容。发布涉及超出容忍范围的性与暴力内容的帖子会导致你被警告或带来更严重的后果。帖子中的成人内容必须正确标记,正确的格式如下:`[mature=描述] ……内容…… [/mature]`,其中「描述」是对帖子内容的强制性描述。错误或是不充分的描述会导致惩罚。专门为发布成人内容所创建的主题会被删除。成人内容(包括写真封面)应与你在论坛中发布的帖子在内容上相关。如果你对帖子是否合适不太确定,请向论坛管理员 [发送私信](/staff.php) 并在进一步操作之前等待回复。
发布涉及超出容忍范围的性与暴力内容的帖子会导致你被警告或带来更严重的后果。 帖子中的成人内容必须正确标记,正确的格式如下:`[mature=描述] ……内容…… [/mature]`,其中 “描述” 是对帖子内容的强制性描述。 错误或是不充分的描述会导致惩罚。 专门为发布成人内容所创建的主题会被删除。 成人内容(包括写真封面)应与你在论坛中发布的帖子在内容上相关。 如果你对帖子是否合适不太确定,请向论坛管理员 [发送私信](/staff.php) 并在进一步操作之前等待回复。
<Heading2 id="3">3. IRC规则</Heading2>
<Heading2 id="3">3. 官群规则</Heading2>
3.1. 禁止在 {props.SITE_NAME} 管辖的任何场合贬低、诋毁任何 PT 站。
3.2. 所有人都是从萌新之路开始的。 如果可以,请尽量耐心,帮助新人。
3.2. 所有人都是从萌新之路开始的。如果可以,请尽量耐心,帮助新人。
+2 -2
View File
@@ -1,7 +1,7 @@
<Heading1 id="content">客户端规则</Heading1>
客户端规则是维持我们群体正直诚实的保障。 它保证了我们能够将具有破坏性和欺骗性的客户端(比如迅雷)拒之门外,因为这些东西会破坏我们 Tracker 的正常运行、损害我们用户的利益。
客户端规则是维持我们群体正直诚实的保障。它保证了我们能够将具有破坏性和欺骗性的客户端(比如迅雷)拒之门外,因为这些东西会破坏我们 Tracker 的正常运行、损害我们用户的利益。
**修改版客户端**如[qBittorrent-Enhanced-Edition](https://github.com/c0re100/qBittorrent-Enhanced-Edition))可能会导致数据统计错误。 使用它会导致你被警告,乃至禁用账号。 请务必使用官方三位数版本号的客户端。
**修改版客户端**(如 [qBittorrent-Enhanced-Edition](https://github.com/c0re100/qBittorrent-Enhanced-Edition))可能会导致数据统计错误。使用它会导致你被警告,乃至禁用账号。请务必使用官方三位数版本号的客户端。
<TableClientWhitelist />
+10 -10
View File
@@ -1,21 +1,21 @@
<Heading1 id="content">合集规则</Heading1>
1.1. 合集的用途并非记录某个导演或演员的所有影视作品。因为我们已经为艺人提供了单独的页面来跟踪记录这些信息。
1. 合集的用途并非记录某个导演或演员的所有影视作品。因为我们已经为艺人提供了单独的页面来跟踪记录这些信息。
1.2. 理想情况下,合计应至少包含 3 部电影,如果暂时还没有,那么必须保证它具有成长性。
2. 理想情况下,合计应至少包含 3 部电影,如果暂时还没有,那么必须保证它具有成长性。
1.3. 破坏合集的行为会被严惩,导致编辑合集的权限被剥夺(最轻处罚)。
3. 破坏合集的行为会被严惩,导致编辑合集的权限被剥夺(最轻处罚)。
1.4. 任何 “最爱” 类合集须引自可靠的来源,比如一位受人尊敬的批评家、制片人、演员或刊物。 除非是你的私人合集(达到一定用户等级方可创建),否则你不能创建一个你的个人最爱合集。
4. 任何「最爱」类合集须引自可靠的来源,比如一位受人尊敬的批评家、制片人、演员或刊物。 除非是你的私人合集(达到一定用户等级方可创建),否则你不能创建一个你的个人最爱合集。
1.5. 合集须关注这些方面:类型、制片公司、获奖/提名作品、系列电影, 或是其他可量化的、能够将一组电影归集在一起的概念(例如:恐怖片重拍、关于中东战争的电影等)。
5. 合集须关注这些方面:类型、制片公司、获奖/提名作品、系列电影, 或是其他可量化的、能够将一组电影归集在一起的概念(例如:恐怖片重拍、关于中东战争的电影等)。
1.6. 在自建新合集前请务必先查询类似的合集是否已经存在。 如果存在相似的合集,请编辑已存在的合集。
6. 在自建新合集前请务必先查询类似的合集是否已经存在。 如果存在相似的合集,请编辑已存在的合集。
1.7. 在将电影加入合集前,请确保它与合集的主题、合集信息中所写的要求相适应。
7. 在将电影加入合集前,请确保它与合集的主题、合集信息中所写的要求相适应。
1.8. 正确且描写性地命名你的合集,并为它撰写一段恰当且提供有效信息的主旨介绍:这个合集是关于什么的,你创建这个合集的依据是什么。
8. 正确且描写性地命名你的合集,并为它撰写一段恰当且提供有效信息的主旨介绍:这个合集是关于什么的,你创建这个合集的依据是什么。
1.9. 管理组成员可以锁定合集。 上锁的合集要么已经定型,要么是定期会更新。 如果你认为一个上锁的合集缺了电影或存在其他问题,请报告它。
9. 管理组成员可以锁定合集。 上锁的合集要么已经定型,要么是定期会更新。 如果你认为一个上锁的合集缺了电影或存在其他问题,请报告它。
1.10. 你如果对某部合集是否符合上述规则不太肯定,请在创建前发送 [Staff PM](/staff.php) 询问管理组。
10. 你如果对某部合集是否符合上述规则不太肯定,请在创建前发送 [Staff PM](/staff.php) 询问管理组。
+30 -30
View File
@@ -1,62 +1,62 @@
<Heading1 id="content">黄金规则</Heading1>
黄金规则适用于 {props.SITE_NAME} 和我们的社交网络。 这是最高级的规则,如不遵守,你的账号将会遭受最严厉的惩罚
黄金规则适用于 {props.SITE_NAME} 和我们的社交网络。这是最高级的规则,违规的惩罚也最为严厉
<Heading2 id="1.1">1.1. 禁止重复注册</Heading2>
每位用户终生仅允许拥有一个账号。 如果你的账号被禁,你可以通过 <a href={props.TG_DISBALE_CHANNEL}>Telegram 官方群</a> 或 [Staff PM](/staffpm.php) 联系管理员。 不要创建多个账号(即俗称的马甲),一经查实所有关联账号都将被封禁。
每位用户终生仅允许拥有一个账号。如果你的账号被禁,你可以通过 <a href={props.TG_DISBALE_CHANNEL}>Telegram 账号问题帮助群</a> 或 [Staff PM](/staffpm.php) 联系管理员。不要创建多个账号(即俗称的马甲),一经查实所有关联账号都将被封禁。
<Heading2 id="1.2">1.2. 禁止交易、出售、赠与或提供账号</Heading2>
如果你想要封存账号,可以通过 [Staff PM](staffpm.php) 联系管理员停用你的账号
如果你不再需要账号,可以通过 [Staff PM](staffpm.php) 联系管理员停用
<Heading2 id="1.3">1.3. 禁止共享账号</Heading2>
账号仅供私人使用。 禁止以任何方式(例如共享登录信息、外部程序等)将你的账号访问权限授予他人。 如果你的亲朋好友想要使用本站,请 [邀请](wiki.php?action=article&name=invite) 或引导他们加入我们的 <a href={props.TG_GROUP}>Telegram 官方群</a>。
账号仅供私人使用。禁止以任何方式(例如共享登录信息、外部程序等)将你的账号访问权限授予他人。如果你的亲朋好友想要使用本站,请 [邀请](wiki.php?action=article&name=invite) 或引导他们加入我们的 <a href="forums.php?action=viewthread&threadid=945">官方群</a>。
<Heading2 id="1.4">1.4. 不要让你的账号处于非活动状态</Heading2>
为保证账号处于良好状况,你应定期登录本站。 如果做不到,你的账号会被禁用。 详情请查看 [不活跃账号](/wiki.php?action=article&id=11) 一文。
为保证账号处于良好状况,你应定期登录本站。如果做不到,你的账号会被禁用。详情请查看 [不活跃账号](/wiki.php?action=article&id=11) 一文。
<Heading2 id="2.1">2.1. 不要邀请低质量用户</Heading2>
你需要对你邀请的用户负责。 你邀请的用户达不到合格分享率,不会导致你受罚。 但若你邀请的用户违反了黄金规则,你的账号或相关权限可能会被禁用。
你需要对你邀请的用户负责。你邀请的用户达不到合格分享率,不会导致你受罚。但若你邀请的用户违反了黄金规则,你的账号或相关权限可能会被禁用。
<Heading2 id="2.2">2.2. 禁止交易、出售、以及公开地赠送或提供邀请</Heading2>
只邀请你认识和信任的人,若非如此,请不要邀请他们。 请尽可能邀请你现实中认识的朋友,若要邀请网友,你应该确定认识并相信他们,不要在未设置浏览限制的 PT 站内论坛板块、贴吧、论坛、聊天软件群(QQ、TG、微信等,私聊除外)、社交媒体或任何公共场所提供和回应求邀请求。 例外情况:管理组指定的专员可以在被批准的场所提供邀请。 注意不要让发邀帖被搜索引擎抓到。
只邀请你认识和信任的人,若非如此,请不要邀请他们。请尽可能邀请你现实中认识的朋友,若要邀请网友,你应该确定认识并相信他们,不要在未设置浏览限制的 PT 站内论坛板块、贴吧、论坛、聊天软件群(QQ、TG、微信等,私聊除外)、社交媒体或任何公共场所提供和回应求邀请求。例外情况:管理组指定的专员可以在被批准的场所提供邀请。注意不要让发邀帖被搜索引擎抓到。
<Heading2 id="2.3">2.3. 禁止随处求邀</Heading2>
在升级到 Power User 后可访问 {props.SITE_NAME} 的邀请相关板块。 有些站点只允许官方邀请,你可能不能求邀。 在求邀前必须先行阅读 [求邀区版规](forums.php?action=viewthread&threadid=15) 和 [禁止求邀列表](forums.php?action=viewthread&threadid=100)。 如果其他用户不曾表示可以提供邀请,则你不能以任何方式向其求邀,包括私信。
在升级到 Power User 后可访问 {props.SITE_NAME} 的邀请相关板块。有些站点只允许官方邀请,你可能不能求邀。在求邀前必须先行阅读 [求邀区版规](forums.php?action=viewthread&threadid=15) 和 [禁止求邀列表](rules.php?p=invite)。如果其他用户不曾表示可以提供邀请,则你不能以任何方式向其求邀,包括私信。
<Heading2 id="2.4">2.4. 禁止公开泄露站点信息</Heading2>
不要在任何公共区域泄露站点{props.SITE_NAME}名称和简称、服务器地址以及 Tracker 地址。 截图时请遮蔽站点 Logo。
不要在任何公共区域泄露站点{props.SITE_NAME}名称和简称、服务器地址以及 Tracker 地址。截图时请遮蔽站点 Logo。
<Heading2 id="3.1">3.1. 禁止参与分享率作弊</Heading2>
通过使用 BitTorrent 协议或站点功能的漏洞(例如滥用 [求种](rules.php?p=requests))来伪造发布/下载量或修改分享率数据是被绝对禁止的。 如有疑问,请 [Staff PM](staffpm.php) 以了解详情。
通过使用 BitTorrent 协议或站点功能的漏洞(例如滥用 [求种](rules.php?p=requests))来伪造发布/下载量或修改分享率数据是被绝对禁止的。如有疑问,请 [Staff PM](staffpm.php) 以了解详情。
<Heading2 id="3.2">3.2. 禁止向 Tracker 上报非正常统计数据(即禁止作弊)</Heading2>
禁止向 Tracker 报告错误数据,无论你使用的是否是能作弊的客户端,或者白名单内的客户端
禁止向 Tracker 报告错误数据,无论你使用的是否是能作弊的客户端,或者白名单内的客户端
<Heading2 id="3.3">3.3. 禁止使用未允许的客户端</Heading2>
本站 Tracker 采用 [白名单](rules.php?p=clients) 模式。 仅允许使用白名单内的客户端,魔改版是不被允许的。 测试版或 CVS 版请私信管理员。
本站 Tracker 采用 [白名单](rules.php?p=clients) 模式。仅允许使用白名单内的客户端,魔改版是不被允许的。测试版或 CVS 版请私信管理员。
<Heading2 id="3.4">3.4. 禁止修改 {props.SITE_NAME} 的种子文件</Heading2>
将非 {props.SITE_NAME} 的 Tracker URL 加入到 {props.SITE_NAME} 种子的行为是被禁止的。 这样做会产生错误数据并被视作作弊。 无论种子是否正在客户端内做种都适用此规则。
将非 {props.SITE_NAME} 的 Tracker URL 加入到 {props.SITE_NAME} 种子的行为是被禁止的。这样做会产生错误数据并被视作作弊。无论种子是否正在客户端内做种都适用此规则。
<Heading2 id="3.5">3.5. 禁止将种子文件或密钥分享给他人</Heading2>
每个 {props.SITE_NAME} 的种子文件中都嵌入了包含你个人密钥的 URL。 密钥使用户能够向 Tracker 报告数据,密钥泄露将有可能使他人有机会窃取你的分享率。
每个 {props.SITE_NAME} 的种子文件中都嵌入了包含你个人密钥的 URL。密钥使用户能够向 Tracker 报告数据,密钥泄露将有可能使他人有机会窃取你的分享率。
<Heading2 id="4.1">4.1. 禁止威胁、社工、敲诈用户及管理员</Heading2>
禁止以任何理由公开曝光用户及管理员的隐私信息,或以此类行为相要挟。 隐私信息包括但不限于个人识别信息(例如姓名、记录、活动日志细节、照片)。 未经许可,不得讨论或共享未经用户自愿公开提供的信息。 包括通过搜集已公开信息(如谷歌搜索结果)来获取私人信息。
禁止以任何理由公开曝光用户及管理员的隐私信息,或以此类行为相要挟。隐私信息包括但不限于个人识别信息(例如姓名、记录、活动日志细节、照片)。未经许可,不得讨论或共享未经用户自愿公开提供的信息。包括通过搜集已公开信息(如谷歌搜索结果)来获取私人信息。
<Heading2 id="4.2">4.2. 禁止欺诈</Heading2>
@@ -64,19 +64,19 @@
<Heading2 id="4.3">4.3. 尊重管理组的决定</Heading2>
只允许与 Moderator 私下讨论分歧。 如果 Moderator 已退休或联系不上,你可以 [Staff PM](staffpm.php)。 不允许因个人理由联系多位 Moderator;但是,如果你需要第三方意见,可以联系 Administrator。 联系管理员的方式包括私信、[Staff PM](staffpm.php) 和 <a href={props.TG_GROUP}>Telegram 官方群</a>。
只允许与 Moderator 私下讨论分歧。如果 Moderator 已退休或联系不上,你可以 [Staff PM](staffpm.php)。不允许因个人理由联系多位 Moderator;但是,如果你需要第三方意见,可以联系 Administrator。联系管理员的方式包括私信、[Staff PM](staffpm.php) 和 <a href="forums.php?action=viewthread&threadid=945">官方群</a>。
<Heading2 id="4.4">4.4. 禁止冒充工作人员</Heading2>
禁止在站内、站外或交流群冒充管理员或官方服务账号。 也禁止歪曲管理员的决定。
禁止在站内、站外或交流群冒充管理员或官方服务账号。也禁止歪曲管理员的决定。
<Heading2 id="4.5">4.5. 禁止网络霸凌</Heading2>
网络霸凌是指对其他用户的指手画脚的行为。 禁止对立、挑衅或攻击涉嫌违反规则的用户及被举报的用户。 如果你发现违规行为,举报就够了。
网络霸凌是指对其他用户的指手画脚的行为。禁止对立、挑衅或攻击涉嫌违反规则的用户及被举报的用户。如果你发现违规行为,举报就够了。
<Heading2 id="4.6">4.6. 不要要求优惠活动</Heading2>
优惠活动(如种子免费、候选通过等)由管理员自行决定。 它们不遵循固定的安排,用户不得提出类似要求。
优惠活动(如种子免费、候选通过等)由管理员自行决定。它们不遵循固定的安排,用户不得提出类似要求。
<Heading2 id="4.7">4.7. 禁止收集用户识别信息</Heading2>
@@ -84,32 +84,32 @@
<Heading2 id="4.8">4.8. 禁止利用 {props.SITE_NAME} 的服务(包括 Tracker、网站和交流群)来牟取商业利益</Heading2>
禁止将 {props.SITE_NAME} 提供的服务(例如 Gazelle、Ocelot)及维护的代码商业化。 禁止通过利用上述服务(如用户种子数据等)商业化 {props.SITE_NAME} 用户提供的资源。 其他推广、募捐及交易行为也被禁止。
禁止将 {props.SITE_NAME} 提供的服务(例如 Gazelle、Ocelot)及维护的代码商业化。禁止通过利用上述服务(如用户种子数据等)商业化 {props.SITE_NAME} 用户提供的资源。其他推广、募捐及交易行为也被禁止。
<Heading2 id="5.1">5.1. 禁止使用免费的代理或 VPN 浏览 {props.SITE_NAME}</Heading2>
禁止通过公用或免费的代理、VPN、Tor 浏览网站,你可以通过付费 VPN、私有服务器(盒子)和代理来浏览网站。 不允许通过 Tor 网络访问站点或连接 Tracker 服务器。 最多允许 3 个 IP 同时做种。 如有疑问请发送 [Staff PM](staffpm.php)。 <Important italic>Update! 2021-06-23</Important>
禁止通过公用或免费的代理、VPN、Tor 浏览网站,你可以通过付费 VPN、私有服务器(盒子)和代理来浏览网站。不允许通过 Tor 网络访问站点或连接 Tracker 服务器。最多允许 3 个 IP 同时做种。如有疑问请发送 [Staff PM](staffpm.php)。<Important italic>Update! 2021-06-23</Important>
<Heading2 id="5.2">5.2. 禁止滥用自动访问网站</Heading2>
所有自动化站点访问都必须通过指定的 [API](https://github.com/WhatCD/Gazelle/wiki/JSON-API-Documentation) 完成。 API 在 10 秒内只会回应 5 个请求。 脚本和其他自动化流程不得收集网站的 HTML 页面。 如有疑问,请咨询管理员。
所有自动化站点访问都必须通过指定的 [API](https://github.com/WhatCD/Gazelle/wiki/JSON-API-Documentation) 完成。API 在 10 秒内只会回应 5 个请求。脚本和其他自动化流程不得收集网站的 HTML 页面。如有疑问,请咨询管理员。
<Heading2 id="5.3">5.3. 禁止自动抓取免费种子</Heading2>
禁止使用自动化的方式(例如,基于 API 的脚本、日志或站点抓取等)自动抓取免费种子。 详情请参阅 {props.SITE_NAME} 的 [免费种子自动收集政策](wiki.php?action=article&id=63) 一文。
禁止使用自动化的方式(例如,基于 API 的脚本、日志或站点抓取等)自动抓取免费种子。详情请参阅 {props.SITE_NAME} 的 [免费种子自动收集政策](wiki.php?action=article&id=63) 一文。
<Heading2 id="6.1">6.1. 禁止寻找或利用现有的 BUG</Heading2>
<Heading2 id="6.1">6.1. 禁止寻找或利用现有的漏洞</Heading2>
禁止在站点中实时寻找或利用 BUG(你可以在本地开发环境试验)。 如果你发现了严重错误或安全漏洞,请立即按照 {props.SITE_NAME} 的 [漏洞报告政策](wiki.php?action=article&id=64") 进行报告。 也可以在 [论坛的反馈版块](forums.php?action=viewforum&forumid=16") 报告不太严重的 BUG
禁止在站点中实时寻找或利用漏洞(你可以在本地开发环境试验)。如果你发现了严重错误或安全漏洞,请立即按照 {props.SITE_NAME} 的 [漏洞报告政策](wiki.php?action=article&id=64) 进行报告。也可以在 [论坛的反馈版块](forums.php?action=viewforum&forumid=16) 报告不太严重的漏洞
<Heading2 id="6.2">6.2. 禁止公布漏洞</Heading2>
有关漏洞的公布、组织、传播、分享、技术讨论或技术促进等事宜皆由管理组决定。 漏洞被定义为对内部、外部、非营利或营利性服务的意料之外或未被许可的利用。 漏洞的类型可能随时被重新划分。
有关漏洞的公布、组织、传播、分享、技术讨论或技术促进等事宜皆由管理组决定。漏洞被定义为对内部、外部、非营利或营利性服务的意料之外或未被许可的利用。漏洞的类型可能随时被重新划分。
<Heading2 id="7.0">7.0. 尊重所有管理组成员</Heading2>
<Heading2 id="7.1">7.1. 尊重所有管理组成员</Heading2>
{props.SITE_NAME} 的工作人员是志愿者,他们将私人时间用于维护网站运行,而这是没有任何补偿的。 不尊重他们可能会导致被警告甚至更严重的后果。
{props.SITE_NAME} 的工作人员是志愿者,他们将私人时间用于维护网站运行,而这是没有任何补偿的。不尊重他们可能会导致被警告甚至更严重的后果。
<Heading2 id="7.1">7.1. 管理组对规则拥有最终解释权</Heading2>
<Heading2 id="7.2">7.2. 管理组对规则拥有最终解释权</Heading2>
{props.SITE_NAME} 的所有规则可能会有不同的解释。 鉴于管理组编写了这些规则,他们拥有最终解释权。 如果你对本文感到疑惑或不解,或者你认为应该重新制定规则,请发送 [Staff PM](staffpm.php)。
{props.SITE_NAME} 的所有规则可能会有不同的解释。鉴于管理组编写了这些规则,他们拥有最终解释权。如果你对本文感到疑惑或不解,或者你认为应该重新制定规则,请发送 [Staff PM](staffpm.php)。
+48
View File
@@ -0,0 +1,48 @@
<Heading1 id="content">邀请规则</Heading1>
你可以通过 [邀请系统](user.php?action=invite) 来邀请朋友加入本站。{props.SITE_NAME} 有着严格的邀请规则,黄金规则中有基本说明,此篇规则作为黄金规则邀请方面的补充和总结,具有同等效力,如有出入,以此篇为准。
**注意:请务必严格遵守邀请规则,否则会使你的账号面临危险。**
<Heading2 id="forbid">1. 禁止求邀列表</Heading2>
由于一些站点规则明令禁止在其他 PT 站点论坛求邀,出于对他站规则的尊重以及对邀请双方的保护,**以下站点禁止求邀,所有相关求邀帖会被删除,多次违反会被警告**:
- AnimeBytes (AB)
- DEEPBASSNiNE (DB9)
- HDBits (HDB)
- Passthepopcorn (PTP)
- Redacted (RED)
- RevolutionTT (RTT)
- Music-Vids (MVids)
如有缺漏,欢迎你帮助补充。
<Heading2 id="invite-rules">2. 发邀规则</Heading2>
<Heading3 id="2.1">2.1. 只邀请你认识并信任的人</Heading3>
邀请主要指邀请你现实中的朋友,若邀请网友,你必须认识并相信他,否则请不要邀请他。{props.SITE_NAME} 管理组随时会抽检任何邀请关系。
<Heading3 id="2.2">2.2. 你需要对你邀请的用户负责,劣质用户可能导致你被连坐</Heading3>
你邀请的用户达不到合格分享率,不会导致你受罚。但若你邀请的用户违反了黄金规则,根据情况你的账号和(或)权限可能会被封禁。
<Heading3 id="2.3">2.2. 每位用户只允许拥有一个账号</Heading3>
不要向以前拥有 {props.SITE_NAME} 账号的任何人发送邀请,即使是你的熟人也不可。创建多个账号(即「马甲」「小号」)一经查实所有关联账号都将被封禁。如果你邀请了曾被禁用的用户,你同样将可能被禁止。如果他希望重新启动账号,请指引他通过账号找回功能或 {props.SITE_NAME} [Telegram 账号问题帮助群](https://t.me/joinchat/77iO6zI6CF85Zjll) 寻求帮助。
<Heading3 id="2.4">2.4. 严禁交换邀请</Heading3>
严禁通过交换邀请的方式进入其他 PT 站、论坛等。
<Heading3 id="2.5">2.5. 严禁售卖邀请</Heading3>
严禁通过邀请用户的方式牟利。
<Heading3 id="2.6">2.6. 严禁公开赠送、提供邀请</Heading3>
不要在任何公共区域提供邀请或回应求邀请求,包括但不限于未设置等级限制的 PT 站内论坛板块、贴吧、论坛、社交媒体、公共场所以及会被搜索引擎抓到的地方等(例外情况:{props.SITE_NAME} 管理组指定的专员可以在被官方批准的场所提供邀请)。
<Heading3 id="2.7">2.7. 远离邀请交易论坛</Heading3>
如果你邀请任何来自邀请交易论坛的人,你将很可能被永久封禁,同时也包括你的邀请树。
+47 -50
View File
@@ -1,100 +1,97 @@
<Heading1 id="content">分享率规则</Heading1>
<Heading2 id="ratio-system-overview">分享率</Heading2>
<Heading2 id="ratio-system-overview">1. 分享率</Heading2>
<Heading3 id="ratio-system-overview">概述</Heading3>
- 你的**分享率**等于你上传量除以下载量的商。你可以在站点页面的最上方或者你个人信息的 “统计” 部分看到。
- 为了能够享有**下载种子的权限**,你的分享率必须保持在某一最小值之上。这个最小值就是你的**合格分享率**。
- 如果你当前的分享率低于你的合格分享率,你将会有两周的时间来使之高于你的合格分享率。在这期间,你将被列入**分享率监控名单**。
- 你的**分享率**等于你上传量除以下载量的商。你可以在站点页面的最上方或者你个人信息的「统计」部分看到;
- 为了能够享有**下载种子的权限**,你的分享率必须保持在某一最小值之上。这个最小值就是你的**合格分享率**;
- 如果你当前的分享率低于你的合格分享率,你将会有两周的时间来使之高于你的合格分享率。在这期间,你将被列入**分享率监控名单**;
- 如果在给定时间内,你没有将分享率提高到合格分享率以上,你将失去下载权限,即无法下载更多的资源。但你仍然可以进行除了下载以外的正常活动。
<Heading3 id="required-ratio-overview">合格分享率概述</Heading3>
<Heading2 id="required-ratio-overview">2. 合格分享率</Heading2>
- 合格分享率就是你必须维持的最低分享率,否则你会被列入分享率监控名单。你可以在站点最上方的合格分享率后边看到,或者在个人信息的 “统计” 部分看到
- 合格分享率因人而异。每个用户的合格分享率是由其账号流量数据计算得来的
- 你的合格分享率是根据以下两点计算得来的:(1)你已完成的全部种子数量;(2)你当前的总做种数。
- 合格分享率就是你必须维持的最低分享率,否则你会被列入分享率监控名单。你可以在站点最上方的合格分享率后边看到,或者在个人信息的「统计」部分看到
- 合格分享率因人而异。每个用户的合格分享率是由其账号流量数据计算得来的
- 你的合格分享率是根据以下两点计算得来的:
- 你已完成的全部种子数量;
- 你当前的总做种数;
- 总做种数包括你完成下载的种子和你已发布的种子。
<Heading3 id="required-ratio-table">分享率规则</Heading3>
<Heading3 id="required-ratio-table">2.1. 合格分享率与下载量和保种的关系</Heading3>
| 用户下载量 | 合格分享率(0% 做种) | 合格分享率(100% 做种) |
| :--------: | :-------------------: | :---------------------: |
| 0-5 GB | 0.00 | 0.00 |
| 5-10 GB | 0.15 | 0.00 |
| 10-20 GB | 0.20 | 0.00 |
| 20-30 GB | 0.30 | 0.05 |
| 30-40 GB | 0.40 | 0.10 |
| 40-50 GB | 0.50 | 0.20 |
| 50-60 GB | 0.60 | 0.30 |
| 60-80 GB | 0.60 | 0.40 |
| 80-100 GB | 0.60 | 0.50 |
| 100+ GB | 0.60 | 0.60 |
| 0-5 GiB | 0.00 | 0.00 |
| 5-10 GiB | 0.15 | 0.00 |
| 10-20 GiB | 0.20 | 0.00 |
| 20-30 GiB | 0.30 | 0.05 |
| 30-40 GiB | 0.40 | 0.10 |
| 40-50 GiB | 0.50 | 0.20 |
| 50-60 GiB | 0.60 | 0.30 |
| 60-80 GiB | 0.60 | 0.40 |
| 80-100 GiB | 0.60 | 0.50 |
| 100+ GiB | 0.60 | 0.60 |
<Heading3 id="required-ratio-calculation">合格分享率计算</Heading3>
<Heading3 id="required-ratio-calculation">2.2. 合格分享率计算</Heading3>
**1. 计算合格分享率可能的最大值和最小值**
<Heading4>**2.2.1. 计算合格分享率可能的最大值和最小值**</Heading4>
使用上述表格,在第一列中查看你账号下载量所在的范围。接下来,查看相邻一列的数值。第二列给出了每个下载量对应的最大合格分享率,此时对应 0% 做种率的情形。第三列给出了每个下载资源量对应的最小合格分享率,对应 100% 做种率的情形。
**2. 计算实际的合格分享率**
<Heading4>**2.2.2. 计算实际的合格分享率**</Heading4>
你的实际合格分享率数值将处于最大值和最小值之间。为了计算你的实际合格分享率,系统会首先将最大合格分享率与数值 [1-(做种数/完成数)] 相乘。更直观的表达式如下所示:
<Center>
<Heading2>合格分享率 = 最大合格分享率 × (1 - 做种数/完成数)</Heading2>
</Center>
<Center><Heading3>合格分享率 = 最大合格分享率 × (1 - 做种数/完成数)</Heading3></Center>
- 说明:在上述公式中,`完成数`表示你已下载完成的且未被系统删除的种子数量。如果同一个种子下载两次,公式中只会计算一次。如果下载完成的种子被站点删除了,它就不会被计算在上式之内。
- 说明:在上述公式中,`完成数` 表示你已下载完成的且未被系统删除的种子数量。如果同一个种子下载两次,公式中只会计算一次。如果下载完成的种子被站点删除了,它就不会被计算在上式之内。
- 说明:在上述公式中,`做种数` 是你过去一周做种时间超过 72 小时的平均做种数量。如果一个种子在过去的一周内做种时间不足 72 小时,它将不会计入你的做种数量。请注意,尽管做种数有可能大于完成数,你的做种率最高仍不会超过 100%。
- 说明:在上述公式中,`做种数`是你过去一周做种时间超过 72 小时的平均做种数量。如果一个种子在过去的一周内做种时间不足 72 小时,它将不会计入你的做种数量。请注意,尽管做种数有可能大于完成数,你的做种率最高仍不会超过 100%。
**3. 如有必要,在上述步骤中得到的值会四舍五入到你的最低合格分享率中。**
<Heading4>**2.2.3. 如有必要,在上述步骤中得到的值会四舍五入到你的最低合格分享率中**</Heading4>
这是因为,当做种数等于完成数时,上述公式计算返回的值为 0,但对于大多数账号而言,最低合格分享率要大于 0。
<Heading3 id="required-ratio-details">合格分享率详解</Heading3>
<Heading3 id="required-ratio-details">2.3. 合格分享率详解</Heading3>
- 如果你超过一周没有做种,你的合格分享率就会变为最高分享率。一旦你重新开始做种并持续 72 小时,根据上述公式,你的合格分享率就会降低
- 如果下载量低于 5 GB,你不会被列入分享率监控名单且不会被要求达到某个合格分享率。在此情况下,无论做种比例如何,你的合格分享率都是 0
- 如果你的下载量低于 20 GB 且做种数等于完成数,你的合格分享率将会为 0
- 随着你下载量的增加,你的最小和最大合格分享率会逐渐接近。当你的下载量达到 100GB 时,这两个数值会相等。即当用户下载量大于等于 100GB 后,其最小合格分享率将会恒为 0.6。
- 如果你超过一周没有做种,你的合格分享率就会变为最高分享率。一旦你重新开始做种并持续 72 小时,根据上述公式,你的合格分享率就会降低
- 如果下载量低于 5 GiB,你不会被列入分享率监控名单且不会被要求达到某个合格分享率。在此情况下,无论做种比例如何,你的合格分享率都是 0
- 如果你的下载量低于 20 GiB 且做种数等于完成数,你的合格分享率将会为 0
- 随着你下载量的增加,你的最小和最大合格分享率会逐渐接近。当你的下载量达到 100GiB 时,这两个数值会相等。即当用户下载量大于等于 100GiB 后,其最小合格分享率将会恒为 0.6。
<Heading3 id="required-ratio-examples">合格分享率举例</Heading3>
<Heading3 id="required-ratio-examples">2.4. 合格分享率举例说明</Heading3>
比如,张三下载了 25 GB 资源,通过查询上述表格得知,该数值位于 20~30 GB 范围之间。张三的最大合格分享率是 0.30,最小合格分享率是 0.05。
比如,张三下载了 25 GiB 资源,通过查询上述表格得知,该数值位于 20~30 GiB 范围之间。张三的最大合格分享率是 0.30,最小合格分享率是 0.05。
而张三下载完成了 90 个种子,当前正在做种的有 45 个种子。为了计算张三的实际合格分享率,我们将他的最大合格分享率 0.3 乘以[1-(做种数/完成数)],即: `0.30 × [1 - (45 / 90)] = 0.15`
而张三下载完成了 90 个种子,当前正在做种的有 45 个种子。为了计算张三的实际合格分享率,我们将他的最大合格分享率 0.3 乘以 `[1-(做种数/完成数)]`,即: `0.30 × [1 - (45 / 90)] = 0.15`
计算得出的合格分享率为 0.15,处于最大值 0.30 和最小值 0.05 之间。
若网站所显示的张三的合格分享率大于上述计算值,那是由于在过去一周内,他所做种的 45 个种子尚未达到 72 小时。在这种情况下,系统不会将做种数认定为 45。
<Heading3 id="ratio-watch-overview">分享率监控总则</Heading3>
<Heading2 id="ratio-watch-overview">3. 分享率监控</Heading2>
- 在分享率监控启动之前,每个用户都可以下载 5 GB 资源
- 如果你已经下载了 5 GB 以上资源且你的分享率未达到合格分享率,你将会被列入分享率监控名单,你将有**两周**时间来改善你的分享率,使之高于合格分享率
- 当你处于分享率监控名单时又下载了 10 GB 资源,你的下载权限将会被自动禁用。
- 如果在两周之内你无法脱离分享率监控名单,你将会失去下载权限。此后,你将无法下载更多资源。你的账号仍然可以登录。
- 分享率监控系统是自动运行的,无法被管理员手动干预。
- 在分享率监控启动之前,每个用户都可以下载 5 GiB 资源
- 如果你已经下载了 5 GiB 以上资源且你的分享率未达到合格分享率,你将会被列入分享率监控名单,你将有**两周**时间来改善你的分享率,使之高于合格分享率
- 当你处于分享率监控名单时又下载了 10 GiB 资源,你的下载权限将会被自动封禁;
- 如果在两周之内你无法脱离分享率监控名单,你将会失去下载权限,但你仍能正常访问站点;
- 分享率监控系统是自动运行的,**无法被管理员手动干预**
<Heading3 id="leaving-ratio-watch">脱离分享率监控名单</Heading3>
<Heading3 id="leaving-ratio-watch">3.1. 如何脱离分享率监控名单</Heading3>
为了脱离分享率监控名单,你必须通过发布更多的资源来提高你的分享率,或者通过提高做种数来降低你的合格分享率。要脱离分享率监控名单,你的分享率必须大于等于合格分享率。
为了脱离分享率监控名单,你必须通过发布更多的资源来提高你的分享率,或者通过提高做种数来降低你的合格分享率。要脱离分享率监控名单,你的分享率必须**大于等于合格分享率**
如果在分享率监控期限结束时,你未能提高你的分享率,你将会失去下载权限,你的合格分享率会被临时设定为可能的最高分享率(如同你 0% 做种率的情形)。
因此,失去下载权限后,要恢复合格分享率至原来的水平使其反应你的实际做种率,你需要再次在一周时间内做种 72 小时以上。当达到 72 小时后,合格分享率就会更新,并反映你当前的做种数量,这一点与有下载权限的用户一样。
当你的分享率大于等于合格分享率后,下载权限就会在次日 0 点被恢复。
当你的分享率大于等于合格分享率后,下载权限就会在**次日 0 点**被恢复。
{/*
<Heading2 id="hnr">H&R</Heading2>
<Heading2 id="hnr">3. H&R</Heading2>
<Heading3 id="what-is-hnr">什么是 H&R</Heading3>
H&R,全称 Hit and Run,中文译作下完就跑,指的是下载完成种子后在规定时间内单种分享率不达标或做种时长不达标的行为。一个种子不达标一次,即计为一个 H&R。
H&R,全称 Hit and Run,中文译作下完就跑,指的是下载完成种子后在规定时间内单种分享率不达标或做种时长不达标的行为。一个种子不达标一次,即计为一个 H&R。
在下载一个种子总大小 20% 的数据量后,你就需要满足做种要求,以免积累 H&R。要求的具体内容是,在两周内累计做种达到 48 小时;或是单种分享率达到 1。
+10 -10
View File
@@ -1,21 +1,21 @@
<Heading1 id="content">求种规则</Heading1>
<Heading2 id="1.1">1.1. 不要求违规种子</Heading2>
<Heading2 id="1">1. 不要求违规种子</Heading2>
遵守求种规则是你的责任与义务。 若不守规矩,你的求种会被删,且已支付的上传量不会退还给你。
遵守求种规则是你的责任与义务。若不守规矩,你的求种会被删,且已支付的上传量不会退还给你。
<Heading2 id="1.2">1.2. 一个求种一部影视作品</Heading2>
<Heading2 id="2">2. 一个求种一部影视作品</Heading2>
在一个求种中提请多部电影(例如成龙作品全集)抑或是含糊不清的求种都是不被允许的。 你可能想要多种格式,但你不能全都要,举个例子,你可能需要原盘和 Encode 两种,但你不能同时选择它们,你也可能提出了某个导演多部电影的请求,但这个请求可以被该导演的某部电影应求。
在一个求种中提请多部电影(例如成龙作品全集)抑或是含糊不清的求种都是不被允许的。你可能想要多种格式,但你不能全都要,举个例子,你可能需要原盘和 Encode 两种,但你不能同时选择它们,你也可能提出了某个导演多部电影的请求,但这个请求可以被该导演的某部电影应求。
<Heading2 id="1.3">1.3. 不要因过分挑剔而否决应求</Heading2>
<Heading2 id="3">3. 不要因过分挑剔而否决应求</Heading2>
如果你没有在求种中明确提出你的精细要求(比如比特率或特定版本),你就不能否决应求并随后更改求种描述。 不要因为你的无知否决应求(比如应求的种子可能是转码后的资源但你搞不清楚)。 在此种情况下,你可以向一线支持求助。 当应求种子确实没有满足你已经阐释清除的要求时,你可以否决该应求。
如果你没有在求种中明确提出你的精细要求(比如比特率或特定版本),你就不能否决应求并随后更改求种描述。不要因为你的无知否决应求(比如应求的种子可能是转码后的资源但你搞不清楚)。在此种情况下,你可以向一线支持求助。当应求种子确实没有满足你已经阐释清除的要求时,你可以否决该应求。
<Heading2 id="1.4">1.4. 应求面前,人人平等</Heading2>
<Heading2 id="4">4. 应求面前,人人平等</Heading2>
上传量交易是不被允许的。 通过滥用求种系统来为其他用户牟取便利是不可饶恕的,包括为特定用户量身定制求种(无论是否在求种中写明)。我们严厉禁止模糊化求种要求,而后否决其他人的应求以使某个特定用户能够应求。如被举报,无论是求种者还是被 “钦定” 的应求者都会被警告并扣除该求种相应的上传量。
上传量交易是不被允许的。通过滥用求种系统来为其他用户牟取便利是不可饶恕的,包括为特定用户量身定制求种(无论是否在求种中写明)。我们严厉禁止模糊化求种要求,而后否决其他人的应求以使某个特定用户能够应求。如被举报,无论是求种者还是被「钦定」的应求者都会被警告并扣除该求种相应的上传量。
<Heading2 id="1.5">1.5. 禁止要求求种者上调求种报酬</Heading2>
<Heading2 id="5">5. 禁止要求求种者上调求种报酬</Heading2>
上传量报酬是对助人为乐的奖赏——而不是赎买。 任何求种者不加价就不应求的用户将会面临严厉的惩罚。
上传量报酬是对助人为乐的奖赏——而不是赎买。任何求种者不加价就不应求的用户将会面临严厉的惩罚。
+7 -5
View File
@@ -1,11 +1,13 @@
<Heading1 id="content">标签规则</Heading1>
1.1. 标签应以英文逗号(`,`)分隔,你应使用英文点号(`.`)来分隔标签内的单词。 例如`sci.fi`、`post.rock`。
1. 标签应以英文逗号(`,`)分隔,你应使用英文点号(`.`)来分隔标签内的单词。例如 `sci.fi`、`post.rock`。
1.2. 请使用 [上传页面的官方标签](/upload.php)。 推荐手动添加更详细的标签,如果想不到就不用添加。 请注意`2000s`表示 2000 到 2009 之间。
2. 请使用 [发布页面的官方标签](/upload.php)。推荐手动添加更详细的标签,如果想不到就不用添加。请注意 `2000s` 表示 2000 到 2009 之间。
1.3. 不要添加 “无用” 的标签,如`seen.live`、`awesome`、`kung.fu`(包含在`action`)等。 如果是现场表演,你可以添加`live`。
3. 不要添加「无用」的标签,如 `seen.live`、`awesome`、`kung.fu`(包含在 `action`)等。如果是现场表演,你可以添加 `live`。
1.4. 仅添加电影本身的信息,而不是某个具体版本的信息。 严禁使用`remux`、`encode`、`blu.ray`、`eac3to`等。 请记住,他们仅用以标明同一电影的其他版本,本身并非标签。
4. 仅添加电影本身的信息,而不是某个具体版本的信息。严禁使用 `remux`、`encode`、`blu.ray`、`eac3to` 等。请记住,他们仅用以标明同一电影的其他版本,本身并非标签。
1.5. 如果你对 [上传页面的官方标签](/upload.php) 有疑问,那就不要添加进去。
{/*
5. 如果你对 [发布页面的官方标签](/upload.php) 有疑问,那就不要添加进去。
*/}
+135 -137
View File
@@ -1,6 +1,6 @@
<Heading1 id="content">发布规则</Heading1>
<Heading2 id="introduction">介绍</Heading2>
<Heading2 id="introduction">前言</Heading2>
为保证资源质量,下面的发布规则繁多且详细。为清楚和彻底地解释规则,我们认为这个长度是必要的。每条规则的摘要在其详细说明之前以**粗体**显示,以便于阅读。你还可以在索引中找到相应的规则部分。
@@ -8,7 +8,7 @@
<Heading2 id="1">1. 发布什么</Heading2>
<Heading3 id="1.1">1.1 允许内容</Heading3>
<Heading3 id="1.1">1.1. 允许内容</Heading3>
<Heading4 id="1.1.1">1.1.1. **长片**:长片指的是任意时长大于 45 分钟的电影。如果某部电影于短片而言太长,于长片而言又太短,请查询 [IMDb](https://imdb.com/)。</Heading4>
@@ -20,35 +20,37 @@
<Heading3 id="1.2">1.2. 特别禁止</Heading3>
<Heading4 id="1.2.1">1.2.1. **预售**:任何预售(包括但不限于 CAM、TS、TC、R5、DVDScr都是不允许的。</Heading4>
<Heading4 id="1.2.1">1.2.1. **预售**禁止发布任何预售类资源(包括但不限于 CAM、TS、TC、R5、DVDScr)。</Heading4>
<Heading4 id="1.2.2">1.2.2. **电视节目**:禁止电视节目或电视连续剧。这不包括为电视制作的电影。</Heading4>
<Heading4 id="1.2.2">1.2.2. **电视节目**:禁止发布电视节目或电视连续剧。这不包括为电视制作的电影。</Heading4>
<Heading4 id="1.2.3">1.2.3. **色情**本站不允许任何被 IMDb 添加成人标签的爱情动作片或电影。如果你觉得一部电影被打上成人标签并不公正,请在发布前 [获得批准](forums.php?action=viewthread&threadid=21)。</Heading4>
<Heading4 id="1.2.3">1.2.3. **色情**禁止发布任何被 IMDb 添加成人标签的爱情动作片或电影。如果你觉得一部电影被打上成人标签并不公正,请在发布前 [获得批准](forums.php?action=viewthread&threadid=21)。</Heading4>
<Heading4 id="1.2.4">1.2.4. **MV 集锦**:它们不是完整长度的音乐会、纪录片或短片。</Heading4>
<Heading4 id="1.2.5">1.2.5. **体育视频**:禁止棒球比赛、摔跤比赛、汽车比赛、极限运动剪辑等。有关体育的纪录片是允许的。如果你不太清楚其中的区别,请在发布前 [获得批准](forums.php?action=viewthread&threadid=21)。</Heading4>
<Heading4 id="1.2.5">1.2.5. **体育视频**:禁止发布棒球比赛、摔跤比赛、汽车比赛、极限运动剪辑等。有关体育的纪录片是允许的。如果你不太清楚其中的区别,请在发布前 [获得批准](forums.php?action=viewthread&threadid=21)。</Heading4>
<Heading4 id="1.2.6">1.2.6. **影迷剪辑**:只允许官方发行的内容或电影。</Heading4>
<Heading4 id="1.2.6">1.2.6. **影迷剪辑**:只允许发布官方发行的内容或电影。</Heading4>
<Heading4 id="1.2.7">1.2.7. **视频教程**:任何类型的教学和培训视频都是不允许的。电影制作相关的内容须在发布前 [获得批准](forums.php?action=viewthread&threadid=21)。</Heading4>
<Heading4 id="1.2.7">1.2.7. **视频教程**禁止发布任何类型的教学和培训视频。电影制作相关的内容须在发布前 [获得批准](forums.php?action=viewthread&threadid=21)。</Heading4>
<Heading4 id="1.2.8">1.2.8. **非视频种子**:在任何情况下,你的种子都应包含视频文件,但不允许压缩格式(RAR、ZIP……)。</Heading4>
<Heading4 id="1.2.8">1.2.8. **非视频种子**:在任何情况下,你的种子都应包含视频文件,但不允许压缩格式(RAR、ZIP……)。</Heading4>
<Heading4 id="1.2.9">1.2.9. **打包电影**:一个种子一部电影。包含多部电影的套盒只能原封不动地发布。有关发布套盒的更多信息,参见规则 [1.1.8](#1.1.4)。</Heading4>
<Heading4 id="1.2.9">1.2.9. **打包电影**:一个种子一部电影。包含多部电影的套盒只能以原盘形式发布。有关发布套盒的更多信息,参见规则 [1.1.4](#1.1.4)。</Heading4>
<Heading4 id="1.2.10">1.2.10. **电影与附加内容合在一起**:附加内容必须与电影本体分开发布,除非原封不动地发布原盘。</Heading4>
<Heading4 id="1.2.10">1.2.10. **电影与附加内容合在一起**:附加内容必须与电影本体分开发布,除非以原盘形式发布。</Heading4>
<Heading4 id="1.2.11">1.2.11. **不允许劣质转码**:所有 Rip 使用的源都必须是完整的原盘或原始视频流,即禁止二压。(这包括 BRRip 和经过二压的 DVD5)。</Heading4>
<Heading4 id="1.2.12">1.2.12. **低质量出品**:目前的名单:aXXo、BRrip、CM8、CrEwSaDe、DNL、EVO (WEB-DL 允许)、FaNGDiNG0、FRDS (Remux 允许)、HD2DVD、HDTime、iPlanet、KiNGDOM、Leffe、mHD、mSD、nHD、nikt0、nSD、NhaNc3、PRODJi、RDN、SANTi、 STUTTERSHIT、TERMiNAL (低比特率 UHD)、ViSION、WAF、x0r、YIFY、PSP/iPad/移动设备的预设 Encode。</Heading4>
<Heading4 id="1.2.13">1.2.13. **预告片集锦**不允许预告片集锦。</Heading4>
<Heading4 id="1.2.13">1.2.13. **预告片集锦**禁止发布预告片集锦。</Heading4>
<Heading4 id="1.2.14">1.2.14. **剧集**不允许任何形式的剧集。</Heading4>
<Heading4 id="1.2.14">1.2.14. **剧集**禁止发布剧集(电视连续剧、迷你剧、[OVA](https://baike.baidu.com/item/%E5%8E%9F%E5%88%9B%E5%85%89%E7%9B%98%E5%8A%A8%E7%94%BB/60238524) 等)。</Heading4>
<Heading4 id="1.2.15">1.2.15. **特别禁止内容**不允许发布任何罗列在我们 ~~[黑名单](torrents.php?action=do_not_upload_movie_list)~~(建设中)上的内容。**禁止广告内容**(包括但不限于封装时在视频音频标题处写入的推广链接、种子说明内包含的大尺寸推广图等)。<Important italic>Update! 2021-08-06</Important></Heading4>
<Heading4 id="1.2.15">1.2.15. **特别禁止内容**禁止发布任何罗列在我们 [黑名单](rules.php?p=blacklist) 上的内容。<Important italic>Update! 2022-12-04</Important></Heading4>
<Heading4 id="1.2.16">1.2.16. **禁止广告**(包括但不限于封装时在视频音频标题处写入的推广链接、种子说明内包含的大尺寸推广图等)。<Important italic>Update! 2021-08-06</Important></Heading4>
<Heading2 id="2">2. 必需信息</Heading2>
@@ -58,31 +60,31 @@
<Heading5 id="2.1.1.1">2.1.1.1. Internal Remux 的文件名需要在影片标题后包含(格式或顺序不限)原始发行年、分辨率,以及音视频编码(例如 The.Thing.1982.1080p.AVC.DTS-HD.MA,或 Citizen Kane (1941) 1080p H264 FLAC)。</Heading5>
<Heading5 id="2.1.1.2">2.1.1.2. 文件(夹)名中如包含与资源本身无关的无意义内容,如序号、个人标记等的种子,会被标为可替代。例:2. 无敌浩克。</Heading5>
<Heading5 id="2.1.1.2">2.1.1.2. 文件(夹)名中如包含与资源本身无关的无意义内容,如序号、个人标记等的种子,会被标为可替代。例:2. 无敌浩克。</Heading5>
<Heading5 id="2.1.1.3">2.1.1.3. 对于占据了 [4.0.1](#4.0.1) 中所定义中字槽的种子,如果文件(夹)名中带有非中/英字符,则会被标为可替代。</Heading5>
<Heading5 id="2.1.1.3">2.1.1.3. 对于占据了 [4.0.1](#4.0.1) 中所定义中字槽的种子,如果文件(夹)名中带有非中/英字符,则会被标为可替代。</Heading5>
<Heading4 id="2.1.2">2.1.2. **压制组发行(来自 P2P 组或 Scene 组)不应重命名**,除非它们不满足规则 [2.1.1](#2.1.1) 或我们的文件名要求。</Heading4>
<Heading4 id="2.1.3">2.1.3. **保持文件夹内文件尽可能简洁**。不要包含:样片、截图、desktop.ini/thumbs.db 文件或其他任何与你要发布的内容不完全相关的东西,否则将被标记为可替代。与复制过程相关的文件允许放在 DVD/BD 的目录结构中。考虑到辅种的便利性,请不要在种子内包含字幕文件,而是 [单独上传](subtitles.php)。<Important italic>Update! 2021-06-23</Important></Heading4>
<Heading4 id="2.1.3">2.1.3. **保持文件夹内文件尽可能简洁**。不要包含:样片、截图、desktop.ini/thumbs.db 文件或其他任何与你要发布的内容不完全相关的东西,否则将被标记为可替代。与复制过程相关的文件允许放在 DVD/BD 的目录结构中。考虑到辅种的便利性,请不要在种子内包含字幕文件,而是 [单独上传](subtitles.php)。<Important italic>Update! 2021-06-23</Important></Heading4>
<Heading4 id="2.1.4">2.1.4. **DVD 和 BD 文件目录结构不允许改动,仅顶层文件夹允许重命名**。</Heading4>
<Heading3 id="2.2">2.2. 种子描述</Heading3>
<Heading4 id="2.2.1">2.2.1. **截图:在发布页面的种子描述中,要求至少三张与影片分辨率相同的 PNG 格式的截图。截图应存放在 [官方图床](upload.php?action=image)**。此外,使用 [ptpimg.me](https://ptpimg.me)、[pixhost.to](https://pixhost.to)、[yes.ilikeshots.club](https://yes.ilikeshots.club/)、[imgbox.com](https://imgbox.com) 或 [猫站](https://img.pterclub.com) 图床的外链也可以。</Heading4>
<Heading4 id="2.2.1">2.2.1. **截图:在发布页面的种子描述中,要求至少三张与影片分辨率相同的 PNG 格式的截图。截图应存放在 [官方图床](upload.php?action=image)**。此外,使用 [ptpimg](https://ptpimg.me)、[pixhost.to](https://pixhost.to)、[yes.ilikeshots.club](https://yes.ilikeshots.club/)、[imgbox.com](https://imgbox.com) 或 [猫站](https://s3.pterclub.com/) 图床的外链也可以。</Heading4>
<Heading4 id="2.2.2">2.2.2. **Mediainfo:你必须使用 MediaInfo 或用于蓝光原盘的 BDInfo 提供所发布内容的规格。如果一个种子包含了多个视频文件,则应为每个文件都提供视频 Encode 信息。不得编辑 MediaInfo 日志**。如果你确定它不对,请通过报告提交必要的修正。</Heading4>
<Heading4 id="2.2.2">2.2.2. **MediaInfo:你必须使用 MediaInfo 或用于蓝光原盘的 BDInfo 提供所发布内容的规格。如果一个种子包含了多个视频文件,则应为每个文件都提供视频 Encode 信息。不得编辑 MediaInfo 日志**。如果你确定它不对,请通过报告提交必要的修正。</Heading4>
<Heading4 id="2.2.3">2.2.3. **禁止在种子或种子描述中打广告**。文件名、文件夹名带有的压制组名不广告。</Heading4>
<Heading4 id="2.2.3">2.2.3. **禁止在种子或种子描述中打广告**。文件名、文件夹名带有的压制组名不广告。</Heading4>
<Heading3 id="2.3">2.3. 电影海报:你必须为你的电影提供一张封面图(例如电影海报、VHS 或 DVD 封面)。尽你所能搜索封面,但若是一无所得,则包含片名的一张截图也可。</Heading3>
<Heading4 id="2.3.1">2.3.1. **能获取到官方艺术海报时就不允许影迷自制的作品**。 </Heading4>
<Heading4 id="2.3.1">2.3.1. **能获取到官方艺术海报时就不允许影迷自制的作品**。</Heading4>
<Heading4 id="2.3.2">2.3.2. **影院海报相对而言是首选,且不允许实体碟的照片**。 </Heading4>
<Heading4 id="2.3.2">2.3.2. **影院海报相对而言是首选,且不允许实体碟的照片**。</Heading4>
<Heading4 id="2.3.3">2.3.3. **对于此类图片的存放,要求同截图,见规则 [2.2.1](#2.2.1)**。 </Heading4>
<Heading4 id="2.3.3">2.3.3. **对于此类图片的存放,要求同截图,见规则 [2.2.1](#2.2.1)**。</Heading4>
<Heading3 id="2.4">2.4. 其他发行信息:任何你在发布页面填写的内容应与资源本身相符。</Heading3>
@@ -90,15 +92,15 @@
<Heading5 id="2.4.1.1">2.4.1.1. **在发布音乐会时,影片描述中必须带有完整的曲目列表,IMDb 链接(如果存在)或是零售链接(比如亚马逊)也要有**。</Heading5>
<Heading4 id="2.4.2">2.4.2. **如果你要发布的电影版本与在影院上映的原始版本不同(导演剪辑、未分级、配音……),请勾选版本信息并挑选合适的标签**。如果特殊功能有适用的标签(HDR10、Dolby Vision、Dolby Atmos、3D、2in1),也必须添加。完整的标签列表见 [此处](wiki.php?action=article&id=2)。</Heading4>
<Heading4 id="2.4.2">2.4.2. **如果你要发布的电影版本与在影院上映的原始版本不同(导演剪辑、未分级、配音……),请勾选版本信息并挑选合适的标签**。如果特殊功能有适用的标签(HDR10、Dolby Vision、Dolby Atmos、3D、2in1),也必须添加。完整的标签列表见 [此处](wiki.php?action=article&id=2)。</Heading4>
<Heading4 id="2.4.3">2.4.3. **如果你正在发布你自己的 Encode 或 Rip 作品,则应勾选自制**。</Heading4>
<Heading4 id="2.4.3">2.4.3. **如果你正在发布你自己的 Encode 或 Rip 作品,则应勾选自制**。</Heading4>
<Heading4 id="2.4.4">2.4.4. **对于所有的影片,字幕信息都是必填项**。</Heading4>
<Heading4 id="2.4.5">2.4.5. **如果你发布的资源有任何可在来源站获取到的相关信息(例如源、注释、x264 日志……),则你必须将之填入种子描述**。如果是你自制的影片,提供这些信息也是我们鼓励的。</Heading4>
<Heading4 id="2.4.6">2.4.6. **你给电影添加的标签应是客观的描述**。 IMDb 标签是权威的,而不可信的(主观的、有政治倾向的)标签则会被删除。标签应用于标志宽泛的类型(例如 drama 或 sci.fi),而非具体的已经有记录或更适用于合集的东西(例如 steven.spielberg、korean、imdb.top.250 等)。</Heading4>
<Heading4 id="2.4.6">2.4.6. **你给电影添加的标签应是客观的描述**。IMDb 标签是权威的,而不可信的(主观的、有政治倾向的)标签则会被删除。标签应用于标志宽泛的类型(例如 drama 或 sci.fi),而非具体的已经有记录或更适用于合集的东西(例如 steven.spielberg、korean、imdb.top.250 等)。</Heading4>
<Heading4 id="2.4.7">2.4.7. **如有条件,请花点时间添加预告片,或是任何其他能够促使用户下载你种子的信息**。小心不要造成剧透。</Heading4>
@@ -116,39 +118,39 @@
<Heading4 id="3.1.2">3.1.2. **SD Encode 必须使用 x264 编码和 MKV 容器**。</Heading4>
<Heading4 id="3.1.3">3.1.3. **在电影找不到未劣质转码的首选格式时,错误的编解码器、容器和分辨率也许可以容忍**。如果电影能获取到正确格式,则不能再发布错误格式的,除非存在明显的质量提升。见相关的 [共存](#h4.1)[替代](#h5.2) 规则或到 [这里](forums.php?action=viewthread&threadid=22) 询问例外情况。</Heading4>
<Heading4 id="3.1.3">3.1.3. **在电影找不到未劣质转码的首选格式时,错误的编解码器、容器和分辨率也许可以容忍**。如果电影能获取到正确格式,则不能再发布错误格式的,除非存在明显的质量提升。见相关的 [共存](#4.1)/[替代](#5.2) 规则或到 [这里](forums.php?action=viewthread&threadid=22) 询问例外情况。</Heading4>
<Heading4 id="3.1.4">3.1.4. **不允许以 Encode 作品为源再次进行压制**。</Heading4>
<Heading4 id="3.1.5">3.1.5. **一部影片下,如已存在 720p 的画面更好的蓝光 Encode,则该组内所有标清 Encode 将被删除**。同理,若站点已存在更好的 720p 蓝光 Encode,则禁止再发布标清 Encode。例外:如 DVD 内容与蓝光存在实质性差异,则允许 DVD Encode 与 720p 蓝光 Encode 共存。或者你认为手中的标清 Encode 具有**特别的价值**,请移步 [我能发布它吗](forums.php?action=viewthread&threadid=21)。<Important italic>Update! 2021-08-06</Important></Heading4>
<Heading4 id="3.1.6">3.1.6. 更多关于标清共存的信息,参见 [相关规则](#h4.1)。</Heading4>
<Heading4 id="3.1.6">3.1.6. 更多关于标清共存的信息,参见 [相关规则](#4.1)。</Heading4>
<Heading3 id="3.2">3.1. 高清(HD</Heading3>
<Heading4 id="3.2.1">3.2.1. **允许的分辨率有 720p(最大分辨率为 1280×720 像素)和 1080p(最大分辨率为 1920×1080p**。</Heading4>
<Heading4 id="3.2.1">3.2.1. **允许的分辨率有 720p(最大分辨率为 1280×720 像素)和 1080p(最大分辨率为 1920×1080 像素**。</Heading4>
<Heading4 id="3.2.2">3.2.2. **HD Encode 必须使用 x264 编码和 MKV 容器**。(允许 HDR x265 1080p Encode,详见 [4.2.2](#4.2.2)。)</Heading4>
<Heading4 id="3.2.3">3.2.3. **在电影找不到未劣质转码的首选格式时,错误的编解码器、容器和分辨率也许可以容忍**。如果电影能获取到正确格式,则不能再发布错误格式的,除非存在明显的质量提升。见相关的 [共存](#h4.1)[替代](#h5.2) 规则或到 [这里](forums.php?action=viewthread&threadid=22) 询问例外情况。</Heading4>
<Heading4 id="3.2.3">3.2.3. **在电影找不到未劣质转码的首选格式时,错误的编解码器、容器和分辨率也许可以容忍**。如果电影能获取到正确格式,则不能再发布错误格式的,除非存在明显的质量提升。见相关的 [共存](#4.1)/[替代](#5.2) 规则或到 [这里](forums.php?action=viewthread&threadid=22) 询问例外情况。</Heading4>
<Heading4 id="3.2.4">3.2.4. **高清 Encode 必须源自 Blu-ray、HD-DVD、HDTV 或 WEB**。任何其他源都应 [获得批准](forums.php?action=viewthread&threadid=21)。</Heading4>
<Heading4 id="3.2.5">3.2.5. 更多关于高清共存的信息,参见 [相关规则](#h4.2)。</Heading4>
<Heading4 id="3.2.5">3.2.5. 更多关于高清共存的信息,参见 [相关规则](#4.2)。</Heading4>
<Heading3 id="3.3">3.3. 超高清(UHD</Heading3>
<Heading4 id="3.3.1">3.3.1. **允许的分辨率是 2160p(最大分辨率为 4096×2160 像素)**。</Heading4>
<Heading4 id="3.3.2">3.3.2. **HDR (High Dynamic Range) 超高清源必须在编码时保持此特性**。</Heading4>
<Heading4 id="3.3.2">3.3.2. **HDR (High Dynamic Range) 或杜比视界 (Dolby Vision) 超高清源必须在编码时保持此特性并使用 MKV 容器**。<Important italic>Update! 2022-12-06</Important></Heading4>
<Heading4 id="3.3.3">3.3.3. **超高清 Encode 必须使用 x265 编码和 MKV 容器。Web 源超高清 SDR 允许使用 x264 编码**。<Important italic>Update! 2021-08-06</Important></Heading4>
<Heading5 id="3.3.3.1">3.3.3.1. **SDR 超高清 Encode 若被规则 [4.3.1.2](#4.3.1.2) 允许,则可使用 x264 编码**。</Heading5>
<Heading4 id="3.3.4">3.3.4. **在电影找不到未劣质转码的首选格式时,错误的编解码器、容器和分辨率也许可以容忍**。如果电影能获取到正确格式,则不能再发布错误格式的,除非存在明显的质量提升。见相关的 [共存](#h4.1)[替代](#h5.2) 规则或到 [这里](forums.php?action=viewthread&threadid=22) 询问例外情况。</Heading4>
<Heading4 id="3.3.4">3.3.4. **在电影找不到未劣质转码的首选格式时,错误的编解码器、容器和分辨率也许可以容忍**。如果电影能获取到正确格式,则不能再发布错误格式的,除非存在明显的质量提升。见相关的 [共存](#4.1)/[替代](#5.2) 规则或到 [这里](forums.php?action=viewthread&threadid=22) 询问例外情况。</Heading4>
<Heading4 id="3.3.5">3.3.5. 更多关于超高清共存的信息,参见 [相关规则](#h4.3)。</Heading4>
<Heading4 id="3.3.5">3.3.5. 更多关于超高清共存的信息,参见 [相关规则](#4.3)。</Heading4>
<Heading3 id="3.4">3.4. 原盘</Heading3>
@@ -158,65 +160,63 @@
<Heading4 id="3.4.2">3.4.2. **DVD 原盘必须使用 VOB_IFO 容器(VIDEO_TS 文件夹和内容)**。</Heading4>
<Heading5 id="3.4.2.1">3.4.2.1. DVD5 存在单碟最大 4.37 GiB 的限制。DVD9 存在单碟最大 7.95 GiB 的限制。 </Heading5>
<Heading5 id="3.4.2.1">3.4.2.1. DVD5 存在单碟最大 4.37 GiB 的限制。DVD9 存在单碟最大 7.95 GiB 的限制。</Heading5>
<Heading4 id="3.4.3">3.4.3. **HDTV 原始抓流必须使用 TS 或 MKV 容器**。 </Heading4>
<Heading4 id="3.4.3">3.4.3. **HDTV 原始抓流必须使用 TS 或 MKV 容器**。</Heading4>
<Heading4 id="3.4.4">3.4.4. **蓝光原盘和 DIY 原盘应使用 M2TS 或 ISO 容器**。</Heading4>
<Heading5 id="3.4.4.1">3.4.4.1. BD25 存在单碟最大 23.28 GiB 的限制。BD50 存在单碟最大 46.57 GiB 的限制。BD66 存在单碟最大 61.47 GiB 的限制。BD100 存在单碟最大 93.13 GiB 的限制。 </Heading5>
<Heading5 id="3.4.4.1">3.4.4.1. BD25 存在单碟最大 23.28 GiB 的限制。BD50 存在单碟最大 46.57 GiB 的限制。BD66 存在单碟最大 61.47 GiB 的限制。BD100 存在单碟最大 93.13 GiB 的限制。</Heading5>
<Heading4 id="3.4.5">3.4.5. **蓝光 Remux 必须使用 MKV 容器**。 Remux 种子由原始(或无损压缩)的音视频组成,简单地混流在一起即可。</Heading4>
<Heading4 id="3.4.5">3.4.5. **蓝光 Remux 必须使用 MKV 容器**。Remux 种子由原始(或无损压缩)的音视频组成,简单地混流在一起即可。</Heading4>
<Heading5 id="3.4.5.1">3.4.5.1. **Remux 必须始终使用从源光盘能获取到的最优质量轨道**。 </Heading5>
<Heading5 id="3.4.5.1">3.4.5.1. **Remux 必须始终使用从源光盘能获取到的最优质量轨道**。</Heading5>
<Heading5 id="3.4.5.2">3.4.5.2. **Remux 必须以下列顺序混流:视频 - 主音轨 (标为默认) - 次音轨 - 字幕** </Heading5>
<Heading5 id="3.4.5.3">3.4.5.3. **2.0 及以下的 PCM 和 DTS-HD MA 的音轨必须转码到 FLAC,请勿将 24 bit DTS-HD MA 转换成 16 bit。2.1 及以上 PCM 必须转码到 DTS-HD MA 或 FLAC**。 </Heading5>
<Heading5 id="3.4.5.3">3.4.5.3. **2.0 及以下的 PCM 和 DTS-HD MA 的音轨必须转码到 FLAC,请勿将 24 bit DTS-HD MA 转换成 16 bit。2.1 及以上 PCM 必须转码到 DTS-HD MA 或 FLAC**。</Heading5>
<Heading5 id="3.4.5.4">3.4.5.4. **Remux 允许 SRT 字幕**。 </Heading5>
<Heading5 id="3.4.5.4">3.4.5.4. **Remux 允许 SRT 字幕**。</Heading5>
<Heading5 id="3.4.5.5">3.4.5.5. **杜比视界 Remux 可以 MP4 容器的形式存在**。详见[5.2.1.2](#5.2.1.2) 。 </Heading5>
<Heading5 id="3.4.5.5">3.4.5.5. **Remux 如勾选「自制」,须提供 eac3to log**。转载的 Remux 如有可能,也建议贴上。</Heading5>
<Heading5 id="3.4.5.6">3.4.5.6. **Remux 如勾选 “自制”,须提供 eac3to log**。转载的 Remux 如有可能,也建议贴上。 </Heading5>
<Heading4 id="3.4.6">3.4.6. **仅包含附加内容的原盘必须与主碟一起制成单个种子发布**。</Heading4>
<Heading4 id="3.4.6">3.4.6. **仅包含附加内容的原盘必须与主碟一起制成单个种子发布**。 </Heading4>
<Heading4 id="3.4.7">3.4.7. 更多关于原盘种子共存的信息,参见 [相关规则](#h4.4)。 </Heading4>
<Heading4 id="3.4.7">3.4.7. 更多关于原盘种子共存的信息,参见 [相关规则](#4.4)。</Heading4>
<Heading3 id="3.5">3.5. 附加内容</Heading3>
<Heading4 id="3.5.1">3.5.1. **附加内容是包含在电影官方发行中的视频材料,但不是电影主体的任何一个版本(幕后花絮、采访……)**。</Heading4>
<Heading5 id="3.5.1.1">3.5.1.1. **附加内容种子必须在发布页面勾选非电影主体选项以标记**。 </Heading5>
<Heading5 id="3.5.1.1">3.5.1.1. **附加内容种子必须在发布页面勾选非电影主体选项以标记**。</Heading5>
<Heading4 id="3.5.2">3.5.2. **附加内容仅在其包含于任一官方零售发行的完整版时允许发布**。</Heading4>
<Heading5 id="3.5.2.1">3.5.2.1. **附加内容必须以发行商/版本指明来源,见规则 [2.5.2](#2.5.2) 以了解更多关于版本信息的内容**。 </Heading5>
<Heading5 id="3.5.2.1">3.5.2.1. **附加内容必须以发行商/版本指明来源,见规则 [2.4.2](#2.4.2) 以了解更多关于版本信息的内容**。</Heading5>
<Heading4 id="3.5.3">3.5.3. **仅包含附加内容的光盘必须与主体光盘制成同一个种子一起发布**。 </Heading4>
<Heading4 id="3.5.3">3.5.3. **仅包含附加内容的光盘必须与主体光盘制成同一个种子一起发布**。</Heading4>
<Heading4 id="3.5.4">3.5.4. **拥有 IMDb 页面的附加内容必须单独发布**。 </Heading4>
<Heading4 id="3.5.4">3.5.4. **拥有 IMDb 页面的附加内容必须单独发布**。</Heading4>
<Heading4 id="3.5.5">3.5.5. 更多关于附加内容种子共存的信息,参见 [相关规则](#h4.5)。 </Heading4>
<Heading4 id="3.5.5">3.5.5. 更多关于附加内容种子共存的信息,参见 [相关规则](#4.5)。</Heading4>
<Heading3 id="3.6">3.6. 外挂字幕</Heading3>
<Heading4 id="3.6.1">3.6.1. **用户上传的字幕应与对应种子的视频文件同步,否则会被直接删除**。 </Heading4>
<Heading4 id="3.6.1">3.6.1. **用户上传的字幕应与对应种子的视频文件同步,否则会被直接删除**。</Heading4>
<Heading4 id="3.6.2">3.6.2. **站点允许上传的字幕格式有 .sub、.idx、.sup、.srt、.vtt、.ass、.smi、.ssa**。此外,也允许压缩打包上传,支持 .rar、.zip、.7z、.tar、.tgz、.tar.gz。 </Heading4>
<Heading4 id="3.6.2">3.6.2. **站点允许上传的字幕格式有 .sub、.idx、.sup、.srt、.vtt、.ass、.smi、.ssa**。此外,也允许压缩打包上传,支持 .rar、.zip、.7z、.tar、.tgz、.tar.gz。</Heading4>
<Heading4 id="3.6.3">3.6.3. **字幕文件建议采用与对应视频文件相一致的文件命名以方便使用**。你也可以在尾部增加用以标明语言的字段,如Monsters.Inc.2001.1080p.BluRay.DTS.x264.D-Z0N3.chs.srt”。 </Heading4>
<Heading4 id="3.6.3">3.6.3. **字幕文件建议采用与对应视频文件相一致的文件命名以方便使用**。你也可以在尾部增加用以标明语言的字段,如Monsters.Inc.2001.1080p.BluRay.DTS.x264.D-Z0N3.chs.srt」。</Heading4>
<Heading4 id="3.6.4">3.6.4. **字幕文件应以 Unicode 编码为佳**。 </Heading4>
<Heading4 id="3.6.4">3.6.4. **字幕文件应以 Unicode 编码为佳**。</Heading4>
<Heading4 id="3.6.5">3.6.5. **对于单文件电影,请直接上传单个的字幕文件,不要将同一部电影的不同语种字幕文件一同打包上传**。如,在一个压缩包内同时囊括简中、繁中、中英,这是不允许的,你应将它们分别上传。**对于迷你剧,则可以将每一集对应的字幕合并打包上传**。<Important italic>Update! 2021-08-06</Important> </Heading4>
<Heading4 id="3.6.5">3.6.5. **对于单文件电影,请直接上传单个的字幕文件,不要将同一部电影的不同语种字幕文件一同打包上传**。如,在一个压缩包内同时囊括简中、繁中、中英,这是不允许的,你应将它们分别上传。<Important italic>Update! 2021-08-06</Important></Heading4>
<Heading2 id="4">4. 共存</Heading2>
<Heading3 id="4.0">4.0 总览</Heading3>
<Heading3 id="4.0">4.0. 总览</Heading3>
<Heading4 id="4.0.1">4.0.1. **下面是在无特殊版本的情况下,一部影视作品的完整槽位(种子发布到站点后能占据的空余坑位,一旦占满,后来者就必须针对现有种子发起替代)表**<Important italic>Update! 2021-08-06</Important></Heading4>
<Heading4 id="4.0.1">4.0.1. **下面是在无特殊版本的情况下,一部影视作品的完整槽位表**<Important italic>Update! 2021-08-06</Important></Heading4>
<div className="TableRuleSlot">
@@ -238,85 +238,85 @@
</div>
<Heading4 id="4.0.2">4.0.2. **槽位类型**:指示了该槽位所容纳资源的类型并方便称呼和记忆,依据种子的处理、字幕、音轨情况划分。</Heading4>
<Heading4 id="4.0.2">4.0.2. **槽位类型**槽位指的是种子发布到站点后能占据的空余坑位,一旦占满,后来者就必须针对现有种子发起替代。槽位类型指示了该槽位所容纳资源的类型并方便称呼和记忆,依据种子的处理、字幕、音轨情况划分。</Heading4>
<Heading5 id="4.0.2.1">4.0.2.1. 进入 **“中字质量槽”** 的种子**必须**内封中字(简繁不限)。可以进入中字槽的字幕组合有:中、中+英、中+原(指原始语言字幕,日语字幕),这三大类字幕组合的种子只进入中字质量槽。其他所有字幕组合,均进入英字质量槽。 </Heading5>
<Heading5 id="4.0.2.1">4.0.2.1. 进入中字质量槽的种子**必须**内封中字(简繁不限)。可以进入中字槽的字幕组合有:中、中+英、中+原(指原始语言字幕,日语片就是日语字幕),这三大类字幕组合的种子只进入中字质量槽。其他所有字幕组合,均进入英字质量槽。</Heading5>
<Heading5 id="4.0.2.2">4.0.2.2. 进入 **“中字质量槽”** 的外语片,除原始语言音轨以外,含非国配音轨会被视为冗余,含国配音轨则进入**特色槽**。 </Heading5>
<Heading5 id="4.0.2.2">4.0.2.2. 进入中字质量槽的外语片,除原始语言音轨以外,含非国配音轨会被视为冗余,含国配音轨则进入**特色槽**。</Heading5>
<Heading5 id="4.0.2.3">4.0.2.3. 进入 **“英字质量槽”** 的种子,非英语电影**必须**内封或外挂英字,并推荐将英字设为默认字幕。通常,种子组的首个无字幕种子会进入该槽位,如果其是非英语电影则会被标记为可替代,更多请看 [5.4.14](#5.4.14) 。<Important italic>Update! 2021-08-06</Important> </Heading5>
<Heading5 id="4.0.2.3">4.0.2.3. 进入英字质量槽的种子,非英语电影**必须**内封或外挂英字,并推荐将英字设为默认字幕。通常,种子组的首个无字幕种子会进入该槽位,如果其是非英语电影则会被标记为可替代,更多请看 [5.4.14](#5.4.14) 。<Important italic>Update! 2021-08-06</Important> </Heading5>
<Heading4 id="4.0.3">4.0.3. **字幕要求**:囊括了中文的多语字幕(如中英双语字幕等),一律按中文字幕标记和处理。 </Heading4>
<Heading4 id="4.0.3">4.0.3. **字幕要求**:囊括了中文的多语字幕(如中英双语字幕等),一律按中文字幕标记和处理。</Heading4>
<Heading4 id="4.0.4">4.0.4. **槽位类型**:指示了该槽位所容纳资源的类型并方便称呼和记忆。**说明**:阐明该槽位发起重复和替代的依据,以及替代因素的优先级排序。</Heading4>
<Heading5 id="4.0.4.1">4.0.4.1. **质量槽**:该槽位仅以压制质量为考虑因素,压制应在保证压制后画面与源基本无可感知差异的前提下尽可能减小码率,音轨应满足 [5.4.3](#5.4.3) 的指导要求,不允许包含冗余的配音音轨。 </Heading5>
<Heading5 id="4.0.4.1">4.0.4.1. **质量槽**:该槽位仅以压制质量为考虑因素,压制应在保证压制后画面与源基本无可感知差异的前提下尽可能减小码率,音轨应满足 [5.4.3](#5.4.3) 的指导要求,不允许包含冗余的配音音轨。</Heading5>
<Heading5 id="4.0.4.2">4.0.4.2. **存档槽**:该槽位以体积和压制质量为考虑因素,压制应在保证质量过关的前提下尽可能减小码率,该槽位基本以 0day/Scene 压制作品为参照。不允许包含冗余的配音音轨。 </Heading5>
<Heading5 id="4.0.4.2">4.0.4.2. **存档槽**:该槽位以体积和压制质量为考虑因素,压制应在保证质量过关的前提下尽可能减小码率,该槽位基本以 0day/Scene 压制作品为参照。不允许包含冗余的配音音轨。</Heading5>
<Heading5 id="4.0.4.3">4.0.4.3. **特色槽:仅外语片适用**。该槽位以内容丰富程度为主要考虑因素,压制应在保证质量过关的前提下尽可能多地加入特效字幕、国配音轨等特色内容。发布者必须在种子描述中针对特色的具体情况作出说明,比如,增加了某某国配,增加了怎样的特效字幕并配以截图。</Heading5>
<Heading6 id="4.0.4.3.1">4.0.4.3.1. **国配**:仅外语电影(不包括粤语等方言电影)可添加此标记。仅普通话(含台湾普通话)被视为国配,粤语等地方方言不被视为国配。 </Heading6>
<Heading6 id="4.0.4.3.1">4.0.4.3.1. **国配**:仅外语电影(不包括粤语等方言电影)可添加此标记。仅普通话(含台湾普通话)被视为国配,粤语等地方方言不被视为国配。</Heading6>
<Heading6 id="4.0.3.3.2">4.0.3.3.2. **特效字幕**:带有反光、闪烁、移动、翻滚、漂移、颜色、二维、三维、分裂、组合等特殊效果的字幕,应用特效的目的是与电影场景尽可能匹配、和谐。简单的变色、字体处理不被视为特效,如果你不确定自己种子的字幕是否属于特效字幕,可以在论坛 [求助区](forums.php?action=viewforum&forumid=31) 询问。在发布时,你必须提供能展现特效字幕绚丽性的截图。特效截图无分辨率和格式要求,至少两张,**必须截取影片剧情相关部分的特效**(不要截取片头片尾的人员名单或片商名称特效等等没有意义的部分),不要和影片截图混放,且不计入 [三张截图的基本要求](#h2.2),也就是共计至少五张。<Important italic>Update! 2021-08-06</Important> </Heading6>
<Heading6 id="4.0.3.3.2">4.0.3.3.2. **特效字幕**:带有反光、闪烁、移动、翻滚、漂移、颜色、二维、三维、分裂、组合等特殊效果的字幕,应用特效的目的是与电影场景尽可能匹配、和谐。简单的变色、字体处理不被视为特效,如果你不确定自己种子的字幕是否属于特效字幕,可以在论坛 [求助区](forums.php?action=viewforum&forumid=31) 询问。在发布时,你必须提供能展现特效字幕绚丽性的截图。特效截图无分辨率和格式要求,至少两张,**必须截取影片剧情相关部分的特效**(不要截取片头片尾的人员名单或片商名称特效等等没有意义的部分),不要和影片截图混放,且不计入 [三张截图的基本要求](#2.2),也就是共计至少五张。<Important italic>Update! 2021-08-06</Important> </Heading6>
<Heading5 id="4.0.4.4">4.0.4.4. **Remux 槽**:该槽位的首要考虑因素是 Remux 源音视频轨的质量。与特色槽、DIY 槽不同,该槽位不考虑特效中字、国配音轨。 </Heading5>
<Heading5 id="4.0.4.4">4.0.4.4. **Remux 槽**:该槽位的首要考虑因素是 Remux 源音视频轨的质量。与特色槽、DIY 槽不同,该槽位不考虑特效中字、国配音轨。</Heading5>
<Heading5 id="4.0.4.5">4.0.4.5. **原盘槽**:该槽位的首要考虑因素是原盘音视频轨的质量。 </Heading5>
<Heading5 id="4.0.4.5">4.0.4.5. **原盘槽**:该槽位的首要考虑因素是原盘音视频轨的质量。</Heading5>
<Heading5 id="4.0.4.6">4.0.4.6. **DIY 原盘槽:仅外语片适用**。该槽位的首要考虑因素是原盘音视频轨的质量。在质量相同的前提下,应尽可能多地加入特效字幕、国配音轨等特色内容。发布者必须在种子描述中针对加入的特色内容作出说明,比如,增加了某某国配,增加了怎样的特效字幕并配以截图。请注意,**中文影片(包括粤语闽南语等方言影片)不享受此规则与槽位**,不允许上传华语影片的 DIY 原盘。如果你认为手中的华语影片 DIY 原盘具有**特别的价值**,请移步 [我能发布它吗](forums.php?action=viewthread&threadid=21)。<Important italic>Update! 2021-08-06</Important> </Heading5>
<Heading4 id="4.0.5">4.0.5. **对所有槽位**:方言(如粤语)电影不能使用国语配音” “特效字幕标记,其中的普通话配音音轨也不被视为冗余。 </Heading4>
<Heading4 id="4.0.5">4.0.5. **对所有槽位**:方言(如粤语)电影不能使用国语配音」「特效字幕标记,其中的普通话配音音轨也不被视为冗余。</Heading4>
<Heading3 id="4.1">4.1. 标清</Heading3>
<Heading4 id="4.1.1">4.1.1. **对于给定电影,提供 1 个英字质量槽,1 个中字质量槽,共计 2 个 x264 Encode 槽位**。<Important italic>New! 2021-08-06</Important> </Heading4>
<Heading4 id="4.1.2">4.1.2. 更多关于标清发布的信息,参见 [相关规则](#h3.1)。 </Heading4>
<Heading4 id="4.1.2">4.1.2. 更多关于标清发布的信息,参见 [相关规则](#3.1)。</Heading4>
<Heading3 id="4.2">4.2. 高清</Heading3>
<Heading4 id="4.2.1">4.2.1. **对于给定电影,4 个不同的 x264 720p Encode 和 4 个不同的 x264 1080p Encode 可以共存**。</Heading4>
<Heading5 id="4.2.1.1">4.2.1.1. **每组包含一个中字质量槽,一个英字质量槽,一个存档槽和一个特色槽**。存档槽的编码应趋向压缩程度更高、更紧凑,而质量槽应趋向尽可能高的质量。作为参考,存档槽的 Encode 应至少比质量槽小约 20% 才能共存。 </Heading5>
<Heading5 id="4.2.1.1">4.2.1.1. **每组包含一个中字质量槽,一个英字质量槽,一个存档槽和一个特色槽**。存档槽的编码应趋向压缩程度更高、更紧凑,而质量槽应趋向尽可能高的质量。作为参考,存档槽的 Encode 应至少比质量槽小约 20% 才能共存。</Heading5>
<Heading4 id="4.2.2">4.2.2. **另外,还有 2 个额外的槽位留给 HDR x265 1080p Encode**。它与规则 [4.2.1](#4.2.1) 所定义的槽位相独立,且互不干涉。该组槽位分别留给中字槽和英字槽的尽可能高质量的编码。**不允许发布 SDR x265 1080p Encode**。例外:动画电影可以发布 SDR 10-bit x265 1080p Encode。**如欲发布 SDR 10-bit x264 Encode,请先 [获得批准](forums.php?action=viewthread&threadid=21)**,由于此类压制具有一定先锋实验性质,故其音轨、字幕等要求可以酌情放宽。<Important italic>Update! 2022-11-06</Important></Heading4>
<Heading4 id="4.2.3">4.2.3. 更多关于高清发布的信息,参见 [相关规则](#h3.2)。 </Heading4>
<Heading4 id="4.2.3">4.2.3. 更多关于高清发布的信息,参见 [相关规则](#3.2)。</Heading4>
<Heading3 id="4.3">4.3. 超高清</Heading3>
<Heading4 id="4.3.1">4.3.1. **对于给定电影,有 4 个 2160p Encode 可以共存**。</Heading4>
<Heading5 id="4.3.1.1">4.3.1.1. **每组包含一个中字质量槽,一个英字质量槽,一个存档槽和一个特色槽**。存档槽的编码应趋向压缩程度更高、更紧凑,而质量槽应趋向尽可能高的质量。作为参考,存档槽的 Encode 应至少比质量槽小约 20% 才能共存。 </Heading5>
<Heading5 id="4.3.1.1">4.3.1.1. **每组包含一个中字质量槽,一个英字质量槽,一个存档槽和一个特色槽**。存档槽的编码应趋向压缩程度更高、更紧凑,而质量槽应趋向尽可能高的质量。作为参考,存档槽的 Encode 应至少比质量槽小约 20% 才能共存。</Heading5>
<Heading5 id="4.3.1.2">4.3.1.2. **如果提供了足够多的对比截图证明其优于既存的高清源,则一个 SDR 种子可占据规则 [4.3.1.1](#4.3.1.1) 定义的存档槽**。</Heading5>
<Heading4 id="4.3.2">4.3.2. 更多关于超高清发布的信息,参见 [相关规则](#h3.3)。 </Heading4>
<Heading4 id="4.3.2">4.3.2. 更多关于超高清发布的信息,参见 [相关规则](#3.3)。</Heading4>
<Heading3 id="4.4">4.4. 原盘</Heading3>
<Heading4 id="4.4.1">4.4.1. **允许存在一个 NTSC DVD 原盘种子和一个 PAL DVD 原盘种子。两个槽位都应以能获取到的最优质源占据,由管理决定**。 </Heading4>
<Heading4 id="4.4.1">4.4.1. **允许存在一个 NTSC DVD 原盘种子和一个 PAL DVD 原盘种子。两个槽位都应以能获取到的最优质源占据,由管理决定**。</Heading4>
<Heading4 id="4.4.2">4.4.2. **720p 下,允许存在一个原盘种子和一个 Remux 种子**。两个槽位都应以能获取到的最优质源占据,原盘第二考虑国配,Remux 第二考虑内封中字,由管理决定。 </Heading4>
<Heading4 id="4.4.2">4.4.2. **720p 下,允许存在一个原盘种子和一个 Remux 种子**。两个槽位都应以能获取到的最优质源占据,原盘第二考虑国配,Remux 第二考虑内封中字,由管理决定。</Heading4>
<Heading4 id="4.4.3">4.4.3. **1080p/2160p 下,各允许存在一个原盘种子,一个 DIY 原盘种子和一个 Remux 种子**。三个槽位都应以能获取到的最优质源占据,由管理决定。 </Heading4>
<Heading4 id="4.4.3">4.4.3. **1080p/2160p 下,各允许存在一个原盘种子,一个 DIY 原盘种子和一个 Remux 种子**。三个槽位都应以能获取到的最优质源占据,由管理决定。</Heading4>
<Heading4 id="4.4.4">4.4.4. 更多关于原盘发布的信息,参见 [相关规则](#h3.4)。 </Heading4>
<Heading4 id="4.4.4">4.4.4. 更多关于原盘发布的信息,参见 [相关规则](#3.4)。</Heading4>
<Heading3 id="4.5">4.5. 附加内容</Heading3>
<Heading4 id="4.5.1">4.5.1. **每种分辨率(SD、720p、1080p 还额外允许 Remux)允许存在一个含附加内容的合集**。 </Heading4>
<Heading4 id="4.5.1">4.5.1. **每种分辨率(SD、720p、1080p 还额外允许 Remux)允许存在一个含附加内容的合集**。</Heading4>
<Heading4 id="4.5.2">4.5.2. **假设内容存在实际区别,则来自不同版本的附加内容合集可以共存**。若无区别,该槽位应留给最完整的合集。 </Heading4>
<Heading4 id="4.5.2">4.5.2. **假设内容存在实际区别,则来自不同版本的附加内容合集可以共存**。若无区别,该槽位应留给最完整的合集。</Heading4>
<Heading3 id="4.6">4.6. 其他</Heading3>
<Heading4 id="4.6.1">4.6.1. **允许电影的每种剪辑版本(影院/导演、限制级/未分级……)拥有一组独立的槽位。另外,各类 HDR 格式各自拥有一组独立的槽位**。<Important italic>Update! 2021-08-06</Important> </Heading4>
<Heading4 id="4.6.2">4.6.2. **外语电影(不包括粤语等方言电影)的国语配音种子(同时包含原声和配音音轨更好)进入特色槽**。 </Heading4>
<Heading4 id="4.6.2">4.6.2. **外语电影(不包括粤语等方言电影)的国语配音种子(同时包含原声和配音音轨更好)进入特色槽**。</Heading4>
<Heading4 id="4.6.3">4.6.3. **非英语电影的英配种子(双音轨更好)可拥有一个额外的英字质量槽**。即使英配电影的内封字幕情况符合中字质量槽标准,它也优先进入英字质量槽。 **方言影片如果不包含国配或英配则可拥有一个额外的中字质量槽**。即使内封字幕情况符合英字槽条件,它也优先进入中字质量槽。<Important italic>Update! 2021-08-14</Important> </Heading4>
<Heading4 id="4.6.3">4.6.3. **非英语电影的英配种子(双音轨更好)可拥有一个额外的英字质量槽**。即使英配电影的内封字幕情况符合中字质量槽标准,它也优先进入英字质量槽。**方言影片如果不包含国配或英配则可拥有一个额外的中字质量槽**。即使内封字幕情况符合英字槽条件,它也优先进入中字质量槽。<Important italic>Update! 2021-08-14</Important> </Heading4>
<Heading4 id="4.6.4">4.6.4. **虽然对于给定电影,每个种子都应源自被视为最佳的版本,但可以额外提供给源自稍差但提供了不同观赏体验版本的种子一组槽位**。该槽位组通常由每个分辨率的一个 Encode、一个 Remux 和一个完整的原盘组成(这里没有存档槽)。如果你不确定能否共存,请移步 [我能发布它吗](forums.php?action=viewthread&threadid=21)。<Important italic>Update! 2021-08-14</Important> </Heading4>
@@ -326,79 +326,77 @@
<Heading4 id="5.1.1">5.1.1. **对于标清种子通常的替代顺序如下:VHS &lt; TV &lt; HDTV | WEB &lt; DVD &lt; Blu-ray。对于高清和超高清种子通常的替代顺序如下:HDTV &lt; WEB | HD-DVD | Blu-ray**。如果码率高低悬殊,蓝光、HD-DVD 源的种子可直接替代 TV、HDTV 源的同槽位种子,无需提供用于佐证的对比图。</Heading4>
<Heading5 id="5.1.1.1">5.1.1.1. **虽说这个替代顺序一般都没问题,但请注意决定的作出最终要落实在质量上(比如,如果蓝光源被发现是次品,则 WEB Encode 就不会被删除)**。 </Heading5>
<Heading5 id="5.1.1.1">5.1.1.1. **虽说这个替代顺序一般都没问题,但请注意决定的作出最终要落实在质量上(比如,如果蓝光源被发现是次品,则 WEB Encode 就不会被删除)**。</Heading5>
<Heading4 id="5.1.2">5.1.2. **未经删减的原盘种子总是能替代相同质量的、抛弃部分内容(比如附加内容或菜单)的种子**。 </Heading4>
<Heading4 id="5.1.2">5.1.2. **未经删减的原盘种子总是能替代相同质量的、抛弃部分内容(比如附加内容或菜单)的种子**。</Heading4>
<Heading3 id="5.2">5.2. 质量</Heading3>
<Heading4 id="5.2.1">5.2.1. **任何未满足 [相关规则](#h3) 定义的首选格式的种子都可被符合推荐格式的种子替代,只要其质量同等或更优**。</Heading4>
<Heading4 id="5.2.1">5.2.1. **任何未满足 [相关规则](#3) 定义的首选格式的种子都可被符合推荐格式的种子替代,只要其质量同等或更优**。</Heading4>
<Heading5 id="5.2.1.1">5.2.1.1. **x264 (SD, HD) 和 x265 (UHD) 被视为首选编码器**。来源信息未知的 H.264 或 H.265 文件可以占据规则 [4.1.1](#4.1.1)、[4.2.1](#4.2.1) 和 [4.3.1](#4.3.1) 定义的 x264 或 x265 槽位,但更容易因质量原因被替代。 </Heading5>
<Heading5 id="5.2.1.1">5.2.1.1. **x264 (SD, HD) 和 x265 (UHD) 被视为首选编码器**。来源信息未知的 H.264 或 H.265 文件可以占据规则 [4.1.1](#4.1.1)、[4.2.1](#4.2.1) 和 [4.3.1](#4.3.1) 定义的 x264 或 x265 槽位,但更容易因质量原因被替代。</Heading5>
<Heading5 id="5.2.1.2">5.2.1.2. **杜比视界 Remux 和国内流媒体的 WEB-DL 可以封装在 MP4 容器中,且不会被其他种子以 “使用 MKV 容器” 为由替代**。<Important italic>New! 2021-08-14</Important> </Heading5>
<Heading4 id="5.2.2">5.2.2. **占据了规则 [4.0.1](#4.0.1) 定义的高质量槽位的种子可被质量显著更佳的 Encode 替代**。</Heading4>
<Heading4 id="5.2.2">5.2.2. **占据了规则 [4.1.1.1](#4.1.1.1)、[4.2.1.1](#4.2.1.1) 和 [4.3.1.1](#4.3.1.1) 定义的高质量槽位的种子可被质量显著更佳的 Encode 替代**。 </Heading4>
<Heading4 id="5.2.3">5.2.3. **可替代种子可以被无标记所指问题的种子替代**。见规则 [5.4](#5.4) 了解完整的可替代标记清单。</Heading4>
<Heading4 id="5.2.3">5.2.3. **可替代种子可以被无标记所指问题的种子替代**。见规则 [5.4](#h5.4) 了解完整的可替代标记清单。 </Heading4>
<Heading4 id="5.2.4">5.2.4. **源(原盘、Remux)类种子的替代政策较激进,即提供更好观看体验的来源将胜过较低劣的**。</Heading4>
<Heading4 id="5.2.4">5.2.4. **源(原盘、Remux)类种子的替代政策较激进,即提供更好观看体验的来源将胜过较低劣的**。 </Heading4>
<Heading4 id="5.2.5">5.2.5. **质量替代(对于 Encode 和源)应尽可能多地通过截图对比来证明改进**。</Heading4>
<Heading4 id="5.2.5">5.2.5. **质量替代(对于 Encode 和源)应尽可能多地通过截图对比来证明改进**。 </Heading4>
<Heading4 id="5.2.6">5.2.6. **如果出现重大缺陷(不完整、音轨不同步、错误的纵横比……),则劣质 Scene 出品可自动被 REPACK 或 PROPER 替代掉。不是因影响观影体验的问题(被盗的源、重复、命名错误), 劣质的 Scene 出品可以此方式替代**。 </Heading4>
<Heading4 id="5.2.6">5.2.6. **如果出现重大缺陷(不完整、音轨不同步、错误的纵横比……),则劣质 Scene 出品可自动被 REPACK 或 PROPER 替代掉。不是因影响观影体验的问题(被盗的源、重复、命名错误), 劣质的 Scene 出品可以此方式替代**。</Heading4>
<Heading4 id="5.2.7">5.2.7. **Remux 可被同等质量但更为完整的种子替代,下列是可能的替代原因**</Heading4>
<Heading5 id="5.2.7.1">5.2.7.1. 包含了旧种所不包含的章节信息。 </Heading5>
<Heading5 id="5.2.7.1">5.2.7.1. 包含了旧种所不包含的章节信息。</Heading5>
<Heading5 id="5.2.7.2">5.2.7.2. 添加了评论或独立的配乐。 </Heading5>
<Heading5 id="5.2.7.2">5.2.7.2. 添加了评论或独立的配乐。</Heading5>
<Heading5 id="5.2.7.3">5.2.7.3. 以适当的相同内容的无损压缩音轨替换旧 Remux 的 PCM 音轨。 </Heading5>
<Heading5 id="5.2.7.3">5.2.7.3. 以适当的相同内容的无损压缩音轨替换旧 Remux 的 PCM 音轨。</Heading5>
<Heading5 id="5.2.7.4">5.2.7.4. 包含了旧种所不包含的中文 PGS/SUP 字幕。 </Heading5>
<Heading5 id="5.2.7.4">5.2.7.4. 包含了旧种所不包含的中文 PGS/SUP 字幕。</Heading5>
<Heading5 id="5.2.7.5">5.2.7.5. 在管理批准的情况下,影片后期制作存在显著差异的种子允许共存。 </Heading5>
<Heading5 id="5.2.7.5">5.2.7.5. 在管理批准的情况下,影片后期制作存在显著差异的种子允许共存。</Heading5>
<Heading4 id="5.2.8">5.2.8. **对于各类槽位的具体替代序列如下**</Heading4>
<Heading5 id="5.2.8.1">5.2.8.1. **质量槽**:由于已经拆成了中字、英字两个槽位,因此,压制质量是唯一替代考虑因素,欲替代旧种的发布者需要提交尽可能多的对比截图来证明改进。此外,还存在对字幕无硬性要求的质量槽(适用于附加内容)。 </Heading5>
<Heading5 id="5.2.8.1">5.2.8.1. **质量槽**:由于已经拆成了中字、英字两个槽位,因此,压制质量是唯一替代考虑因素,欲替代旧种的发布者需要提交尽可能多的对比截图来证明改进。此外,还存在对字幕无硬性要求的质量槽(适用于附加内容)。</Heading5>
<Heading5 id="5.2.8.2">5.2.8.2. **存档槽**:在保证质量的前提下,无内封中字 &lt; 内封中字。 </Heading5>
<Heading5 id="5.2.8.2">5.2.8.2. **存档槽**:在保证质量的前提下,无内封中字 &lt; 内封中字。</Heading5>
<Heading5 id="5.2.8.3">5.2.8.3. **特色槽**:在保证质量的前提下,内封中字/国配有其一 &lt; 内封中字+国配 &lt; 内封特效中字+国配。 </Heading5>
<Heading5 id="5.2.8.3">5.2.8.3. **特色槽**:在保证质量的前提下,内封中字/国配有其一 &lt; 内封中字+国配 &lt; 内封特效中字+国配。</Heading5>
<Heading6 id="5.2.8.3.1">5.2.8.3.1. **国配**:无国配 &lt; 台湾配音 &lt; 大陆配音。 </Heading6>
<Heading6 id="5.2.8.3.1">5.2.8.3.1. **国配**:无国配 &lt; 台湾配音 &lt; 大陆配音。</Heading6>
<Heading6 id="5.2.8.3.2">5.2.8.3.2. **保证质量**:视频轨码率应高于 Scene,且欲替代旧种的种子,其视频轨码率应超出 Scene 15%。 </Heading6>
<Heading6 id="5.2.8.3.2">5.2.8.3.2. **保证质量**:视频轨码率应高于 Scene,且欲替代旧种的种子,其视频轨码率应超出 Scene 15%。</Heading6>
<Heading5 id="5.2.8.4">5.2.8.4. **Remux 槽**:无中字普通源 &lt; 内封中字普通源 &lt; 无中字优质源 &lt; 内封中字优质源。有无国配不纳入替代考虑因素。 </Heading5>
<Heading5 id="5.2.8.4">5.2.8.4. **Remux 槽**:无中字普通源 &lt; 内封中字普通源 &lt; 无中字优质源 &lt; 内封中字优质源。有无国配不纳入替代考虑因素。</Heading5>
<Heading5 id="5.2.8.5">5.2.8.5. **原盘槽**:无中字普通源 &lt; 内封中字普通源 &lt; 无中字优质源 &lt; 内封中字优质源。有无国配不纳入替代考虑因素。 </Heading5>
<Heading5 id="5.2.8.5">5.2.8.5. **原盘槽**:无中字普通源 &lt; 内封中字普通源 &lt; 无中字优质源 &lt; 内封中字优质源。有无国配不纳入替代考虑因素。</Heading5>
<Heading5 id="5.2.8.6">5.2.8.6. **DIY 原盘槽**:无内封中字 &lt; 内封中字 &lt; 内封特效中字 &lt; 内封中字+国配 &lt; 内封特效中字+国配。 </Heading5>
<Heading5 id="5.2.8.6">5.2.8.6. **DIY 原盘槽**:无内封中字 &lt; 内封中字 &lt; 内封特效中字 &lt; 内封中字+国配 &lt; 内封特效中字+国配。</Heading5>
<Heading4 id="5.2.9">5.2.9. **非中文电影的评论音轨替代序列**</Heading4>
<Heading5 id="5.2.9.1">5.2.9.1. **Remux 槽**:同源、同含主音轨中字的情况下,无评论音轨 &lt; 有评论音轨;有评论音轨时,无评论音轨字幕 &lt; 英文评论音轨字幕 &lt; 中文评论音轨字幕。 </Heading5>
<Heading5 id="5.2.9.1">5.2.9.1. **Remux 槽**:同源、同含主音轨中字的情况下,无评论音轨 &lt; 有评论音轨;有评论音轨时,无评论音轨字幕 &lt; 英文评论音轨字幕 &lt; 中文评论音轨字幕。</Heading5>
<Heading5 id="5.2.9.2">5.2.9.2. **DIY 原盘槽**:同源、其他内容与既有种子相近的情况下,无评论音轨 &lt; 有评论音轨;有评论音轨时,无评论音轨字幕 &lt; 英文评论音轨字幕 &lt; 中文评论音轨字幕。 </Heading5>
<Heading5 id="5.2.9.2">5.2.9.2. **DIY 原盘槽**:同源、其他内容与既有种子相近的情况下,无评论音轨 &lt; 有评论音轨;有评论音轨时,无评论音轨字幕 &lt; 英文评论音轨字幕 &lt; 中文评论音轨字幕。</Heading5>
<Heading4 id="5.2.10">5.2.10. **脏线、色带、色块等原盘瑕疵的修复不可单独作为替代理由**。 </Heading4>
<Heading4 id="5.2.10">5.2.10. **脏线、色带、色块等原盘瑕疵的修复不可单独作为替代理由**。</Heading4>
<Heading3 id="5.3">5.3. 不活跃</Heading3>
<Heading4 id="5.3.1">5.3.1. **任何不活跃超过 4 周将自动可替代**。 </Heading4>
<Heading4 id="5.3.1">5.3.1. **任何不活跃超过 4 周将自动可替代**。</Heading4>
<Heading4 id="5.3.2">5.3.2. **任何发布 24 小时后仍未做种的种子会被标记为可替代**。 </Heading4>
<Heading4 id="5.3.2">5.3.2. **任何发布 24 小时后仍未做种的种子会被标记为可替代**。</Heading4>
<Heading4 id="5.3.3">5.3.3. **如有可能,尽量为不活跃种子(死种)续种而不是替代之**。 </Heading4>
<Heading4 id="5.3.3">5.3.3. **如有可能,尽量为不活跃种子(死种)续种而不是替代之**。</Heading4>
<Heading3 id="5.4">5.4. 可替代标记:这些标记会附加在任何未达到我们标准的种子上。</Heading3>
<Heading4 id="5.4.1">5.4.1. **问题纵横比**:编码错误是导致种子表现出错误纵横比的原因。 </Heading4>
<Heading4 id="5.4.1">5.4.1. **问题纵横比**:编码错误是导致种子表现出错误纵横比的原因。</Heading4>
<Heading4 id="5.4.2">5.4.2. **非原始纵横比**:该种子的纵横比与原始的、影院上映的电影不同,一旦存在纵横比正确的发行,同分辨率组内就不允许共存非原始纵横比的种子了。 </Heading4>
<Heading4 id="5.4.2">5.4.2. **非原始纵横比**:该种子的纵横比与原始的、影院上映的电影不同,一旦存在纵横比正确的发行,同分辨率组内就不允许共存非原始纵横比的种子了。</Heading4>
<Heading4 id="5.4.3">5.4.3. **无谓高码(臃肿)**:种子的视频或音频比特率过高。音频比特率上限手册:<Important italic>Update! 2021-08-06</Important></Heading4>
@@ -465,51 +463,51 @@
</Tr>
</Table>
<Heading4 id="5.4.4">5.4.4. **音轨冗余:不适用于原盘槽和 DIY 原盘槽**。种子包含多余的音轨,有如非中英配音或同一音轨的冗余版本。[4.0.4.](#4.0.4) 方言(如粤语)电影中的普通话配音音轨不被视为冗余。 </Heading4>
<Heading4 id="5.4.4">5.4.4. **音轨冗余:不适用于原盘槽和 DIY 原盘槽**。种子包含多余的音轨,有如非中英配音或同一音轨的冗余版本。[4.0.4](#4.0.4) 方言(如粤语)电影中的普通话配音音轨不被视为冗余。</Heading4>
<Heading4 id="5.4.5">5.4.5. **反交错问题**:种子被错误地反交错了。 </Heading4>
<Heading4 id="5.4.5">5.4.5. **反交错问题**:种子被错误地反交错了。</Heading4>
<Heading4 id="5.4.6">5.4.6. **帧率错误**:种子以不同于原生、正确的帧率播放。 </Heading4>
<Heading4 id="5.4.6">5.4.6. **帧率错误**:种子以不同于原生、正确的帧率播放。</Heading4>
<Heading4 id="5.4.7">5.4.7. **字幕不同步**:种子中包含的字幕有效,但不同步。 </Heading4>
<Heading4 id="5.4.7">5.4.7. **字幕不同步**:种子中包含的字幕有效,但不同步。</Heading4>
<Heading4 id="5.4.8">5.4.8. **格式不当**:种子不符合我们的 [推荐格式](#h3)。 </Heading4>
<Heading4 id="5.4.8">5.4.8. **格式不当**:种子不符合我们的 [推荐格式](#3)。</Heading4>
<Heading4 id="5.4.9">5.4.9. **分辨率不当**:种子不符合我们的 [推荐分辨率](#h3)。 </Heading4>
<Heading4 id="5.4.9">5.4.9. **分辨率不当**:种子不符合我们的 [推荐分辨率](#3)。</Heading4>
<Heading4 id="5.4.10">5.4.10. **劣质源**:种子的源没能提供当下能获取到的最好观影体验。 </Heading4>
<Heading4 id="5.4.10">5.4.10. **劣质源**:种子的源没能提供当下能获取到的最好观影体验。</Heading4>
<Heading4 id="5.4.11">5.4.11. **低质量**:种子编码所使用的源非常糟糕,或是受到了重大质量问题的影响。 </Heading4>
<Heading4 id="5.4.11">5.4.11. **低质量**:种子编码所使用的源非常糟糕,或是受到了重大质量问题的影响。</Heading4>
<Heading4 id="5.4.12">5.4.12. **播放问题**:通常会由次级标记详细说明导致种子无法完美播放或编码的问题。 </Heading4>
<Heading4 id="5.4.12">5.4.12. **播放问题**:通常会由次级标记详细说明导致种子无法完美播放或编码的问题。</Heading4>
<Heading4 id="5.4.13">5.4.13. **残缺**:种子缺失内容,通常会由次级标记详细说明。 </Heading4>
<Heading4 id="5.4.13">5.4.13. **残缺**:种子缺失内容,通常会由次级标记详细说明。</Heading4>
<Heading4 id="5.4.14">5.4.14. **缺少基本字幕:适用于英字质量槽、存档槽、Remux 槽和原盘槽**,同时缺少中英字幕(内封或外挂均无)的非英文影片会被标记,标记可通过外挂要求的字幕来消除。默片或无需字幕的影片不会被添加此标记。</Heading4>
<Heading5 id="5.4.14.1">5.4.14.1. **英字质量槽**:外挂英语字幕可消除标记。 </Heading5>
<Heading5 id="5.4.14.1">5.4.14.1. **英字质量槽**:外挂英语字幕可消除标记。</Heading5>
<Heading5 id="5.4.14.2">5.4.14.2. **其他三类**:外挂中/英字幕可消除标记。可被内封中字的同等或更优质量种子所替代。 </Heading5>
<Heading5 id="5.4.14.2">5.4.14.2. **其他三类**:外挂中/英字幕可消除标记。可被内封中字的同等或更优质量种子所替代。</Heading5>
<Heading4 id="5.4.15">5.4.15. **未强制英文字幕:仅适用于英字槽**,种子的重要非英语对白不包含单独的英文字幕。 </Heading4>
<Heading4 id="5.4.15">5.4.15. **未强制英文字幕:仅适用于英字槽**,种子的重要非英语对白不包含单独的英文字幕。</Heading4>
<Heading4 id="5.4.16">5.4.16. **无原声音轨**:一部影片在同时没有原声音轨、国语配音和英语配音的情况下(仅包含小语种配音)适用此标记。<Important italic>Update! 2021-08-14</Important></Heading4>
<Heading4 id="5.4.17">5.4.17. **音轨不同步**:种子中包含的音轨有效,但不同步。 </Heading4>
<Heading4 id="5.4.17">5.4.17. **音轨不同步**:种子中包含的音轨有效,但不同步。</Heading4>
<Heading4 id="5.4.18">5.4.18. **问题裁边**:种子明显裁边过多或过少。 </Heading4>
<Heading4 id="5.4.18">5.4.18. **问题裁边**:种子明显裁边过多或过少。</Heading4>
<Heading4 id="5.4.19">5.4.19. **劣质字幕翻译**:种子中包含的字幕质量很差,且不是电影的准确翻译。 </Heading4>
<Heading4 id="5.4.19">5.4.19. **劣质字幕翻译**:种子中包含的字幕质量很差,且不是电影的准确翻译。</Heading4>
<Heading4 id="5.4.20">5.4.20. **硬字幕**:种子中的字幕被硬编码在视频轨中。此标记不针对硬编码强制字幕。 </Heading4>
<Heading4 id="5.4.20">5.4.20. **硬字幕**:种子中的字幕被硬编码在视频轨中。此标记不针对硬编码强制字幕。</Heading4>
<Heading4 id="5.4.21">5.4.21. **劣质转码**:种子的音频轨编码自已有损压缩的源。 </Heading4>
<Heading4 id="5.4.21">5.4.21. **劣质转码**:种子的音频轨编码自已有损压缩的源。</Heading4>
<Heading4 id="5.4.22">5.4.22. **含水印**:种子含有明显的水印。 </Heading4>
<Heading4 id="5.4.22">5.4.22. **含水印**:种子含有明显的水印。</Heading4>
<Heading4 id="5.4.23">5.4.23. **放大**:种子编码自低分辨率源。 </Heading4>
<Heading4 id="5.4.23">5.4.23. **放大**:种子编码自低分辨率源。</Heading4>
<Heading4 id="5.4.24">5.4.24. **不活跃**:种子无人做种已达至少 4 周。这个标记是自动添加和去除的。 </Heading4>
<Heading4 id="5.4.24">5.4.24. **不活跃**:种子无人做种已达至少 4 周。这个标记是自动添加和去除的。</Heading4>
<Heading4 id="5.4.25">5.4.25. **冗余文件**:种子包含无关的文件,详见 [2.1.3](#2.1.3) 。<Important italic>New! 2021-12-31</Important></Heading4>
@@ -517,7 +515,7 @@
<Heading4 id="6.1">6.1. 不要发布你没有完全访问权限的种子或内容。无论是在本地还是在盒子,你都必须在制作种子并发布之前拥有内容的完全处置权。</Heading4>
<Heading4 id="6.2">6.2. 不要发布你不打算做种的种子。本站要求你为所有的种子在两周内做种至少 48 小时,或直至你的分享率达到 1,即输出了一个完整的副本。即使你是种子的发布者,此规则也同样适用。参见 [H&R 规则](rules.php?p=ratio) 了解更多。</Heading4>
<Heading4 id="6.2">6.2. 不要发布你不打算做种的种子。本站要求你为所有的种子在两周内做种至少 48 小时,或直至你的分享率达到 1,即输出了一个完整的副本。即使你是种子的发布者,此规则也同样适用。~~参见 [H&R 规则](rules.php?p=ratio) 了解更多。~~</Heading4>
<Heading4 id="6.3">6.3. 尽你所能地长期做种。本站旨在成为为所有电影、所有规格所设立的永久档案馆,你做种越久,我们离梦想就越近,你的分享率也越好看。尽量不要让做种率达到底线值成为你的习惯,你应对自己有所要求。</Heading4>
+142 -66
View File
@@ -65,11 +65,11 @@ client.common.writer: |-
client.error.imdb_unknown_error: |-
请检查 IMDb ID 是否填写有误,如果无误,请重试,重试无效,请联系管理员。
client.error.invalid_imdb_link_note: |-
请填入格式合规的 IMDb 链接,形如tt1234567” 或 “https://www.imdb.com/title/tt1234567
请填入格式合规的 IMDb 链接,形如tt1234567」或「https://www.imdb.com/title/tt1234567
client.error.request_torrent_group_exists_note: |-
站点已有此电影,<a href='/torrents.php?id={{groupID}}'>点此</a> 查看并确保你想要的格式不存在,通过页面上方的请求格式发布求种。
站点已有此电影,<a href='/torrents.php?id={{groupID}}'>点此</a> 查看并确保你想要的格式不存在,通过页面上方的请求格式发布求种。
client.error.torrent_group_exists_note: |-
站点已有此电影,<a href='/torrents.php?id={{groupID}}'>点此</a> 查看并确保你想要发布的种子不与既有种子重复后,通过页面上方的添加格式发布。
站点已有此电影,<a href='/torrents.php?id={{groupID}}'>点此</a> 查看并确保你想要发布的种子不与既有种子重复后,通过页面上方的添加格式发布。
client.other.client_whitelist: |-
客户端白名单
client.screenshot_comparison.gpw_helper_not_installed: |-
@@ -141,11 +141,11 @@ client.upload.remaster_required: |-
client.upload.resolution_required: |-
请选择一个分辨率。
client.upload.source_required: |-
请选择片源。如果你不确定,请选Other,然后输入Unknown
请选择片源。如果你不确定,请选Other,然后输入Unknown
client.upload.sub_name: |-
中文名
client.upload.subtitles_required: |-
请指明文件所包含的字幕,如果没有就勾选无字幕
请指明文件所包含的字幕,如果没有就勾选无字幕
client.upload.subtitles_with_mediainfo: |-
MediaInfo 未提供语言信息,请根据实际情况手动勾选。
client.upload.tag_required: |-
@@ -249,7 +249,7 @@ server.apply.public: |-
server.apply.published: |-
开放
server.apply.referral_note: |-
<b>内推制度:欢迎用户推荐自己的伙伴前来应聘(可推荐无号用户,应聘 TI 除外),内推成功可获得 <span class='u-colorWarning'>3 个邀请名额</span> 和 <span class='u-colorWarning'>250000 积分</span>的奖励!请推荐者使用 Staff PM(对象为工作组)提交推荐信,信中需包含被推荐者的基本信息及意向沟通方式。</b>
<b>内推制度:欢迎用户推荐自己的伙伴前来应聘(可推荐无号用户,应聘 TI 除外),内推成功可获得 <span class='u-colorWarning'>3 个邀请名额</span> 和 <span class='u-colorWarning'>250000 积分</span>的奖励!请推荐者使用 Staff PM(对象为工作组)提交推荐信,信中需包含被推荐者的基本信息及意向沟通方式。</b>
server.apply.reply: |-
回复
server.apply.resolved: |-
@@ -329,7 +329,7 @@ server.artist.english_biography: |-
server.artist.artist_name: |-
艺人名
server.artist.artist_x_deleted: |-
艺人 “%s” 删除成功!
艺人「%s」删除成功!
server.artist.artistcomments: |-
评论
server.artist.as_an_artist: |-
@@ -467,7 +467,7 @@ server.artist.writes_redirect_to: |-
server.artist.you_are_req_for: |-
你当前请求编辑的艺人是
server.artist.you_are_req_for_note: |-
<p>请详细写明编辑该艺人所需的信息,包括所有相关链接(IMDb、豆瓣等)。<br /><br />请求编辑不会生成报告,但会在论坛的编辑请求版块生成一个帖子。<br /><br />该功能可用于:</p> <ul> <li>重命名艺人</li> <li>取消或设置别名的重定向</li> <li>增/删别名</li> <li>其他……</li> </ul> <p>绝对不要将此功能用于种子或种子组。对于单个的种子,使用种子报告功能;对于种子组,前往其各自的页面使用请求编辑功能。</p>
<p>请详细写明编辑该艺人所需的信息,包括所有相关链接(IMDb、豆瓣等)。<br /><br />请求编辑不会生成报告,但会在论坛的编辑请求版块生成一个帖子。<br /><br />该功能可用于:</p> <ul> <li>重命名艺人</li> <li>取消或设置别名的重定向</li> <li>增/删别名</li> <li>其他……</li> </ul> <p>绝对不要将此功能用于种子或种子组。对于单个的种子,使用种子报告功能;对于种子组,前往其各自的页面使用请求编辑功能。</p>
server.badges.badge_achievement_progress: |-
成就进度
server.badges.badge_display: |-
@@ -643,13 +643,13 @@ server.bonus.total_points: |-
server.bonus.total_torrents: |-
种子总数
server.bonus.upload-1: |-
5GB 上传量
5GiB 上传量
server.bonus.upload-2: |-
50GB 上传量
50GiB 上传量
server.bonus.upload-3: |-
250GB 上传量
250GiB 上传量
server.bonus.upload-4: |-
500GB 上传量
500GiB 上传量
server.bonus.you_cannot_afford_this_item: |-
你的余额不足以支付此商品的价格。
server.bonus.you_have_spent: |-
@@ -792,7 +792,7 @@ server.collages.delete_warning: |-
server.collages.description: |-
描述
server.collages.drag_drop_textnote: |-
<ul> <li>单击列标题的按钮以自动排序。</li> <li>按住 [Shift] 键并单击其他列标题,同时对多个列排序。</li> <li>拖放任意行以改变其顺序。</li> <li>结束排序,请点击 “保存” 以保存结果。</li> <li>点击Edit” 或 “Remove来修改单个条目。</li> </ul>
<ul> <li>单击列标题的按钮以自动排序。</li> <li>按住 [Shift] 键并单击其他列标题,同时对多个列排序。</li> <li>拖放任意行以改变其顺序。</li> <li>结束排序,请点击「保存」以保存结果。</li> <li>点击Edit」或「Remove来修改单个条目。</li> </ul>
server.collages.edit_collage: |-
编辑合集
server.collages.edit_description: |-
@@ -802,7 +802,7 @@ server.collages.edit_tags: |-
server.collages.featured: |-
推荐
server.collages.featured_title: |-
推荐的私人合集及其内含种子的部分预览会在你的个人页面展示出来。
推荐的私人合集及其内含种子的部分预览会在你的个人页面展示出来。
server.collages.ft_order: |-
排序
server.collages.ftb_searchstr: |-
@@ -2405,7 +2405,7 @@ server.reports.report_collage_guide_3: |-
server.reports.report_collage_guide_4: |-
在下面的报告描述中,请尽可能详尽地描述情况以帮助管理解决问题。
server.reports.report_forum_thread_guide_1: |-
请在下述情况下使用报告论坛主题类目: <ul> <li>当 <a href="rules.php?p=chat">社交规则</a> 被违反时,比如含有种族主义、攻击性、煽动性、色情和其他违反规则内容的帖子。我们鼓励所有用户在看到任何形式的违规时及时报告。</li> <li>申请解锁主题。</li> <li>报告出现在错误版块的主题。</li> <li>报告求助版块中已被解决但尚未添加标记的问题。</li> </ul>
请在下述情况下使用报告论坛主题类目: <ul> <li>当 <a href="rules.php?p=chat">社交规则</a> 被违反时,比如含有种族主义、攻击性、煽动性、色情和其他违反规则内容的帖子。我们鼓励所有用户在看到任何形式的违规时及时报告。</li> <li>申请解锁主题。</li> <li>报告出现在错误版块的主题。</li> <li>报告求助版块中已被解决但尚未添加标记的问题。</li> </ul>
server.reports.report_forum_thread_guide_2: |-
它比私信管理组成员更加高效。
server.reports.report_forum_thread_guide_3: |-
@@ -2623,7 +2623,7 @@ server.reportsv2.pm_reason: |-
server.reportsv2.pm_uploader_reporter: |-
私信
server.reportsv2.pm_uploader_reporter_title: |-
发布人:如不使用Send now,内容就会附加到常规信息中。报告人:必须使用Send now
发布人:如不使用Send now,内容就会附加到常规信息中。报告人:必须使用Send now
server.reportsv2.reason: |-
报告类目
server.reportsv2.relevant_images: |-
@@ -2735,7 +2735,7 @@ server.reportsv2.tracks_should_be_given_in_a_space_separated_list_of_numbers_wit
server.reportsv2.type: |-
类目
server.reportsv2.types.master.banned.report_messages.1: |-
请明确指出其违反了禁止发布列表中的哪一项。
请明确指出其违反了禁止发布列表中的哪一项。
server.reportsv2.types.master.banned.resolve_options.pm: |-
[rule]h1.2[/rule]。你上传了本站目前禁止的资源。列于禁止发布列表(位于 [url=upload.php]发布页面[/url] 顶部)以及上传规则中 [url=rules.php?p=upload#1.2]特别禁止[/url] 部分的资源不能被上传到本站。除非你的种子符合禁止发布列表注释中指定的条件,否则请勿发布。
你的种子已被报告,因为它包含了来自禁止发布列表或上传规则中特别禁止部分的资源。
@@ -2762,14 +2762,14 @@ server.reportsv2.types.master.trump.title: |-
server.reportsv2.types.master.urgent.report_messages.1: |-
该类目仅适用于紧急情况,一般是因为在种子中泄露了个人信息。
server.reportsv2.types.master.urgent.report_messages.2: |-
滥用 “紧急” 类目会导致警告或更严重的惩罚。
滥用「紧急」类目会导致警告或更严重的惩罚。
server.reportsv2.types.master.urgent.report_messages.3: |-
由于该类目不能方便地告知管理员问题所在,所以请在说明中详细描述种子的问题。
server.reportsv2.types.master.urgent.title: |-
紧急
server.reportsv2.types.movie.audio_track_bad.report_messages.1: |-
请指出音频轨存在的具体问题。
server.reportsv2.types.movie.audio_track_bad.resolve_options.pm: "[rule]5.4.3[/rule]。种子内含的音频轨相对其分辨率而言过于庞大。\n\n[rule]5.4.4[/rule]。种子含有冗余的音频轨。\n\n[rule]5.4.16[/rule]。既没有原始语种音频也没有国语配音,只有非国语配音的种子会被标记为可替代。\n\n[rule]5.4.17[/rule]。种子中包含的音轨有效,但不同步。\n\n你的种子被标记为问题音频轨且可被替代。"
server.reportsv2.types.movie.audio_track_bad.resolve_options.pm: "[rule]5.4.3[/rule]。种子内含的音频轨相对其分辨率而言过于庞大。\n\n[rule]5.4.4[/rule]。种子含有冗余的音频轨。\n\n[rule]5.4.16[/rule]。既没有原始语种音频也没有国语配音,只有非国语配音的种子会被标记为可替代。\n\n[rule]5.4.17[/rule]。种子中包含的音轨有效,但不同步。\n\n你的种子被标记为问题音频轨且可被替代。"
server.reportsv2.types.movie.audio_track_bad.title: |-
问题音频轨
server.reportsv2.types.movie.format.report_messages.1: |-
@@ -2782,19 +2782,19 @@ server.reportsv2.types.movie.format.title: |-
server.reportsv2.types.movie.low.report_messages.1: |-
请向我们提供 PNG 格式的影片原始分辨率截图。
server.reportsv2.types.movie.low.resolve_options.pm: |-
[rule]5.4.10[/rule]、[rule]5.4.11[/rule]、[rule]5.4.21[/rule]、[rule]5.4.24[/rule]。编码自质量低下的、存在错误的、低清的源的作品会被标记为可替代
[rule]5.4.10[/rule]、[rule]5.4.11[/rule]、[rule]5.4.21[/rule]、[rule]5.4.24[/rule]。编码自质量低下的、存在错误的、低清的源的作品会被标记为可替代
server.reportsv2.types.movie.low.title: |-
劣质源
server.reportsv2.types.movie.names_bad.report_messages.1: |-
请指出有问题的文件(夹)名。
server.reportsv2.types.movie.names_bad.report_messages.2: |-
理想情况下,你可以发布修复了文件(夹)名问题之后的种子以替代该种子。
server.reportsv2.types.movie.names_bad.resolve_options.pm: "[rule]2.1.1[/rule]。文件(夹)名必须使用电影原始语种名称或官方英文名(推荐)。(如海报所示等的官方英文名,其优先级高于 IMDb。)\n\n[rule]2.1.2[/rule]。压制组发行(来自 P2P 组或 Scene 组)不应重命名,除非它们不满足规则 [rule]2.1.1[/rule] 或我们的文件名要求。\n\n[rule]2.1.4[/rule]。DVD 和 BD 文件目录结构不允许改动,仅顶层文件夹允许重命名。\n\n你的种子被标记为问题文件(夹)名且可被替代。当然你也可自行修复这个种子,补充或修正文件(夹)名然后重新发布种子。然后以 “替代” 为由报告(RP)旧种,在报告说明中指出你已修复的命名问题,同时请确保提供用以替代的新种永久链接(PL)。"
server.reportsv2.types.movie.names_bad.resolve_options.pm: "[rule]2.1.1[/rule]。文件(夹)名必须使用电影原始语种名称或官方英文名(推荐)。(如海报所示等的官方英文名,其优先级高于 IMDb。)\n\n[rule]2.1.2[/rule]。压制组发行(来自 P2P 组或 Scene 组)不应重命名,除非它们不满足规则 [rule]2.1.1[/rule] 或我们的文件名要求。\n\n[rule]2.1.4[/rule]。DVD 和 BD 文件目录结构不允许改动,仅顶层文件夹允许重命名。\n\n你的种子被标记为问题文件(夹)名且可被替代。当然你也可自行修复这个种子,补充或修正文件(夹)名然后重新发布种子。然后以「替代」为由报告(RP)旧种,在报告说明中指出你已修复的命名问题,同时请确保提供用以替代的新种永久链接(PL)。"
server.reportsv2.types.movie.names_bad.title: |-
问题文件(夹)名
server.reportsv2.types.movie.subtitle_track_bad.report_messages.1: |-
请指出字幕轨存在的具体问题。
server.reportsv2.types.movie.subtitle_track_bad.resolve_options.pm: "[rule]5.4.7[/rule]。种子中包含的字幕有效,但不同步。\n\n[rule]5.4.14[/rule]。无中字槽位的种子如果是不包含英文字幕(通过字幕管理器内挂或外挂)的非英语电影,会被标为可替代。\n\n[rule]5.4.15[/rule]。无中字槽位的种子,其重要非英语对白不包含单独的英文字幕。\n\n[rule]5.4.19[/rule]。包含字幕质量很差,且不是电影准确翻译的种子会被标为可替代。\n\n[rule]5.4.20[/rule]。字幕被硬编码在视频轨中的种子会被标为可替代。\n\n你的种子被标记为问题字幕轨且可被替代。"
server.reportsv2.types.movie.subtitle_track_bad.resolve_options.pm: "[rule]5.4.7[/rule]。种子中包含的字幕有效,但不同步。\n\n[rule]5.4.14[/rule]。无中字槽位的种子如果是不包含英文字幕(通过字幕管理器内挂或外挂)的非英语电影,会被标为可替代。\n\n[rule]5.4.15[/rule]。无中字槽位的种子,其重要非英语对白不包含单独的英文字幕。\n\n[rule]5.4.19[/rule]。包含字幕质量很差,且不是电影准确翻译的种子会被标为可替代。\n\n[rule]5.4.20[/rule]。字幕被硬编码在视频轨中的种子会被标为可替代。\n\n你的种子被标记为问题字幕轨且可被替代。"
server.reportsv2.types.movie.subtitle_track_bad.title: |-
问题字幕轨
server.reportsv2.types.movie.torrent_description_bad.report_messages.1: |-
@@ -2814,7 +2814,7 @@ server.reportsv2.types.movie.transcode.title: |-
劣质转码
server.reportsv2.types.movie.video_track_bad.report_messages.1: |-
请指出视频轨存在的具体问题,并向我们提供 PNG 格式的影片原始分辨率截图。
server.reportsv2.types.movie.video_track_bad.resolve_options.pm: "[rule]5.4.1[/rule]、[rule]5.4.2[/rule]。种子的纵横比因编码错误等原因与原始的、影院上映的电影不同。\n\n[rule]5.4.5[/rule]、[rule]5.4.6[/rule]。种子被错误地反交错,或以错误的帧率播放。\n\n[rule]5.4.18[/rule]。种子明显裁边过多或过少。\n\n[rule]5.4.22[/rule]。种子含有明显的水印。\n\n你的种子被标记为问题视频轨且可被替代。"
server.reportsv2.types.movie.video_track_bad.resolve_options.pm: "[rule]5.4.1[/rule]、[rule]5.4.2[/rule]。种子的纵横比因编码错误等原因与原始的、影院上映的电影不同。\n\n[rule]5.4.5[/rule]、[rule]5.4.6[/rule]。种子被错误地反交错,或以错误的帧率播放。\n\n[rule]5.4.18[/rule]。种子明显裁边过多或过少。\n\n[rule]5.4.22[/rule]。种子含有明显的水印。\n\n你的种子被标记为问题视频轨且可被替代。"
server.reportsv2.types.movie.video_track_bad.title: |-
问题视频轨
server.reportsv2.unclaim: |-
@@ -2860,7 +2860,7 @@ server.reportsv2.your_above_torrent_was_reported_and_has_been_deleted: |-
server.reportsv2.your_above_torrent_was_reported_but_not_been_deleted: |-
[url=%s]你发布的种子[/url] 已被报告并处理,但未被删除。
server.reportsv2.your_torrent_is_now_displayed_on_better_php_and_trumpable: |-
你的种子现因上述原因被列在 [url=%s/better.php]站点优化[/url] 的页面且可被替代。当然你也可自行修复这个种子,修复该问题后重新上传种子。然后报告(RP)旧种,选择 “替代” 类目,在报告说明中指出你已修复的具体问题,同时请确保你提供了用以替代的新种永久链接(PL)。
你的种子现因上述原因被列在 [url=%s/better.php]站点优化[/url] 的页面且可被替代。当然你也可自行修复这个种子,修复该问题后重新上传种子。然后报告(RP)旧种,选择「替代」类目,在报告说明中指出你已修复的具体问题,同时请确保你提供了用以替代的新种永久链接(PL)。
server.requests.acceptable_codecs: |-
允许的编码
server.requests.acceptable_containers: |-
@@ -2878,7 +2878,7 @@ server.requests.already_filled: |-
server.requests.any: |-
任一
server.requests.artist_note: |-
请不要将 “群星” 作为单个艺人添加,而是使用多艺人功能;阅读 <a href="wiki.php?action=article&amp;id=27" target="_blank">本文</a> 了解详情。
请不要将「群星」作为单个艺人添加,而是使用多艺人功能;阅读 <a href="wiki.php?action=article&amp;id=27" target="_blank">本文</a> 了解详情。
server.requests.associated_with_the_above_torrent_group: |-
和上方填写的种子组关联在一起。
server.requests.at_least_one_director: |-
@@ -2912,19 +2912,19 @@ server.requests.created_by: |-
server.requests.custom_vote: |-
自定义赞助
server.requests.custom_vote_title: |-
这里的单位是二进制而非十进制的,比如,1024 MB 等于 1 GB。
这里的单位是二进制而非十进制的,比如,1024 MiB 等于 1 GiB。
server.requests.delete_request_warning: |-
删除求种会导致你 <strong>永远失去</strong> 发起求种所消耗的上传量。
server.requests.description: |-
求种描述
server.requests.description_note: |-
<b>请尽量对你的请求做出说明。</b>例 1:求种顺序 Blu-ray > WEB-DL > HDTV;例 2WEB-DL 需要来自 Netflix 或 Amazon。 <br>如无其他要求,请填写无额外说明
<b>请尽量对你的请求做出说明。</b>例 1:求种顺序 Blu-ray > WEB-DL > HDTV;例 2WEB-DL 需要来自 Netflix 或 Amazon。 <br>如无其他要求,请填写无额外说明
server.requests.entered_bounty_not_number: |-
你填的报酬不是数字。
server.requests.entered_year_not_number: |-
你填的年份不是数字。
server.requests.fill_a_request_how_to_blockquote: |-
先搜索是否已有符合的资源,再根据下述不同情况,将应求种的<strong>永久链接(PL</strong>填入下列框中以完成应求。 <ul> <li>若已有符合的种子,直接填入其 PL</li> <li>若没有符合的种子,但存在该影片组,请使用影片详情页面的添加格式上传新种并填入其 PL</li> <li>若没有符合的种子且不存在该影片组,请使用发布应求按钮来上传新种并填入其 PL。</li></ul>
先搜索是否已有符合的资源,再根据下述不同情况,将应求种的<strong>永久链接(PL</strong>填入下列框中以完成应求。 <ul> <li>若已有符合的种子,直接填入其 PL</li> <li>若没有符合的种子,但存在该影片组,请使用影片详情页面的添加格式上传新种并填入其 PL</li> <li>若没有符合的种子且不存在该影片组,请使用发布应求按钮来上传新种并填入其 PL。</li></ul>
server.requests.fill_a_request_how_to_toggle: |-
&nbsp;应求方法&nbsp;
server.requests.fill_request: |-
@@ -3066,7 +3066,7 @@ server.requests.tags: |-
server.requests.tags_comma: |-
标签 (逗号分隔)
server.requests.tags_note: |-
标签应以英文逗号(“,”)分隔,你应使用英文点号(“.”)来分隔标签内的单词——例如<strong class='u-colorSuccess'>imdb.top.500</strong>。<br />请使用左侧文本框的官方标签,而不是非官方标签(例如使用官方的<strong class='u-colorSuccess'>剧情</strong>标签, 而不是非官方的<strong class='u-colorWarning'>holy.crap</strong>标签)。
标签应以英文逗号(<code>,</code>」)分隔,你应使用英文点号(<code>.</code>)来分隔标签内的单词——例如<strong class='u-colorSuccess'>imdb.top.500</strong>。<br />请使用左侧文本框的官方标签,而不是非官方标签(例如使用官方的<strong class='u-colorSuccess'>剧情</strong>标签, 而不是非官方的<strong class='u-colorWarning'>holy.crap</strong>标签)。
server.requests.this_request: |-
该求种
server.requests.top_contributors: |-
@@ -3124,7 +3124,7 @@ server.rules.info: |-
server.rules.ratio: |-
分享率
server.rules.ratio_dl_title: |-
这些单位是二进制而非十进制的,举个例子,1 GB 中有 1024 MB。
这些单位是二进制而非十进制的,举个例子,1 GiB 中有 1024 MiB。
server.rules.ratio_title: |-
分享率
server.rules.ratio_title_de: |-
@@ -3139,6 +3139,18 @@ server.rules.tags_title: |-
标签
server.rules.tags_title_de: |-
该部分规则决定哪些标签可以添加而哪些不能。
server.rules.bonus_title: |-
积分
server.rules.bonus_title_de: |-
该部分规则决定积分的获取机制。
server.rules.invite_title: |-
邀请
server.rules.invite_title_de: |-
该部分规则决定具体的邀请细则。
server.rules.blacklist_title: |-
黑名单
server.rules.blacklist_title_de: |-
该部分规则决定哪些图床不可用、哪些电影不可发。
server.rules.type: |-
分类
server.rules.upload_h13k: |-
@@ -3230,7 +3242,7 @@ server.staff.role_applications: |-
server.staff.role_applications_note: |-
<p>成长路上,希望有你。如果你对我们的工作有兴趣,欢迎尝试 <a href='apply.php'>申请</a> 加入我们!
server.staff.role_applications_sub: |-
具体招聘岗位请点击下方申请)
(请点击下方申请」按钮查看岗位详情
server.staff.send_to: |-
发送给
server.staff.staff: |-
@@ -3314,9 +3326,9 @@ server.staffpm.view_your_unanswered: |-
server.staffpm.your_unanswered: |-
你未解决
server.stats.detailed_torrent_statistics: |-
种子统计详情
种子统计
server.stats.detailed_user_statistics: |-
用户统计详情
用户统计
server.stats.geographical_distribution_map: |-
地理分布图
server.stats.geographical_distribution_map_africa: |-
@@ -3402,7 +3414,7 @@ server.subtitles.subtitle_file: |-
server.subtitles.subtitle_names: |-
字幕名
server.subtitles.subtitle_rules: |-
<ul> <li id='r3.6.1'><a href='rules.php?p=upload#3.6.1'>1.</a> <strong>用户上传的字幕应与对应种子的视频文件同步,否则会被直接删除。</strong> </li> <li id='r3.6.2'><a href='rules.php?p=upload#3.6.2'>2.</a> <strong>站点允许的字幕格式有 .sub、.idx、.sup、.srt、.vtt、.ass、.smi、.ssa。</strong>此外,也允许压缩打包上传,支持 .rar、.zip、.7z、.tar、.tgz、.tar.gz。 </li> <li id='r3.6.3'><a href='rules.php?p=upload#3.6.3'>3.</a> <strong>字幕文件建议采用与对应视频文件相一致的文件命名以方便使用。</strong>在尾部增加用以标明语言的字段是允许的,如Monsters.Inc.2001.1080p.BluRay.DTS.x264.D-Z0N3.chs.srt。 </li> <li
<ul> <li id='r3.6.1'><a href='rules.php?p=upload#3.6.1'>1.</a> <strong>用户上传的字幕应与对应种子的视频文件同步,否则会被直接删除。</strong> </li> <li id='r3.6.2'><a href='rules.php?p=upload#3.6.2'>2.</a> <strong>站点允许的字幕格式有 .sub、.idx、.sup、.srt、.vtt、.ass、.smi、.ssa。</strong>此外,也允许压缩打包上传,支持 .rar、.zip、.7z、.tar、.tgz、.tar.gz。 </li> <li id='r3.6.3'><a href='rules.php?p=upload#3.6.3'>3.</a> <strong>字幕文件建议采用与对应视频文件相一致的文件命名以方便使用。</strong>在尾部增加用以标明语言的字段是允许的,如Monsters.Inc.2001.1080p.BluRay.DTS.x264.D-Z0N3.chs.srt。 </li> <li
id='r3.6.4'><a href='rules.php?p=upload#3.6.4'>4.</a> <strong>字幕文件应以 Unicode 编码为佳。</strong> </li> <li id='r3.6.5'><a href='rules.php?p=upload#3.6.5'>5.</a> <strong>对于单文件电影,请直接上传单个的字幕文件,不要将同一部电影的多类字幕文件一同打包上传。</strong>如,在一个压缩包内同时囊括简中 SRT、繁中 SRT、中英 ASS,这是不允许的,你应将它们分别上传。<strong>对于迷你剧,则可以将每一集对应的字幕合并打包上传。</strong>但应保证每一集所对应的字幕文件命名与视频文件相同。 </li> </ul>
server.subtitles.subtitle_upload_warning: |-
请确保字幕与对应的视频文件同步,否则你上传的字幕会被直接删除,你可能会被警告
@@ -3589,7 +3601,7 @@ server.tools.auto_lock: |-
server.tools.auto_lock_weeks: |-
自动锁定周数
server.tools.available_request_bounty: |-
获取的求种报酬
获取的求种报酬
server.tools.avatar_text: |-
头像文本
server.tools.back_to_permission_list: |-
@@ -4341,7 +4353,7 @@ server.tools.ratio: |-
server.tools.ratio_watch_ended_ends: |-
分享率监控结束时间
server.tools.ratio_watch_ended_ends_title: |-
如果此处显示的时间以 “前” 结尾,则代表用户被监控分享率的时长和/或低于其合格分享率的时长。如果此处显示的时间不以 “前” 结尾,则它是两周分享率监控期结束的时间。
如果此处显示的时间以「前」结尾,则代表用户被监控分享率的时长和/或低于其合格分享率的时长。如果此处显示的时间不以「前」结尾,则它是两周分享率监控期结束的时间。
server.tools.reason: |-
理由
server.tools.reason_placeholder: |-
@@ -4455,7 +4467,7 @@ server.tools.site_options: |-
server.tools.size_limitation: |-
大小限制
server.tools.size_limitation_note: |-
等于” 与 “大于” “小于” 互斥,如果同时都填写了,只有 “等于” 会生效。如果希望对所有大小的种子生效,三处留空即可。
等于」与「大于」「小于」互斥,如果同时都填写了,只有「等于」会生效。如果希望对所有大小的种子生效,三处留空即可。
server.tools.size_per_day_this_month: |-
本月日均大小
server.tools.size_per_day_this_week: |-
@@ -4771,11 +4783,11 @@ server.top10.ft_torrents: |-
server.top10.hide: |-
隐藏
server.top10.in_the_past_day: |-
最近一天内上传最活跃的资源
最近一天内上传最活跃的种子
server.top10.in_the_past_month: |-
最近一月内上传最活跃的资源
最近一月内上传最活跃的种子
server.top10.in_the_past_week: |-
最近一周内上传最活跃的资源
最近一周内上传最活跃的种子
server.top10.in_the_past_year: |-
最近一年内上传最活跃的资源
server.top10.joined: |-
@@ -4939,7 +4951,7 @@ server.torrents.already_a_re_seed_request: |-
server.torrents.any: |-
任一
server.torrents.appended_to_the_regular_message_unless_using_send_now: |-
除非使用Send now,否则会追加到常规信息中。
除非使用Send now,否则会追加到常规信息中。
server.torrents.artist_alias_id: |-
艺人 ID
server.torrents.asc: |-
@@ -5645,7 +5657,7 @@ server.torrents.you_are_attempting_to_merge: |-
server.torrents.you_are_req: |-
你当前请求编辑的种子组是
server.torrents.you_are_req_note: |-
<p>请详细写明编辑该种子组所需的信息,包括所有相关链接(IMDb、豆瓣等)。<br /><br />请求编辑不会生成报告,会在论坛的编辑请求版块生成一个帖子。<br /><br />该功能可用于:</p> <ul> <li>原始发行信息,例如:发行年。</li> <li>种子组重命名/资料修正</li> <li>种子组合并</li> <li>其他……</li> </ul>绝对不要将此功能用于种子或艺人。对于单个种子,使用种子报告功能;对于艺人,前往其各自的页面使用请求编辑功能。
<p>请详细写明编辑该种子组所需的信息,包括所有相关链接(IMDb、豆瓣等)。<br /><br />请求编辑不会生成报告,会在论坛的编辑请求版块生成一个帖子。<br /><br />该功能可用于:</p> <ul> <li>原始发行信息,例如:发行年。</li> <li>种子组重命名/资料修正</li> <li>种子组合并</li> <li>其他……</li> </ul>绝对不要将此功能用于种子或艺人。对于单个种子,使用种子报告功能;对于艺人,前往其各自的页面使用请求编辑功能。
server.torrents.you_can_no_longer_delete_this_torrent_as_it_has_been_snatched_by_5_or_more_users: |-
由于下载完成种子的用户已超过 5 位,因而不能被你删除。如果你认为它存在问题,请报告之。
server.torrents.you_can_no_longer_delete_this_torrent_as_it_has_been_uploaded_for_over_a_week: |-
@@ -5663,11 +5675,11 @@ server.upload.album_note: |-
server.upload.arabic: |-
阿拉伯语
server.upload.artist_note: |-
<strong class='u-colorWarning'>请采用右侧的多艺人增删功能而非简单地将Various Artists作为一个艺人添加,</strong>参阅 <a href='wiki.php?action=article&amp;id=128' target='_blank'>本文</a> 获取更多信息。
<strong class='u-colorWarning'>请采用右侧的多艺人增删功能而非简单地将Various Artists作为一个艺人添加,</strong>参阅 <a href='wiki.php?action=article&amp;id=128' target='_blank'>本文</a> 获取更多信息。
server.upload.assurance: |-
确保你的种子符合 <h7><a href='rules.php?p=upload' target='_blank'>发布规则</a></h7>。否则将会受到<strong class='u-colorWarning'>警告</strong>或<strong class='u-colorWarning'>处罚</strong>。
server.upload.assurance_note: |-
<p>上传种子后,你将有一个小时的保护期,在此期间,除你之外没有人可以使用此种子应求,明智地利用这段时间,并搜索<a href='requests.php' target='_blank'>求种列表</a>。</p>
<p>上传种子后,你将有一个小时的保护期,在此期间,除你之外没有人可以使用此种子应求,明智地利用这段时间,并搜索<a href='requests.php' target='_blank'>求种列表</a>。</p>
server.upload.auto_detect: |-
*自动检测
server.upload.bad_folders: |-
@@ -5783,7 +5795,7 @@ server.upload.marks_how_to_toggle: |-
server.upload.marks_warning: |-
<strong class='u-colorWarning'>转载资源不得使用「自购」和「自制」标记,否则将导致你被警告。</strong>
server.upload.mediainfo_bdinfo_note: |-
如果有多个视频文件或多张碟片,请使用右上角的 “+” 按钮分别添加各自所属的 MediaInfo/BDInfo。
如果有多个视频文件或多张碟片,请使用右上角的「+」按钮分别添加各自所属的 MediaInfo/BDInfo。
server.upload.mediainfo_bdinfo_placeholder: |-
请在此粘贴 MediaInfo/BDInfo 全文,每框限填一段。
server.upload.mixed_subtitles: |-
@@ -5801,7 +5813,7 @@ server.upload.movie_cover: |-
server.upload.movie_edition_information: |-
版本信息
server.upload.movie_edition_information_examples: |-
例:珍藏集的一部分、特殊版本、杜比视界/全景声等非同寻常的特点。<a href="wiki.php?action=article&name=版本信息填写指南">点此</a> 阅读版本指南。<strong>当选择电影大师” “标准收藏” “华纳档案馆” “4K修复版” “4K重制版” “重制版或自定义版本信息时,强烈建议填写该版本所对应的年份。</strong>
例:珍藏集的一部分、特殊版本、杜比视界/全景声等非同寻常的特点。<a href="wiki.php?action=article&name=版本信息填写指南">点此</a> 阅读版本指南。<strong>当选择电影大师」「标准收藏」「华纳档案馆」「4K修复版」「4K重制版」「重制版或自定义版本信息时,强烈建议填写该版本所对应的年份。</strong>
server.upload.movie_edition_information_label: |-
如果种子来自特定的版本,请勾选此项。
server.upload.movie_feature: |-
@@ -5823,7 +5835,7 @@ server.upload.movie_resolution: |-
server.upload.movie_scene: |-
Scene
server.upload.movie_scene_label: |-
当且仅当它是scene release时勾选此项。如果它是你自购自制的,那么它就不是一个 scene release。
当且仅当它是scene release时勾选此项。如果它是你自购自制的,那么它就不是一个 scene release。
server.upload.movie_scene_note: |-
你可以前往 <a href="https://pre.corrupt-net.org/" target="_blank">pre.corrupt-net.org</a> 或 <a href="https://www.srrdb.com/" target="_blank">srrDB</a> 搜索文件名再次确认。
server.upload.movie_source: |-
@@ -5948,7 +5960,7 @@ server.upload.torrent_info_how_to_blockquote: |-
server.upload.torrent_info_how_to_toggle: |-
&nbsp;如何填写以下信息&nbsp;
server.upload.torrent_rule: |-
<h7>除极个别情况,VA、Various Artists、群星不可作为艺人名称,请使用 “+” 编辑具体艺人。更多信息请参阅 <a href='wiki.php?action=article&amp;id=17' target='_blank'>此说明</a>。</h7>
<h7>除极个别情况,VA、Various Artists、群星不可作为艺人名称,请使用「+」编辑具体艺人。更多信息请参阅 <a href='wiki.php?action=article&amp;id=17' target='_blank'>此说明</a>。</h7>
server.upload.trailer_link: |-
预告片链接
server.upload.turkish: |-
@@ -5974,7 +5986,7 @@ server.upload.year: |-
server.upload.year_remaster: |-
首次公映年份
server.upload.year_remaster_title: |-
你为原始发行版指定的年份早于该媒介面世的时间。你需要填写发行信息,尤其是发行版年份。若你无法提供发行信息,请勾选下方的未知发行选框。
你为原始发行版指定的年份早于该媒介面世的时间。你需要填写发行信息,尤其是发行版年份。若你无法提供发行信息,请勾选下方的未知发行选框。
server.user.1_week: |-
1
server.user.2_week: |-
@@ -6054,7 +6066,7 @@ server.user.autocomp_1: |-
server.user.autocomp_2: |-
仅搜索栏
server.user.autocomp_title: |-
自动补全会尝试预测你正在输入的字词。选择任何位置会在站点的艺人和标签区域启用自动补全。选择仅搜索栏会在搜索区启用自动补全。
自动补全会尝试预测你正在输入的字词。选择任何位置会在站点的艺人和标签区域启用自动补全。选择仅搜索栏会在搜索区启用自动补全。
server.user.autosave: |-
文本框内容自动保存
server.user.autosave_title: |-
@@ -6248,7 +6260,7 @@ server.user.disabled: |-
server.user.disabled_accounts_linked_by_ip: |-
通过 IP 地址关联的被禁用账号
server.user.disabled_accounts_linked_by_ip_must_also_be_checked: |-
必须同时勾选通过 IP 地址关联的被禁用账号
必须同时勾选通过 IP 地址关联的被禁用账号
server.user.disabled_accounts_linked_by_ip_title: |-
仅显示通过 IP 地址关联的被禁用账号的用户
server.user.disabled_invites: |-
@@ -6274,7 +6286,7 @@ server.user.donor_system_add_points: |-
server.user.donor_system_modify_values: |-
捐助系统(修改数值)
server.user.donor_system_modify_values_title: |-
此工具仅用于手动修正数值。如欲正常统计捐助,请使用捐助系统(添加点数)工具。
此工具仅用于手动修正数值。如欲正常统计捐助,请使用捐助系统(添加点数)工具。
server.user.donorforum_1: |-
前缀
server.user.donorforum_2: |-
@@ -6332,7 +6344,7 @@ server.user.filt_tr_show: |-
server.user.filt_tr_show_tags: |-
显示官方标签筛选区
server.user.filt_tr_title: |-
勾选显示种子搜索箱会默认在种子搜索菜单下显示它。勾选显示官方标签筛选区会默认在搜索箱中罗列出可点击的官方标签项。
勾选显示种子搜索箱会默认在种子搜索菜单下显示它。勾选显示官方标签筛选区会默认在搜索箱中罗列出可点击的官方标签项。
server.user.for: |-
server.user.forum_warnings: |-
@@ -6376,7 +6388,7 @@ server.user.invite_link: |-
server.user.invite_note: |-
备注
server.user.invite_rules_1: |-
<a href="/rules.php#1.1">一人一号</a>。创建多个账号(即俗称的马甲),一经查实即封禁所有相关账号。不要向任何曾经拥有过 {{CONFIG['SITE_NAME']}} 账号的人发送邀请,即使是你的熟人也不可以。如果你邀请了曾被禁用的用户,你将可能被永久禁止。如果他们希望重启账号,请指引他通过账号找回功能、QQ 群、TG 群,或请朋友在申诉板块寻求帮助或发送 <a href="/staffpm.php">Staff PM</a> 联系管理人员。
<a href="/rules.php#1.1">一人一号</a>。创建多个账号(即俗称的马甲),一经查实即封禁所有相关账号。不要向任何曾经拥有过 {{CONFIG['SITE_NAME']}} 账号的人发送邀请,即使是你的熟人也不可以。如果你邀请了曾被禁用的用户,你将可能被永久禁止。如果他们希望重启账号,请指引他通过账号找回功能、QQ 群、TG 群,或请朋友在申诉板块寻求帮助或发送 <a href="/staffpm.php">Staff PM</a> 联系管理人员。
server.user.invite_rules_2: |-
<a href="/rules.php#2.1">不要邀请劣质用户</a>。你需要对你邀请的用户负责。你邀请的用户达不到合格分享率,不会导致你受罚。但若你邀请的用户操作违反了<a href="/rules.php">黄金规则</a>,你的账号和/或权限可能会被禁用。
server.user.invite_rules_3: |-
@@ -6446,7 +6458,7 @@ server.user.lastaccess: |-
server.user.leaderboard_position: |-
排行榜排名
server.user.leaving_blank_means_you_allow_all_sizes: |-
(只可订阅大于 1 GB 的种子)
(只可订阅大于 1 GiB 的种子)
server.user.leaving_blank_means_you_allow_all_years: |-
(如果不设置,即视为订阅全部年份的种子)
server.user.leech: |-
@@ -6484,7 +6496,7 @@ server.user.mature: |-
server.user.mature_show: |-
显示成人内容
server.user.mature_title: |-
{{CONFIG['SITE_NAME']}} 对于社交领域的成人内容政策较为灵活。勾选显示成人内容会允许你点击访问 <code>[mature]</code> 标签下的任何内容。如果你不勾选显示成人内容,就不会看到任何用 <code>[mature]</code> 包裹起来的内容。
{{CONFIG['SITE_NAME']}} 对于社交领域的成人内容政策较为灵活。勾选显示成人内容会允许你点击访问 <code>[mature]</code> 标签下的任何内容。如果你不勾选显示成人内容,就不会看到任何用 <code>[mature]</code> 包裹起来的内容。
server.user.menu: |-
目录
server.user.merge_from: |-
@@ -6644,7 +6656,7 @@ server.user.p_personal: |-
server.user.para_artistsadded: |-
添加的艺人数
server.user.para_artistsadded_title: |-
该选项控制了你在本站添加到种子组中艺人的显示。其总数包含了通过上传页面,以及种子详情页面添加艺人功能添加的艺人数量。
该选项控制了你在本站添加到种子组中艺人的显示。其总数包含了通过上传页面,以及种子详情页面添加艺人功能添加的艺人数量。
server.user.para_badgedisplay: |-
个人印记全部展示
server.user.para_badgedisplay_label: |-
@@ -6764,7 +6776,7 @@ server.user.ratio: |-
server.user.ratio_watch: |-
分享率监控
server.user.ratio_watch_text: |-
此用户当前正处于分享率监控中,其必须上传%s(在%s前),否则其下载权限会被封禁, 列入分享率监控后新增的下载量为:%s
此用户当前正处于分享率监控中,其必须在 %s 内获得 %s 上传量,否则其下载权限会被封禁。<br/>被监控分享率后其新增的下载量为:%s
server.user.reason: |-
原因
server.user.reason_title: |-
@@ -6954,7 +6966,7 @@ server.user.st_donorlink_title: |-
server.user.st_email: |-
邮件地址
server.user.st_email_note: |-
更改邮件地址时,你需要在当前密码中输入你的密码,以便验证。
更改邮件地址时,你需要在当前密码中输入你的密码,以便验证。
server.user.st_email_title: |-
这是你想要与站点账号关联的邮箱地址。在你忘记密码或站点需要通知你时会用到。
server.user.st_lastactivity: |-
@@ -6970,7 +6982,7 @@ server.user.st_notification_title: |-
server.user.st_paranoia: |-
隐私设置
server.user.st_paranoia_note: |-
<p><strong>勾选你愿意向其他用户显示的内容</strong></p> <p>举个例子,如果你为求种 (已完成)勾选了显示数量,则你已应求的数量就会可见。如果你勾选了显示总额,则你从求种中赚取的上传总量就会可见。如果你勾选了显示列表,则你应求列表中的所有应求都会可见。</p> <p><span class='u-colorWarning'>注意:</span></p> <p><span class='u-colorWarning'>1. 隐私设置对你在本站的安全性毫无影响,以下选项仅能决定其他用户能否看到你在站点的活动。一些信息在站点日志中仍旧可见。</span></p> <p><span class='u-colorWarning'>2. 隐私设置中的某些设置可能会影响你在排行榜中的显示。</span></p>
<p><strong>勾选你愿意向其他用户显示的内容</strong></p> <p>举个例子,如果你为求种 (已完成)勾选了显示数量,则你已应求的数量就会可见。如果你勾选了显示总额,则你从求种中赚取的上传总量就会可见。如果你勾选了显示列表,则你应求列表中的所有应求都会可见。</p> <p><span class='u-colorWarning'>注意:</span></p> <p><span class='u-colorWarning'>1. 隐私设置对你在本站的安全性毫无影响,以下选项仅能决定其他用户能否看到你在站点的活动。一些信息在站点日志中仍旧可见。</span></p> <p><span class='u-colorWarning'>2. 隐私设置中的某些设置可能会影响你在排行榜中的显示。</span></p>
server.user.st_paranoia_title: |-
这些设置允许你展示或隐藏个人信息。
server.user.st_password: |-
@@ -7084,7 +7096,7 @@ server.user.submit: |-
server.user.super_toasty: |-
Super Toasty (APP)
server.user.supports_partial_url_matching: |-
支持部分网址匹配,如,输入&#124;https://whatimg.com会搜索存储在 https://whatimg.com 上的头像
支持部分网址匹配,如,输入&#124;https://whatimg.com会搜索存储在 https://whatimg.com 上的头像
server.user.tagging: |-
标签编辑
server.user.tagging_title: |-
@@ -7128,7 +7140,7 @@ server.user.this_tree_has_n_entries_n_branches_and_a_depth_of_n: |-
server.user.thread_subscriptions: |-
论坛主题订阅
server.user.to_fuzzy_search_for_a_block_of_addresses_title: |-
欲模糊搜索(默认)一个地址段(如 55.66.77.*),输入55.66.77.即可,不要带引号
欲模糊搜索(默认)一个地址段(如 55.66.77.*),输入55.66.77.即可,不要带引号
server.user.token: |-
令牌
server.user.token_history: |-
@@ -7168,7 +7180,7 @@ server.user.torrents_group_tool: |-
server.user.torrents_snatched: |-
已完成种子标记
server.user.torrents_snatched_title: |-
启用已完成种子标识会在你已完成的种子旁显示已完成!字样。
启用已完成种子标识会在你已完成的种子旁显示已完成!字样。
server.user.total_donor_points: |-
总捐助点数
server.user.total_points: |-
@@ -7244,7 +7256,9 @@ server.user.user_disable: |-
server.user.user_po: |-
用户权限
server.user.user_reason: |-
理由
随附原因
server.user.user_reason_title: |-
此原因会被私信给用户。
server.user.user_search: |-
用户搜索
server.user.username: |-
@@ -7270,7 +7284,7 @@ server.user.voting: |-
server.user.voting_disable: |-
禁用投票链接
server.user.voting_title: |-
该选项允许你启用或禁用艺人、合集和下载清单页面的up”和“down投票链接。
该选项允许你启用或禁用艺人、合集和下载清单页面的up」和「down投票链接。
server.user.warn: |-
警告
server.user.warn_reason: |-
@@ -8218,4 +8232,66 @@ server.reports_report_post: |-
server.reports_report_comment: |-
报告评论
server.user.show_hot_movie_at_home: |-
首页展示
首页展示
server.forums.new_forum_specific_rule: |-
添加版规
server.stats.uploads_by_day: |-
每日发布
client.stats.delete: |-
删除
client.stats.uploads: |-
发布
client.stats.upload_alive: |-
发布(存活)
client.stats.user_timeline: |-
流动情况
client.stats.new_registrations: |-
新注册
client.stats.disabled_user: |-
禁用
client.stats.user_class_distribution: |-
等级分布
client.stats.user_count: |-
用户数
client.stats.user_platform_distribution: |-
操作系统分布
client.stats.user_browser_distribution: |-
浏览器分布
client.stats.geographical_distribution: |-
地理位置分布
server.common.time_length: |-
时长
server.forums.verbal: |-
口头
server.forums.edit_post: |-
编辑帖子
server.user.seeding_size: |-
做种体积
client.stats.processing_distribution: |-
处理方式分布
client.stats.source_distribution: |-
来源分布
client.stats.codec_distribution: |-
编码分布
client.stats.resolution_distribution: |-
分辨率分布
client.stats.container_distribution: |-
容器分布
client.stats.release_distribution: |-
发行类别分布
client.stats.torrent_count: |-
种子数
client.stats.movie_count: |-
电影数
client.stats.peers: |-
Peers
client.stats.peer_count: |-
同伴数
client.stats.seeder_count: |-
做种数
client.stats.leecher_count: |-
下载数
client.stats.uv: |-
日活跃用户数
client.stats.seeding_user: |-
做种的用户数
@@ -3,6 +3,4 @@
{% endblock %}
{% block body %}
你因为 [url={{ URL }}]这条评论[/url] 得到了{% if Length > 1 %} {{ Length }}{% else %}口头{% endif %}警告。
[quote]{{ PrivateMessage }}[/quote]
{% endblock %}
[quote]{{ PrivateMessage }}[/quote]{% endblock %}
@@ -3,6 +3,4 @@ You have received a {% if Length %}{% else %}verbal {% endif %}warning
{% endblock %}
{% block body %}
You have received a {% if Length %} {{ Length }} week{% if Length > 1 %}s{% endif %}{% else %}verbal{% endif %} warning for [url={{ URL }}]this comment[/url].
[quote]{{ PrivateMessage }}[/quote]
{% endblock %}
[quote]{{ PrivateMessage }}[/quote]{% endblock %}
+1 -1
View File
@@ -52,9 +52,9 @@ export default defineConfig({
'src/js/pages/upload/index.js',
'src/js/pages/imgupload/index.js',
'src/js/pages/torrents/index.js',
'src/js/pages/home.jsx',
'src/js/pages/userEdit.js',
'src/js/pages/stats/index.jsx',
'src/js/pages/stats/index.jsx',
],
},
},
+458 -553
View File
File diff suppressed because it is too large Load Diff