Merge pull request #489 from v2board/dev

1.5.4
This commit is contained in:
tokumeikoi 2021-12-31 23:10:22 +08:00 committed by GitHub
commit 389db6fb97
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
60 changed files with 2695 additions and 140 deletions

View File

@ -45,6 +45,7 @@ class CheckOrder extends Command
{
ini_set('memory_limit', -1);
$orders = Order::whereIn('status', [0, 1])
->orderBy('created_at', 'ASC')
->get();
foreach ($orders as $order) {
OrderHandleJob::dispatch($order->trade_no);

View File

@ -64,12 +64,12 @@ class ResetTraffic extends Command
break;
}
case 0: {
$builder = $this->builder->where('plan_id', $plan->id);
$builder = with(clone($this->builder))->where('plan_id', $plan->id);
$this->resetByMonthFirstDay($builder);
break;
}
case 1: {
$builder = $this->builder->where('plan_id', $plan->id);
$builder = with(clone($this->builder))->where('plan_id', $plan->id);
$this->resetByExpireDay($builder);
break;
}

View File

@ -4,8 +4,10 @@ namespace App\Console\Commands;
use App\Models\Order;
use App\Models\User;
use App\Utils\CacheKey;
use App\Utils\Helper;
use Illuminate\Console\Command;
use Illuminate\Support\Facades\Cache;
use Matriphe\Larinfo;
class Test extends Command

View File

@ -48,7 +48,7 @@ class V2boardInstall extends Command
$this->info(" \ V / / __/| |_) | (_) | (_| | | | (_| | ");
$this->info(" \_/ |_____|____/ \___/ \__,_|_| \__,_| ");
if (\File::exists(base_path() . '/.env')) {
abort(500, 'V2board 已安装,如需重新安装请删除目录下.lock文件');
abort(500, 'V2board 已安装,如需重新安装请删除目录下.env文件');
}
if (!copy(base_path() . '/.env.example', base_path() . '/.env')) {
@ -99,7 +99,6 @@ class V2boardInstall extends Command
$this->info('一切就绪');
$this->info('访问 http(s)://你的站点/admin 进入管理面板');
\File::put(base_path() . '/.lock', time());
} catch (\Exception $e) {
$this->error($e->getMessage());
}

View File

@ -3,10 +3,12 @@
namespace App\Http\Controllers\Admin;
use App\Http\Requests\Admin\ConfigSave;
use App\Jobs\SendEmailJob;
use App\Services\TelegramService;
use Illuminate\Http\Request;
use App\Utils\Dict;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Mail;
class ConfigController extends Controller
{
@ -32,6 +34,24 @@ class ConfigController extends Controller
]);
}
public function testSendMail(Request $request)
{
$obj = new SendEmailJob([
'email' => $request->session()->get('email'),
'subject' => 'This is v2board test email',
'template_name' => 'notify',
'template_value' => [
'name' => config('v2board.app_name', 'V2Board'),
'content' => 'This is v2board test email',
'url' => config('v2board.app_url')
]
]);
return response([
'data' => true,
'log' => $obj->handle()
]);
}
public function setTelegramWebhook(Request $request)
{
$telegramService = new TelegramService($request->input('telegram_bot_token'));
@ -82,7 +102,9 @@ class ConfigController extends Controller
'recaptcha_enable' => (int)config('v2board.recaptcha_enable', 0),
'recaptcha_key' => config('v2board.recaptcha_key'),
'recaptcha_site_key' => config('v2board.recaptcha_site_key'),
'tos_url' => config('v2board.tos_url')
'tos_url' => config('v2board.tos_url'),
'currency' => config('v2board.currency', 'CNY'),
'currency_symbol' => config('v2board.currency_symbol', '¥')
],
'subscribe' => [
'plan_change_enable' => (int)config('v2board.plan_change_enable', 1),
@ -151,7 +173,8 @@ class ConfigController extends Controller
],
'telegram' => [
'telegram_bot_enable' => config('v2board.telegram_bot_enable', 0),
'telegram_bot_token' => config('v2board.telegram_bot_token')
'telegram_bot_token' => config('v2board.telegram_bot_token'),
'telegram_discuss_link' => config('v2board.telegram_discuss_link')
],
'app' => [
'windows_version' => config('v2board.windows_version'),

View File

@ -19,7 +19,7 @@ class CouponController extends Controller
$current = $request->input('current') ? $request->input('current') : 1;
$pageSize = $request->input('pageSize') >= 10 ? $request->input('pageSize') : 10;
$sortType = in_array($request->input('sort_type'), ['ASC', 'DESC']) ? $request->input('sort_type') : 'DESC';
$sort = $request->input('sort') ? $request->input('sort') : 'created_at';
$sort = $request->input('sort') ? $request->input('sort') : 'id';
$builder = Coupon::orderBy($sort, $sortType);
$total = $builder->count();
$coupons = $builder->forPage($current, $pageSize)
@ -64,6 +64,7 @@ class CouponController extends Controller
$coupon = $request->validated();
$coupon['created_at'] = $coupon['updated_at'] = time();
$coupon['limit_plan_ids'] = json_encode($coupon['limit_plan_ids']);
$coupon['limit_period'] = json_encode($coupon['limit_period']);
unset($coupon['generate_count']);
for ($i = 0;$i < $request->input('generate_count');$i++) {
$coupon['code'] = Helper::randomChar(8);

View File

@ -146,11 +146,11 @@ class OrderController extends Controller
$orderService = new OrderService($order);
$order->user_id = $user->id;
$order->plan_id = $plan->id;
$order->cycle = $request->input('cycle');
$order->period = $request->input('period');
$order->trade_no = Helper::guid();
$order->total_amount = $request->input('total_amount');
if ($order->cycle === 'reset_price') {
if ($order->period === 'reset_price') {
$order->type = 4;
} else if ($user->plan_id !== NULL && $order->plan_id !== $user->plan_id) {
$order->type = 3;

View File

@ -2,6 +2,7 @@
namespace App\Http\Controllers\Admin;
use App\Http\Requests\Admin\PaymentSave;
use App\Services\PaymentService;
use App\Utils\Helper;
use Illuminate\Http\Request;
@ -57,8 +58,18 @@ class PaymentController extends Controller
'data' => true
]);
}
$request->validate([
'name' => 'required',
'payment' => 'required',
'config' => 'required'
], [
'name.required' => '显示名称不能为空',
'payment.required' => '网关参数不能为空',
'config.required' => '配置参数不能为空'
]);
if (!Payment::create([
'name' => $request->input('name'),
'icon' => $request->input('icon'),
'payment' => $request->input('payment'),
'config' => $request->input('config'),
'uuid' => Helper::randomChar(8)

View File

@ -3,9 +3,12 @@
namespace App\Http\Controllers\Admin\Server;
use App\Models\Plan;
use App\Models\ServerShadowsocks;
use App\Models\ServerTrojan;
use App\Models\ServerV2ray;
use App\Models\ServerGroup;
use App\Models\User;
use App\Services\ServerService;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
@ -18,8 +21,20 @@ class GroupController extends Controller
'data' => [ServerGroup::find($request->input('group_id'))]
]);
}
$serverGroups = ServerGroup::get();
$serverService = new ServerService();
$servers = $serverService->getAllServers();
foreach ($serverGroups as $k => $v) {
$serverGroups[$k]['user_count'] = User::where('group_id', $v['id'])->count();
$serverGroups[$k]['server_count'] = 0;
foreach ($servers as $server) {
if (in_array($v['id'], $server['group_id'])) {
$serverGroups[$k]['server_count'] = $serverGroups[$k]['server_count']+1;
}
}
}
return response([
'data' => ServerGroup::get()
'data' => $serverGroups
]);
}

View File

@ -22,6 +22,7 @@ class ManageController extends Controller
public function sort(Request $request)
{
ini_set('post_max_size', '1m');
DB::beginTransaction();
foreach ($request->input('sorts') as $k => $v) {
switch ($v['key']) {

View File

@ -30,20 +30,22 @@ class UserController extends Controller
private function filter(Request $request, $builder)
{
if ($request->input('filter')) {
foreach ($request->input('filter') as $filter) {
if ($filter['key'] === 'invite_by_email') {
$user = User::where('email', $filter['value'])->first();
if (!$user) continue;
$builder->where('invite_user_id', $user->id);
continue;
$filters = $request->input('filter');
if ($filters) {
foreach ($filters as $k => $filter) {
if ($filter['condition'] === '模糊') {
$filter['condition'] = 'like';
$filter['value'] = "%{$filter['value']}%";
}
if ($filter['key'] === 'd' || $filter['key'] === 'transfer_enable') {
$filter['value'] = $filter['value'] * 1073741824;
}
if ($filter['condition'] === '模糊') {
$filter['condition'] = 'like';
$filter['value'] = "%{$filter['value']}%";
if ($filter['key'] === 'invite_by_email') {
$user = User::where('email', $filter['condition'], $filter['value'])->first();
$inviteUserId = isset($user->id) ? $user->id : 0;
$builder->where('invite_user_id', $inviteUserId);
unset($filters[$k]);
continue;
}
$builder->where($filter['key'], $filter['condition'], $filter['value']);
}
@ -179,6 +181,9 @@ class UserController extends Controller
'uuid' => Helper::guid(true),
'token' => Helper::guid()
];
if (User::where('email', $user['email'])->first()) {
abort(500, '邮箱已存在于系统中');
}
$user['password'] = password_hash($request->input('password') ?? $user['email'], PASSWORD_DEFAULT);
if (!User::create($user)) {
abort(500, '生成失败');
@ -251,7 +256,8 @@ class UserController extends Controller
'url' => config('v2board.app_url'),
'content' => $request->input('content')
]
]);
],
'send_email_mass');
}
return response([

View File

@ -52,7 +52,19 @@ class Clash
$config['proxies'] = array_merge($config['proxies'] ? $config['proxies'] : [], $proxy);
foreach ($config['proxy-groups'] as $k => $v) {
if (!is_array($config['proxy-groups'][$k]['proxies'])) continue;
$config['proxy-groups'][$k]['proxies'] = array_merge($config['proxy-groups'][$k]['proxies'], $proxies);
$isFilter = false;
foreach ($config['proxy-groups'][$k]['proxies'] as $src) {
foreach ($proxies as $dst) {
if ($this->isMatch($src, $dst)) {
$isFilter = true;
$config['proxy-groups'][$k]['proxies'] = array_diff($config['proxy-groups'][$k]['proxies'], [$src]);
array_push($config['proxy-groups'][$k]['proxies'], $dst);
}
}
}
if (!$isFilter) {
$config['proxy-groups'][$k]['proxies'] = array_merge($config['proxy-groups'][$k]['proxies'], $proxies);
}
}
// Force the current subscription domain to be a direct rule
$subsDomain = $_SERVER['SERVER_NAME'];
@ -134,4 +146,13 @@ class Clash
if (!empty($server['allow_insecure'])) $array['skip-cert-verify'] = ($server['allow_insecure'] ? true : false);
return $array;
}
private function isMatch($exp, $str)
{
try {
return preg_match($exp, $str);
} catch (\Exception $e) {
return false;
}
}
}

View File

@ -0,0 +1,159 @@
<?php
namespace App\Http\Controllers\Client\Protocols;
use Symfony\Component\Yaml\Yaml;
class Stash
{
public $flag = 'stash';
private $servers;
private $user;
public function __construct($user, $servers)
{
$this->user = $user;
$this->servers = $servers;
}
public function handle()
{
$servers = $this->servers;
$user = $this->user;
$appName = config('v2board.app_name', 'V2Board');
header("subscription-userinfo: upload={$user['u']}; download={$user['d']}; total={$user['transfer_enable']}; expire={$user['expired_at']}");
header('profile-update-interval: 24');
header("content-disposition: filename={$appName}");
// 暂时使用clash配置文件后续根据Stash更新情况更新
$defaultConfig = base_path() . '/resources/rules/default.clash.yaml';
$customConfig = base_path() . '/resources/rules/custom.clash.yaml';
if (\File::exists($customConfig)) {
$config = Yaml::parseFile($customConfig);
} else {
$config = Yaml::parseFile($defaultConfig);
}
$proxy = [];
$proxies = [];
foreach ($servers as $item) {
if ($item['type'] === 'shadowsocks') {
array_push($proxy, self::buildShadowsocks($user['uuid'], $item));
array_push($proxies, $item['name']);
}
if ($item['type'] === 'v2ray') {
array_push($proxy, self::buildVmess($user['uuid'], $item));
array_push($proxies, $item['name']);
}
if ($item['type'] === 'trojan') {
array_push($proxy, self::buildTrojan($user['uuid'], $item));
array_push($proxies, $item['name']);
}
}
$config['proxies'] = array_merge($config['proxies'] ? $config['proxies'] : [], $proxy);
foreach ($config['proxy-groups'] as $k => $v) {
if (!is_array($config['proxy-groups'][$k]['proxies'])) continue;
$isFilter = false;
foreach ($config['proxy-groups'][$k]['proxies'] as $src) {
foreach ($proxies as $dst) {
if ($this->isMatch($src, $dst)) {
$isFilter = true;
$config['proxy-groups'][$k]['proxies'] = array_diff($config['proxy-groups'][$k]['proxies'], [$src]);
array_push($config['proxy-groups'][$k]['proxies'], $dst);
}
}
}
if (!$isFilter) {
$config['proxy-groups'][$k]['proxies'] = array_merge($config['proxy-groups'][$k]['proxies'], $proxies);
}
}
// Force the current subscription domain to be a direct rule
$subsDomain = $_SERVER['SERVER_NAME'];
$subsDomainRule = "DOMAIN,{$subsDomain},DIRECT";
array_unshift($config['rules'], $subsDomainRule);
$yaml = Yaml::dump($config);
$yaml = str_replace('$app_name', config('v2board.app_name', 'V2Board'), $yaml);
return $yaml;
}
public static function buildShadowsocks($uuid, $server)
{
$array = [];
$array['name'] = $server['name'];
$array['type'] = 'ss';
$array['server'] = $server['host'];
$array['port'] = $server['port'];
$array['cipher'] = $server['cipher'];
$array['password'] = $uuid;
$array['udp'] = true;
return $array;
}
public static function buildVmess($uuid, $server)
{
$array = [];
$array['name'] = $server['name'];
$array['type'] = 'vmess';
$array['server'] = $server['host'];
$array['port'] = $server['port'];
$array['uuid'] = $uuid;
$array['alterId'] = $server['alter_id'];
$array['cipher'] = 'auto';
$array['udp'] = true;
if ($server['tls']) {
$array['tls'] = true;
if ($server['tlsSettings']) {
$tlsSettings = $server['tlsSettings'];
if (isset($tlsSettings['allowInsecure']) && !empty($tlsSettings['allowInsecure']))
$array['skip-cert-verify'] = ($tlsSettings['allowInsecure'] ? true : false);
if (isset($tlsSettings['serverName']) && !empty($tlsSettings['serverName']))
$array['servername'] = $tlsSettings['serverName'];
}
}
if ($server['network'] === 'ws') {
$array['network'] = 'ws';
if ($server['networkSettings']) {
$wsSettings = $server['networkSettings'];
if (isset($wsSettings['path']) && !empty($wsSettings['path']))
$array['ws-path'] = $wsSettings['path'];
if (isset($wsSettings['headers']['Host']) && !empty($wsSettings['headers']['Host']))
$array['ws-headers'] = ['Host' => $wsSettings['headers']['Host']];
}
}
if ($server['network'] === 'grpc') {
$array['network'] = 'grpc';
if ($server['networkSettings']) {
$grpcObject = $server['networkSettings'];
$array['grpc-opts'] = [];
$array['grpc-opts']['grpc-service-name'] = $grpcObject['serviceName'];
}
}
return $array;
}
public static function buildTrojan($password, $server)
{
$array = [];
$array['name'] = $server['name'];
$array['type'] = 'trojan';
$array['server'] = $server['host'];
$array['port'] = $server['port'];
$array['password'] = $password;
$array['udp'] = true;
if (!empty($server['server_name'])) $array['sni'] = $server['server_name'];
if (!empty($server['allow_insecure'])) $array['skip-cert-verify'] = ($server['allow_insecure'] ? true : false);
return $array;
}
private function isMatch($exp, $str)
{
try {
return preg_match($exp, $str);
} catch (\Exception $e) {
return false;
}
}
}

View File

@ -67,12 +67,11 @@ class Surfboard
public static function buildShadowsocks($password, $server)
{
$config = [
"{$server['name']}=custom",
"{$server['name']}=ss",
"{$server['host']}",
"{$server['port']}",
"{$server['cipher']}",
"{$password}",
'https://raw.githubusercontent.com/Hackl0us/proxy-tool-backup/master/SSEncrypt.module',
"encrypt-method={$server['cipher']}",
"password={$password}",
'tfo=true',
'udp-relay=true'
];

View File

@ -14,9 +14,12 @@ class CommController extends Controller
return response([
'data' => [
'is_telegram' => (int)config('v2board.telegram_bot_enable', 0),
'telegram_discuss_link' => config('v2board.telegram_discuss_link'),
'stripe_pk' => config('v2board.stripe_pk_live'),
'withdraw_methods' => config('v2board.commission_withdraw_method', Dict::WITHDRAW_METHOD_WHITELIST_DEFAULT),
'withdraw_close' => (int)config('v2board.withdraw_close_enable', 0)
'withdraw_close' => (int)config('v2board.withdraw_close_enable', 0),
'currency' => config('v2board.currency', 'CNY'),
'currency_symbol' => config('v2board.currency_symbol', '¥')
]
]);
}

View File

@ -29,7 +29,7 @@ class InviteController extends Controller
return response([
'data' => Order::where('invite_user_id', $request->session()->get('id'))
->where('commission_balance', '>', 0)
->where('status', 3)
->whereIn('status', [3, 4])
->select([
'id',
'commission_status',

View File

@ -78,26 +78,27 @@ class OrderController extends Controller
abort(500, __('Subscription plan does not exist'));
}
if ((!$plan->show && !$plan->renew) || (!$plan->show && $user->plan_id !== $plan->id)) {
if ($request->input('cycle') !== 'reset_price') {
abort(500, __('This subscription has been sold out, please choose another subscription'));
}
if ($plan[$request->input('period')] === NULL) {
abort(500, __('This payment period cannot be purchased, please choose another period'));
}
if (!$plan->renew && $user->plan_id == $plan->id && $request->input('cycle') !== 'reset_price') {
abort(500, __('This subscription cannot be renewed, please change to another subscription'));
}
if ($plan[$request->input('cycle')] === NULL) {
abort(500, __('This payment cycle cannot be purchased, please choose another cycle'));
}
if ($request->input('cycle') === 'reset_price') {
if ($request->input('period') === 'reset_price') {
if ($user->expired_at <= time() || !$user->plan_id) {
abort(500, __('Subscription has expired or no active subscription, unable to purchase Data Reset Package'));
}
}
if ((!$plan->show && !$plan->renew) || (!$plan->show && $user->plan_id !== $plan->id)) {
if ($request->input('period') !== 'reset_price') {
abort(500, __('This subscription has been sold out, please choose another subscription'));
}
}
if (!$plan->renew && $user->plan_id == $plan->id && $request->input('period') !== 'reset_price') {
abort(500, __('This subscription cannot be renewed, please change to another subscription'));
}
if (!$plan->show && $plan->renew && !$userService->isAvailable($user)) {
abort(500, __('This subscription has expired, please change to another subscription'));
}
@ -107,9 +108,9 @@ class OrderController extends Controller
$orderService = new OrderService($order);
$order->user_id = $request->session()->get('id');
$order->plan_id = $plan->id;
$order->cycle = $request->input('cycle');
$order->period = $request->input('period');
$order->trade_no = Helper::generateOrderNo();
$order->total_amount = $plan[$request->input('cycle')];
$order->total_amount = $plan[$request->input('period')];
if ($request->input('coupon_code')) {
$couponService = new CouponService($request->input('coupon_code'));
@ -211,7 +212,8 @@ class OrderController extends Controller
$methods = Payment::select([
'id',
'name',
'payment'
'payment',
'icon'
])
->where('enable', 1)->get();

View File

@ -70,7 +70,8 @@ class UserController extends Controller
'plan_id',
'discount',
'commission_rate',
'telegram_id'
'telegram_id',
'uuid'
])
->first();
if (!$user) {
@ -103,7 +104,6 @@ class UserController extends Controller
{
$user = User::where('id', $request->session()->get('id'))
->select([
'id',
'plan_id',
'token',
'expired_at',
@ -189,6 +189,8 @@ class UserController extends Controller
private function getResetDay(User $user)
{
if ($user->expired_at <= time() || $user->expired_at === NULL) return null;
// if reset method is not reset
if (isset($user->plan->reset_traffic_method) && $user->plan->reset_traffic_method === 2) return null;
$day = date('d', $user->expired_at);
$today = date('d');
$lastDay = date('d', strtotime('last day of +0 months'));

View File

@ -46,6 +46,8 @@ class ConfigSave extends FormRequest
'recaptcha_key' => '',
'recaptcha_site_key' => '',
'tos_url' => 'nullable|url',
'currency' => '',
'currency_symbol' => '',
// subscribe
'plan_change_enable' => 'in:0,1',
'reset_traffic_method' => 'in:0,1,2',
@ -110,6 +112,7 @@ class ConfigSave extends FormRequest
'telegram_bot_token' => '',
'telegram_discuss_id' => '',
'telegram_channel_id' => '',
'telegram_discuss_link' => 'nullable|url',
// app
'windows_version' => '',
'windows_download_url' => '',
@ -127,7 +130,8 @@ class ConfigSave extends FormRequest
'app_url.url' => '站点URL格式不正确必须携带http(s)://',
'subscribe_url.url' => '订阅URL格式不正确必须携带http(s)://',
'server_token.min' => '通讯密钥长度必须大于16位',
'tos_url.url' => '服务条款URL格式不正确'
'tos_url.url' => '服务条款URL格式不正确必须携带http(s)://',
'telegram_discuss_link.url' => 'Telegram群组地址必须为URL格式必须携带http(s)://'
];
}
}

View File

@ -23,6 +23,7 @@ class CouponGenerate extends FormRequest
'limit_use' => 'nullable|integer',
'limit_use_with_user' => 'nullable|integer',
'limit_plan_ids' => 'nullable|array',
'limit_period' => 'nullable|array',
'code' => ''
];
}
@ -43,7 +44,8 @@ class CouponGenerate extends FormRequest
'ended_at.integer' => '结束时间格式有误',
'limit_use.integer' => '最大使用次数格式有误',
'limit_use_with_user.integer' => '限制用户使用次数格式有误',
'limit_plan_ids.array' => '指定订阅格式有误'
'limit_plan_ids.array' => '指定订阅格式有误',
'limit_period.array' => '指定周期格式有误'
];
}
}

View File

@ -17,7 +17,7 @@ class OrderAssign extends FormRequest
'plan_id' => 'required',
'email' => 'required',
'total_amount' => 'required',
'cycle' => 'required|in:month_price,quarter_price,half_year_price,year_price,two_year_price,three_year_price,onetime_price,reset_price'
'period' => 'required|in:month_price,quarter_price,half_year_price,year_price,two_year_price,three_year_price,onetime_price,reset_price'
];
}
@ -27,8 +27,8 @@ class OrderAssign extends FormRequest
'plan_id.required' => '订阅不能为空',
'email.required' => '邮箱不能为空',
'total_amount.required' => '支付金额不能为空',
'cycle.required' => '订阅周期不能为空',
'cycle.in' => '订阅周期格式有误'
'period.required' => '订阅周期不能为空',
'period.in' => '订阅周期格式有误'
];
}
}

