Crabpt-Torrent-Assistant

蟹黄堡审种

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

// ==UserScript==
// @name         Crabpt-Torrent-Assistant
// @namespace    http://tampermonkey.net/
// @version      1.1
// @description  蟹黄堡审种
// @author       crab
// @icon         https://www.google.com/s2/favicons?sz=64&domain=crabpt.vip
// @match        *://*.crabpt.vip/details.php*
// @match        *://*.crabpt.vip/web/torrent-approval-page?torrent_id=*
// @require      https://mirrors.sustech.edu.cn/cdnjs/ajax/libs/jquery/3.5.1/jquery.min.js

// @grant        none
// @license      MIT
// ==/UserScript==

/**
 * Edit by Kesa Gisen
 * 需求:
 * 1. 主标题不能含有中文
 * 2. 未选择/错误选择媒介
 * 3. 未选择/错误选择音视频编码
 * 4. 未选择/错误选择分辨率 (主标题有4K 或者 2160p 两个东西, 算一个判断)
 * 5. 不搞制作组检测了 (一开始的需求是: 未选择/错误选择制作组)
 * 6. 是否有在做种
 * 7. 把检测结果直接填写在种子评论区吗
 */

(function () {
    'use strict';

    /**种子分类 */
    const cat_constant = {
        401: 'Movies电影',
        402: 'TV Series电视剧',
        403: 'TV Shows综艺',
        404: 'Documentaries纪录片',
        405: 'Animations动漫',
        406: 'Music Videos',
        407: 'Sports体育',
        408: 'HQ Audio音乐',
        409: 'Others其他',
        410: 'Games游戏',
        411: 'Study学习',
        412: 'Ebook电子书',
        413: 'Audiobook有声书',
        414: 'Playlet短剧',
        415: 'Cartoon漫画'
    };

    /**媒介类型 */
    const type_constant = {
        1: 'UHD',
        2: 'Blu-ray',
        3: 'Remux',
        4: 'HD DVD',
        5: 'HDTV',
        6: 'WEB-DL',
        7: 'Webrip',
        8: 'DVD',
        9: 'CD',
        10: 'Encode',
        11: 'Other',
        12: 'ZIP',
        13: 'EPUB/AZW3/MOBI'
    };

    /**视频编码类型 */
    const encode_constant = {
        1: 'H.264/AVC',
        2: 'H.265/HEVC',
        5: 'VC-1',
        6: 'MPEG-2',
        7: 'Other',
        11: 'AV1',
        12: 'VP9',
        13: 'H.266/VVC',
        14: 'AVS3',
        15: 'AVS+'
    };

    /**音频编码类型 */
    const audio_constant = {
        1: 'DTS-HD MA',
        2: 'TrueHD',
        3: 'LPCM',
        4: 'DTS',
        5: 'DD/AC3',
        6: 'AAC',
        7: 'FLAC',
        8: 'APE',
        9: 'WAV',
        10: 'MP3',
        11: 'M4A',
        12: 'Other',
        13: 'Opus',
        14: 'DDP/EAC3',
        15: 'DTS-X',
        16: 'AV3A',
        17: 'AVSA'
    };

    /**分辨率 */
    const resolution_constant = {
        1: '2160p/4K',
        2: '1080p',
        3: '1080i',
        4: '720p',
        5: 'Others',
        6: '4320/8K'
    };

    /**制作组 */
    const group_constant = {
        1: 'Other',
        2: 'CHD',
        3: 'HDS',
        4: 'WiKi',
        5: 'OurBits',
        6: 'XHB',
        7: 'FRDS'
    };

    $ = jQuery;

    // 1. 从标题筛选信息------------------------------------------------------------
    let title = $('#top').text();
    console.log('原始title: ', title);

    title = title
        .replace("[免费]", "")
        .replace("[2X免费]", "")
        .replace("[2xfree]", "")
        .replace("[50%]", "")
        .replace(/剩余时间.*$/, "")
        .trim();
    console.log('过滤后title: ', title);

    let title_lowercase = title.toLowerCase();

    /**标题_媒介类型 */
    let title_type;
    /**标题_视频编码 */
    let title_encode;
    /**标题_音频编码 */
    let title_audio;
    /**标题_分辨率 */
    let title_resolution;
    /**标题_制作组 */
    let title_group;
    /**标题_不晓得 */
    let title_is_complete;
    /**标题_未检测到警告 (NOTE: 使用位运算标记) */
    let title_warn_no = 0;

    // medium
    if (title_lowercase.indexOf("remux") !== -1) {
        title_type = 3;
    }
    else if (title_lowercase.indexOf("x264") !== -1
        || title_lowercase.indexOf("x265") !== -1) {
        title_type = 10;
        title_resolution = 5;
    }
    else if (title_lowercase.indexOf("hdtv") !== -1) {
        title_type = 5;
    }
    else if (title_lowercase.indexOf("uhd") !== -1) {
        title_type = 1;
    }
    else if (title_lowercase.indexOf("hddvd") !== -1
        || title_lowercase.indexOf("hd dvd") !== -1) {
        title_type = 4;
    }
    else if (title_lowercase.indexOf("blu-ray") !== -1
        || title_lowercase.indexOf("bluray") !== -1) {
        title_type = 2;
    }
    else if (title_lowercase.indexOf("web-dl") !== -1) {
        title_type = 6;
    }
    else if (title_lowercase.indexOf("webrip") !== -1) {
        title_type = 7;
    }
    else if (title_lowercase.indexOf("dvd") !== -1) {
        title_type = 8;
    }
    else if (title_lowercase.indexOf("cd") !== -1) {
        title_type = 9;
    }
    else if (title_lowercase.indexOf("zip") !== -1) {
        title_type = 12;
    }
    else if (title_lowercase.indexOf("epub") !== -1
        || title_lowercase.indexOf("azw3") !== -1
        || title_lowercase.indexOf("mobi") !== -1) {
        title_type = 13;
    }
    else {
        title_type = 11;
    }

    // video encode
    if (title_lowercase.indexOf("h.264") !== -1
        || title_lowercase.indexOf("avc") !== -1) {
        title_encode = 1;
    }
    else if (title_lowercase.indexOf("h.265") !== -1
        || title_lowercase.indexOf("hevc") !== -1) {
        title_encode = 2;
    }
    else if (title_lowercase.indexOf("vc-1") !== -1) {
        title_encode = 5;
    }
    else if (title_lowercase.indexOf("mpeg-2") !== -1) {
        title_encode = 6;
    }
    else if (title_lowercase.indexOf("av1") !== -1) {
        title_encode = 11;
    }
    else if (title_lowercase.indexOf("vp9") !== -1) {
        title_encode = 12;
    }
    else if (title_lowercase.indexOf("h.266") !== -1
        || title_lowercase.indexOf("vvc") !== -1) {
        title_encode = 13;
    }
    else if (title_lowercase.indexOf("avs3") !== -1) {
        title_encode = 14;
    }
    else if (title_lowercase.indexOf("avs+") !== -1) {
        title_encode = 15;
    }
    else {
        title_encode = 7;
    }

    // audio encode
    if (title_lowercase.indexOf("dts-hd ma") !== -1) {
        title_audio = 1;
    }
    else if (title_lowercase.indexOf("truehd") !== -1) {
        title_audio = 2;
    }
    else if (title_lowercase.indexOf("lpcm") !== -1) {
        title_audio = 3;
    }
    else if (title_lowercase.indexOf("dts") !== -1) {
        title_audio = 4;
    }
    else if (title_lowercase.indexOf("dd") !== -1
        || title_lowercase.indexOf("ac3") !== -1) {
        title_audio = 5;
    }
    else if (title_lowercase.indexOf("aac") !== -1) {
        title_audio = 6;
    }
    else if (title_lowercase.indexOf("flac") !== -1) {
        title_audio = 7;
    }
    else if (title_lowercase.indexOf("ape") !== -1) {
        title_audio = 8;
    }
    else if (title_lowercase.indexOf("wav") !== -1) {
        title_audio = 9;
    }
    else if (title_lowercase.indexOf("mp3") !== -1) {
        title_audio = 10;
    }
    else if (title_lowercase.indexOf("m4a") !== -1) {
        title_audio = 11;
    }
    else if (title_lowercase.indexOf("opus") !== -1) {
        title_audio = 13;
    }
    else if (title_lowercase.indexOf("ddp") !== -1
        || title_lowercase.indexOf("eac3") !== -1) {
        title_audio = 14;
    }
    else if (title_lowercase.indexOf("dts-x") !== -1) {
        title_audio = 15;
    }
    else if (title_lowercase.indexOf("av3a") !== -1) {
        title_audio = 16;
    }
    else if (title_lowercase.indexOf("avsa") !== -1) {
        title_audio = 17;
    }
    else {
        title_audio = 12;
    }

    // resolution
    if (title_lowercase.indexOf("2160p") !== -1
        || title_lowercase.indexOf("4k") !== -1) {
        title_resolution = 1;
    }
    else if (title_lowercase.indexOf("1080p") !== -1) {
        title_resolution = 2;
    }
    else if (title_lowercase.indexOf("1080i") !== -1) {
        title_resolution = 3;
    }
    else if (title_lowercase.indexOf("720p") !== -1) {
        title_resolution = 4;
    }
    else if (title_lowercase.indexOf("4320") !== -1
        || title_lowercase.indexOf("8k") !== -1) {
        title_resolution = 6;
    }
    else {
        title_resolution = 5;
    }

    // group
    if (title_lowercase.indexOf("frds") !== -1) {
        title_group = 7;
    }
    else if (title_lowercase.indexOf("xhb") !== -1) {
        title_group = 6;
    }
    else if (title_lowercase.indexOf("ourbits") !== -1) {
        title_group = 5;
    }
    else if (title_lowercase.indexOf("wiki") !== -1) {
        title_group = 4;
    }
    else if (title_lowercase.indexOf("hds") !== -1) {
        title_group = 3;
    }
    else if (title_lowercase.indexOf("chd") !== -1) {
        title_group = 2;
    }
    else {
        title_group = 1;
    }

    // 2. 检查标题异常------------------------------------------------------------
    // 检查标题是否含有中文
    if (/[\u4e00-\u9fa5]/.test(title)) {
        title_warn_no |= 1;
    }

    // 检查媒介类型
    if (!type_constant[title_type]) {
        title_warn_no |= 2;
    }

    // 检查音视频编码
    if (!encode_constant[title_encode]) {
        title_warn_no |= 4;
    }
    if (!audio_constant[title_audio]) {
        title_warn_no |= 8;
    }

    // 检查分辨率
    if (!resolution_constant[title_resolution]) {
        title_warn_no |= 16;
    }

    // 检查做种状态
    let is_seeding = $('.gistop-right').text().indexOf('正在做种') !== -1;

    // 3. 生成报告------------------------------------------------------------
    let report = '';

    // 标题信息
    report += `标题: ${title}\n`;
    report += `媒介类型: ${type_constant[title_type] || '未知'}\n`;
    report += `视频编码: ${encode_constant[title_encode] || '未知'}\n`;
    report += `音频编码: ${audio_constant[title_audio] || '未知'}\n`;
    report += `分辨率: ${resolution_constant[title_resolution] || '未知'}\n`;
    report += `制作组: ${group_constant[title_group] || '未知'}\n`;

    // 检查结果
    if (title_warn_no === 0) {
        report += '检查结果: 正常\n';
    } else {
        report += '检查结果: 异常\n';
        if (title_warn_no & 1) {
            report += '- 标题含有中文\n';
        }
        if (title_warn_no & 2) {
            report += '- 未选择或错误选择媒介类型\n';
        }
        if (title_warn_no & 4) {
            report += '- 未选择或错误选择视频编码\n';
        }
        if (title_warn_no & 8) {
            report += '- 未选择或错误选择音频编码\n';
        }
        if (title_warn_no & 16) {
            report += '- 未选择或错误选择分辨率\n';
        }
    }

    report += `是否正在做种: ${is_seeding ? '是' : '否'}\n`;

    console.log(report);

    // 4. 将报告填写到评论区------------------------------------------------------------
    let comment = $('textarea[name="text"]');
    if (comment.length) {
        comment.val(report);
    }
})();