前言

前文讲解如何使用FlexGet订阅IRC,其中提到

有的站点的announce频道为公开频道;有的站点的为私密频道,需要借助key或提前注册好nickname以便机器人进入频道

应对以上情形,本文讲解作者遇到的两种验证形式以及一种可能出现的形式,以供参考

同时某站新开#announce频道,借此机会简单写写如何写一个.tracker模板~

三种验证方式

站点一般要求机器人nickname与sitename有所关联

假设sitename为starboy,机器人就取名为starboy_bot

密钥验证

  • 获取IRCkey与“接头”机器人

    通常使用密钥验证的频道都会在控制面板或IRC页中有类似IRCkey信息,这是重要凭证请妥善保管!如果找不到可以查看查看站内Wiki中IRC的说明

    说明中有“接头”机器人的nickname以及暗号,类似如图

  • 配置

    根据站点提供方式不同,invite_message形式不同,请按需选择

    irc:
      irckey_irc:
        passkey: '你的passkey'
        nickname: 'starboy_bot'
        # 与其他不同验证不同之处在于需要invite_nickname与invite_message
        invite_nickname: '接头机器人nickname'
        # 根据站点提供方式不同,invite_message形式不同
        invite_message: 'identify 你的IRCkey'
        invite_message: 'IRC页提供的暗号'
        tracker_file: 'irckey.tracker'
        port: 6697
        use_ssl: yes
        channels: ["#announce"]
        task: just_a_task

nickname验证

nickname需要先行注册,需要一个客户端登录IRC

  • 安装IRC客户端

    这里推荐客户端thelounge连接IRC,使用Docker安装

    docker run --detach \
                 --name thelounge \
                 --publish 19000:9000 \
                 --volume ~/.thelounge:/var/opt/thelounge \
                 --restart always \
                 thelounge/thelounge:latest

    docker-compose请使用此模板,请根据自身修改 19000 以及 ~/.thelounge

    启动thelounge后,需要为thelounge添加一个登录账户

    docker exec --user node -it thelounge thelounge add MyUser

    MyUser可以改为你想要的用户名,回车输入后会要求设置一个密码

  • 登录IRC

    访问 http://<Docker所在设备IP>:19000,使用上一步设置的用户名以及密码登录

    而后会出现下面的界面,按右侧解释填入,首次登录时认证处请勾选无需认证

    设置完毕后点击Connect,连接成功后会出现类似于这样的信息

    Untitled

    接下来需要先将自己的nickname注册上,在页面下方聊天框输入

    /msg NickServ REGISTER 密码 邮箱

    请将 密码邮箱 替换为自己的,请务必记住密码!

    注册完毕后,推荐断开与服务器的连接并重新连接,验证自己的nickname是否已经注册成功

    本次登录就可以使用 Authentication - Username+password,并填入username与设置的密码的方式进行认证,或者依旧保持 No authentication 并使用命令认证

    /msg NickServ IDENTIFY starboy 密码

    请将 starboy 与 密码 替换为自己的

  • 为机器人注册nickname

    在上一步登录后,在聊天框内依次输入

    /nick starboy_bot
    /msg NickServ IDENTIFY starboy 密码
    /msg NickServ GROUP

    这样就完成了机器人nickname与你的nickname的绑定

  • 配置

    irc:
      nickname_irc:
        passkey: '你的passkey'
        nickname: 'starboy_bot'
        # 与其他不同验证不同之处在于需要nickserv_password
        nickserv_password: '你的IRC密码'
        tracker_file: 'nickname.tracker'
        port: 6697
        use_ssl: yes
        channels: ["#announce"]
        task: just_a_task

密码验证

目前还没发现有站点使用该种方式认证,但既然irc_bot插件支持,就提及下

  • 获取频道+频道密码

    通常使用频道密码的都会在站内Wiki中IRC的说明有频道+频道密码信息

  • 配置

    irc:
      password_irc:
        passkey: '你的passkey'
        nickname: 'starboy_bot'
        tracker_file: 'password.tracker'
        port: 6697
        use_ssl: yes
        # 与其他不同验证不同之处在于需要channels内输入密码
        channels: ["#announce 频道密码"]
        task: just_a_task