View File

@ -14,7 +14,7 @@ class OrderFetch extends FormRequest
public function rules()
{
return [
'filter.*.key' => 'required|in:email,trade_no,status,commission_status,user_id,invite_user_id',
'filter.*.key' => 'required|in:email,trade_no,status,commission_status,user_id,invite_user_id,callback_no',
'filter.*.condition' => 'required|in:>,<,=,>=,<=,模糊,!=',
'filter.*.value' => ''
];

View File

@ -15,7 +15,7 @@ class OrderSave extends FormRequest
{
return [
'plan_id' => 'required',
'cycle' => 'required|in:month_price,quarter_price,half_year_price,year_price,two_year_price,three_year_price,onetime_price,reset_price'
'period' => 'required|in:month_price,quarter_price,half_year_price,year_price,two_year_price,three_year_price,onetime_price,reset_price'
];
}
@ -23,8 +23,8 @@ class OrderSave extends FormRequest
{
return [
'plan_id.required' => __('Plan ID cannot be empty'),
'cycle.required' => __('Plan cycle cannot be empty'),
'cycle.in' => __('Wrong plan cycle')
'period.required' => __('Plan period cannot be empty'),
'period.in' => __('Wrong plan period')
];
}
}

View File

@ -17,6 +17,7 @@ class AdminRoute
$router->get ('/config/getEmailTemplate', 'Admin\\ConfigController@getEmailTemplate');
$router->get ('/config/getThemeTemplate', 'Admin\\ConfigController@getThemeTemplate');
$router->post('/config/setTelegramWebhook', 'Admin\\ConfigController@setTelegramWebhook');
$router->post('/config/testSendMail', 'Admin\\ConfigController@testSendMail');
// Plan
$router->get ('/plan/fetch', 'Admin\\PlanController@fetch');
$router->post('/plan/save', 'Admin\\PlanController@save');

View File

@ -21,10 +21,9 @@ class SendEmailJob implements ShouldQueue
*
* @return void
*/
public function __construct($params)
public function __construct($params, $queue = 'send_email')
{
$this->delay(now()->addSecond(2));
$this->onQueue('send_email');
$this->onQueue($queue);
$this->params = $params;
}
@ -60,11 +59,15 @@ class SendEmailJob implements ShouldQueue
$error = $e->getMessage();
}
MailLog::create([
$log = [
'email' => $params['email'],
'subject' => $params['subject'],
'template_name' => $params['template_name'],
'error' => isset($error) ? $error : NULL
]);
];
MailLog::create($log);
$log['config'] = config('mail');
return $log;
}
}

View File

@ -12,6 +12,7 @@ class Coupon extends Model
protected $casts = [
'created_at' => 'timestamp',
'updated_at' => 'timestamp',
'limit_plan_ids' => 'array'
'limit_plan_ids' => 'array',
'limit_period' => 'array'
];
}

View File

@ -11,6 +11,7 @@ class CouponService
public $coupon;
public $planId;
public $userId;
public $period;
public function __construct($code)
{
@ -21,6 +22,7 @@ class CouponService
{
$this->setPlanId($order->plan_id);
$this->setUserId($order->user_id);
$this->setPeriod($order->period);
$this->check();
switch ($this->coupon->type) {
case 1:
@ -30,6 +32,9 @@ class CouponService
$order->discount_amount = $order->total_amount * ($this->coupon->value / 100);
break;
}
if ($order->discount_amount > $order->total_amount) {
$order->discount_amount = $order->total_amount;
}
if ($this->coupon->limit_use !== NULL) {
$this->coupon->limit_use = $this->coupon->limit_use - 1;
if (!$this->coupon->save()) {
@ -59,6 +64,11 @@ class CouponService
$this->userId = $userId;
}
public function setPeriod($period)
{
$this->period = $period;
}
public function checkLimitUseWithUser():bool
{
$usedCount = Order::where('coupon_id', $this->coupon->id)
@ -88,6 +98,11 @@ class CouponService
abort(500, __('The coupon code cannot be used for this subscription'));
}
}
if ($this->coupon->limit_period && $this->period) {
if (!in_array($this->period, $this->coupon->limit_period)) {
abort(500, __('The coupon code cannot be used for this period'));
}
}
if ($this->coupon->limit_use_with_user !== NULL && $this->userId) {
if (!$this->checkLimitUseWithUser()) {
abort(500, __('The coupon can only be used :limit_use_with_user per person', [

View File

@ -46,7 +46,7 @@ class OrderService
abort(500, '开通失败');
}
}
switch ((string)$order->cycle) {
switch ((string)$order->period) {
case 'onetime_price':
$this->buyByOneTime($plan);
break;
@ -54,7 +54,7 @@ class OrderService
$this->buyByResetTraffic();
break;
default:
$this->buyByCycle($order, $plan);
$this->buyByPeriod($order, $plan);
}
switch ((int)$order->type) {
@ -86,7 +86,7 @@ class OrderService
public function setOrderType(User $user)
{
$order = $this->order;
if ($order->cycle === 'reset_price') {
if ($order->period === 'reset_price') {
$order->type = 4;
} else if ($user->plan_id !== NULL && $order->plan_id !== $user->plan_id && ($user->expired_at > time() || $user->expired_at === NULL)) {
if (!(int)config('v2board.plan_change_enable', 1)) abort(500, '目前不允许更改订阅,请联系客服或提交工单操作');
@ -156,7 +156,7 @@ class OrderService
if ($user->expired_at === NULL) {
$this->getSurplusValueByOneTime($user, $order);
} else {
$this->getSurplusValueByCycle($user, $order);
$this->getSurplusValueByPeriod($user, $order);
}
}
@ -170,23 +170,23 @@ class OrderService
}
$notUsedTraffic = $plan->transfer_enable - (($user->u + $user->d) / 1073741824);
$result = $trafficUnitPrice * $notUsedTraffic;
$orderModel = Order::where('user_id', $user->id)->where('cycle', '!=', 'reset_price')->where('status', 3);
$orderModel = Order::where('user_id', $user->id)->where('period', '!=', 'reset_price')->where('status', 3);
$order->surplus_amount = $result > 0 ? $result : 0;
$order->surplus_order_ids = array_column($orderModel->get()->toArray(), 'id');
}
private function orderIsUsed(Order $order):bool
{
$month = self::STR_TO_TIME[$order->cycle];
$month = self::STR_TO_TIME[$order->period];
$orderExpireDay = strtotime('+' . $month . ' month', $order->created_at);
if ($orderExpireDay < time()) return true;
return false;
}
private function getSurplusValueByCycle(User $user, Order $order)
private function getSurplusValueByPeriod(User $user, Order $order)
{
$orderModel = Order::where('user_id', $user->id)
->where('cycle', '!=', 'reset_price')
->where('period', '!=', 'reset_price')
->where('status', 3);
$orders = $orderModel->get();
$orderSurplusMonth = 0;
@ -194,9 +194,9 @@ class OrderService
$userSurplusMonth = ($user->expired_at - time()) / 2678400;
foreach ($orders as $k => $item) {
// 兼容历史余留问题
if ($item->cycle === 'onetime_price') continue;
if ($item->period === 'onetime_price') continue;
if ($this->orderIsUsed($item)) continue;
$orderSurplusMonth = $orderSurplusMonth + self::STR_TO_TIME[$item->cycle];
$orderSurplusMonth = $orderSurplusMonth + self::STR_TO_TIME[$item->period];
$orderSurplusAmount = $orderSurplusAmount + ($item['total_amount'] + $item['balance_amount'] + $item['surplus_amount'] - $item['refund_amount']);
}
if (!$orderSurplusMonth || !$orderSurplusAmount) return;
@ -252,7 +252,7 @@ class OrderService
$this->user->d = 0;
}
private function buyByCycle(Order $order, Plan $plan)
private function buyByPeriod(Order $order, Plan $plan)
{
// change plan process
if ((int)$order->type === 3) {
@ -265,7 +265,7 @@ class OrderService
if ($order->type === 1) $this->buyByResetTraffic();
$this->user->plan_id = $plan->id;
$this->user->group_id = $plan->group_id;
$this->user->expired_at = $this->getTime($order->cycle, $this->user->expired_at);
$this->user->expired_at = $this->getTime($order->period, $this->user->expired_at);
}
private function buyByOneTime(Plan $plan)

View File

@ -4,6 +4,7 @@ namespace App\Services;
use App\Jobs\SendTelegramJob;
use App\Models\User;
use \Curl\Curl;
use Illuminate\Mail\Markdown;
class TelegramService {
protected $api;
@ -15,6 +16,9 @@ class TelegramService {
public function sendMessage(int $chatId, string $text, string $parseMode = '')
{
if ($parseMode === 'markdown') {
$text = str_replace('_', '\_', $text);
}
$this->request('sendMessage', [
'chat_id' => $chatId,
'text' => $text,

View File

@ -71,5 +71,11 @@
"post-create-project-cmd": [
"@php artisan key:generate --ansi"
]
},
"repositories": {
"packagist": {
"type": "composer",
"url": "https://packagist.org"
}
}
}

View File

@ -237,5 +237,5 @@ return [
| The only modification by laravel config
|
*/
'version' => '1.5.3.1628409393360'
'version' => '1.5.4.1633320446901'
];

View File

@ -176,9 +176,10 @@ return [
'traffic_fetch',
'server_log',
'send_email',
'send_email_mass',
'send_telegram',
'stat_server',
'order_handle'
'order_handle',
],
'balance' => 'auto',
'minProcesses' => 1,

View File

@ -1,4 +1,4 @@
-- Adminer 4.8.0 MySQL 5.7.29 dump
-- Adminer 4.8.1 MySQL 5.7.29 dump
SET NAMES utf8;
SET time_zone = '+00:00';
@ -43,6 +43,7 @@ CREATE TABLE `v2_coupon` (
`limit_use` int(11) DEFAULT NULL,
`limit_use_with_user` int(11) DEFAULT NULL,
`limit_plan_ids` varchar(255) DEFAULT NULL,
`limit_period` varchar(255) DEFAULT NULL,
`started_at` int(11) NOT NULL,
`ended_at` int(11) NOT NULL,
`created_at` int(11) NOT NULL,
@ -113,7 +114,7 @@ CREATE TABLE `v2_order` (
`coupon_id` int(11) DEFAULT NULL,
`payment_id` int(11) DEFAULT NULL,
`type` int(11) NOT NULL COMMENT '1新购2续费3升级',
`cycle` varchar(255) NOT NULL,
`period` varchar(255) NOT NULL,
`trade_no` varchar(36) NOT NULL,
`callback_no` varchar(255) DEFAULT NULL,
`total_amount` int(11) NOT NULL,
@ -138,6 +139,7 @@ CREATE TABLE `v2_payment` (
`uuid` char(32) NOT NULL,
`payment` varchar(16) NOT NULL,
`name` varchar(255) NOT NULL,
`icon` varchar(255) DEFAULT NULL,
`config` text NOT NULL,
`enable` tinyint(1) NOT NULL DEFAULT '0',
`sort` int(11) DEFAULT NULL,
@ -368,4 +370,4 @@ CREATE TABLE `v2_user` (
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- 2021-09-21 10:07:22
-- 2021-12-27 17:37:09

View File

@ -462,3 +462,12 @@ ALTER TABLE `v2_server`
ALTER TABLE `v2_user`
CHANGE `remind_expire` `remind_expire` tinyint(4) NULL DEFAULT '0' AFTER `plan_id`,
CHANGE `remind_traffic` `remind_traffic` tinyint(4) NULL DEFAULT '0' AFTER `remind_expire`;
ALTER TABLE `v2_payment`
ADD `icon` varchar(255) COLLATE 'utf8mb4_general_ci' NULL AFTER `name`;
ALTER TABLE `v2_coupon`
ADD `limit_period` varchar(255) COLLATE 'utf8_general_ci' NULL AFTER `limit_plan_ids`;
ALTER TABLE `v2_order`
CHANGE `cycle` `period` varchar(255) COLLATE 'utf8_general_ci' NOT NULL AFTER `type`;

View File

@ -1,4 +1,4 @@
rm -rf composer.phar
wget https://getcomposer.org/download/2.0.13/composer.phar
wget https://github.com/composer/composer/releases/latest/download/composer.phar -O composer.phar
php composer.phar install -vvv
php artisan v2board:install

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

6
public/theme/v2board/assets/i18n.js vendored Normal file
View File

@ -0,0 +1,6 @@
window.settings.i18n = [
'zh-CN',
'en-US',
'ja-JP',
'vi-VN'
]

View File

@ -0,0 +1,286 @@
window.settings.i18n['en-US'] = {
'request.error': 'Request failed',
// period_text
'period.month_price': 'Monthly',
'period.quarter_price': 'Quarterly',
'period.half_year_price': 'Semi-Annually',
'period.year_price': 'Annually',
'period.two_year_price': 'Biennially',
'period.three_year_price': 'Triennially',
'period.onetime_price': 'One Time',
'period.reset_price': 'Data Reset Package',
// order_status
'order_status.no_paid': 'Pending Payment',
'order_status.opening': 'Pending Active',
'order_status.cancel': 'Cancelled',
'order_status.done': 'Completed',
'order_status.surplus': 'Converted',
// commission_status
'commission_status.pending_confirm': 'Pending',
'commission_status.confirm': 'Confirming',
'commission_status.done': 'Completed',
'commission_status.reject': 'Invalid',
// header
'header.user_center': 'User Center',
'header.logout': 'Logout',
'header.search': 'Search',
// nav
'nav.dashboard': 'Dashboard',
'nav.subscribe': 'Subscription',
'nav.my_subscribe': 'My Subscription',
'nav.buy_subscribe': 'Purchase Subscription',
'nav.bill': 'Billing',
'nav.my_order': 'My Orders',
'nav.my_invite': 'My Invitation',
'nav.user': 'Account',
'nav.user_center': 'User Center',
'nav.my_ticket': 'My Tickets',
'nav.traffic_detail': 'Transfer Data Details',
'nav.knowledge': 'Knowledge Base',
// dashboard
'dashboard.not_bind_telegram': 'Not link to Telegram yet',
'dashboard.click_here_bind': 'Please click here to link to Telegram',
'dashboard.announcement': 'Announcements',
'dashboard.override': 'Overview',
'dashboard.pending_order': 'Pending Orders',
'dashboard.pending_ticket': 'Pending Tickets',
'dashboard.my_invite': 'My Invitation',
'dashboard.my_subscribe': 'My Subscription',
'dashboard.add_subscribe': 'Order a subscription',
'dashboard.not_expire': 'The subscription is valid for unlimited time',
'dashboard.expired': 'Expired',
'dashboard.subscribe_info': 'Will expire on {date}, {day} days before expiration, after {reset_day} days reset transfer data',
'dashboard.traffic_info': '{used} Used / Total {total}',
'dashboard.view_subscribe': 'View Subscription',
'dashboard.renew': 'Renew',
// forgetPassword
'forgetPassword.email': 'Email',
'forgetPassword.email_verify_code': 'Email verification code',
'forgetPassword.send': 'Send',
'forgetPassword.password': 'Password',
'forgetPassword.reset_password': 'Reset Password',
'forgetPassword.back_login': 'Back to Login',
// invite
'invite.table_code': 'Invitation Code',
'invite.table_create_time': 'Creation Time',
'invite.table_action': 'Action',
'invite.copy_link': 'Copy Link',
'invite.table_complete_time': 'Complete Time',
'invite.table_commission_balance': 'Commission',
'invite.table_commission_status': 'Commission Status',
'invite.override': 'Invitation Overview',
'invite.register_count': 'Registered users',
'invite.commission_rate': 'Commission rate',
'invite.confirm_commission': 'Pending commission',
'invite.confirm_commission_tip': 'The commission will reach your commission account after review.',
'invite.invite_code_manage': 'Invitation Code Management',
'invite.generate_code': 'Generate invitation code',
'invite.detail': 'Invitation Details',
'invite.copy_success': 'Copied successfully',
// login
'login.email': 'Email',
'login.password': 'Password',
'login': 'Login',
'login.register': 'Register',
'login.forget_password': 'Forgot password',
// order
'order.table_no': 'Order Number #',
'order.table_period': 'Type / period',
'order.table_amount': 'Order Amount',
'order.table_status': 'Order Status',
'order.table_create_time': 'Creation Time',
'order.table_action': 'Action',
'order.view_detail': 'View Details',
'order.cancel': 'Cancel',
'order.order_manage': 'Order Management',
'order.please_select_pay_method': 'Please select a payment method',
'order.please_check_credit_card': 'Please check credit card payment information',
'order.order_detail': 'Order Details',
'order.product': 'Product',
'order.type_period': 'Type / period',
'order.amount': 'Amount',
'order.traffic': 'Transfer Data',
'order.discount': 'Discount',
'order.surplus': 'Converted',
'order.refund': 'Refund',
'order.balance_pay': 'Pay with Balance',
'order.pay_method': 'Payment Method',
'order.enter_credit_info': 'Fill in credit card payment information',
'order.credit_alert': 'We will not collect your credit card information, credit card number and other details only use to verify the current transaction.',
'order.total_amount': 'Order Total',
'order.total': 'Total',
'order.checkout': 'Checkout',
'order.waiting_payment': 'Waiting for payment',
'order.result_opening_title': 'Opening',
'order.result_opening_sub_title': 'The order system is processing, please wait 1-3 minutes.',
'order.result_cancel_title': 'Cancelled',
'order.result_cancel_sub_title': 'The order has been cancelled due to overtime payment.',
'order.result_success_title': 'Success',
'order.result_success_sub_title': 'The order has been paid and opened.',
// plan
'plan.select_subscribe': 'Select a Subscription',
'plan.buy': 'Subscribe now',
'plan.setting_subscribe': 'Configure Subscription',
'plan.discount': 'Discount',
'plan.period': 'Payment period',
'plan.have_coupon': 'Have coupons?',
'plan.coupon_verify': 'Verify',
'plan.order_total_amount': 'Order Total',
'plan.place_order': 'Order',
'plan.total': 'Total',
'plan.subscribe_change_title': 'Attention subscription changes',
'plan.subscribe_change_content': 'Attention please, changing subscription will overwrite your current subscription.',
'plan.subscribe_not_renew': 'This subscription cannot be renewed',
'plan.choose_another_subscribe': 'Choose another subscription',
// profile
'profile.user_center': 'User Center',
'profile.my_wallet': 'My Wallet',
'profile.balance_tip': 'Account Balance (For billing only)',
'profile.commission_balance_tip': 'Invitation Commission (Can be used to withdraw)',
'profile.wallet_component': 'Wallet Details',
'profile.transfer': 'Transfer',
'profile.commission_withdraw': 'Invitation Commission Withdrawal',
'profile.change_password': 'Change Password',
'profile.save': 'Save',
'profile.old_password': 'Old Password',
'profile.new_password': 'New Password',
'profile.re_new_password': 'New Password',
'profile.please_enter_old_password': 'Please enter the old password',
'profile.please_enter_new_password': 'Please enter the new password',
'profile.please_enter_re_new_password': 'Please enter the new password again',
'profile.notice': 'Notification',
'profile.expire_remind': 'Subscription expiration email reminder',
'profile.traffic_remind': 'Insufficient transfer data email alert',
'profile.bind_telegram': 'Link to Telegram',
'profile.start': 'Start Now',
'profile.reset_subscribe': 'Reset Subscription',
'profile.reset': 'Reset',
'profile.reset_info_notify_title': 'Do you want to reset subscription?',
'profile.reset_info_notify_content': 'In case of account information or your subscription leak this option is used to reset your UUID and subscription will be changed after reset, you need to re-subscribe.',
'profile.reset_info_notify_success': 'Reset successfully',
'profile.two_password_error': 'Two new passwords entered do not match',
// reg
'register.two_password_error': 'The passwords entered do not match',
'register.email': 'Email',
'register.verify_code': 'Email verification code',
'register.password': 'Password',
'register.re_password': 'Password',
'register.send': 'Send',
'register.invite_code_require': 'Invitation code',
'register.invite_code': 'Invitation code (Optional)',
'register': 'Register',
'register.back_login': 'Back to Login',
'register.tos_url': 'I have read and agree to the <a target="_blank" href="{url}">terms of service</a>',
'register.please_agree_tos': 'Please agree to the terms of service',
// subscribe
'subscribe.table_name': 'Name',
'subscribe.table_tag': 'Tags',
'subscribe.table_action': 'Action',
'subscribe.table_status': 'Status',
'subscribe.table_status_tip': 'Access Point online status in the last 5 minutes',
'subscribe.table_rate': 'Rate',
'subscribe.table_rate_tip': 'The transfer data used is multiplied by the transfer data rate deducted',
'subscribe.more_action': 'Action',
'subscribe.copy_success': 'Copied successfully',
'subscribe.copy_link': 'Copy Link',
'subscribe.my_subscribe': 'My Subscription',
'subscribe.add_subscribe': 'Order a Subscription',
'subscribe.not_expire': 'The subscription is valid for unlimited time',
'subscribe.expired': 'Expired',
'subscribe.subscribe_info': 'Will expire on {date}, {day} days before expiration, after {reset_day} days reset transfer data',
'subscribe.traffic_info': '{used} Used / Total {total}',
'subscribe.renew': 'Renew',
'subscribe.action': 'Action',
'subscribe.reset_traffic': 'Reset Current Transfer Data',
'subscribe.reset_info': 'Reset Subscription',
'subscribe.node_status': 'Access Point Status',
'subscribe.no_node': 'No access points available, if you have not subscribed a subscription or the subscription has been expired, please',
'subscribe.no_node_renew': 'Renew',
'subscribe.no_node_go': 'Subscribe',
'subscribe.reset_traffic_notify_title': 'Are you sure to reset the current month\'s transfer data?',
'subscribe.reset_traffic_notify_content': 'Click "Confirm" and you will be redirected to the payment page. After the order is paid, the system will clear your used data for the month.',
'subscribe.reset_traffic_notify_confirm': 'Confirm',
'subscribe.reset_traffic_notify_cancel': 'Cancel',
'subscribe.reset_info_notify_title': 'Are you sure to reset subscription?',
'subscribe.reset_info_notify_content': 'In case of account information or your subscription leak this option is used to reset your UUID and subscription will be changed after reset, you need to re-subscribe.',
'subscribe.reset_info_notify_success': 'Reset successfully',
// ticket
'ticket.low': 'Low',
'ticket.middle': 'Medium',
'ticket.high': 'High',
'ticket.table_subject': 'Subject',
'ticket.table_level': 'Ticket Priority',
'ticket.table_status': 'Ticket Status',
'ticket.table_create_time': 'Creation Time',
'ticket.table_last_reply': 'Last Reply',
'ticket.table_action': 'Action',
'ticket.status_closed': 'Closed',
'ticket.status_pending': 'Pending Reply',
'ticket.status_reply': 'Replied',
'ticket.action_view': 'View',
'ticket.action_close': 'Close',
'ticket.my_ticket': 'My Tickets',
'ticket.new_ticket': 'New Ticket',
'ticket.new_ticket_modal_title': 'New Ticket',
'ticket.new_ticket_modal_confirm': 'Confirm',
'ticket.new_ticket.modal_cancel': 'Cancel',
'ticket.subject': 'Subject',
'ticket.please_enter_subject': 'Please enter a subject',
'ticket.level': 'Ticket Priority',
'ticket.please_select_level': 'Please select the ticket priority',
'ticket.message': 'Message',
'ticket.please_enter_issue': 'Please describe the problem you encountered',
// traffic
'traffic.table_record_time': 'Record Time',
'traffic.table_tx': 'Actual Upload',
'traffic.table_rx': 'Actual Download',
'traffic.table_rate': 'Deduction Rate',
'traffic.table_total': 'Total',
'traffic.table_total_tip': 'Formula: (Actual Upload + Actual Download) x Deduction Rate = Deduct Transfer Data',
'traffic.traffic_detail': 'Transfer Data Details',
'traffic.today': 'Today',
'traffic.month': 'Month',
'traffic.week': 'Week',
// one_click_subscribe
'one_click_subscribe.copy_success': 'Copied successfully',
'one_click_subscribe.copy_subscribe_url': 'Copy Subscription URL',
'one_click_subscribe.import': 'Export to',
'one_click_subscribe': 'Quick Subscription',
'one_click_subscribe.copy_subscribe': 'Copy Subscription URL',
// transfer_modal
'transfer_modal.title': 'Transfer Invitation Commission to Account Balance',
'transfer_modal.confirm': 'Confirm',
'transfer_modal.cancel': 'Cancel',
'transfer_modal.alert': 'The transferred balance will only be used for {title} payment',
'transfer_modal.commission_balance': 'Current invitation balance',
'transfer_modal.transfer_balance': 'Transfer amount',
'transfer_modal.please_enter_transfer_balance': 'Please enter the amount to be transferred to the balance',
// chat
'chat.please_enter_message': 'Please enter to reply to the ticket...',
// withdraw_modal
'withdraw_modal.title': 'Apply For Withdrawal',
'withdraw_modal.confirm': 'Confirm',
'withdraw_modal.cancel': 'Cancel',
'withdraw_modal.withdraw_method': 'Withdrawal Method',
'withdraw_modal.please_select_method': 'Please select a withdrawal method',
'withdraw_modal.withdraw_account': 'Withdrawal Account',
'withdraw_modal.please_enter_account': 'Please enter the withdrawal account',
// bind_telegram
'bind_telegram_modal.confirm': 'I got it',
'bind_telegram_modal.title': 'Link to Telegram',
'bind_telegram_modal.step_1': 'First Step',
'bind_telegram_modal.step_2': 'Second Step',
'bind_telegram_modal.open_telegram_search': 'Open Telegram and Search ',
'bind_telegram_modal.send_bot_message': 'Send the following command to bot',
// knowledge
'knowledge': 'Knowledge Base',
'knowledge.last_release_date': 'Last Updated: {date}',
'knowledge.copy_success' : 'Copy succeeded',
'Reset flow after {reset_day} day': 'Reset flow after {reset_day} day',
'Due on {date}, {day} days before expiration': 'Due on {date}, {day} days before expiration. ',
'Telegram discuss': 'Telegram discuss',
'Join now': 'Join now',
'Renew': 'Renew',
'Buy': 'Buy',
'This subscription cannot be renewed. Only new users are allowed to purchase it': 'This subscription cannot be renewed. Only new users are allowed to purchase it'
}

View File

@ -0,0 +1,316 @@
window.settings.i18n['ja-JP'] = {
'request.error': 'リクエストエラー',
// period_text
'period.month_price': '月払い',
'period.quarter_price': '四半期払い',
'period.half_year_price': '半年払い',
'period.year_price': '年払い',
'period.two_year_price': '2年払い',
'period.three_year_price': '3年払い',
'period.onetime_price': '一括払い',
'period.reset_price': 'データ通信量のカウントをリセット',
// order_status
'order_status.no_paid': 'お支払い待ち',
'order_status.opening': '処理中',
'order_status.cancel': '取り消し済み',
'order_status.done': '済み',
'order_status.surplus': '控除済み',
// commission_status
'commission_status.pending_confirm': '承認待ち',
'commission_status.confirm': '承認済み',
'commission_status.done': '済み',
'commission_status.reject': '無効',
// header
'header.user_center': '会員メニュー',
'header.logout': 'ログアウト',
'header.search': '検索',
// nav
'nav.dashboard': 'ダッシュボード',
'nav.subscribe': '定期購入',
'nav.my_subscribe': 'ご利用中の定期購入',
'nav.buy_subscribe': '定期購入のご注文',
'nav.bill': 'マイファイナンス',
'nav.my_order': '注文履歴',
'nav.my_invite': '招待メニュー',
'nav.user': 'ユーザー',
'nav.user_center': '会員メニュー',
'nav.my_ticket': 'お問い合わせ',
'nav.traffic_detail': 'データ通信明細',
'nav.knowledge': '知識ベース',
// dashboard
'dashboard.not_bind_telegram': 'Telegramは関連付けられていません',
'dashboard.click_here_bind': '関連付けを開始するにはこちらをクリックしてください',
'dashboard.announcement': 'お知らせ',
'dashboard.override': '概要',
'dashboard.pending_order': 'お支払い待ち',
'dashboard.pending_ticket': '対応中のお問い合わせ',
'dashboard.my_invite': '招待済み',
'dashboard.my_subscribe': 'ご利用中の定期購入',
'dashboard.add_subscribe': '定期購入の追加購入',
'dashboard.not_expire': '無期限',
'dashboard.expired': '期限切れ',
'dashboard.subscribe_info': 'ご利用期限 {date} まで,期限まであと {day} 日。',
'dashboard.traffic_info': '使用済み {used} / 合計 {total}',
'dashboard.view_subscribe': 'サーバーステータス',
'dashboard.renew': '継続料金のお支払い',
// forgetPassword
'forgetPassword.email': 'Eメールアドレス',
'forgetPassword.email_verify_code': '承認コード',
'forgetPassword.send': '送信',
'forgetPassword.password': 'パスワード',
'forgetPassword.reset_password': 'パスワードの変更',
'forgetPassword.back_login': 'ログインメニューへ',
// invite
'invite.table_code': '招待コード',
'invite.table_create_time': '作成日付',
'invite.table_action': 'アクション',
'invite.copy_link': 'リンクをコピー',
'invite.table_complete_time': '完了日付',
'invite.table_commission_balance': 'コミッション',
'invite.table_commission_status': 'コミッションステータス',
'invite.override': '招待の概要',
'invite.register_count': '登録済みユーザー数',
'invite.commission_rate': 'コミッションレート',
'invite.confirm_commission': '承認待ちのコミッション',
'invite.confirm_commission_tip': '承認済み後にコミッションアカウントに入金されます',
'invite.invite_code_manage': '招待コードの管理',
'invite.generate_code': '招待コードの作成',
'invite.detail': '招待済み明細',
'invite.copy_success': 'クリップボードにコピーされました',
// login
'login.email': 'Eメールアドレス',
'login.password': 'パスワード',
'login': 'ログイン',
'login.register': '新規登録',
'login.forget_password': 'パスワードをお忘れの方は[こちら]',
// order
'order.table_no': '# オーダー番号',
'order.table_period': 'タイプ/お支払い周期',
'order.table_amount': 'ご注文の金額',
'order.table_status': 'ステータス',
'order.table_create_time': '作成日付',
'order.table_action': 'アクション',
'order.view_detail': '詳細',
'order.cancel': 'キャンセル',
'order.order_manage': 'ご注文の一覧',
'order.please_select_pay_method': 'お支払い方法をお選びください',
'order.please_check_credit_card': 'クレジットカードのお支払い情報をご確認ください',
'order.order_detail': '最終明細のご確認',
'order.product': 'お選びの定期購入',
'order.type_period': 'タイプ/お支払い周期',
'order.amount': '金額',
'order.traffic': 'データ通信量',
'order.discount': '割引き',
'order.surplus': '控除額',
'order.refund': 'お払戻し',
'order.balance_pay': '残高支払い',
'order.pay_method': 'お支払い方法',
'order.enter_credit_info': 'クレジットカード情報をご入力ください',
'order.credit_alert': 'お客様のカード情報はお支払いにのみ使用され、サーバーに保存されることはございません',
'order.total_amount': '合計金額',
'order.total': '合計',
'order.checkout': 'お会計',
'order.waiting_payment': 'お支払い待ち',
'order.result_opening_title': 'オープニング',
'order.result_opening_sub_title': '注文システムは処理中です。1〜3分お待ちください。',
'order.result_cancel_title': 'キャンセル',
'order.result_cancel_sub_title': '残業のため、注文はキャンセルされました。',
'order.result_success_title': '完了',
'order.result_success_sub_title': '注文は支払われ、開かれました。',
// plan
'plan.select_subscribe': '定期購入を選択',
'plan.buy': '今すぐ購入',
'plan.setting_subscribe': '定期購入の設定',
'plan.discount': '割引き',
'plan.period': 'お支払い周期',
'plan.have_coupon': 'キャンペーンコード',
'plan.coupon_verify': '確定',
'plan.order_total_amount': 'ご注文の合計金額',
'plan.place_order': '注文&最終確認',
'plan.total': '合計',
'plan.subscribe_change_title': '定期購入プランの変更に伴うご注意',
'plan.subscribe_change_content': '定期購入プランを変更されますと、既存のプランが新規プランによって上書きされます、ご注意下さい',
'plan.subscribe_not_renew': 'この商品は契約の更新ができません',
'plan.choose_another_subscribe': '他の商品を選ぶ',
// profile
'profile.user_center': '会員メニュー',
'profile.my_wallet': 'マイウォレット',
'profile.balance_tip': '残高(サービスの購入のみ)',
'profile.commission_balance_tip': '招待によるコミッション(出金可)',
'profile.wallet_component': 'ウォレットの内訳',
'profile.transfer': 'お振替',
'profile.commission_withdraw': 'コミッションのお引き出し',
'profile.change_password': 'パスワードの変更',
'profile.save': '変更を保存',
'profile.old_password': '現在のパスワード',
'profile.new_password': '新しいパスワード',
'profile.re_new_password': '新しいパスワードの確認',
'profile.please_enter_old_password': '現在のパスワードをご入力ください',
'profile.please_enter_new_password': '新しいパスワードをご入力ください',
'profile.please_enter_re_new_password': '新しいパスワードをご入力ください',
'profile.notice': '通知',
'profile.expire_remind': '期限切れ通知',
'profile.traffic_remind': 'データ通信量通知',
'profile.bind_telegram': 'Telegramの関連付け',
'profile.start': '今すぐ開始',
'profile.reset_subscribe': '定期購入URLの変更',
'profile.reset': '変更',
'profile.reset_info_notify_title': 'URLをご変更なされますか',
'profile.reset_info_notify_content': '定期購入のURL及び情報が外部に漏れた場合にご操作ください。操作後はUUIDや定期購入のURLが変更され、再度定期購入の更新を必要になります。',
'profile.reset_info_notify_success': '変更完了',
'profile.two_password_error': 'ご入力されました新しいパスワードが一致しません',
// reg
'register.two_password_error': 'ご入力されました新しいパスワードが一致しません',
'register.email': 'Eメールアドレス',
'register.verify_code': '承認コード',
'register.password': 'パスワード',
'register.re_password': 'パスワード',
'register.send': '送信',
'register.invite_code_require': '招待コード',
'register.invite_code': '招待コード(オプション)',
'register': '新規登録',
'register.back_login': 'ログイン画面へ',
'register.tos_url': '<a target="_blank" href="{url}">サービス条項</a>を読んで同意しました',
'register.please_agree_tos': 'サービス条項に同意してください',
// subscribe
'subscribe.table_name': '名称',
'subscribe.table_tag': '説明',
'subscribe.table_action': 'アクション',
'subscribe.table_status': 'ステータス',
'subscribe.table_status_tip': '5分間のサーバーオンラインステータス',
'subscribe.table_rate': 'レート',
'subscribe.table_rate_tip': '通信量は該当レートに基き計算されます',
'subscribe.more_action': 'その他のアクション',
'subscribe.copy_success': 'クリップボードにコピーされました',
'subscribe.copy_link': 'リンクをコピー',
'subscribe.my_subscribe': 'ご利用中の定期購入',
'subscribe.add_subscribe': '定期購入の追加',
'subscribe.not_expire': '無期限',
'subscribe.expired': '期限切れ',
'subscribe.subscribe_info': 'ご利用期限 {date} まで,期限まであと {day} 日',
'subscribe.traffic_info': '使用済み {used} / 合計 {total}',
'subscribe.renew': '継続料金のお支払い',
'subscribe.action': 'アクション',
'subscribe.reset_traffic': 'データ通信量のカウントをリセット',
'subscribe.reset_info': '定期購入URLの変更',
'subscribe.node_status': 'サーバーステータス',
'subscribe.no_node': 'ご利用可能なサーバーがありません,定期購入期限切れまたは購入なされていない場合は',
'subscribe.no_node_renew': '継続料金のお支払い',
'subscribe.no_node_go': '購入',
'subscribe.reset_traffic_notify_title': '当月分のデータ通信量のカウントをリセットしますか?',
'subscribe.reset_traffic_notify_content': '「確定」をクリックしお会計画面へ,お支払い後に当月分のデータ通信量は即時リセットされます',
'subscribe.reset_traffic_notify_confirm': '確定',
'subscribe.reset_traffic_notify_cancel': 'キャンセル',
'subscribe.reset_info_notify_title': 'URLやUUIDをご変更なされますか',
'subscribe.reset_info_notify_content': '定期購入のURL及び情報が外部に漏れた場合にご操作ください。操作後はUUIDや定期購入のURLが変更され、再度定期購入の更新を必要になります。',
'subscribe.reset_info_notify_success': 'リセットは完了しました',
// ticket
'ticket.low': 'Low',
'ticket.middle': 'Middle',
'ticket.high': 'High',
'ticket.table_subject': 'タイトル',
'ticket.table_level': 'お問い合わせ優先度',
'ticket.table_status': 'お問い合わせ状況',
'ticket.table_create_time': '作成日付',
'ticket.table_last_reply': '最終回答日付',
'ticket.table_action': 'アクション',
'ticket.status_closed': '終了',
'ticket.status_pending': '対応待ち',
'ticket.status_reply': '回答済み',
'ticket.action_view': '閲覧',
'ticket.action_close': '終了',
'ticket.my_ticket': 'お問い合わせの一覧',
'ticket.new_ticket': '新規お問い合わせ',
'ticket.new_ticket_modal_title': '新規お問い合わせ',
'ticket.new_ticket_modal_confirm': '確定',
'ticket.new_ticket.modal_cancel': 'キャンセル',
'ticket.subject': 'タイトル',
'ticket.please_enter_subject': 'お問い合わせタイトルをご入力ください',
'ticket.level': 'ご希望の優先度',
'ticket.please_select_level': 'ご希望の優先度をお選びください',
'ticket.message': 'メッセージ',
'ticket.please_enter_issue': 'お問い合わせ内容をご入力ください',
// traffic
'traffic.table_record_time': '記録日付',
'traffic.table_tx': 'アップロード',
'traffic.table_rx': 'ダウンロード',
'traffic.table_rate': '適応レート',
'traffic.table_total': '合計',
'traffic.table_total_tip': '計算公式:(アップロード + ダウンロード) x レート = 使用済みデータ通信量',
'traffic.traffic_detail': 'データ通信量明細',
'traffic.today': '本日',
'traffic.month': '今月',
'traffic.week': '今週',
// one_click_subscribe
'one_click_subscribe.copy_success': 'クリップボードにコピーされました',
'one_click_subscribe.copy_subscribe_url': '定期購入のURLをコピー',
'one_click_subscribe.import': 'インポート',
'one_click_subscribe': 'ワンクリックインポート',
'one_click_subscribe.copy_subscribe': '定期購入のURLをコピー',
// transfer_modal
'transfer_modal.title': 'コミッションを残高へ振替',
'transfer_modal.confirm': '確定',
'transfer_modal.cancel': 'キャンセル',
'transfer_modal.alert': '振替済みの残高は{title}でのみご利用可能です',
'transfer_modal.commission_balance': '現在のコミッション額',
'transfer_modal.transfer_balance': '振替金額',
'transfer_modal.please_enter_transfer_balance': '残高への振替金額をご入力ください',
// chat
'chat.please_enter_message': 'お問い合わせ内容をご入力ください...',
// withdraw_modal
'withdraw_modal.title': '出金申請',
'withdraw_modal.confirm': '確定',
'withdraw_modal.cancel': 'キャンセル',
'withdraw_modal.withdraw_method': 'お振込み先',
'withdraw_modal.please_select_method': 'お振込み先をお選びください',
'withdraw_modal.withdraw_account': 'お振り込み先口座',
'withdraw_modal.please_enter_account': 'お振込み先口座をご入力ください',
// bind_telegram
'bind_telegram_modal.confirm': '了解',
'bind_telegram_modal.title': 'Telegramの関連付けについて',
'bind_telegram_modal.step_1': 'ステップその1',
'bind_telegram_modal.step_2': 'ステップその2',
'bind_telegram_modal.open_telegram_search': 'Telegramを起動後に右記内容を入力し検索',
'bind_telegram_modal.send_bot_message': 'テレグラムボットへ下記内容を送信',
// knowledge
'knowledge': '知識ベース',
'knowledge.last_release_date': '最終更新日: {date}',
'knowledge.copy_success' : 'コピーしました',
// new language
'Dashboard': 'ダッシュボード',
'My subscription': 'ご利用中の定期購入',
'There are still unpaid orders': 'まだお支払いしていない注文があります',
'Pay now': '即時払い',
'Ticket is being processed': '工票は処理中です。',
'View now': 'すぐに確認します',
'Buy subscription': '定期購入のご注文',
'Knowledge': '知識ベース',
'My order': '注文履歴',
'Personal Center': '会員メニュー',
'Flow details': 'データ通信明細',
'Configure subscription': '購読の設定',
'My invitation': '招待メニュー',
'Node status': 'サーバーステータス',
'Copied': 'コピーしました',
'Product information': '商品情報',
'Product name': '商品コード',
'Type/Period': 'タイプ/周期',
'Product flow': '商品の流量',
'Order information': 'オーダー情報',
'Close order': '注文を閉じる',
'Order number': '注文番号',
'Discount amount': '割引金額',
'Deduction amount': '旧換算金額',
'Refund amount': '返金金額',
'Balance payment': '残額払い',
'Creation time': '作成時間',
'My tickets': 'マイチケット',
'Tickets history': 'チケット履歴',
'Reset flow after {reset_day} day': '{reset_day} 日後にリセットされます',
'Due on {date}, {day} days before expiration': '{date} の期限が切れるまで、あと {day} 日あります。',
'Telegram discuss': 'Telegram グループ',
'Join now': '参加する',
'Renew': '継続料金のお支払い',
'Buy': '買う',
'This subscription cannot be renewed. Only new users are allowed to purchase it': 'このサブスクリプションは更新できません。新しいユーザだけがそれを購入できます。'
}

View File

@ -0,0 +1,316 @@
window.settings.i18n['vi-VN'] = {
'request.error': 'Yêu Cầu Thất Bại',
// period_text
'period.month_price': 'Tháng',
'period.quarter_price': 'Hàng quý',
'period.half_year_price': 'Nửa năm',
'period.year_price': 'Năm',
'period.two_year_price': 'Hai năm',
'period.three_year_price': 'Ba năm',
'period.onetime_price': 'Dài hạn',
'period.reset_price': 'Cập nhật dung lượng',
// order_status
'order_status.no_paid': 'Đợi Thanh toán',
'order_status.opening': 'Khai mạc',
'order_status.cancel': 'Đã hủy',
'order_status.done': 'Thực hiện',
'order_status.surplus': 'Quy đổi',
// commission_status
'commission_status.pending_confirm': 'được xác nhận',
'commission_status.confirm': 'đã xác nhận',
'commission_status.done': 'Hoàn thành',
'commission_status.reject': 'không hợp',
// header
'header.user_center': 'Trung tâm kiểm soát',
'header.logout': 'đăng xuất',
'header.search': 'Tìm kiếm',
// nav
'nav.dashboard': 'Trang Chủ',
'nav.subscribe': 'Gói Dịch Vụ',
'nav.my_subscribe': 'Gói Dịch Vụ Của Tôi',
'nav.buy_subscribe': 'Mua Gói Dịch Vụ',
'nav.bill': 'Tài Chính',
'nav.my_order': 'Đơn Hàng Của Tôi',
'nav.my_invite': 'Lời Mời Của Tôi',
'nav.user': 'Người Dùng',
'nav.user_center': 'Trung Tâm Kiểm Soát',
'nav.my_ticket': 'Liên Hệ Với Chúng Tôi',
'nav.traffic_detail': 'Chi Tiết Dung Lượng',
'nav.knowledge': 'Kiến thức cơ bản',
// dashboard
'dashboard.not_bind_telegram': 'Chưa thêm liên kếtTelegram',
'dashboard.click_here_bind': 'Nhấp vào đây để thêm liên kết',
'dashboard.announcement': 'Thông báo',
'dashboard.override': 'Tổng quát',
'dashboard.pending_order': 'Đang đợi thanh toán',
'dashboard.pending_ticket': 'Chờ trả lời',
'dashboard.my_invite': 'Lời mời của tôi',
'dashboard.my_subscribe': 'Gói dịch vụ của tôi',
'dashboard.add_subscribe': 'Mua gói dịch vụ',
'dashboard.not_expire': 'Gói dịch vụ có giá trị trong thời gian dài',
'dashboard.expired': 'Tài khoản hết hạn',
'dashboard.subscribe_info': 'Năm {date} đến hạnThời gian đến hạn còn {day} ngày.',
'dashboard.traffic_info': 'Đã sử dụng {used} / Tổng dung lượng {total}',
'dashboard.view_subscribe': 'Xem gói dịch vụ',
'dashboard.renew': 'Gia hạn',
// forgetPassword
'forgetPassword.email': 'Email',
'forgetPassword.email_verify_code': 'Mã xác minh Email',
'forgetPassword.send': 'Gửi đi',
'forgetPassword.password': 'Mật khẩu',
'forgetPassword.reset_password': 'Đặt lại mật khẩu',
'forgetPassword.back_login': 'Quay lại đăng nhập',
// invite
'invite.table_code': 'Mã người mời',
'invite.table_create_time': 'Thời gian thực hiện',
'invite.table_action': 'Thao tác',
'invite.copy_link': 'Sao chép liên kết',
'invite.table_complete_time': 'Thời gian hoàn thành',
'invite.table_commission_balance': 'Tiền Hoa hồng',
'invite.table_commission_status': 'Trạng thái tiền hoa hồng',
'invite.override': 'Bảng chi tiết người được mời',
'invite.register_count': 'Số lượng người dùng đã đăng ký',
'invite.commission_rate': 'Phần trăm hoa hồng được hưởng',
'invite.confirm_commission': 'Tiền hoa hồng đang được xác nhận',
'invite.confirm_commission_tip': 'Tiền hoa hồng sau khi được xác nhận sẽ được gửi vào tài khoản tiền hoa hồng của bạn.',
'invite.invite_code_manage': 'Quản lý mã người mời',
'invite.generate_code': 'Tạo mã người mời',
'invite.detail': 'Chi tiết thiệp mời',
'invite.copy_success': 'Sao chép thành công',
'register.tos_url': 'Tôi đã đọc và đồng ý <a target="_blank" href="{url}">điều khoản dịch vụ</a>',
'register.please_agree_tos': 'Hãy đồng ý điều kiện dịch vụ',
// login
'login.email': 'Email',
'login.password': 'Mật khẩu',
'login': 'Đăng nhập',
'login.register': 'Đăng kí',
'login.forget_password': 'Quên mật khẩu',
// order
'order.table_no': '# Mã đơn hàng',
'order.table_period': 'Chu kì',
'order.table_amount': 'Tổng tiền đơn hàng',
'order.table_status': 'Trạng thái đơn hàng',
'order.table_create_time': 'Tạo thời gian',
'order.table_action': 'Thao tác',
'order.view_detail': 'Xem chi tiết',
'order.cancel': 'Hủy',
'order.order_manage': 'Quản lí đơn hàng',
'order.please_select_pay_method': 'Chọn hình thức thanh toán',
'order.please_check_credit_card': 'Vui lòng kiểm tra thông tin thanh toán thẻ',
'order.order_detail': 'Chi tiết đơn hàng',
'order.product': 'Sản phẩm',
'order.type_period': 'Loại hình/Chu kì',
'order.amount': 'Tổng cộng',
'order.traffic': 'Dung lượng',
'order.discount': 'Triết khấu',
'order.surplus': 'Quy đổi',
'order.refund': 'Hoàn tiền',
'order.balance_pay': 'Thanh toán qua số dư tài khoản',
'order.pay_method': 'Phương thức thanh toán',
'order.enter_credit_info': 'Điền thông tin thanh toán thẻ tín dụng',
'order.credit_alert': 'Thông tin thẻ tín dụng của bạn sẽ chỉ sử dụng cho khoản khấu trừ hiện tại, hệ thống sẽ không lưu thông tin đó, đây là cách an toàn nhất',
'order.total_amount': 'Tổng cộng',
'order.total': 'Tổng cộng',
'order.checkout': 'Thanh toán',
'order.waiting_payment': 'Đợi Thanh toán',
'order.result_opening_title': 'Khai mạc',
'order.result_opening_sub_title': 'Hệ thống đặt hàng đang xử lý, vui lòng đợi 1-3 phút.',
'order.result_cancel_title': 'Đã hủy',
'order.result_cancel_sub_title': 'Đơn hàng đã bị hủy do thanh toán ngoài giờ.',
'order.result_success_title': 'hoàn thành',
'order.result_success_sub_title': 'Đơn hàng đã được thanh toán và mở.',
// plan
'plan.select_subscribe': 'Chọn gói dịch vụ',
'plan.buy': 'Mua ngay',
'plan.setting_subscribe': 'Cài đặt',
'plan.discount': 'Triết khấu',
'plan.period': 'Chu kì thanh toán ',
'plan.have_coupon': 'Có phiếu giảm giá',
'plan.coupon_verify': 'Xác minh',
'plan.order_total_amount': 'Tổng cộng',
'plan.place_order': 'Đặt hàng',
'plan.total': 'Tổng cộng',
'plan.subscribe_change_title': 'Thông báo về gói dịch vụ thay đổi',
'plan.subscribe_change_content': 'Việc thay đổi gói dịch vụ mới sẽ khiến gói hiện tại bị ghi đè bởi đăng ký mới, xin lưu ý',
'plan.subscribe_not_renew': 'Không thể thay đổi bản đăng ký',
'plan.choose_another_subscribe': 'Chọn một sản phẩm khác',
// profile
'profile.user_center': 'Trung tâm kiểm soát',
'profile.my_wallet': 'Ví tiền của tôi',
'profile.balance_tip': 'Số dư tài khoản',
'profile.commission_balance_tip': 'Tiền hoa hồng (có thể rút)',
'profile.wallet_component': 'Thành phần cấu tạo ví tiền',
'profile.transfer': 'Chuyển đổi',
'profile.commission_withdraw': 'Rút tiền hoa hồng',
'profile.change_password': 'Đổi mật khẩu',
'profile.save': 'Lưu',
'profile.old_password': 'Mật khẩu cũ',
'profile.new_password': 'Mật khẩu mới',
'profile.re_new_password': 'Mật khẩu mới',
'profile.please_enter_old_password': 'Vui lòng nhập mật khẩu cũ',
'profile.please_enter_new_password': 'Vui lòng nhập mật khẩu mới',
'profile.please_enter_re_new_password': 'Vui lòng nhập mật khẩu mới',
'profile.notice': 'Thông báo',
'profile.expire_remind': 'Email nhắc nhở đến hạn',
'profile.traffic_remind': 'Email nhắc nhở dung lượng',
'profile.bind_telegram': 'Thêm Telegram',
'profile.start': 'Bắt đầu ngay',
'profile.reset_subscribe': 'Làm mới liên kết',
'profile.reset': 'Làm mới',
'profile.reset_info_notify_title': 'Bạn có chắc chắn muốn đặt lại liên kết không?',
'profile.reset_info_notify_content': 'Nếu địa chỉ đăng ký hoặc thông tin của bạn bị rò rỉ có thể thao tác ở đây.Sau khi đặt lại UUID và liên kết của bạn sẽ được thay đổi , bạn cần thêm lại liên kết mới.',
'profile.reset_info_notify_success': 'Làm mới thành công',
'profile.two_password_error': '2 lần đăng nhập mật khẩu mới không đúng',
// reg
'register.two_password_error': '2 lần đăng nhập mật khẩu không đúng',
'register.email': 'Email',
'register.verify_code': 'Mã xác minh Email',
'register.password': 'Mật khẩu',
'register.re_password': 'Mật khẩu',
'register.send': 'Gửi đi',
'register.invite_code_require': 'Mã người mời',
'register.invite_code': 'Mã người mời(chọn điền)',
'register': 'Đăng kí',
'register.back_login': 'Quay lại đăng nhập',
// subscribe
'subscribe.table_name': 'Tên',
'subscribe.table_tag': 'Kí hiệu',
'subscribe.table_action': 'Thao tác',
'subscribe.table_status': 'Trạng thái',
'subscribe.table_status_tip': 'Người dùng trực tuyến trong 5 phút',
'subscribe.table_rate': 'Bội suất',
'subscribe.table_rate_tip': 'Lưu lượng sử dụng sẽ được nhân với bội suất',
'subscribe.more_action': 'Nhiều hơn',
'subscribe.copy_success': 'Sao chép thành công',
'subscribe.copy_link': 'Sao chép liên kết',
'subscribe.my_subscribe': 'Gói dịch vụ của tôi',
'subscribe.add_subscribe': 'Mua gói dịch vụ',
'subscribe.not_expire': 'Gói dịch vụ có giá trị trong thời gian dài',
'subscribe.expired': 'Tài khoản hết hạn',
'subscribe.subscribe_info': 'Năm {date} đến hạnThời gian đến hạn còn {day} ngày.',
'subscribe.traffic_info': 'Đã sử dụng {used} / Tổng dung lượng {total}',
'subscribe.renew': 'Gia hạn',
'subscribe.action': 'Thao tác',
'subscribe.reset_traffic': 'Mua thêm dung lượng',
'subscribe.reset_info': 'Thay đổi liên kết',
'subscribe.node_status': 'Trạng thái của máy chủ',
'subscribe.no_node': 'Không có máy chủ, nếu bạn chưa mua gói dịch vụ hoặc gói dịch vụ đã hết hạn, vui lòng',
'subscribe.no_node_renew': 'Gia hạn',
'subscribe.no_node_go': 'Mua gói dịch vụ',
'subscribe.reset_traffic_notify_title': 'Bạn có chắc muốn làm mới lại dung lượng trong tháng ?',
'subscribe.reset_traffic_notify_content': 'Ấn [Xác nhận] để chuyển sang trang thanh toán, sau khi thanh toán dung lượng tháng của bạn sẽ trở về số 0 và cộng thêm dung lượng vừa mua.',
'subscribe.reset_traffic_notify_confirm': 'Xác nhận',
'subscribe.reset_traffic_notify_cancel': 'Hủy',
'subscribe.reset_info_notify_title': 'Bạn có chắc chắn muốn đặt lại liên kết không?',
'subscribe.reset_info_notify_content': 'Nếu liên kết và thông tin của bạn bị lộ ra ngoài có thể làm thao tác này. Sau khi làm mới UUID và liên kết của bạn sẽ được thay đổi. Bạn cần bắt đầu thêm lại liên kết vào phần mềm. ',
'subscribe.reset_info_notify_success': 'Làm mới thành công',
// ticket
'ticket.low': 'Thấp',
'ticket.middle': 'Trung',
'ticket.high': 'Cao',
'ticket.table_subject': 'Chủ đề',
'ticket.table_level': 'Mức độ',
'ticket.table_status': 'Trạng thái',
'ticket.table_create_time': 'Tạo thời gian',
'ticket.table_last_reply': 'Lần trả lời cuối',
'ticket.table_action': 'Thao tác',
'ticket.status_closed': 'Đã đóng',
'ticket.status_pending': 'Đợi trả lời',
'ticket.status_reply': 'Đã trả lời',
'ticket.action_view': 'Xem',
'ticket.action_close': 'Đóng',
'ticket.my_ticket': 'Liên hệ với chúng tôi',
'ticket.new_ticket': 'Thông tin mới',
'ticket.new_ticket_modal_title': 'Tin nhắn mới',
'ticket.new_ticket_modal_confirm': 'Xác nhận',
'ticket.new_ticket.modal_cancel': 'Hủy',
'ticket.subject': 'Chủ đề',
'ticket.please_enter_subject': 'Vui lòng nhập tiêu đề tin nhắn',
'ticket.level': 'Mức độ',
'ticket.please_select_level': 'Vui lòng chọn cấp độ tin nhắn',
'ticket.message': 'Nội dung tin nhắn',
'ticket.please_enter_issue': 'Mô tả vấn đề bạn gặp phải',
// traffic
'traffic.table_record_time': 'Ghi nhớ thời gian',
'traffic.table_tx': 'Thực tế tải lên',
'traffic.table_rx': 'Thực tế tải xuống',
'traffic.table_rate': 'Bội suất',
'traffic.table_total': 'Tổng dung lượng',
'traffic.table_total_tip': 'Công thức : ( Thực tế tải lên + Thực tế tải xuống ) x Bội suất = Dung lượng đã sử dụng',
'traffic.traffic_detail': 'Chi tiết dung lượng',
'traffic.today': 'Hôm nay',
'traffic.month': 'Tháng này',
'traffic.week': 'Tuần này',
// one_click_subscribe
'one_click_subscribe.copy_success': 'Sao chép thành công',
'one_click_subscribe.copy_subscribe_url': 'Sao chép liên kết',
'one_click_subscribe.import': 'Chuyển đến',
'one_click_subscribe': 'Nhấp chuột để đồng bộ máy chủ',
'one_click_subscribe.copy_subscribe': 'Sao chép liên kết',
// transfer_modal
'transfer_modal.title': 'Tiền hoa hồng chuyển sang tài khoản của bạn',
'transfer_modal.confirm': 'Xác nhận',
'transfer_modal.cancel': 'Hủy',
'transfer_modal.alert': 'Sau khi chuyển đổi sang tài khoản, tiền này chỉ dùng để mua {title} gói dịch vụ của chúng tôi',
'transfer_modal.commission_balance': 'Số dư tài khoản hoa hồng',
'transfer_modal.transfer_balance': 'Số tiền muốn đổi',
'transfer_modal.please_enter_transfer_balance': 'Vui lòng nhập số tiền bạn muốn đổi sang tài khoản',
// chat
'chat.please_enter_message': 'Điền thông tin nội dung trả lờ...',
// withdraw_modal
'withdraw_modal.title': 'Đăng kí rút tiền',
'withdraw_modal.confirm': 'Xác nhận',
'withdraw_modal.cancel': 'Hủy',
'withdraw_modal.withdraw_method': 'Phương thức rút tiền',
'withdraw_modal.please_select_method': 'Chọn hình thức rút tiền ',
'withdraw_modal.withdraw_account': 'Tài khoản rút tiền',
'withdraw_modal.please_enter_account': 'Vui lòng điền tài khoản rút tiền',
// bind_telegram
'bind_telegram_modal.confirm': 'Tôi biết',
'bind_telegram_modal.title': 'Thêm Telegram',
'bind_telegram_modal.step_1': 'Bước đầu tiên',
'bind_telegram_modal.step_2': 'Bước thứ hai',
'bind_telegram_modal.open_telegram_search': 'Bật Telegram tìm kiếm',
'bind_telegram_modal.send_bot_message': 'Gửi cho bot',
// knowledge
'knowledge': 'Kiến thức cơ bản',
'knowledge.last_release_date': 'Lần cập nhật cuối cùng vào: {date}',
'knowledge.copy_success' : 'Chép thành công',
// new language
'Dashboard': 'Bảng',
'My subscription': 'Ảnh của tôi',
'There are still unpaid orders': 'Vẫn còn những mệnh lệnh không lương',
'Pay now': 'Trả ngay đi.',
'Ticket is being processed': 'Đang xử lý lệnh làm việc.',
'View now': 'Xem ngay',
'Buy subscription': 'Mua ấn bản',
'Knowledge': 'Sử dụng tài liệu',
'My order': 'Lệnh của tôi',
'Personal Center': 'Trung tâm cá nhân',
'Flow details': 'Hoa chi tiết',
'Configure subscription': 'Cấu hình ảnh',
'My invitation': 'Giấy mời của tôi',
'Node status': 'Không biết',
'Copied': 'Nghe',
'Product information': 'Thông tin sản xuất',
'Product name': 'Tên sản phẩm',
'Type/Period': 'Kiểu/Period',
'Product flow': 'Truyền sản phẩm',
'Order information': 'Thông tin trật tự',
'Close order': 'Theo lệnh',
'Order number': 'Số mệnh lệnh',
'Discount amount': 'Giá trị',
'Deduction amount': 'Giá trị giảm giá',
'Refund amount': 'bù đắp',
'Balance payment': 'Khoản thanh toán',
'Creation time': 'Đã tạo',
'My tickets': 'Nhiệm vụ của tôi',
'Tickets history': 'Lịch sử trật tự công việc',
'Reset flow after {reset_day} day': 'Sau ngày {reset_day} dung lượng sẽ được làm mới.',
'Due on {date}, {day} days before expiration': 'Năm {date} đến hạnThời gian đến hạn còn {day} ngày.',
'Telegram discuss': 'Telegram thảo luận',
'Join now': 'Tham gia ngay',
'Renew': 'Gia hạn',
'Buy': 'Mua',
'This subscription cannot be renewed. Only new users are allowed to purchase it': 'Không thể thay đổi bản đăng ký này. Chỉ có người dùng mới được phép mua nó.'
}

View File

@ -0,0 +1,318 @@
window.settings.i18n['zh-CN'] = {
'request.error': '请求失败',
// period_text
'period.month_price': '月付',
'period.quarter_price': '季付',
'period.half_year_price': '半年付',
'period.year_price': '年付',
'period.two_year_price': '两年付',
'period.three_year_price': '三年付',
'period.onetime_price': '一次性',
'period.reset_price': '重置流量包',
// order_status
'order_status.no_paid': '待支付',
'order_status.opening': '开通中',
'order_status.cancel': '已取消',
'order_status.done': '已完成',
'order_status.surplus': '已折抵',
// commission_status
'commission_status.pending_confirm': '待确认',
'commission_status.confirm': '发放中',
'commission_status.done': '已发放',
'commission_status.reject': '无效',
// header
'header.user_center': '个人中心',
'header.logout': '登出',
'header.search': '搜索',
// nav
'nav.dashboard': '仪表盘',
'nav.subscribe': '订阅',
'nav.my_subscribe': '我的订阅',
'nav.buy_subscribe': '购买订阅',
'nav.bill': '财务',
'nav.my_order': '我的订单',
'nav.my_invite': '我的邀请',
'nav.user': '用户',
'nav.user_center': '个人中心',
'nav.my_ticket': '我的工单',
'nav.traffic_detail': '流量明细',
'nav.knowledge': '使用文档',
// dashboard
'dashboard.not_bind_telegram': '绑定Telegram获取更多服务',
'dashboard.click_here_bind': '点击这里进行绑定',
'dashboard.announcement': '公告',
'dashboard.override': '总览',
'dashboard.pending_order': '待付订单',
'dashboard.pending_ticket': '待办工单',
'dashboard.my_invite': '我的邀请',
'dashboard.my_subscribe': '我的订阅',
'dashboard.add_subscribe': '添加订阅',
'dashboard.not_expire': '该订阅长期有效',
'dashboard.expired': '已过期',
'dashboard.subscribe_info': '于 {date} 到期,距离到期还有 {day} 天',
'dashboard.traffic_info': '已用 {used} / 总计 {total}',
'dashboard.view_subscribe': '查看订阅',
'dashboard.renew': '续费',
// forgetPassword
'forgetPassword.email': '邮箱',
'forgetPassword.email_verify_code': '邮箱验证码',
'forgetPassword.send': '发送',
'forgetPassword.password': '密码',
'forgetPassword.reset_password': '重置密码',
'forgetPassword.back_login': '返回登入',
// invite
'invite.table_code': '邀请码',
'invite.table_create_time': '创建时间',
'invite.table_action': '操作',
'invite.copy_link': '复制链接',
'invite.table_complete_time': '完成时间',
'invite.table_commission_balance': '佣金',
'invite.table_commission_status': '佣金状态',
'invite.override': '邀请总览',
'invite.register_count': '已注册用户数',
'invite.commission_rate': '佣金比例',
'invite.confirm_commission': '确认中的佣金',
'invite.confirm_commission_tip': '佣金将会在确认后会到达你的佣金账户。',
'invite.invite_code_manage': '邀请码管理',
'invite.generate_code': '生成邀请码',
'invite.detail': '邀请明细',
'invite.copy_success': '复制成功',
// login
'login.email': '邮箱',
'login.password': '密码',
'login': '登入',
'login.register': '注册',
'login.forget_password': '忘记密码',
// order
'order.table_no': '# 订单号',
'order.table_period': '周期',
'order.table_amount': '订单金额',
'order.table_status': '订单状态',
'order.table_create_time': '创建时间',
'order.table_action': '操作',
'order.view_detail': '查看详情',
'order.cancel': '取消',
'order.order_manage': '订单管理',
'order.please_select_pay_method': '请选择支付方式',
'order.please_check_credit_card': '请检查信用卡支付信息',
'order.order_detail': '订单详情',
'order.product': '产品',
'order.type_period': '类型/周期',
'order.amount': '金额',
'order.traffic': '流量',
'order.discount': '折扣',
'order.surplus': '折抵',
'order.refund': '退款',
'order.balance_pay': '余额支付',
'order.pay_method': '支付方式',
'order.enter_credit_info': '填写信用卡支付信息',
'order.credit_alert': '您的信用卡信息只会被用作当次扣款,系统并不会保存,这是我们认为最安全的。',
'order.total_amount': '订单总额',
'order.total': '总计',
'order.checkout': '结账',
'order.waiting_payment': '等待支付中',
'order.result_opening_title': '开通中',
'order.result_opening_sub_title': '订单系统正在进行处理请稍等1-3分钟。',
'order.result_cancel_title': '已取消',
'order.result_cancel_sub_title': '订单由于超时支付已被取消。',
'order.result_success_title': '已完成',
'order.result_success_sub_title': '订单已支付并开通。',
// plan
'plan.select_subscribe': '选择订阅',
'plan.buy': '立即订阅',
'plan.setting_subscribe': '配置订阅',
'plan.discount': '折扣',
'plan.period': '付款周期',
'plan.have_coupon': '有优惠券?',
'plan.coupon_verify': '验证',
'plan.order_total_amount': '订单总额',
'plan.place_order': '下单',
'plan.total': '总计',
'plan.subscribe_change_title': '订阅变更须知',
'plan.subscribe_change_content': '变更订阅会导致当前订阅被新订阅覆盖,请注意。',
'plan.subscribe_not_renew': '该订阅无法续费',
'plan.choose_another_subscribe': '选择其他订阅',
// profile
'profile.user_center': '个人中心',
'profile.my_wallet': '我的钱包',
'profile.balance_tip': '账户余额(仅消费)',
'profile.commission_balance_tip': '推广佣金(可提现)',
'profile.wallet_component': '钱包组成部分',
'profile.transfer': '划转',
'profile.commission_withdraw': '推广佣金提现',
'profile.change_password': '修改密码',
'profile.save': '保存',
'profile.old_password': '旧密码',
'profile.new_password': '新密码',
'profile.re_new_password': '新密码',
'profile.please_enter_old_password': '请输入旧密码',
'profile.please_enter_new_password': '请输入新密码',
'profile.please_enter_re_new_password': '请输入新密码',
'profile.notice': '通知',
'profile.expire_remind': '到期邮件提醒',
'profile.traffic_remind': '流量邮件提醒',
'profile.bind_telegram': '绑定Telegram',
'profile.start': '立即开始',
'profile.reset_subscribe': '重置订阅信息',
'profile.reset': '重置',
'profile.reset_info_notify_title': '确定要重置订阅信息?',
'profile.reset_info_notify_content': '如果你的订阅地址或信息泄露可以进行此操作。重置后你的UUID及订阅将会变更需要重新进行订阅。',
'profile.reset_info_notify_success': '重置成功',
'profile.two_password_error': '两次新密码输入不同',
// reg
'register.two_password_error': '两次密码输入不同',
'register.email': '邮箱',
'register.verify_code': '邮箱验证码',
'register.password': '密码',
'register.re_password': '密码',
'register.send': '发送',
'register.invite_code_require': '邀请码',
'register.invite_code': '邀请码(选填)',
'register': '注册',
'register.back_login': '返回登入',
'register.tos_url': '我已阅读并同意 <a target="_blank" href="{url}">服务条款</a>',
'register.please_agree_tos': '请同意服务条款',
// subscribe
'subscribe.table_name': '名称',
'subscribe.table_tag': '标签',
'subscribe.table_action': '操作',
'subscribe.table_status': '状态',
'subscribe.table_status_tip': '节点五分钟内节点在线情况',
'subscribe.table_rate': '倍率',
'subscribe.table_rate_tip': '使用的流量将乘以倍率进行扣除',
'subscribe.more_action': '更多操作',
'subscribe.copy_success': '复制成功',
'subscribe.copy_link': '复制链接',
'subscribe.my_subscribe': '我的订阅',
'subscribe.add_subscribe': '添加订阅',
'subscribe.not_expire': '该订阅长期有效',
'subscribe.expired': '已过期',
'subscribe.subscribe_info': '于 {date} 到期,距离到期还有 {day} 天',
'subscribe.traffic_info': '已用 {used} / 总计 {total}',
'subscribe.renew': '续费',
'subscribe.action': '操作',
'subscribe.reset_traffic': '重置当月流量',
'subscribe.reset_info': '重置订阅信息',
'subscribe.node_status': '节点状态',
'subscribe.no_node': '没有可用节点,如果您未订阅或已过期请',
'subscribe.no_node_renew': '续费',
'subscribe.no_node_go': '订阅',
'subscribe.reset_traffic_notify_title': '确定要重置当月流量?',
'subscribe.reset_traffic_notify_content': '点击「确定」将会跳转到收银台,支付订单后系统将会清空您当月已使用流量。',
'subscribe.reset_traffic_notify_confirm': '确定',
'subscribe.reset_traffic_notify_cancel': '取消',
'subscribe.reset_info_notify_title': '确定要重置订阅信息?',
'subscribe.reset_info_notify_content': '如果你的订阅地址或信息泄露可以进行此操作。重置后你的UUID及订阅将会变更需要重新进行订阅。',
'subscribe.reset_info_notify_success': '重置成功',
// ticket
'ticket.low': '低',
'ticket.middle': '中',
'ticket.high': '高',
'ticket.table_subject': '主题',
'ticket.table_level': '工单级别',
'ticket.table_status': '工单状态',
'ticket.table_create_time': '创建时间',
'ticket.table_last_reply': '最后回复',
'ticket.table_action': '操作',
'ticket.status_closed': '已关闭',
'ticket.status_pending': '待回复',
'ticket.status_reply': '已回复',
'ticket.action_view': '查看',
'ticket.action_close': '关闭',
'ticket.my_ticket': '我的工单',
'ticket.new_ticket': '新的工单',
'ticket.new_ticket_modal_title': '新的工单',
'ticket.new_ticket_modal_confirm': '确认',
'ticket.new_ticket.modal_cancel': '取消',
'ticket.subject': '主题',
'ticket.please_enter_subject': '请输入工单主题',
'ticket.level': '工单等级',
'ticket.please_select_level': '请选择工单等级',
'ticket.message': '消息',
'ticket.please_enter_issue': '请描述你遇到的问题',
// traffic
'traffic.table_record_time': '记录时间',
'traffic.table_tx': '实际上行',
'traffic.table_rx': '实际下行',
'traffic.table_rate': '扣费倍率',
'traffic.table_total': '合计',
'traffic.table_total_tip': '公式:(实际上行 + 实际下行) x 扣费倍率 = 扣除流量',
'traffic.traffic_detail': '流量明细',
'traffic.today': '今日',
'traffic.month': '本月',
'traffic.week': '本周',
// one_click_subscribe
'one_click_subscribe.copy_success': '复制成功',
'one_click_subscribe.copy_subscribe_url': '复制订阅地址',
'one_click_subscribe.import': '导入到',
'one_click_subscribe': '一键订阅',
'one_click_subscribe.copy_subscribe': '复制订阅',
// transfer_modal
'transfer_modal.title': '推广佣金划转至余额',
'transfer_modal.confirm': '确认',
'transfer_modal.cancel': '取消',
'transfer_modal.alert': '划转后的余额仅用于{title}消费使用',
'transfer_modal.commission_balance': '当前推广佣金余额',
'transfer_modal.transfer_balance': '划转金额',
'transfer_modal.please_enter_transfer_balance': '请输入需要划转到余额的金额',
// chat
'chat.please_enter_message': '输入内容回复工单...',
// withdraw_modal
'withdraw_modal.title': '申请提现',
'withdraw_modal.confirm': '确认',
'withdraw_modal.cancel': '取消',
'withdraw_modal.withdraw_method': '提现方式',
'withdraw_modal.please_select_method': '请选择提现方式',
'withdraw_modal.withdraw_account': '提现账号',
'withdraw_modal.please_enter_account': '请输入提现账号',
// bind_telegram
'bind_telegram_modal.confirm': '我知道了',
'bind_telegram_modal.title': '绑定Telegram',
'bind_telegram_modal.step_1': '第一步',
'bind_telegram_modal.step_2': '第二步',
'bind_telegram_modal.open_telegram_search': '打开Telegram搜索',
'bind_telegram_modal.send_bot_message': '向机器人发送你的',
// knowledge
'knowledge': '使用文档',
'knowledge.last_release_date': '最后更新: {date}',
'knowledge.copy_success' : '复制成功',
// new language
'Dashboard': '仪表盘',
'My subscription': '我的订阅',
'There are still unpaid orders': '还有没支付的订单',
'Pay now': '立即支付',
'Ticket is being processed': '条工单正在处理中',
'View now': '立即查看',
'Buy subscription': '购买订阅',
'Knowledge': '使用文档',
'My order': '我的订单',
'Personal Center': '个人中心',
'Flow details': '流量明细',
'Configure subscription': '配置订阅',
'My invitation': '我的邀请',
'Node status': '节点状态',
'Copied': '复制成功',
'Product information': '商品信息',
'Product name': '产品名称',
'Type/Period': '类型/周期',
'Product flow': '产品流量',
'Order information': '订单信息',
'Close order': '关闭订单',
'Order number': '订单号',
'Discount amount': '优惠金额',
'Deduction amount': '旧订阅折抵金额',
'Refund amount': '退款金额',
'Balance payment': '余额支付',
'Creation time': '创建时间',
'My tickets': '我的工单',
'Tickets history': '工单历史',
'Reset flow after {reset_day} day': '{reset_day} 日后重置流量',
'Node name': '节点名称',
'Due on {date}, {day} days before expiration': '于 {date} 到期,距离到期还有 {day} 天。',
'Telegram discuss': 'Telegram 讨论组',
'Join now': '立即加入',
'Renew': '续费',
'Buy': '购买',
'This subscription cannot be renewed. Only new users are allowed to purchase it': '该订阅无法续费,仅允许新用户购买'
}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -32,6 +32,11 @@
crisp_id: '{{$crisp_id}}'
}
</script>
<script src="/theme/{{$theme}}/assets/i18n.js"></script>
<script src="/theme/{{$theme}}/assets/i18n/zh-CN.js"></script>
<script src="/theme/{{$theme}}/assets/i18n/en-US.js"></script>
<script src="/theme/{{$theme}}/assets/i18n/ja-JP.js"></script>
<script src="/theme/{{$theme}}/assets/i18n/vi-VN.js"></script>
</head>
<body>

View File

@ -85,5 +85,6 @@
"Password can not be empty": "Password can not be empty",
"The traffic usage in :app_name has reached 80%": "The traffic usage in :app_name has reached 80%",
"The service in :app_name is about to expire": "The service in :app_name is about to expire",
"The coupon can only be used :limit_use_with_user per person": "The coupon can only be used :limit_use_with_user per person"
"The coupon can only be used :limit_use_with_user per person": "The coupon can only be used :limit_use_with_user per person",
"The coupon code cannot be used for this period": "The coupon code cannot be used for this period"
}

View File

@ -25,7 +25,7 @@
"You have an unpaid or pending order, please try again later or cancel it": "您有未付款或开通中的订单,请稍后再试或将其取消",
"This subscription has been sold out, please choose another subscription": "该订阅已售罄,请更换其它订阅",
"This subscription cannot be renewed, please change to another subscription": "该订阅无法续费,请更换其它订阅",
"This payment cycle cannot be purchased, please choose another cycle": "该订阅周期无法进行购买,请选择其它周期",
"This payment period cannot be purchased, please choose another period": "该订阅周期无法进行购买,请选择其它周期",
"Subscription has expired or no active subscription, unable to purchase Data Reset Package": "订阅已过期或无有效订阅,无法购买重置包",
"This subscription has expired, please change to another subscription": "订阅已过期,请更换其它订阅",
"Coupon failed": "优惠券使用失败",
@ -66,8 +66,8 @@
"Email verification code has been sent, please request again later": "验证码已发送,请过一会再请求",
"Email verification code": "邮箱验证码",
"Plan ID cannot be empty": "套餐ID不能为空",
"Plan cycle cannot be empty": "套餐周期不能为空",
"Wrong plan cycle": "套餐周期参数有误",
"Plan period cannot be empty": "套餐周期不能为空",
"Wrong plan period": "套餐周期参数有误",
"Ticket subject cannot be empty": "工单主题不能为空",
"Ticket level cannot be empty": "工单等级不能为空",
"Incorrect ticket level format": "工单等级参数有误",
@ -85,5 +85,6 @@
"Password can not be empty": "密码不能为空",
"The traffic usage in :app_name has reached 80%": "在:app_name的流量使用已达到80%",
"The service in :app_name is about to expire": "在:app_name的服务即将到期",
"The coupon can only be used :limit_use_with_user per person": "该优惠券每人只能用:limit_use_with_user次"
"The coupon can only be used :limit_use_with_user per person": "该优惠券每人只能用:limit_use_with_user次",
"The coupon code cannot be used for this period": "该优惠券无法用于这个付款周期"
}

View File

@ -1,8 +1,8 @@
port: 7890
socks-port: 7891
# port: 7890
# socks-port: 7891
# redir-port: 7892
# tproxy-port: 7893
# mixed-port: 7890
mixed-port: 7890
allow-lan: true
bind-address: "*"
mode: rule
@ -17,34 +17,48 @@ proxy-groups:
- { name: "故障转移", type: fallback, proxies: [], url: "http://www.gstatic.com/generate_204", interval: 7200 }
rules:
# 自定义规则
## 您可以在此处插入您补充的自定义规则(请注意保持缩进)
# Google 中国服务
- DOMAIN-SUFFIX,services.googleapis.cn,SELECT
- DOMAIN-SUFFIX,xn--ngstr-lra8j.com,SELECT
# Apple
- DOMAIN,safebrowsing.urlsec.qq.com,DIRECT # 如果您并不信任此服务提供商或防止其下载消耗过多带宽资源,可以进入 Safari 设置,关闭 Fraudulent Website Warning 功能,并使用 REJECT 策略。
- DOMAIN,safebrowsing.googleapis.com,DIRECT # 如果您并不信任此服务提供商或防止其下载消耗过多带宽资源,可以进入 Safari 设置,关闭 Fraudulent Website Warning 功能,并使用 REJECT 策略。
- DOMAIN,ocsp.apple.com,SELECT
- DOMAIN,developer.apple.com,SELECT
- DOMAIN-SUFFIX,digicert.com,SELECT
- DOMAIN-SUFFIX,entrust.net,SELECT
- DOMAIN,ocsp.apple.com,SELECT
- DOMAIN,ocsp.comodoca.com,SELECT
- DOMAIN,ocsp.usertrust.com,SELECT
- DOMAIN,ocsp.sectigo.com,SELECT
- DOMAIN,ocsp.verisign.net,SELECT
- DOMAIN-SUFFIX,apps.apple.com,SELECT
- DOMAIN-SUFFIX,apple-dns.net,SELECT
- DOMAIN,testflight.apple.com,SELECT
- DOMAIN,sandbox.itunes.apple.com,SELECT
- DOMAIN,itunes.apple.com,SELECT
- DOMAIN-SUFFIX,apps.apple.com,SELECT
- DOMAIN-SUFFIX,blobstore.apple.com,SELECT
- DOMAIN-SUFFIX,music.apple.com,DIRECT
- DOMAIN,cvws.icloud-content.com,SELECT
- DOMAIN-SUFFIX,mzstatic.com,DIRECT
- DOMAIN-SUFFIX,itunes.apple.com,DIRECT
- DOMAIN-SUFFIX,icloud.com,DIRECT
- DOMAIN-SUFFIX,icloud-content.com,DIRECT
- DOMAIN-SUFFIX,me.com,DIRECT
- DOMAIN-SUFFIX,mzstatic.com,DIRECT
- DOMAIN-SUFFIX,akadns.net,DIRECT
- DOMAIN-SUFFIX,aaplimg.com,DIRECT
- DOMAIN-SUFFIX,cdn20.com,DIRECT
- DOMAIN-SUFFIX,cdn-apple.com,DIRECT
- DOMAIN-SUFFIX,akadns.net,DIRECT
- DOMAIN-SUFFIX,akamaiedge.net,DIRECT
- DOMAIN-SUFFIX,edgekey.net,DIRECT
- DOMAIN-SUFFIX,mwcloudcdn.com,DIRECT
- DOMAIN-SUFFIX,mwcname.com,DIRECT
- DOMAIN-SUFFIX,apple.com,DIRECT
- DOMAIN-SUFFIX,apple-cloudkit.com,DIRECT
- DOMAIN-SUFFIX,apple-mapkit.com,DIRECT
# - DOMAIN,e.crashlytics.com,REJECT //注释此选项有助于大多数App开发者分析崩溃信息如果您拒绝一切崩溃数据统计、搜集请取消 # 注释。
# 自定义规则
## 您可以在此处插入您补充的自定义规则(请注意保持缩进)
# 国内网站
- DOMAIN-SUFFIX,cn,DIRECT
- DOMAIN-KEYWORD,-cn,DIRECT
@ -58,7 +72,6 @@ rules:
- DOMAIN-SUFFIX,acfun.tv,DIRECT
- DOMAIN-SUFFIX,air-matters.com,DIRECT
- DOMAIN-SUFFIX,aixifan.com,DIRECT
- DOMAIN-SUFFIX,akamaized.net,DIRECT
- DOMAIN-KEYWORD,alicdn,DIRECT
- DOMAIN-KEYWORD,alipay,DIRECT
- DOMAIN-KEYWORD,taobao,DIRECT
@ -90,7 +103,6 @@ rules:
- DOMAIN-SUFFIX,godic.net,DIRECT
- DOMAIN-SUFFIX,gtimg.com,DIRECT
- DOMAIN,cdn.hockeyapp.net,DIRECT
- DOMAIN-SUFFIX,hdslb.com,DIRECT
- DOMAIN-SUFFIX,hongxiu.com,DIRECT
- DOMAIN-SUFFIX,hxcdn.net,DIRECT
- DOMAIN-SUFFIX,iciba.com,DIRECT
@ -105,7 +117,6 @@ rules:
- DOMAIN-SUFFIX,lecloud.com,DIRECT
- DOMAIN-SUFFIX,lemicp.com,DIRECT
- DOMAIN-SUFFIX,licdn.com,DIRECT
- DOMAIN-SUFFIX,linkedin.com,DIRECT
- DOMAIN-SUFFIX,luoo.net,DIRECT
- DOMAIN-SUFFIX,meituan.com,DIRECT
- DOMAIN-SUFFIX,meituan.net,DIRECT
@ -202,21 +213,24 @@ rules:
- DOMAIN-KEYWORD,adsrvmedia,REJECT
- DOMAIN-KEYWORD,adwords,REJECT
- DOMAIN-KEYWORD,adservice,REJECT
- DOMAIN-SUFFIX,appsflyer.com,REJECT
- DOMAIN-KEYWORD,domob,REJECT
- DOMAIN-SUFFIX,doubleclick.net,REJECT
- DOMAIN-KEYWORD,duomeng,REJECT
- DOMAIN-KEYWORD,dwtrack,REJECT
- DOMAIN-KEYWORD,guanggao,REJECT
- DOMAIN-KEYWORD,lianmeng,REJECT
- DOMAIN-SUFFIX,mmstat.com,REJECT
- DOMAIN-KEYWORD,mopub,REJECT
- DOMAIN-KEYWORD,omgmta,REJECT
- DOMAIN-KEYWORD,openx,REJECT
- DOMAIN-KEYWORD,partnerad,REJECT
- DOMAIN-KEYWORD,pingfore,REJECT
- DOMAIN-KEYWORD,supersonicads,REJECT
- DOMAIN-KEYWORD,tracking,REJECT
- DOMAIN-KEYWORD,uedas,REJECT
- DOMAIN-KEYWORD,umeng,REJECT
- DOMAIN-KEYWORD,usage,REJECT
- DOMAIN-SUFFIX,vungle.com,REJECT
- DOMAIN-KEYWORD,wlmonitor,REJECT
- DOMAIN-KEYWORD,zjtoolbar,REJECT
@ -225,6 +239,7 @@ rules:
- DOMAIN-SUFFIX,abpchina.org,SELECT
- DOMAIN-SUFFIX,adblockplus.org,SELECT
- DOMAIN-SUFFIX,adobe.com,SELECT
- DOMAIN-SUFFIX,akamaized.net,SELECT
- DOMAIN-SUFFIX,alfredapp.com,SELECT
- DOMAIN-SUFFIX,amplitude.com,SELECT
- DOMAIN-SUFFIX,ampproject.org,SELECT
@ -350,6 +365,7 @@ rules:
- DOMAIN-SUFFIX,kat.cr,SELECT
- DOMAIN-SUFFIX,klip.me,SELECT
- DOMAIN-SUFFIX,libsyn.com,SELECT
- DOMAIN-SUFFIX,linkedin.com,SELECT
- DOMAIN-SUFFIX,linode.com,SELECT
- DOMAIN-SUFFIX,lithium.com,SELECT
- DOMAIN-SUFFIX,littlehj.com,SELECT
@ -492,18 +508,38 @@ rules:
# Telegram
- DOMAIN-SUFFIX,telegra.ph,SELECT
- DOMAIN-SUFFIX,telegram.org,SELECT
- IP-CIDR,91.108.4.0/22,SELECT,no-resolve
- IP-CIDR,91.108.8.0/22,SELECT,no-resolve
- IP-CIDR,91.108.12.0/22,SELECT,no-resolve
- IP-CIDR,91.108.8.0/21,SELECT,no-resolve
- IP-CIDR,91.108.16.0/22,SELECT,no-resolve
- IP-CIDR,91.108.56.0/22,SELECT,no-resolve
- IP-CIDR,149.154.160.0/22,SELECT,no-resolve
- IP-CIDR,149.154.164.0/22,SELECT,no-resolve
- IP-CIDR,149.154.168.0/22,SELECT,no-resolve
- IP-CIDR,149.154.172.0/22,SELECT,no-resolve
- IP-CIDR,149.154.160.0/20,SELECT,no-resolve
- IP-CIDR6,2001:67c:4e8::/48,SELECT,no-resolve
- IP-CIDR6,2001:b28:f23d::/48,SELECT,no-resolve
- IP-CIDR6,2001:b28:f23f::/48,SELECT,no-resolve
# Google 中国服务 services.googleapis.cn
- IP-CIDR,120.232.181.162/32,SELECT,no-resolve
- IP-CIDR,120.241.147.226/32,SELECT,no-resolve
- IP-CIDR,120.253.253.226/32,SELECT,no-resolve
- IP-CIDR,120.253.255.162/32,SELECT,no-resolve
- IP-CIDR,120.253.255.34/32,SELECT,no-resolve
- IP-CIDR,120.253.255.98/32,SELECT,no-resolve
- IP-CIDR,180.163.150.162/32,SELECT,no-resolve
- IP-CIDR,180.163.150.34/32,SELECT,no-resolve
- IP-CIDR,180.163.151.162/32,SELECT,no-resolve
- IP-CIDR,180.163.151.34/32,SELECT,no-resolve
- IP-CIDR,203.208.39.0/24,SELECT,no-resolve
- IP-CIDR,203.208.40.0/24,SELECT,no-resolve
- IP-CIDR,203.208.41.0/24,SELECT,no-resolve
- IP-CIDR,203.208.43.0/24,SELECT,no-resolve
- IP-CIDR,203.208.50.0/24,SELECT,no-resolve
- IP-CIDR,220.181.174.162/32,SELECT,no-resolve
- IP-CIDR,220.181.174.226/32,SELECT,no-resolve
- IP-CIDR,220.181.174.34/32,SELECT,no-resolve
# LAN
- DOMAIN,injections.adguard.org,DIRECT
- DOMAIN,local.adguard.org,DIRECT
- DOMAIN-SUFFIX,local,DIRECT
- IP-CIDR,127.0.0.0/8,DIRECT
- IP-CIDR,172.16.0.0/12,DIRECT
@ -511,6 +547,8 @@ rules:
- IP-CIDR,10.0.0.0/8,DIRECT
- IP-CIDR,17.0.0.0/8,DIRECT
- IP-CIDR,100.64.0.0/10,DIRECT
- IP-CIDR,224.0.0.0/4,DIRECT
- IP-CIDR6,fe80::/10,DIRECT
# 最终规则
- GEOIP,CN,DIRECT

View File

@ -141,7 +141,6 @@ rules:
- DOMAIN-SUFFIX,lecloud.com,DIRECT
- DOMAIN-SUFFIX,lemicp.com,DIRECT
- DOMAIN-SUFFIX,licdn.com,DIRECT
- DOMAIN-SUFFIX,linkedin.com,DIRECT
- DOMAIN-SUFFIX,luoo.net,DIRECT
- DOMAIN-SUFFIX,meituan.com,DIRECT
- DOMAIN-SUFFIX,meituan.net,DIRECT
@ -390,6 +389,7 @@ rules:
- DOMAIN-SUFFIX,kat.cr,$app_name
- DOMAIN-SUFFIX,klip.me,$app_name
- DOMAIN-SUFFIX,libsyn.com,$app_name
- DOMAIN-SUFFIX,linkedin.com,$app_name
- DOMAIN-SUFFIX,linode.com,$app_name
- DOMAIN-SUFFIX,lithium.com,$app_name
- DOMAIN-SUFFIX,littlehj.com,$app_name

View File

@ -1,4 +1,5 @@
#!MANAGED-CONFIG $subs_link interval=43200 strict=true
# Thanks @Hackl0us SS-Rule-Snippet
[General]
loglevel = notify
@ -38,14 +39,500 @@ DOMAIN,$subs_domain,DIRECT
DOMAIN-SUFFIX,services.googleapis.cn,Proxy
DOMAIN-SUFFIX,xn--ngstr-lra8j.com,Proxy
# 实用规则片段集
# RULE-SET,https://cdn.jsdelivr.net/gh/Hackl0us/SS-Rule-Snippet@master/Rulesets/Surge/Basic/Apple-News.list,Proxy
RULE-SET,https://cdn.jsdelivr.net/gh/Hackl0us/SS-Rule-Snippet@master/Rulesets/Surge/Basic/Apple-proxy.list,Proxy
RULE-SET,https://cdn.jsdelivr.net/gh/Hackl0us/SS-Rule-Snippet@master/Rulesets/Surge/Basic/Apple-direct.list,DIRECT
RULE-SET,https://cdn.jsdelivr.net/gh/Hackl0us/SS-Rule-Snippet@master/Rulesets/Surge/Basic/CN.list,DIRECT
RULE-SET,https://cdn.jsdelivr.net/gh/Hackl0us/SS-Rule-Snippet@master/Rulesets/Surge/Basic/common-ad-keyword.list,REJECT
RULE-SET,https://cdn.jsdelivr.net/gh/Hackl0us/SS-Rule-Snippet@master/Rulesets/Surge/Basic/foreign.list,Proxy
RULE-SET,https://cdn.jsdelivr.net/gh/Hackl0us/SS-Rule-Snippet@master/Rulesets/Surge/App/social/Telegram.list,Proxy
# Apple
DOMAIN,developer.apple.com,Proxy
DOMAIN-SUFFIX,digicert.com,Proxy
USER-AGENT,com.apple.trustd*,Proxy
DOMAIN-SUFFIX,apple-dns.net,Proxy
DOMAIN,testflight.apple.com,Proxy
DOMAIN,sandbox.itunes.apple.com,Proxy
DOMAIN,itunes.apple.com,Proxy
DOMAIN-SUFFIX,apps.apple.com,Proxy
DOMAIN-SUFFIX,blobstore.apple.com,Proxy
DOMAIN,cvws.icloud-content.com,Proxy
DOMAIN,safebrowsing.urlsec.qq.com,DIRECT
DOMAIN,safebrowsing.googleapis.com,DIRECT
USER-AGENT,com.apple.appstored*,DIRECT
USER-AGENT,AppStore*,DIRECT
DOMAIN-SUFFIX,mzstatic.com,DIRECT
DOMAIN-SUFFIX,itunes.apple.com,DIRECT
DOMAIN-SUFFIX,icloud.com,DIRECT
DOMAIN-SUFFIX,icloud-content.com,DIRECT
USER-AGENT,cloudd*,DIRECT
USER-AGENT,*com.apple.WebKit*,DIRECT
USER-AGENT,*com.apple.*,DIRECT
DOMAIN-SUFFIX,me.com,DIRECT
DOMAIN-SUFFIX,aaplimg.com,DIRECT
DOMAIN-SUFFIX,cdn20.com,DIRECT
DOMAIN-SUFFIX,cdn-apple.com,DIRECT
DOMAIN-SUFFIX,akadns.net,DIRECT
DOMAIN-SUFFIX,akamaiedge.net,DIRECT
DOMAIN-SUFFIX,edgekey.net,DIRECT
DOMAIN-SUFFIX,mwcloudcdn.com,DIRECT
DOMAIN-SUFFIX,mwcname.com,DIRECT
DOMAIN-SUFFIX,apple.com,DIRECT
DOMAIN-SUFFIX,apple-cloudkit.com,DIRECT
DOMAIN-SUFFIX,apple-mapkit.com,DIRECT
# 国内网站
USER-AGENT,MicroMessenger Client*,DIRECT
USER-AGENT,WeChat*,DIRECT
DOMAIN-SUFFIX,cn,DIRECT
DOMAIN-KEYWORD,-cn,DIRECT
DOMAIN-SUFFIX,126.com,DIRECT
DOMAIN-SUFFIX,126.net,DIRECT
DOMAIN-SUFFIX,127.net,DIRECT
DOMAIN-SUFFIX,163.com,DIRECT
DOMAIN-SUFFIX,360buyimg.com,DIRECT
DOMAIN-SUFFIX,36kr.com,DIRECT
DOMAIN-SUFFIX,acfun.tv,DIRECT
DOMAIN-SUFFIX,air-matters.com,DIRECT
DOMAIN-SUFFIX,aixifan.com,DIRECT
DOMAIN-KEYWORD,alicdn,DIRECT
DOMAIN-KEYWORD,alipay,DIRECT
DOMAIN-KEYWORD,aliyun,DIRECT
DOMAIN-KEYWORD,taobao,DIRECT
DOMAIN-SUFFIX,amap.com,DIRECT
DOMAIN-SUFFIX,autonavi.com,DIRECT
DOMAIN-KEYWORD,baidu,DIRECT
DOMAIN-SUFFIX,bdimg.com,DIRECT
DOMAIN-SUFFIX,bdstatic.com,DIRECT
DOMAIN-SUFFIX,bilibili.com,DIRECT
DOMAIN-SUFFIX,bilivideo.com,DIRECT
DOMAIN-SUFFIX,caiyunapp.com,DIRECT
DOMAIN-SUFFIX,clouddn.com,DIRECT
DOMAIN-SUFFIX,cnbeta.com,DIRECT
DOMAIN-SUFFIX,cnbetacdn.com,DIRECT
DOMAIN-SUFFIX,cootekservice.com,DIRECT
DOMAIN-SUFFIX,csdn.net,DIRECT
DOMAIN-SUFFIX,ctrip.com,DIRECT
DOMAIN-SUFFIX,dgtle.com,DIRECT
DOMAIN-SUFFIX,dianping.com,DIRECT
DOMAIN-SUFFIX,douban.com,DIRECT
DOMAIN-SUFFIX,doubanio.com,DIRECT
DOMAIN-SUFFIX,duokan.com,DIRECT
DOMAIN-SUFFIX,easou.com,DIRECT
DOMAIN-SUFFIX,ele.me,DIRECT
DOMAIN-SUFFIX,feng.com,DIRECT
DOMAIN-SUFFIX,fir.im,DIRECT
DOMAIN-SUFFIX,frdic.com,DIRECT
DOMAIN-SUFFIX,g-cores.com,DIRECT
DOMAIN-SUFFIX,godic.net,DIRECT
DOMAIN-SUFFIX,gtimg.com,DIRECT
DOMAIN-SUFFIX,hongxiu.com,DIRECT
DOMAIN-SUFFIX,hxcdn.net,DIRECT
DOMAIN-SUFFIX,iciba.com,DIRECT
DOMAIN-SUFFIX,ifeng.com,DIRECT
DOMAIN-SUFFIX,ifengimg.com,DIRECT
DOMAIN-SUFFIX,ipip.net,DIRECT
DOMAIN-SUFFIX,iqiyi.com,DIRECT
DOMAIN-SUFFIX,jd.com,DIRECT
DOMAIN-SUFFIX,jianshu.com,DIRECT
DOMAIN-SUFFIX,knewone.com,DIRECT
DOMAIN-SUFFIX,le.com,DIRECT
DOMAIN-SUFFIX,lecloud.com,DIRECT
DOMAIN-SUFFIX,lemicp.com,DIRECT
DOMAIN-SUFFIX,licdn.com,DIRECT
DOMAIN-SUFFIX,luoo.net,DIRECT
DOMAIN-SUFFIX,meituan.com,DIRECT
DOMAIN-SUFFIX,meituan.net,DIRECT
DOMAIN-SUFFIX,mi.com,DIRECT
DOMAIN-SUFFIX,miaopai.com,DIRECT
DOMAIN-SUFFIX,microsoft.com,DIRECT
DOMAIN-SUFFIX,microsoftonline.com,DIRECT
DOMAIN-SUFFIX,miui.com,DIRECT
DOMAIN-SUFFIX,miwifi.com,DIRECT
DOMAIN-SUFFIX,mob.com,DIRECT
DOMAIN-SUFFIX,netease.com,DIRECT
DOMAIN-SUFFIX,office.com,DIRECT
DOMAIN-KEYWORD,officecdn,DIRECT
DOMAIN-SUFFIX,office365.com,DIRECT
DOMAIN-SUFFIX,oschina.net,DIRECT
DOMAIN-SUFFIX,ppsimg.com,DIRECT
DOMAIN-SUFFIX,pstatp.com,DIRECT
DOMAIN-SUFFIX,qcloud.com,DIRECT
DOMAIN-SUFFIX,qdaily.com,DIRECT
DOMAIN-SUFFIX,qdmm.com,DIRECT
DOMAIN-SUFFIX,qhimg.com,DIRECT
DOMAIN-SUFFIX,qhres.com,DIRECT
DOMAIN-SUFFIX,qidian.com,DIRECT
DOMAIN-SUFFIX,qihucdn.com,DIRECT
DOMAIN-SUFFIX,qiniu.com,DIRECT
DOMAIN-SUFFIX,qiniucdn.com,DIRECT
DOMAIN-SUFFIX,qiyipic.com,DIRECT
DOMAIN-SUFFIX,qq.com,DIRECT
DOMAIN-SUFFIX,qqurl.com,DIRECT
DOMAIN-SUFFIX,rarbg.to,DIRECT
DOMAIN-SUFFIX,ruguoapp.com,DIRECT
DOMAIN-SUFFIX,segmentfault.com,DIRECT
DOMAIN-SUFFIX,sinaapp.com,DIRECT
DOMAIN-SUFFIX,smzdm.com,DIRECT
DOMAIN-SUFFIX,snapdrop.net,DIRECT
DOMAIN-SUFFIX,sogou.com,DIRECT
DOMAIN-SUFFIX,sogoucdn.com,DIRECT
DOMAIN-SUFFIX,sohu.com,DIRECT
DOMAIN-SUFFIX,soku.com,DIRECT
DOMAIN-SUFFIX,speedtest.net,DIRECT
DOMAIN-SUFFIX,sspai.com,DIRECT
DOMAIN-SUFFIX,suning.com,DIRECT
DOMAIN-SUFFIX,taobao.com,DIRECT
DOMAIN-SUFFIX,tencent.com,DIRECT
DOMAIN-SUFFIX,tenpay.com,DIRECT
DOMAIN-SUFFIX,tianyancha.com,DIRECT
DOMAIN-KEYWORD,.tmall.com,DIRECT
DOMAIN-SUFFIX,tudou.com,DIRECT
DOMAIN-SUFFIX,umetrip.com,DIRECT
DOMAIN-SUFFIX,upaiyun.com,DIRECT
DOMAIN-SUFFIX,upyun.com,DIRECT
DOMAIN-SUFFIX,veryzhun.com,DIRECT
DOMAIN-SUFFIX,weather.com,DIRECT
DOMAIN-SUFFIX,weibo.com,DIRECT
DOMAIN-SUFFIX,xiami.com,DIRECT
DOMAIN-SUFFIX,xiami.net,DIRECT
DOMAIN-SUFFIX,xiaomicp.com,DIRECT
DOMAIN-SUFFIX,ximalaya.com,DIRECT
DOMAIN-SUFFIX,xmcdn.com,DIRECT
DOMAIN-SUFFIX,xunlei.com,DIRECT
DOMAIN-SUFFIX,yhd.com,DIRECT
DOMAIN-SUFFIX,yihaodianimg.com,DIRECT
DOMAIN-SUFFIX,yinxiang.com,DIRECT
DOMAIN-SUFFIX,ykimg.com,DIRECT
DOMAIN-SUFFIX,youdao.com,DIRECT
DOMAIN-SUFFIX,youku.com,DIRECT
DOMAIN-SUFFIX,zealer.com,DIRECT
DOMAIN-SUFFIX,zhihu.com,DIRECT
DOMAIN-SUFFIX,zhimg.com,DIRECT
DOMAIN-SUFFIX,zimuzu.tv,DIRECT
DOMAIN-SUFFIX,zoho.com,DIRECT
# 常见广告
DOMAIN-KEYWORD,admarvel,REJECT-TINYGIF
DOMAIN-KEYWORD,admaster,REJECT-TINYGIF
DOMAIN-KEYWORD,adsage,REJECT-TINYGIF
DOMAIN-KEYWORD,adsmogo,REJECT-TINYGIF
DOMAIN-KEYWORD,adsrvmedia,REJECT-TINYGIF
DOMAIN-KEYWORD,adwords,REJECT-TINYGIF
DOMAIN-KEYWORD,adservice,REJECT-TINYGIF
DOMAIN-SUFFIX,appsflyer.com,REJECT-TINYGIF
DOMAIN-KEYWORD,domob,REJECT-TINYGIF
DOMAIN-SUFFIX,doubleclick.net,REJECT-TINYGIF
DOMAIN-KEYWORD,duomeng,REJECT-TINYGIF
DOMAIN-KEYWORD,dwtrack,REJECT-TINYGIF
DOMAIN-KEYWORD,guanggao,REJECT-TINYGIF
DOMAIN-KEYWORD,lianmeng,REJECT-TINYGIF
DOMAIN-SUFFIX,mmstat.com,REJECT-TINYGIF
DOMAIN-KEYWORD,mopub,REJECT-TINYGIF
DOMAIN-KEYWORD,omgmta,REJECT-TINYGIF
DOMAIN-KEYWORD,openx,REJECT-TINYGIF
DOMAIN-KEYWORD,partnerad,REJECT-TINYGIF
DOMAIN-KEYWORD,pingfore,REJECT-TINYGIF
DOMAIN-KEYWORD,supersonicads,REJECT-TINYGIF
DOMAIN-KEYWORD,uedas,REJECT-TINYGIF
DOMAIN-KEYWORD,umeng,REJECT-TINYGIF
DOMAIN-KEYWORD,usage,REJECT-TINYGIF
DOMAIN-SUFFIX,vungle.com,REJECT-TINYGIF
DOMAIN-KEYWORD,wlmonitor,REJECT-TINYGIF
DOMAIN-KEYWORD,zjtoolbar,REJECT-TINYGIF
## 抗 DNS 污染
DOMAIN-KEYWORD,amazon,Proxy
DOMAIN-KEYWORD,google,Proxy
DOMAIN-KEYWORD,gmail,Proxy
DOMAIN-KEYWORD,youtube,Proxy
DOMAIN-KEYWORD,facebook,Proxy
DOMAIN-SUFFIX,fb.me,Proxy
DOMAIN-SUFFIX,fbcdn.net,Proxy
DOMAIN-KEYWORD,twitter,Proxy
DOMAIN-KEYWORD,instagram,Proxy
DOMAIN-KEYWORD,dropbox,Proxy
DOMAIN-SUFFIX,twimg.com,Proxy
DOMAIN-KEYWORD,blogspot,Proxy
DOMAIN-SUFFIX,youtu.be,Proxy
## 常见国外域名列表
DOMAIN-SUFFIX,9to5mac.com,Proxy
DOMAIN-SUFFIX,abpchina.org,Proxy
DOMAIN-SUFFIX,adblockplus.org,Proxy
DOMAIN-SUFFIX,adobe.com,Proxy
DOMAIN-SUFFIX,akamaized.net,Proxy
DOMAIN-SUFFIX,alfredapp.com,Proxy
DOMAIN-SUFFIX,amplitude.com,Proxy
DOMAIN-SUFFIX,ampproject.org,Proxy
DOMAIN-SUFFIX,android.com,Proxy
DOMAIN-SUFFIX,angularjs.org,Proxy
DOMAIN-SUFFIX,aolcdn.com,Proxy
DOMAIN-SUFFIX,apkpure.com,Proxy
DOMAIN-SUFFIX,appledaily.com,Proxy
DOMAIN-SUFFIX,appshopper.com,Proxy
DOMAIN-SUFFIX,appspot.com,Proxy
DOMAIN-SUFFIX,arcgis.com,Proxy
DOMAIN-SUFFIX,archive.org,Proxy
DOMAIN-SUFFIX,armorgames.com,Proxy
DOMAIN-SUFFIX,aspnetcdn.com,Proxy
DOMAIN-SUFFIX,att.com,Proxy
DOMAIN-SUFFIX,awsstatic.com,Proxy
DOMAIN-SUFFIX,azureedge.net,Proxy
DOMAIN-SUFFIX,azurewebsites.net,Proxy
DOMAIN-SUFFIX,bing.com,Proxy
DOMAIN-SUFFIX,bintray.com,Proxy
DOMAIN-SUFFIX,bit.com,Proxy
DOMAIN-SUFFIX,bit.ly,Proxy
DOMAIN-SUFFIX,bitbucket.org,Proxy
DOMAIN-SUFFIX,bjango.com,Proxy
DOMAIN-SUFFIX,bkrtx.com,Proxy
DOMAIN-SUFFIX,blog.com,Proxy
DOMAIN-SUFFIX,blogcdn.com,Proxy
DOMAIN-SUFFIX,blogger.com,Proxy
DOMAIN-SUFFIX,blogsmithmedia.com,Proxy
DOMAIN-SUFFIX,blogspot.com,Proxy
DOMAIN-SUFFIX,blogspot.hk,Proxy
DOMAIN-SUFFIX,bloomberg.com,Proxy
DOMAIN-SUFFIX,box.com,Proxy
DOMAIN-SUFFIX,box.net,Proxy
DOMAIN-SUFFIX,cachefly.net,Proxy
DOMAIN-SUFFIX,chromium.org,Proxy
DOMAIN-SUFFIX,cl.ly,Proxy
DOMAIN-SUFFIX,cloudflare.com,Proxy
DOMAIN-SUFFIX,cloudfront.net,Proxy
DOMAIN-SUFFIX,cloudmagic.com,Proxy
DOMAIN-SUFFIX,cmail19.com,Proxy
DOMAIN-SUFFIX,cnet.com,Proxy
DOMAIN-SUFFIX,cocoapods.org,Proxy
DOMAIN-SUFFIX,comodoca.com,Proxy
DOMAIN-SUFFIX,crashlytics.com,Proxy
DOMAIN-SUFFIX,culturedcode.com,Proxy
DOMAIN-SUFFIX,d.pr,Proxy
DOMAIN-SUFFIX,danilo.to,Proxy
DOMAIN-SUFFIX,dayone.me,Proxy
DOMAIN-SUFFIX,db.tt,Proxy
DOMAIN-SUFFIX,deskconnect.com,Proxy
DOMAIN-SUFFIX,disq.us,Proxy
DOMAIN-SUFFIX,disqus.com,Proxy
DOMAIN-SUFFIX,disquscdn.com,Proxy
DOMAIN-SUFFIX,dnsimple.com,Proxy
DOMAIN-SUFFIX,docker.com,Proxy
DOMAIN-SUFFIX,dribbble.com,Proxy
DOMAIN-SUFFIX,droplr.com,Proxy
DOMAIN-SUFFIX,duckduckgo.com,Proxy
DOMAIN-SUFFIX,dueapp.com,Proxy
DOMAIN-SUFFIX,dytt8.net,Proxy
DOMAIN-SUFFIX,edgecastcdn.net,Proxy
DOMAIN-SUFFIX,edgekey.net,Proxy
DOMAIN-SUFFIX,edgesuite.net,Proxy
DOMAIN-SUFFIX,engadget.com,Proxy
DOMAIN-SUFFIX,entrust.net,Proxy
DOMAIN-SUFFIX,eurekavpt.com,Proxy
DOMAIN-SUFFIX,evernote.com,Proxy
DOMAIN-SUFFIX,fabric.io,Proxy
DOMAIN-SUFFIX,fast.com,Proxy
DOMAIN-SUFFIX,fastly.net,Proxy
DOMAIN-SUFFIX,fc2.com,Proxy
DOMAIN-SUFFIX,feedburner.com,Proxy
DOMAIN-SUFFIX,feedly.com,Proxy
DOMAIN-SUFFIX,feedsportal.com,Proxy
DOMAIN-SUFFIX,fiftythree.com,Proxy
DOMAIN-SUFFIX,firebaseio.com,Proxy
DOMAIN-SUFFIX,flexibits.com,Proxy
DOMAIN-SUFFIX,flickr.com,Proxy
DOMAIN-SUFFIX,flipboard.com,Proxy
DOMAIN-SUFFIX,g.co,Proxy
DOMAIN-SUFFIX,gabia.net,Proxy
DOMAIN-SUFFIX,geni.us,Proxy
DOMAIN-SUFFIX,gfx.ms,Proxy
DOMAIN-SUFFIX,ggpht.com,Proxy
DOMAIN-SUFFIX,ghostnoteapp.com,Proxy
DOMAIN-SUFFIX,git.io,Proxy
DOMAIN-KEYWORD,github,Proxy
DOMAIN-SUFFIX,globalsign.com,Proxy
DOMAIN-SUFFIX,gmodules.com,Proxy
DOMAIN-SUFFIX,godaddy.com,Proxy
DOMAIN-SUFFIX,golang.org,Proxy
DOMAIN-SUFFIX,gongm.in,Proxy
DOMAIN-SUFFIX,goo.gl,Proxy
DOMAIN-SUFFIX,goodreaders.com,Proxy
DOMAIN-SUFFIX,goodreads.com,Proxy
DOMAIN-SUFFIX,gravatar.com,Proxy
DOMAIN-SUFFIX,gstatic.com,Proxy
DOMAIN-SUFFIX,gvt0.com,Proxy
DOMAIN-SUFFIX,hockeyapp.net,Proxy
DOMAIN-SUFFIX,hotmail.com,Proxy
DOMAIN-SUFFIX,icons8.com,Proxy
DOMAIN-SUFFIX,ifixit.com,Proxy
DOMAIN-SUFFIX,ift.tt,Proxy
DOMAIN-SUFFIX,ifttt.com,Proxy
DOMAIN-SUFFIX,iherb.com,Proxy
DOMAIN-SUFFIX,imageshack.us,Proxy
DOMAIN-SUFFIX,img.ly,Proxy
DOMAIN-SUFFIX,imgur.com,Proxy
DOMAIN-SUFFIX,imore.com,Proxy
DOMAIN-SUFFIX,instapaper.com,Proxy
DOMAIN-SUFFIX,ipn.li,Proxy
DOMAIN-SUFFIX,is.gd,Proxy
DOMAIN-SUFFIX,issuu.com,Proxy
DOMAIN-SUFFIX,itgonglun.com,Proxy
DOMAIN-SUFFIX,itun.es,Proxy
DOMAIN-SUFFIX,ixquick.com,Proxy
DOMAIN-SUFFIX,j.mp,Proxy
DOMAIN-SUFFIX,js.revsci.net,Proxy
DOMAIN-SUFFIX,jshint.com,Proxy
DOMAIN-SUFFIX,jtvnw.net,Proxy
DOMAIN-SUFFIX,justgetflux.com,Proxy
DOMAIN-SUFFIX,kat.cr,Proxy
DOMAIN-SUFFIX,klip.me,Proxy
DOMAIN-SUFFIX,libsyn.com,Proxy
DOMAIN-SUFFIX,linkedin.com,Proxy
DOMAIN-SUFFIX,linode.com,Proxy
DOMAIN-SUFFIX,lithium.com,Proxy
DOMAIN-SUFFIX,littlehj.com,Proxy
DOMAIN-SUFFIX,live.com,Proxy
DOMAIN-SUFFIX,live.net,Proxy
DOMAIN-SUFFIX,livefilestore.com,Proxy
DOMAIN-SUFFIX,llnwd.net,Proxy
DOMAIN-SUFFIX,macid.co,Proxy
DOMAIN-SUFFIX,macromedia.com,Proxy
DOMAIN-SUFFIX,macrumors.com,Proxy
DOMAIN-SUFFIX,mashable.com,Proxy
DOMAIN-SUFFIX,mathjax.org,Proxy
DOMAIN-SUFFIX,medium.com,Proxy
DOMAIN-SUFFIX,mega.co.nz,Proxy
DOMAIN-SUFFIX,mega.nz,Proxy
DOMAIN-SUFFIX,megaupload.com,Proxy
DOMAIN-SUFFIX,microsofttranslator.com,Proxy
DOMAIN-SUFFIX,mindnode.com,Proxy
DOMAIN-SUFFIX,mobile01.com,Proxy
DOMAIN-SUFFIX,modmyi.com,Proxy
DOMAIN-SUFFIX,msedge.net,Proxy
DOMAIN-SUFFIX,myfontastic.com,Proxy
DOMAIN-SUFFIX,name.com,Proxy
DOMAIN-SUFFIX,nextmedia.com,Proxy
DOMAIN-SUFFIX,nsstatic.net,Proxy
DOMAIN-SUFFIX,nssurge.com,Proxy
DOMAIN-SUFFIX,nyt.com,Proxy
DOMAIN-SUFFIX,nytimes.com,Proxy
DOMAIN-SUFFIX,omnigroup.com,Proxy
DOMAIN-SUFFIX,onedrive.com,Proxy
DOMAIN-SUFFIX,onenote.com,Proxy
DOMAIN-SUFFIX,ooyala.com,Proxy
DOMAIN-SUFFIX,openvpn.net,Proxy
DOMAIN-SUFFIX,openwrt.org,Proxy
DOMAIN-SUFFIX,orkut.com,Proxy
DOMAIN-SUFFIX,osxdaily.com,Proxy
DOMAIN-SUFFIX,outlook.com,Proxy
DOMAIN-SUFFIX,ow.ly,Proxy
DOMAIN-SUFFIX,paddleapi.com,Proxy
DOMAIN-SUFFIX,parallels.com,Proxy
DOMAIN-SUFFIX,parse.com,Proxy
DOMAIN-SUFFIX,pdfexpert.com,Proxy
DOMAIN-SUFFIX,periscope.tv,Proxy
DOMAIN-SUFFIX,pinboard.in,Proxy
DOMAIN-SUFFIX,pinterest.com,Proxy
DOMAIN-SUFFIX,pixelmator.com,Proxy
DOMAIN-SUFFIX,pixiv.net,Proxy
DOMAIN-SUFFIX,playpcesor.com,Proxy
DOMAIN-SUFFIX,playstation.com,Proxy
DOMAIN-SUFFIX,playstation.com.hk,Proxy
DOMAIN-SUFFIX,playstation.net,Proxy
DOMAIN-SUFFIX,playstationnetwork.com,Proxy
DOMAIN-SUFFIX,pushwoosh.com,Proxy
DOMAIN-SUFFIX,rime.im,Proxy
DOMAIN-SUFFIX,servebom.com,Proxy
DOMAIN-SUFFIX,sfx.ms,Proxy
DOMAIN-SUFFIX,shadowsocks.org,Proxy
DOMAIN-SUFFIX,sharethis.com,Proxy
DOMAIN-SUFFIX,shazam.com,Proxy
DOMAIN-SUFFIX,skype.com,Proxy
DOMAIN-SUFFIX,smartdnsProxy.com,Proxy
DOMAIN-SUFFIX,smartmailcloud.com,Proxy
DOMAIN-SUFFIX,sndcdn.com,Proxy
DOMAIN-SUFFIX,sony.com,Proxy
DOMAIN-SUFFIX,soundcloud.com,Proxy
DOMAIN-SUFFIX,sourceforge.net,Proxy
DOMAIN-SUFFIX,spotify.com,Proxy
DOMAIN-SUFFIX,squarespace.com,Proxy
DOMAIN-SUFFIX,sstatic.net,Proxy
DOMAIN-SUFFIX,st.luluku.pw,Proxy
DOMAIN-SUFFIX,stackoverflow.com,Proxy
DOMAIN-SUFFIX,startpage.com,Proxy
DOMAIN-SUFFIX,staticflickr.com,Proxy
DOMAIN-SUFFIX,steamcommunity.com,Proxy
DOMAIN-SUFFIX,symauth.com,Proxy
DOMAIN-SUFFIX,symcb.com,Proxy
DOMAIN-SUFFIX,symcd.com,Proxy
DOMAIN-SUFFIX,tapbots.com,Proxy
DOMAIN-SUFFIX,tapbots.net,Proxy
DOMAIN-SUFFIX,tdesktop.com,Proxy
DOMAIN-SUFFIX,techcrunch.com,Proxy
DOMAIN-SUFFIX,techsmith.com,Proxy
DOMAIN-SUFFIX,thepiratebay.org,Proxy
DOMAIN-SUFFIX,theverge.com,Proxy
DOMAIN-SUFFIX,time.com,Proxy
DOMAIN-SUFFIX,timeinc.net,Proxy
DOMAIN-SUFFIX,tiny.cc,Proxy
DOMAIN-SUFFIX,tinypic.com,Proxy
DOMAIN-SUFFIX,tmblr.co,Proxy
DOMAIN-SUFFIX,todoist.com,Proxy
DOMAIN-SUFFIX,trello.com,Proxy
DOMAIN-SUFFIX,trustasiassl.com,Proxy
DOMAIN-SUFFIX,tumblr.co,Proxy
DOMAIN-SUFFIX,tumblr.com,Proxy
DOMAIN-SUFFIX,tweetdeck.com,Proxy
DOMAIN-SUFFIX,tweetmarker.net,Proxy
DOMAIN-SUFFIX,twitch.tv,Proxy
DOMAIN-SUFFIX,txmblr.com,Proxy
DOMAIN-SUFFIX,typekit.net,Proxy
DOMAIN-SUFFIX,ubertags.com,Proxy
DOMAIN-SUFFIX,ublock.org,Proxy
DOMAIN-SUFFIX,ubnt.com,Proxy
DOMAIN-SUFFIX,ulyssesapp.com,Proxy
DOMAIN-SUFFIX,urchin.com,Proxy
DOMAIN-SUFFIX,usertrust.com,Proxy
DOMAIN-SUFFIX,v.gd,Proxy
DOMAIN-SUFFIX,v2ex.com,Proxy
DOMAIN-SUFFIX,vimeo.com,Proxy
DOMAIN-SUFFIX,vimeocdn.com,Proxy
DOMAIN-SUFFIX,vine.co,Proxy
DOMAIN-SUFFIX,vivaldi.com,Proxy
DOMAIN-SUFFIX,vox-cdn.com,Proxy
DOMAIN-SUFFIX,vsco.co,Proxy
DOMAIN-SUFFIX,vultr.com,Proxy
DOMAIN-SUFFIX,w.org,Proxy
DOMAIN-SUFFIX,w3schools.com,Proxy
DOMAIN-SUFFIX,webtype.com,Proxy
DOMAIN-SUFFIX,wikiwand.com,Proxy
DOMAIN-SUFFIX,wikileaks.org,Proxy
DOMAIN-SUFFIX,wikimedia.org,Proxy
DOMAIN-SUFFIX,wikipedia.com,Proxy
DOMAIN-SUFFIX,wikipedia.org,Proxy
DOMAIN-SUFFIX,windows.com,Proxy
DOMAIN-SUFFIX,windows.net,Proxy
DOMAIN-SUFFIX,wire.com,Proxy
DOMAIN-SUFFIX,wordpress.com,Proxy
DOMAIN-SUFFIX,workflowy.com,Proxy
DOMAIN-SUFFIX,wp.com,Proxy
DOMAIN-SUFFIX,wsj.com,Proxy
DOMAIN-SUFFIX,wsj.net,Proxy
DOMAIN-SUFFIX,xda-developers.com,Proxy
DOMAIN-SUFFIX,xeeno.com,Proxy
DOMAIN-SUFFIX,xiti.com,Proxy
DOMAIN-SUFFIX,yahoo.com,Proxy
DOMAIN-SUFFIX,yimg.com,Proxy
DOMAIN-SUFFIX,ying.com,Proxy
DOMAIN-SUFFIX,yoyo.org,Proxy
DOMAIN-SUFFIX,ytimg.com,Proxy
# Telegram
DOMAIN-SUFFIX,telegra.ph,Proxy
DOMAIN-SUFFIX,telegram.org,Proxy
IP-CIDR,91.108.4.0/22,Proxy,no-resolve
IP-CIDR,91.108.8.0/21,Proxy,no-resolve
IP-CIDR,91.108.16.0/22,Proxy,no-resolve
IP-CIDR,91.108.56.0/22,Proxy,no-resolve
IP-CIDR,149.154.160.0/20,Proxy,no-resolve
IP-CIDR6,2001:67c:4e8::/48,Proxy,no-resolve
IP-CIDR6,2001:b28:f23d::/48,Proxy,no-resolve
IP-CIDR6,2001:b28:f23f::/48,Proxy,no-resolve
# Google 中国服务 services.googleapis.cn
IP-CIDR,120.232.181.162/32,Proxy,no-resolve

View File

@ -1,5 +1,6 @@
#!MANAGED-CONFIG $subs_link interval=43200 strict=true
# Surge 的规则配置手册: https://manual.nssurge.com/
# Thanks @Hackl0us SS-Rule-Snippet
[General]
loglevel = notify
@ -27,7 +28,7 @@ ipv6 = true
test-timeout = 4
proxy-test-url = http://www.gstatic.com/generate_204
geoip-maxmind-url = https://cdn.jsdelivr.net/gh/Hackl0us/GeoIP2-CN@release/Country.mmdb
geoip-maxmind-url = https://unpkg.zhimg.com/rulestatic@1.0.1/Country.mmdb
[Replica]
hide-apple-request = true
@ -63,14 +64,500 @@ DOMAIN,$subs_domain,DIRECT
DOMAIN-SUFFIX,services.googleapis.cn,Proxy
DOMAIN-SUFFIX,xn--ngstr-lra8j.com,Proxy
# 实用规则片段集
# RULE-SET,https://cdn.jsdelivr.net/gh/Hackl0us/SS-Rule-Snippet@master/Rulesets/Surge/Basic/Apple-News.list,Proxy
RULE-SET,https://cdn.jsdelivr.net/gh/Hackl0us/SS-Rule-Snippet@master/Rulesets/Surge/Basic/Apple-proxy.list,Proxy
RULE-SET,https://cdn.jsdelivr.net/gh/Hackl0us/SS-Rule-Snippet@master/Rulesets/Surge/Basic/Apple-direct.list,DIRECT
RULE-SET,https://cdn.jsdelivr.net/gh/Hackl0us/SS-Rule-Snippet@master/Rulesets/Surge/Basic/CN.list,DIRECT
RULE-SET,https://cdn.jsdelivr.net/gh/Hackl0us/SS-Rule-Snippet@master/Rulesets/Surge/Basic/common-ad-keyword.list,REJECT-TINYGIF
RULE-SET,https://cdn.jsdelivr.net/gh/Hackl0us/SS-Rule-Snippet@master/Rulesets/Surge/Basic/foreign.list,Proxy
RULE-SET,https://cdn.jsdelivr.net/gh/Hackl0us/SS-Rule-Snippet@master/Rulesets/Surge/App/social/Telegram.list,Proxy
# Apple
DOMAIN,developer.apple.com,Proxy
DOMAIN-SUFFIX,digicert.com,Proxy
USER-AGENT,com.apple.trustd*,Proxy
DOMAIN-SUFFIX,apple-dns.net,Proxy
DOMAIN,testflight.apple.com,Proxy
DOMAIN,sandbox.itunes.apple.com,Proxy
DOMAIN,itunes.apple.com,Proxy
DOMAIN-SUFFIX,apps.apple.com,Proxy
DOMAIN-SUFFIX,blobstore.apple.com,Proxy
DOMAIN,cvws.icloud-content.com,Proxy
DOMAIN,safebrowsing.urlsec.qq.com,DIRECT
DOMAIN,safebrowsing.googleapis.com,DIRECT
USER-AGENT,com.apple.appstored*,DIRECT
USER-AGENT,AppStore*,DIRECT
DOMAIN-SUFFIX,mzstatic.com,DIRECT
DOMAIN-SUFFIX,itunes.apple.com,DIRECT
DOMAIN-SUFFIX,icloud.com,DIRECT
DOMAIN-SUFFIX,icloud-content.com,DIRECT
USER-AGENT,cloudd*,DIRECT
USER-AGENT,*com.apple.WebKit*,DIRECT
USER-AGENT,*com.apple.*,DIRECT
DOMAIN-SUFFIX,me.com,DIRECT
DOMAIN-SUFFIX,aaplimg.com,DIRECT
DOMAIN-SUFFIX,cdn20.com,DIRECT
DOMAIN-SUFFIX,cdn-apple.com,DIRECT
DOMAIN-SUFFIX,akadns.net,DIRECT
DOMAIN-SUFFIX,akamaiedge.net,DIRECT
DOMAIN-SUFFIX,edgekey.net,DIRECT
DOMAIN-SUFFIX,mwcloudcdn.com,DIRECT
DOMAIN-SUFFIX,mwcname.com,DIRECT
DOMAIN-SUFFIX,apple.com,DIRECT
DOMAIN-SUFFIX,apple-cloudkit.com,DIRECT
DOMAIN-SUFFIX,apple-mapkit.com,DIRECT
# 国内网站
USER-AGENT,MicroMessenger Client*,DIRECT
USER-AGENT,WeChat*,DIRECT
DOMAIN-SUFFIX,cn,DIRECT
DOMAIN-KEYWORD,-cn,DIRECT
DOMAIN-SUFFIX,126.com,DIRECT
DOMAIN-SUFFIX,126.net,DIRECT
DOMAIN-SUFFIX,127.net,DIRECT
DOMAIN-SUFFIX,163.com,DIRECT
DOMAIN-SUFFIX,360buyimg.com,DIRECT
DOMAIN-SUFFIX,36kr.com,DIRECT
DOMAIN-SUFFIX,acfun.tv,DIRECT
DOMAIN-SUFFIX,air-matters.com,DIRECT
DOMAIN-SUFFIX,aixifan.com,DIRECT
DOMAIN-KEYWORD,alicdn,DIRECT
DOMAIN-KEYWORD,alipay,DIRECT
DOMAIN-KEYWORD,aliyun,DIRECT
DOMAIN-KEYWORD,taobao,DIRECT
DOMAIN-SUFFIX,amap.com,DIRECT
DOMAIN-SUFFIX,autonavi.com,DIRECT
DOMAIN-KEYWORD,baidu,DIRECT
DOMAIN-SUFFIX,bdimg.com,DIRECT
DOMAIN-SUFFIX,bdstatic.com,DIRECT
DOMAIN-SUFFIX,bilibili.com,DIRECT
DOMAIN-SUFFIX,bilivideo.com,DIRECT
DOMAIN-SUFFIX,caiyunapp.com,DIRECT
DOMAIN-SUFFIX,clouddn.com,DIRECT
DOMAIN-SUFFIX,cnbeta.com,DIRECT
DOMAIN-SUFFIX,cnbetacdn.com,DIRECT
DOMAIN-SUFFIX,cootekservice.com,DIRECT
DOMAIN-SUFFIX,csdn.net,DIRECT
DOMAIN-SUFFIX,ctrip.com,DIRECT
DOMAIN-SUFFIX,dgtle.com,DIRECT
DOMAIN-SUFFIX,dianping.com,DIRECT
DOMAIN-SUFFIX,douban.com,DIRECT
DOMAIN-SUFFIX,doubanio.com,DIRECT
DOMAIN-SUFFIX,duokan.com,DIRECT
DOMAIN-SUFFIX,easou.com,DIRECT
DOMAIN-SUFFIX,ele.me,DIRECT
DOMAIN-SUFFIX,feng.com,DIRECT
DOMAIN-SUFFIX,fir.im,DIRECT
DOMAIN-SUFFIX,frdic.com,DIRECT
DOMAIN-SUFFIX,g-cores.com,DIRECT
DOMAIN-SUFFIX,godic.net,DIRECT
DOMAIN-SUFFIX,gtimg.com,DIRECT
DOMAIN-SUFFIX,hongxiu.com,DIRECT
DOMAIN-SUFFIX,hxcdn.net,DIRECT
DOMAIN-SUFFIX,iciba.com,DIRECT
DOMAIN-SUFFIX,ifeng.com,DIRECT
DOMAIN-SUFFIX,ifengimg.com,DIRECT
DOMAIN-SUFFIX,ipip.net,DIRECT
DOMAIN-SUFFIX,iqiyi.com,DIRECT
DOMAIN-SUFFIX,jd.com,DIRECT
DOMAIN-SUFFIX,jianshu.com,DIRECT
DOMAIN-SUFFIX,knewone.com,DIRECT
DOMAIN-SUFFIX,le.com,DIRECT
DOMAIN-SUFFIX,lecloud.com,DIRECT
DOMAIN-SUFFIX,lemicp.com,DIRECT
DOMAIN-SUFFIX,licdn.com,DIRECT
DOMAIN-SUFFIX,luoo.net,DIRECT
DOMAIN-SUFFIX,meituan.com,DIRECT
DOMAIN-SUFFIX,meituan.net,DIRECT
DOMAIN-SUFFIX,mi.com,DIRECT
DOMAIN-SUFFIX,miaopai.com,DIRECT
DOMAIN-SUFFIX,microsoft.com,DIRECT
DOMAIN-SUFFIX,microsoftonline.com,DIRECT
DOMAIN-SUFFIX,miui.com,DIRECT
DOMAIN-SUFFIX,miwifi.com,DIRECT
DOMAIN-SUFFIX,mob.com,DIRECT
DOMAIN-SUFFIX,netease.com,DIRECT
DOMAIN-SUFFIX,office.com,DIRECT
DOMAIN-KEYWORD,officecdn,DIRECT
DOMAIN-SUFFIX,office365.com,DIRECT
DOMAIN-SUFFIX,oschina.net,DIRECT
DOMAIN-SUFFIX,ppsimg.com,DIRECT
DOMAIN-SUFFIX,pstatp.com,DIRECT
DOMAIN-SUFFIX,qcloud.com,DIRECT
DOMAIN-SUFFIX,qdaily.com,DIRECT
DOMAIN-SUFFIX,qdmm.com,DIRECT
DOMAIN-SUFFIX,qhimg.com,DIRECT
DOMAIN-SUFFIX,qhres.com,DIRECT
DOMAIN-SUFFIX,qidian.com,DIRECT
DOMAIN-SUFFIX,qihucdn.com,DIRECT
DOMAIN-SUFFIX,qiniu.com,DIRECT
DOMAIN-SUFFIX,qiniucdn.com,DIRECT
DOMAIN-SUFFIX,qiyipic.com,DIRECT
DOMAIN-SUFFIX,qq.com,DIRECT
DOMAIN-SUFFIX,qqurl.com,DIRECT
DOMAIN-SUFFIX,rarbg.to,DIRECT
DOMAIN-SUFFIX,ruguoapp.com,DIRECT
DOMAIN-SUFFIX,segmentfault.com,DIRECT
DOMAIN-SUFFIX,sinaapp.com,DIRECT
DOMAIN-SUFFIX,smzdm.com,DIRECT
DOMAIN-SUFFIX,snapdrop.net,DIRECT
DOMAIN-SUFFIX,sogou.com,DIRECT
DOMAIN-SUFFIX,sogoucdn.com,DIRECT
DOMAIN-SUFFIX,sohu.com,DIRECT
DOMAIN-SUFFIX,soku.com,DIRECT
DOMAIN-SUFFIX,speedtest.net,DIRECT
DOMAIN-SUFFIX,sspai.com,DIRECT
DOMAIN-SUFFIX,suning.com,DIRECT
DOMAIN-SUFFIX,taobao.com,DIRECT
DOMAIN-SUFFIX,tencent.com,DIRECT
DOMAIN-SUFFIX,tenpay.com,DIRECT
DOMAIN-SUFFIX,tianyancha.com,DIRECT
DOMAIN-KEYWORD,.tmall.com,DIRECT
DOMAIN-SUFFIX,tudou.com,DIRECT
DOMAIN-SUFFIX,umetrip.com,DIRECT
DOMAIN-SUFFIX,upaiyun.com,DIRECT
DOMAIN-SUFFIX,upyun.com,DIRECT
DOMAIN-SUFFIX,veryzhun.com,DIRECT
DOMAIN-SUFFIX,weather.com,DIRECT
DOMAIN-SUFFIX,weibo.com,DIRECT
DOMAIN-SUFFIX,xiami.com,DIRECT
DOMAIN-SUFFIX,xiami.net,DIRECT
DOMAIN-SUFFIX,xiaomicp.com,DIRECT
DOMAIN-SUFFIX,ximalaya.com,DIRECT
DOMAIN-SUFFIX,xmcdn.com,DIRECT
DOMAIN-SUFFIX,xunlei.com,DIRECT
DOMAIN-SUFFIX,yhd.com,DIRECT
DOMAIN-SUFFIX,yihaodianimg.com,DIRECT
DOMAIN-SUFFIX,yinxiang.com,DIRECT
DOMAIN-SUFFIX,ykimg.com,DIRECT
DOMAIN-SUFFIX,youdao.com,DIRECT
DOMAIN-SUFFIX,youku.com,DIRECT
DOMAIN-SUFFIX,zealer.com,DIRECT
DOMAIN-SUFFIX,zhihu.com,DIRECT
DOMAIN-SUFFIX,zhimg.com,DIRECT
DOMAIN-SUFFIX,zimuzu.tv,DIRECT
DOMAIN-SUFFIX,zoho.com,DIRECT
# 常见广告
DOMAIN-KEYWORD,admarvel,REJECT-TINYGIF
DOMAIN-KEYWORD,admaster,REJECT-TINYGIF
DOMAIN-KEYWORD,adsage,REJECT-TINYGIF
DOMAIN-KEYWORD,adsmogo,REJECT-TINYGIF
DOMAIN-KEYWORD,adsrvmedia,REJECT-TINYGIF
DOMAIN-KEYWORD,adwords,REJECT-TINYGIF
DOMAIN-KEYWORD,adservice,REJECT-TINYGIF
DOMAIN-SUFFIX,appsflyer.com,REJECT-TINYGIF
DOMAIN-KEYWORD,domob,REJECT-TINYGIF
DOMAIN-SUFFIX,doubleclick.net,REJECT-TINYGIF
DOMAIN-KEYWORD,duomeng,REJECT-TINYGIF
DOMAIN-KEYWORD,dwtrack,REJECT-TINYGIF
DOMAIN-KEYWORD,guanggao,REJECT-TINYGIF
DOMAIN-KEYWORD,lianmeng,REJECT-TINYGIF
DOMAIN-SUFFIX,mmstat.com,REJECT-TINYGIF
DOMAIN-KEYWORD,mopub,REJECT-TINYGIF
DOMAIN-KEYWORD,omgmta,REJECT-TINYGIF
DOMAIN-KEYWORD,openx,REJECT-TINYGIF
DOMAIN-KEYWORD,partnerad,REJECT-TINYGIF
DOMAIN-KEYWORD,pingfore,REJECT-TINYGIF
DOMAIN-KEYWORD,supersonicads,REJECT-TINYGIF
DOMAIN-KEYWORD,uedas,REJECT-TINYGIF
DOMAIN-KEYWORD,umeng,REJECT-TINYGIF
DOMAIN-KEYWORD,usage,REJECT-TINYGIF
DOMAIN-SUFFIX,vungle.com,REJECT-TINYGIF
DOMAIN-KEYWORD,wlmonitor,REJECT-TINYGIF
DOMAIN-KEYWORD,zjtoolbar,REJECT-TINYGIF
## 抗 DNS 污染
DOMAIN-KEYWORD,amazon,Proxy
DOMAIN-KEYWORD,google,Proxy
DOMAIN-KEYWORD,gmail,Proxy
DOMAIN-KEYWORD,youtube,Proxy
DOMAIN-KEYWORD,facebook,Proxy
DOMAIN-SUFFIX,fb.me,Proxy
DOMAIN-SUFFIX,fbcdn.net,Proxy
DOMAIN-KEYWORD,twitter,Proxy
DOMAIN-KEYWORD,instagram,Proxy
DOMAIN-KEYWORD,dropbox,Proxy
DOMAIN-SUFFIX,twimg.com,Proxy
DOMAIN-KEYWORD,blogspot,Proxy
DOMAIN-SUFFIX,youtu.be,Proxy
## 常见国外域名列表
DOMAIN-SUFFIX,9to5mac.com,Proxy
DOMAIN-SUFFIX,abpchina.org,Proxy
DOMAIN-SUFFIX,adblockplus.org,Proxy
DOMAIN-SUFFIX,adobe.com,Proxy
DOMAIN-SUFFIX,akamaized.net,Proxy
DOMAIN-SUFFIX,alfredapp.com,Proxy
DOMAIN-SUFFIX,amplitude.com,Proxy
DOMAIN-SUFFIX,ampproject.org,Proxy
DOMAIN-SUFFIX,android.com,Proxy
DOMAIN-SUFFIX,angularjs.org,Proxy
DOMAIN-SUFFIX,aolcdn.com,Proxy
DOMAIN-SUFFIX,apkpure.com,Proxy
DOMAIN-SUFFIX,appledaily.com,Proxy
DOMAIN-SUFFIX,appshopper.com,Proxy
DOMAIN-SUFFIX,appspot.com,Proxy
DOMAIN-SUFFIX,arcgis.com,Proxy
DOMAIN-SUFFIX,archive.org,Proxy
DOMAIN-SUFFIX,armorgames.com,Proxy
DOMAIN-SUFFIX,aspnetcdn.com,Proxy
DOMAIN-SUFFIX,att.com,Proxy
DOMAIN-SUFFIX,awsstatic.com,Proxy
DOMAIN-SUFFIX,azureedge.net,Proxy
DOMAIN-SUFFIX,azurewebsites.net,Proxy
DOMAIN-SUFFIX,bing.com,Proxy
DOMAIN-SUFFIX,bintray.com,Proxy
DOMAIN-SUFFIX,bit.com,Proxy
DOMAIN-SUFFIX,bit.ly,Proxy
DOMAIN-SUFFIX,bitbucket.org,Proxy
DOMAIN-SUFFIX,bjango.com,Proxy
DOMAIN-SUFFIX,bkrtx.com,Proxy
DOMAIN-SUFFIX,blog.com,Proxy
DOMAIN-SUFFIX,blogcdn.com,Proxy
DOMAIN-SUFFIX,blogger.com,Proxy
DOMAIN-SUFFIX,blogsmithmedia.com,Proxy
DOMAIN-SUFFIX,blogspot.com,Proxy
DOMAIN-SUFFIX,blogspot.hk,Proxy
DOMAIN-SUFFIX,bloomberg.com,Proxy
DOMAIN-SUFFIX,box.com,Proxy
DOMAIN-SUFFIX,box.net,Proxy
DOMAIN-SUFFIX,cachefly.net,Proxy
DOMAIN-SUFFIX,chromium.org,Proxy
DOMAIN-SUFFIX,cl.ly,Proxy
DOMAIN-SUFFIX,cloudflare.com,Proxy
DOMAIN-SUFFIX,cloudfront.net,Proxy
DOMAIN-SUFFIX,cloudmagic.com,Proxy
DOMAIN-SUFFIX,cmail19.com,Proxy
DOMAIN-SUFFIX,cnet.com,Proxy
DOMAIN-SUFFIX,cocoapods.org,Proxy
DOMAIN-SUFFIX,comodoca.com,Proxy
DOMAIN-SUFFIX,crashlytics.com,Proxy
DOMAIN-SUFFIX,culturedcode.com,Proxy
DOMAIN-SUFFIX,d.pr,Proxy
DOMAIN-SUFFIX,danilo.to,Proxy
DOMAIN-SUFFIX,dayone.me,Proxy
DOMAIN-SUFFIX,db.tt,Proxy
DOMAIN-SUFFIX,deskconnect.com,Proxy
DOMAIN-SUFFIX,disq.us,Proxy
DOMAIN-SUFFIX,disqus.com,Proxy
DOMAIN-SUFFIX,disquscdn.com,Proxy
DOMAIN-SUFFIX,dnsimple.com,Proxy
DOMAIN-SUFFIX,docker.com,Proxy
DOMAIN-SUFFIX,dribbble.com,Proxy
DOMAIN-SUFFIX,droplr.com,Proxy
DOMAIN-SUFFIX,duckduckgo.com,Proxy
DOMAIN-SUFFIX,dueapp.com,Proxy
DOMAIN-SUFFIX,dytt8.net,Proxy
DOMAIN-SUFFIX,edgecastcdn.net,Proxy
DOMAIN-SUFFIX,edgekey.net,Proxy
DOMAIN-SUFFIX,edgesuite.net,Proxy
DOMAIN-SUFFIX,engadget.com,Proxy
DOMAIN-SUFFIX,entrust.net,Proxy
DOMAIN-SUFFIX,eurekavpt.com,Proxy
DOMAIN-SUFFIX,evernote.com,Proxy
DOMAIN-SUFFIX,fabric.io,Proxy
DOMAIN-SUFFIX,fast.com,Proxy
DOMAIN-SUFFIX,fastly.net,Proxy
DOMAIN-SUFFIX,fc2.com,Proxy
DOMAIN-SUFFIX,feedburner.com,Proxy
DOMAIN-SUFFIX,feedly.com,Proxy
DOMAIN-SUFFIX,feedsportal.com,Proxy
DOMAIN-SUFFIX,fiftythree.com,Proxy
DOMAIN-SUFFIX,firebaseio.com,Proxy
DOMAIN-SUFFIX,flexibits.com,Proxy
DOMAIN-SUFFIX,flickr.com,Proxy
DOMAIN-SUFFIX,flipboard.com,Proxy
DOMAIN-SUFFIX,g.co,Proxy
DOMAIN-SUFFIX,gabia.net,Proxy
DOMAIN-SUFFIX,geni.us,Proxy
DOMAIN-SUFFIX,gfx.ms,Proxy
DOMAIN-SUFFIX,ggpht.com,Proxy
DOMAIN-SUFFIX,ghostnoteapp.com,Proxy
DOMAIN-SUFFIX,git.io,Proxy
DOMAIN-KEYWORD,github,Proxy
DOMAIN-SUFFIX,globalsign.com,Proxy
DOMAIN-SUFFIX,gmodules.com,Proxy
DOMAIN-SUFFIX,godaddy.com,Proxy
DOMAIN-SUFFIX,golang.org,Proxy
DOMAIN-SUFFIX,gongm.in,Proxy
DOMAIN-SUFFIX,goo.gl,Proxy
DOMAIN-SUFFIX,goodreaders.com,Proxy
DOMAIN-SUFFIX,goodreads.com,Proxy
DOMAIN-SUFFIX,gravatar.com,Proxy
DOMAIN-SUFFIX,gstatic.com,Proxy
DOMAIN-SUFFIX,gvt0.com,Proxy
DOMAIN-SUFFIX,hockeyapp.net,Proxy
DOMAIN-SUFFIX,hotmail.com,Proxy
DOMAIN-SUFFIX,icons8.com,Proxy
DOMAIN-SUFFIX,ifixit.com,Proxy
DOMAIN-SUFFIX,ift.tt,Proxy
DOMAIN-SUFFIX,ifttt.com,Proxy
DOMAIN-SUFFIX,iherb.com,Proxy
DOMAIN-SUFFIX,imageshack.us,Proxy
DOMAIN-SUFFIX,img.ly,Proxy
DOMAIN-SUFFIX,imgur.com,Proxy
DOMAIN-SUFFIX,imore.com,Proxy
DOMAIN-SUFFIX,instapaper.com,Proxy
DOMAIN-SUFFIX,ipn.li,Proxy
DOMAIN-SUFFIX,is.gd,Proxy
DOMAIN-SUFFIX,issuu.com,Proxy
DOMAIN-SUFFIX,itgonglun.com,Proxy
DOMAIN-SUFFIX,itun.es,Proxy
DOMAIN-SUFFIX,ixquick.com,Proxy
DOMAIN-SUFFIX,j.mp,Proxy
DOMAIN-SUFFIX,js.revsci.net,Proxy
DOMAIN-SUFFIX,jshint.com,Proxy
DOMAIN-SUFFIX,jtvnw.net,Proxy
DOMAIN-SUFFIX,justgetflux.com,Proxy
DOMAIN-SUFFIX,kat.cr,Proxy
DOMAIN-SUFFIX,klip.me,Proxy
DOMAIN-SUFFIX,libsyn.com,Proxy
DOMAIN-SUFFIX,linkedin.com,Proxy
DOMAIN-SUFFIX,linode.com,Proxy
DOMAIN-SUFFIX,lithium.com,Proxy
DOMAIN-SUFFIX,littlehj.com,Proxy
DOMAIN-SUFFIX,live.com,Proxy
DOMAIN-SUFFIX,live.net,Proxy
DOMAIN-SUFFIX,livefilestore.com,Proxy
DOMAIN-SUFFIX,llnwd.net,Proxy
DOMAIN-SUFFIX,macid.co,Proxy
DOMAIN-SUFFIX,macromedia.com,Proxy
DOMAIN-SUFFIX,macrumors.com,Proxy
DOMAIN-SUFFIX,mashable.com,Proxy
DOMAIN-SUFFIX,mathjax.org,Proxy
DOMAIN-SUFFIX,medium.com,Proxy
DOMAIN-SUFFIX,mega.co.nz,Proxy
DOMAIN-SUFFIX,mega.nz,Proxy
DOMAIN-SUFFIX,megaupload.com,Proxy
DOMAIN-SUFFIX,microsofttranslator.com,Proxy
DOMAIN-SUFFIX,mindnode.com,Proxy
DOMAIN-SUFFIX,mobile01.com,Proxy
DOMAIN-SUFFIX,modmyi.com,Proxy
DOMAIN-SUFFIX,msedge.net,Proxy
DOMAIN-SUFFIX,myfontastic.com,Proxy
DOMAIN-SUFFIX,name.com,Proxy
DOMAIN-SUFFIX,nextmedia.com,Proxy
DOMAIN-SUFFIX,nsstatic.net,Proxy
DOMAIN-SUFFIX,nssurge.com,Proxy
DOMAIN-SUFFIX,nyt.com,Proxy
DOMAIN-SUFFIX,nytimes.com,Proxy
DOMAIN-SUFFIX,omnigroup.com,Proxy
DOMAIN-SUFFIX,onedrive.com,Proxy
DOMAIN-SUFFIX,onenote.com,Proxy
DOMAIN-SUFFIX,ooyala.com,Proxy
DOMAIN-SUFFIX,openvpn.net,Proxy
DOMAIN-SUFFIX,openwrt.org,Proxy
DOMAIN-SUFFIX,orkut.com,Proxy
DOMAIN-SUFFIX,osxdaily.com,Proxy
DOMAIN-SUFFIX,outlook.com,Proxy
DOMAIN-SUFFIX,ow.ly,Proxy
DOMAIN-SUFFIX,paddleapi.com,Proxy
DOMAIN-SUFFIX,parallels.com,Proxy
DOMAIN-SUFFIX,parse.com,Proxy
DOMAIN-SUFFIX,pdfexpert.com,Proxy
DOMAIN-SUFFIX,periscope.tv,Proxy
DOMAIN-SUFFIX,pinboard.in,Proxy
DOMAIN-SUFFIX,pinterest.com,Proxy
DOMAIN-SUFFIX,pixelmator.com,Proxy
DOMAIN-SUFFIX,pixiv.net,Proxy
DOMAIN-SUFFIX,playpcesor.com,Proxy
DOMAIN-SUFFIX,playstation.com,Proxy
DOMAIN-SUFFIX,playstation.com.hk,Proxy
DOMAIN-SUFFIX,playstation.net,Proxy
DOMAIN-SUFFIX,playstationnetwork.com,Proxy
DOMAIN-SUFFIX,pushwoosh.com,Proxy
DOMAIN-SUFFIX,rime.im,Proxy
DOMAIN-SUFFIX,servebom.com,Proxy
DOMAIN-SUFFIX,sfx.ms,Proxy
DOMAIN-SUFFIX,shadowsocks.org,Proxy
DOMAIN-SUFFIX,sharethis.com,Proxy
DOMAIN-SUFFIX,shazam.com,Proxy
DOMAIN-SUFFIX,skype.com,Proxy
DOMAIN-SUFFIX,smartdnsProxy.com,Proxy
DOMAIN-SUFFIX,smartmailcloud.com,Proxy
DOMAIN-SUFFIX,sndcdn.com,Proxy
DOMAIN-SUFFIX,sony.com,Proxy
DOMAIN-SUFFIX,soundcloud.com,Proxy
DOMAIN-SUFFIX,sourceforge.net,Proxy
DOMAIN-SUFFIX,spotify.com,Proxy
DOMAIN-SUFFIX,squarespace.com,Proxy
DOMAIN-SUFFIX,sstatic.net,Proxy
DOMAIN-SUFFIX,st.luluku.pw,Proxy
DOMAIN-SUFFIX,stackoverflow.com,Proxy
DOMAIN-SUFFIX,startpage.com,Proxy
DOMAIN-SUFFIX,staticflickr.com,Proxy
DOMAIN-SUFFIX,steamcommunity.com,Proxy
DOMAIN-SUFFIX,symauth.com,Proxy
DOMAIN-SUFFIX,symcb.com,Proxy
DOMAIN-SUFFIX,symcd.com,Proxy
DOMAIN-SUFFIX,tapbots.com,Proxy
DOMAIN-SUFFIX,tapbots.net,Proxy
DOMAIN-SUFFIX,tdesktop.com,Proxy
DOMAIN-SUFFIX,techcrunch.com,Proxy
DOMAIN-SUFFIX,techsmith.com,Proxy
DOMAIN-SUFFIX,thepiratebay.org,Proxy
DOMAIN-SUFFIX,theverge.com,Proxy
DOMAIN-SUFFIX,time.com,Proxy
DOMAIN-SUFFIX,timeinc.net,Proxy
DOMAIN-SUFFIX,tiny.cc,Proxy
DOMAIN-SUFFIX,tinypic.com,Proxy
DOMAIN-SUFFIX,tmblr.co,Proxy
DOMAIN-SUFFIX,todoist.com,Proxy
DOMAIN-SUFFIX,trello.com,Proxy
DOMAIN-SUFFIX,trustasiassl.com,Proxy
DOMAIN-SUFFIX,tumblr.co,Proxy
DOMAIN-SUFFIX,tumblr.com,Proxy
DOMAIN-SUFFIX,tweetdeck.com,Proxy
DOMAIN-SUFFIX,tweetmarker.net,Proxy
DOMAIN-SUFFIX,twitch.tv,Proxy
DOMAIN-SUFFIX,txmblr.com,Proxy
DOMAIN-SUFFIX,typekit.net,Proxy
DOMAIN-SUFFIX,ubertags.com,Proxy
DOMAIN-SUFFIX,ublock.org,Proxy
DOMAIN-SUFFIX,ubnt.com,Proxy
DOMAIN-SUFFIX,ulyssesapp.com,Proxy
DOMAIN-SUFFIX,urchin.com,Proxy
DOMAIN-SUFFIX,usertrust.com,Proxy
DOMAIN-SUFFIX,v.gd,Proxy
DOMAIN-SUFFIX,v2ex.com,Proxy
DOMAIN-SUFFIX,vimeo.com,Proxy
DOMAIN-SUFFIX,vimeocdn.com,Proxy
DOMAIN-SUFFIX,vine.co,Proxy
DOMAIN-SUFFIX,vivaldi.com,Proxy
DOMAIN-SUFFIX,vox-cdn.com,Proxy
DOMAIN-SUFFIX,vsco.co,Proxy
DOMAIN-SUFFIX,vultr.com,Proxy
DOMAIN-SUFFIX,w.org,Proxy
DOMAIN-SUFFIX,w3schools.com,Proxy
DOMAIN-SUFFIX,webtype.com,Proxy
DOMAIN-SUFFIX,wikiwand.com,Proxy
DOMAIN-SUFFIX,wikileaks.org,Proxy
DOMAIN-SUFFIX,wikimedia.org,Proxy
DOMAIN-SUFFIX,wikipedia.com,Proxy
DOMAIN-SUFFIX,wikipedia.org,Proxy
DOMAIN-SUFFIX,windows.com,Proxy
DOMAIN-SUFFIX,windows.net,Proxy
DOMAIN-SUFFIX,wire.com,Proxy
DOMAIN-SUFFIX,wordpress.com,Proxy
DOMAIN-SUFFIX,workflowy.com,Proxy
DOMAIN-SUFFIX,wp.com,Proxy
DOMAIN-SUFFIX,wsj.com,Proxy
DOMAIN-SUFFIX,wsj.net,Proxy
DOMAIN-SUFFIX,xda-developers.com,Proxy
DOMAIN-SUFFIX,xeeno.com,Proxy
DOMAIN-SUFFIX,xiti.com,Proxy
DOMAIN-SUFFIX,yahoo.com,Proxy
DOMAIN-SUFFIX,yimg.com,Proxy
DOMAIN-SUFFIX,ying.com,Proxy
DOMAIN-SUFFIX,yoyo.org,Proxy
DOMAIN-SUFFIX,ytimg.com,Proxy
# Telegram
DOMAIN-SUFFIX,telegra.ph,Proxy
DOMAIN-SUFFIX,telegram.org,Proxy
IP-CIDR,91.108.4.0/22,Proxy,no-resolve
IP-CIDR,91.108.8.0/21,Proxy,no-resolve
IP-CIDR,91.108.16.0/22,Proxy,no-resolve
IP-CIDR,91.108.56.0/22,Proxy,no-resolve
IP-CIDR,149.154.160.0/20,Proxy,no-resolve
IP-CIDR6,2001:67c:4e8::/48,Proxy,no-resolve
IP-CIDR6,2001:b28:f23d::/48,Proxy,no-resolve
IP-CIDR6,2001:b28:f23f::/48,Proxy,no-resolve
# Google 中国服务 services.googleapis.cn
IP-CIDR,120.232.181.162/32,Proxy,no-resolve

View File

@ -1,6 +1,6 @@
git fetch --all && git reset --hard origin/master && git pull origin master
rm -rf composer.lock composer.phar
wget https://getcomposer.org/download/2.0.13/composer.phar
wget https://github.com/composer/composer/releases/latest/download/composer.phar -O composer.phar
php composer.phar update -vvv
php artisan v2board:update
php artisan config:cache

View File

@ -1,6 +1,7 @@
git fetch --all && git reset --hard origin/dev && git pull origin dev
git checkout dev
rm -rf composer.lock composer.phar
wget https://getcomposer.org/download/2.0.13/composer.phar
wget https://github.com/composer/composer/releases/latest/download/composer.phar -O composer.phar
php composer.phar update -vvv
php artisan v2board:update
php artisan config:cache