.tracker模板

由于各站Announce信息不同,模板所需要定义到的参数也不同,为了信息(装逼)最大化,将会尽可能多的使用模块获取及处理参数,在自己写的时候可以视情况删减

注意xml语法类似于html,需要有开始标签起始、结束标签终止

  • trackerinfo

    <trackerinfo
        type="站点缩写"
        shortName="站点缩写"
        longName="站点全程"
        siteName="">

    如果不想填写可以留空

  • <settings></settings>

      <settings>
            <description text="Copy your passkey from the control panel and paste it in the field below."/>
            <passkey/>
        </settings>

    Description内容主要是给irssl配置看的,毕竟模板是给autodl-irssi用的,但依然建议写上作为提醒

  • <servers></servers>

    <servers>
            <server
                network=""
                serverNames="站点IRC地址"
                channelNames="#站点announce"
                announcerNames="announce机器人名"
                />
    </servers>

    serverNames及channleNames均由站点提供,announce机器人需要加入频道观察

  • <parseinfo>

    以某站为例,它的announce信息是这样的

    Web-DL / HEVC Dolby Vision / 1080p - Pamela a love story 2023 1080p NF WEB-DL DDP 5.1 DV HDR H.265-FLUX - 2.57 GiB - https://某站/details.php?id=549527

    大致可以分为 介质 / 编码 / 分辨率 - 种子名 - 体积 - 种子链接

    那么需要正则去匹配它,将其一截截获取到

    • <linepatterns>

      <linepatterns>
         <extract>
            <regex value="^(.*) - (.*?) - (.*) - https?:\/\/(.*\/).*?id=(\d+)$"/>
            <vars>
               <var name="$releaseTags"/>
               <var name="torrentName"/>
               <var name="$torrentSize"/>
               <var name="$baseUrl"/>
               <var name="$torrentId"/>
            </vars>
         </extract>
      </linepatterns>

      $releaseTags:Announce中截取的标签,之后会进一步处理

      torrentName:Announce中截取的种子名

      $torrentSize:Announce中截取的种子体积

      $baseUrl:Announce中截取的站点网址

      $torrentId:Announce中截取的种子id

    • <linematched>
    <linematched>
       <extracttags srcvar="$releaseTags" split="/">
          <setvarif varName="source" regex="^(?:UHD Blu-ray|Blu-ray|Web-DL)$"/>
          <setvarif varName="codec" regex="^(?:(HEVC\s(?:Dolby Vision|10bit)))$"/>
          <setvarif varName="resolution" regex="^(?:2160p|1080p)$"/>
          <!--Ignored-->
          <regex value=""/>
          </extracttags>
        <!--https://base.url/download.php?id=<id>&passkey=<passkey>-->
          <var name="torrentUrl">
          <string value="https://"/>
          <var name="$baseUrl"/>
          <string value="download.php?id="/>
          <var name="$torrentId"/>
          <string value="&amp;passkey="/>
          <var name="passkey"/>
          </var>
    </linematched>

    <extracttags 主要用来处理先前截取到的标签信息,这里把他分为了三个部分 source/codec/resolution。一般都能在搜索箱的分类中找到这些定义

    <!--https://base.url/download.php?id=<id>&passkey=<passkey>--> 作为下载链接的范例,np架构的站点普遍为这种样式,往下的内容就是拼接下载链接的过程,拼接成范例的样子

    其中有一个&amp;可能让人疑惑,这是xml语法中的转义,可以参考这里

  • <ignore>

    没啥需要忽略的,留空即可,但必须要有<ignore>

  • 完整配置

    以上就是全部模板内容了,就不贴完整代码了,用截图示意,请注意结束标签和缩进!

特别感谢

FlexGet/irc

mkgeeky/autodl-trackers