{
  "version": "https://jsonfeed.org/version/1.1",
  "title": "Siyu Lei's Blog",
  "home_page_url": "https://leisiyu.dev/",
  "feed_url": "https://leisiyu.dev/feed.json",
  "description": "Siyu Lei's Blog",
  "items": [
    {
      "title": "G502(X)通用射击游戏宏V2",
      "url": "https://leisiyu.dev/articles/Ghub_Shoot_game_Macros.html",
      "id": "https://leisiyu.dev/articles/Ghub_Shoot_game_Macros.html",
      "summary": "射击游戏G502/G502X通用宏",
      "content_html": "<p class=\"textkai\">射击游戏G502/G502X通用宏</p>\n<!-- more -->\n<p>仅在G502X上测试过，使用G HUB版本为2025.2.687008。</p>\n<p>必须安装G HUB，其他罗技鼠标可能在修改键位后兼容。</p>\n<h3>简介</h3>\n<p>通过鼠标滚轮左G10（-）右G11（+）来控制自动压枪力度</p>\n<p>通过按住射击精度键G6的方式切换修改垂直/水平后座，按下以在控制台显示当前速率和工作状态，双击以重置默认值。</p>\n<p>通过内存切换键G9开关此宏</p>\n<p>基础代码借鉴自Bilibili@第一局永远tec-9</p>\n<h3>关于版权</h3>\n<p>原作者声明放弃版权公开，但此修改版保留版权并根据<a href=\"https://creativecommons.org/licenses/by-nc-sa/4.0/\" target=\"_blank\" rel=\"noopener noreferrer\">署名-非商业性-相同方式分享 4.0 国际 CC BY-NC-SA 4.0</a>许可.</p>\n<p>特对商业性使用定义：</p>\n<p>未经作者明确许可，您不得出售、授权或以其他方式收取此代码的费用，包括但不限于销售软件或将其纳入商业产品产生盈利的部分（例如收费使用或者要求关注等行为）。</p>\n<h3>代码</h3>\n<div class=\"language-lua line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"lua\" data-title=\"lua\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code><span class=\"line\"><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">EnablePrimaryMouseButtonEvents</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">-- ===== 用户可调参数（常量） =====</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">-- 按键映射</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">KEY_TOGGLE</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">   = </span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">9</span><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">   -- 总开关（按一次切换 ON/OFF）</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">KEY_MODE</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">     = </span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">5</span><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">   -- 调整模式（按住进入水平调整，释放退出）</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">KEY_INCREASE</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> = </span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">8</span><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">   -- 增加速度（垂直或水平）</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">KEY_DECREASE</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> = </span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">7</span><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">   -- 降低速度（垂直或水平）</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">-- 速度初始值及步长</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">INIT_SPEED</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">   = </span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">7.5</span><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">   -- 默认垂直速度</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">INIT_HORI</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    = </span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">0.0</span><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">    -- 默认水平速度</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">VERT_STEP</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    = </span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">1.5</span><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">    -- 垂直调整步长</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">HORI_STEP</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    = </span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">0.5</span><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">    -- 水平调整步长</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">-- 双击重置阈值（毫秒）</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">DOUBLE_CLICK_MS</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> = </span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">300</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">-- 总开关默认状态true/false</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">k</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">     = </span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">true</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">-- ===== 运行状态变量（勿动） =====</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">speed</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> = </span><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">INIT_SPEED</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">hori</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">  = </span><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">INIT_HORI</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">adjustHorizontal</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> = </span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">false</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">lastPressMode</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> = </span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">0</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">-- ============================================</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">function</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\"> OnEvent</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#383A42;--shiki-light-font-style:inherit;--shiki-dark:#ABB2BF;--shiki-dark-font-style:italic\">event</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#383A42;--shiki-light-font-style:inherit;--shiki-dark:#ABB2BF;--shiki-dark-font-style:italic\">arg</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">    -- OutputLogMessage(\"Event: \" .. event .. \" Arg: \" .. arg .. \"\\n\")</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">    -- 需要调整按键删除面一行的“-- ”保存后点击即可获得当前按键代号，替换设置中的对应值即可</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    if</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (</span><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">event</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> == </span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"MOUSE_BUTTON_PRESSED\" </span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">and </span><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">arg</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> == </span><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">KEY_TOGGLE</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">then</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">        k</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> = not </span><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">k</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">        if</span><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\"> k</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> then</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\"> OutputLogMessage</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"ON</span><span style=\"--shiki-light:#0184BC;--shiki-dark:#56B6C2\">\\n</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">else</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\"> OutputLogMessage</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"OFF</span><span style=\"--shiki-light:#0184BC;--shiki-dark:#56B6C2\">\\n</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">end</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    end</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    if</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (</span><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">event</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> == </span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"MOUSE_BUTTON_PRESSED\" </span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">and </span><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">arg</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> == </span><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">KEY_MODE</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">then</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">        local</span><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\"> currentTime</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> = </span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">GetRunningTime</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">()</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">        if</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (</span><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">currentTime</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> - </span><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">lastPressMode</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> &lt; </span><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">DOUBLE_CLICK_MS</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">then</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">            speed</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> = </span><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">INIT_SPEED</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">            hori</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">  = </span><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">INIT_HORI</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">            adjustHorizontal</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> = </span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">false</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">            OutputLogMessage</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"Reset to default: vertical=%.1f, horizontal=%.1f</span><span style=\"--shiki-light:#0184BC;--shiki-dark:#56B6C2\">\\n</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">INIT_SPEED</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">INIT_HORI</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">            lastPressMode</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> = </span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">0</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">        else</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">            adjustHorizontal</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> = </span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">true</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">            OutputLogMessage</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"Horizontal adjustment mode activated</span><span style=\"--shiki-light:#0184BC;--shiki-dark:#56B6C2\">\\n</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">            lastPressMode</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> = </span><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">currentTime</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">        end</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    end</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    if</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (</span><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">event</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> == </span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"MOUSE_BUTTON_RELEASED\" </span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">and </span><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">arg</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> == </span><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">KEY_MODE</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">then</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">        adjustHorizontal</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> = </span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">false</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">        OutputLogMessage</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"Current vertical speed: %.1f</span><span style=\"--shiki-light:#0184BC;--shiki-dark:#56B6C2\">\\n</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">speed</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">        OutputLogMessage</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"Current horizontal speed: %.1f</span><span style=\"--shiki-light:#0184BC;--shiki-dark:#56B6C2\">\\n</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">hori</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">        if</span><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\"> k</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> then</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\"> OutputLogMessage</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"ON</span><span style=\"--shiki-light:#0184BC;--shiki-dark:#56B6C2\">\\n</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">else</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\"> OutputLogMessage</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"OFF</span><span style=\"--shiki-light:#0184BC;--shiki-dark:#56B6C2\">\\n</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">end</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    end</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    if</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (</span><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">event</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> == </span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"MOUSE_BUTTON_PRESSED\" </span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">and </span><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">arg</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> == </span><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">KEY_INCREASE</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">then</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">        if</span><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\"> adjustHorizontal</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> then</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">            hori</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> = </span><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">hori</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> + </span><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">HORI_STEP</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">            OutputLogMessage</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"Horizontal speed increased to: %.1f</span><span style=\"--shiki-light:#0184BC;--shiki-dark:#56B6C2\">\\n</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">hori</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">        else</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">            speed</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> = </span><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">speed</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> + </span><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">VERT_STEP</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">            OutputLogMessage</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"Vertical speed increased to: %.1f</span><span style=\"--shiki-light:#0184BC;--shiki-dark:#56B6C2\">\\n</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">speed</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">        end</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    end</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    if</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> (</span><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">event</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> == </span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"MOUSE_BUTTON_PRESSED\" </span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">and </span><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">arg</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> == </span><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">KEY_DECREASE</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">then</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">        if</span><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\"> adjustHorizontal</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> then</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">            hori</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> = </span><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">hori</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> - </span><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">HORI_STEP</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">            OutputLogMessage</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"Horizontal speed decreased to: %.1f</span><span style=\"--shiki-light:#0184BC;--shiki-dark:#56B6C2\">\\n</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">hori</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">        else</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">            speed</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> = </span><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">speed</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> - </span><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">VERT_STEP</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">            OutputLogMessage</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"Vertical speed decreased to: %.1f</span><span style=\"--shiki-light:#0184BC;--shiki-dark:#56B6C2\">\\n</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">, </span><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">speed</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">        end</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    end</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    if</span><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\"> k</span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\"> then</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">        Sleep</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">5</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">        if</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\"> IsMouseButtonPressed</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">then</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">            if</span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\"> IsMouseButtonPressed</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">3</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">then</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">                MoveMouseRelative</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#0184BC;--shiki-dark:#56B6C2\">math.floor</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">hori</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> + </span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">0.5</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">), </span><span style=\"--shiki-light:#0184BC;--shiki-dark:#56B6C2\">math.floor</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">speed</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> + </span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">0.5</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">))</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">                repeat</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">                    Sleep</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">5</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">                    MoveMouseRelative</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#0184BC;--shiki-dark:#56B6C2\">math.floor</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">hori</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> + </span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">0.5</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">), </span><span style=\"--shiki-light:#0184BC;--shiki-dark:#56B6C2\">math.floor</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">speed</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> + </span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">0.5</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">))</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">                until</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> not </span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">IsMouseButtonPressed</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">1</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">) or not </span><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">IsMouseButtonPressed</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">(</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">3</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">)</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">            end</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">        end</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">    end</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">end</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><p>本文为作者 Siyu Lei 原创内容，转载请注明出处并附上原文链接。（leisiyu.dev）</p>\n",
      "date_published": "2026-06-24T00:00:00.000Z",
      "date_modified": "2026-09-05T05:11:46.000Z",
      "authors": [],
      "tags": [
        "技术分享"
      ]
    },
    {
      "title": "epilogue —— 桌面端 AI 文件工作流",
      "url": "https://leisiyu.dev/articles/epilogue.html",
      "id": "https://leisiyu.dev/articles/epilogue.html",
      "summary": "files, remembered. 不收集任何信息，所有数据留在本机。",
      "content_html": "<p class=\"textkai\"><strong>files, remembered.</strong> 不收集任何信息，所有数据留在本机。</p>\n<!-- more -->\n<h2>是什么</h2>\n<p><a href=\"https://github.com/lsy-404/epilogue\" target=\"_blank\" rel=\"noopener noreferrer\">epilogue</a> 是一款运行在 macOS / Windows / Linux 的桌面端 AI 文件工作流应用。核心设计理念是「本地优先」——配置、索引、向量全部存在本机，音视频转写默认本机完成，音频不出设备。</p>\n<h2>能做什么</h2>\n<p><strong>清理</strong>：定期扫描长期未动的过期文件，AI 按你的自然语言习惯给出归位建议，逐项确认后移动。理解成套内容（课件系列、便携软件、剧集）并整体归档，能利用目标文件夹的多层结构。</p>\n<p><strong>寻物</strong>：「上学期的实验报告放哪了？」一句话找回文件——关键字 / 相似度 / AI 问答三种模式，支持用文字描述找图片，理解「去年」「上周」等相对时间。</p>\n<p><strong>助手</strong>：内置对话智能体，可以改设置、把习惯记成规则（「以后发票都放 财务/」）、查文件。</p>\n<p><strong>可选自动化</strong>（默认关闭，仅可手动开启）：Solo 模式定时自动归类免审批；允许 AI 将无价值临时文件移入系统回收站。</p>\n<h2>AI 多 Provider 灾备架构</h2>\n<p>每类 AI 能力都是一个<strong>灾备列表</strong>（拖动排序、行级启用、一键测试），从上到下依次尝试：</p>\n<p>| 能力 | 内置预设 |\n|</p>\n",
      "date_published": "2026-06-11T00:00:00.000Z",
      "date_modified": "2026-09-05T05:11:46.000Z",
      "authors": [],
      "tags": [
        "开源项目"
      ]
    },
    {
      "title": "Waline On Worker —— Cloudflare Workers 评论系统",
      "url": "https://leisiyu.dev/articles/Waline_On_Worker.html",
      "id": "https://leisiyu.dev/articles/Waline_On_Worker.html",
      "summary": "Waline 评论系统的 Cloudflare Workers 实现，免服务器，免费部署。",
      "content_html": "<p class=\"textkai\">Waline 评论系统的 Cloudflare Workers 实现，免服务器，免费部署。</p>\n<!-- more -->\n<h2>是什么</h2>\n<p><a href=\"https://github.com/lsy-404/Waline_On_Worker\" target=\"_blank\" rel=\"noopener noreferrer\">Waline On Worker</a> 是将开源评论系统 <a href=\"https://waline.js.org/\" target=\"_blank\" rel=\"noopener noreferrer\">Waline</a> 完整移植到 Cloudflare Workers 平台的后端实现，使用 D1（SQLite）作为数据存储。</p>\n<p>相比官方 Vercel 部署方案，它：</p>\n<ul>\n<li>无需独立服务器，运行在 Cloudflare 边缘网络</li>\n<li>免费额度充足，适合个人博客</li>\n<li>完全兼容 <code>@waline/client</code> 前端和 <code>@waline/admin</code> 管理面板</li>\n</ul>\n<h2>技术栈</h2>\n<p>| 项目 | 选型 |\n|</p>\n",
      "date_published": "2026-06-05T00:00:00.000Z",
      "date_modified": "2026-09-05T05:11:46.000Z",
      "authors": [],
      "tags": [
        "开源项目"
      ]
    },
    {
      "title": "UofT-Tools —— 多伦多大学学生工具集",
      "url": "https://leisiyu.dev/articles/UofT_Tools.html",
      "id": "https://leisiyu.dev/articles/UofT_Tools.html",
      "summary": "非官方开源项目，为多大学生提供的实用工具合集。",
      "content_html": "<p class=\"textkai\">非官方开源项目，为多大学生提供的实用工具合集。</p>\n<!-- more -->\n<h2>是什么</h2>\n<p><a href=\"https://uoft.voidcarve.com\" target=\"_blank\" rel=\"noopener noreferrer\">UofT-Tools</a> 是为多伦多大学（University of Toronto）学生提供的开源工具集，部署于 uoft.voidcarve.com。</p>\n<p><strong>声明</strong>：本项目为独立学生项目，与多伦多大学官方无任何关联，重要信息请以大学官方网站为准。</p>\n<h2>包含工具</h2>\n<ul>\n<li><strong>课程日历</strong>：自动同步学期课程与考试时间表，支持导入到 iCal / Google Calendar</li>\n<li><strong>学期规划器</strong>：课程选择与时间规划辅助工具</li>\n</ul>\n<h2>技术架构</h2>\n<p>| 层级 | 选型 |\n|</p>\n",
      "date_published": "2026-04-03T00:00:00.000Z",
      "date_modified": "2026-09-05T05:11:46.000Z",
      "authors": [],
      "tags": [
        "开源项目"
      ]
    },
    {
      "title": "亲友画的神仙无偿迷迭香",
      "url": "https://leisiyu.dev/daliy/rosmontis_heizi.html",
      "id": "https://leisiyu.dev/daliy/rosmontis_heizi.html",
      "summary": "感谢回归线的老师@黒子画的无偿迷迭香，简直就是仙品~",
      "content_html": "<!-- more -->\n<p>感谢回归线的老师@黒子画的无偿迷迭香，简直就是仙品~</p>\n<p></p>\n<p></p>\n<p></p>\n<p></p>\n",
      "date_published": "2026-02-06T00:00:00.000Z",
      "date_modified": "2026-09-05T05:11:46.000Z",
      "authors": [],
      "tags": [
        "日常"
      ]
    },
    {
      "title": "Timberborn Mods Universal Translate —— 海狸浮生记 Mod AI 翻译框架 v2",
      "url": "https://leisiyu.dev/articles/Timberborn_Mods_Universal_Translate.html",
      "id": "https://leisiyu.dev/articles/Timberborn_Mods_Universal_Translate.html",
      "summary": "海狸浮生记 Steam 创意工坊 Mod AI 翻译框架，支持多语言自动化本地化。",
      "content_html": "<p class=\"textkai\">海狸浮生记 Steam 创意工坊 Mod AI 翻译框架，支持多语言自动化本地化。</p>\n<!-- more -->\n<h2>是什么</h2>\n<p><a href=\"https://github.com/lsy-404/Timberborn_Mods_Universal_Translate\" target=\"_blank\" rel=\"noopener noreferrer\">Timberborn Mods Universal Translate</a> 是为 Steam 游戏《海狸浮生记（Timberborn）》的创意工坊 Mod 提供的 AI 自动翻译框架（v2 版本），目标是让社区 Mod 能快速支持多语言。</p>\n<p>这是 <a href=\"https://github.com/lsy-404/Timberborn_Mods_zhCN_Translate\" target=\"_blank\" rel=\"noopener noreferrer\">v1 版本（zhCN）</a> 的完整重写，从仅支持中文汉化升级为通用多语言框架。</p>\n<h2>特性</h2>\n<ul>\n<li><strong>多语言支持</strong>：不限于中文，可扩展至任意语言</li>\n<li><strong>AI 驱动翻译</strong>：批量自动处理 Mod 本地化文件</li>\n<li><strong>多版本自动支持</strong>：自动适配游戏不同版本的 Mod</li>\n<li><strong>自动化发布流程</strong>：重构了构建与发布脚本，CI/CD 全自动</li>\n<li><strong>持续更新</strong>：订阅 Steam 创意工坊后可自动获取最新翻译</li>\n</ul>\n<h2>进展</h2>\n<p>v2 框架已发布并持续迭代（当前版本 v2026.6.x），正在推进数据 AI 聚合更新功能。</p>\n<p><a href=\"https://github.com/lsy-404/Timberborn_Mods_Universal_Translate\" target=\"_blank\" rel=\"noopener noreferrer\">GitHub →</a></p>\n<p>本文为作者 Siyu Lei 原创内容，转载请注明出处并附上原文链接。（leisiyu.dev）</p>\n",
      "date_published": "2025-11-21T00:00:00.000Z",
      "date_modified": "2026-09-05T05:11:46.000Z",
      "authors": [],
      "tags": [
        "开源项目"
      ]
    },
    {
      "title": "V宇宙词站（LRC）",
      "url": "https://leisiyu.dev/articles/LRC.html",
      "id": "https://leisiyu.dev/articles/LRC.html",
      "summary": "虚拟歌姬专辑信息导航与 LRC 歌词文件储存共享仓库。",
      "content_html": "<p class=\"textkai\">虚拟歌姬专辑信息导航与 LRC 歌词文件储存共享仓库。</p>\n<!-- more -->\n<h2>是什么</h2>\n<p><a href=\"https://lrc.voidcarve.com\" target=\"_blank\" rel=\"noopener noreferrer\">V宇宙词站</a> 是专注于 V 家（虚拟歌姬）专辑的歌词收录与共享站点，通过 GitHub 仓库进行版本管理与社区协作维护。</p>\n<h2>功能</h2>\n<ul>\n<li><strong>专辑导航</strong>：按专辑分类整理，支持快速检索</li>\n<li><strong>多种下载方式</strong>：可下载全库、单专辑包或单首歌曲</li>\n<li><strong>LRC 格式</strong>：标准歌词格式，兼容主流播放器与歌词插件</li>\n<li><strong>持续收录</strong>：目前已收录数十张专辑，涵盖言和、洛天依等 V 家歌手</li>\n</ul>\n<h2>已收录专辑（部分）</h2>\n<p>SEVEN、溯流、维·爱 L'amouЯ、光年回响、九光年宇宙、Twilights EP、深空余音、终梦 Journeyed on Everdream、夏浪派对 2025、秘宝旅人 II Polaris……</p>\n<p>完整列表见 <a href=\"https://github.com/lsy-404/LRC\" target=\"_blank\" rel=\"noopener noreferrer\">GitHub 仓库</a>。</p>\n<p><a href=\"https://github.com/lsy-404/LRC\" target=\"_blank\" rel=\"noopener noreferrer\">GitHub →</a> | <a href=\"https://lrc.voidcarve.com\" target=\"_blank\" rel=\"noopener noreferrer\">站点 →</a></p>\n<p>本文为作者 Siyu Lei 原创内容，转载请注明出处并附上原文链接。（leisiyu.dev）</p>\n",
      "date_published": "2025-09-19T00:00:00.000Z",
      "date_modified": "2026-09-05T05:11:46.000Z",
      "authors": [],
      "tags": [
        "开源项目"
      ]
    },
    {
      "title": "【避雷】成智留学学签续签欺诈",
      "url": "https://leisiyu.dev/daliy/ilearnincanada_cheat.html",
      "id": "https://leisiyu.dev/daliy/ilearnincanada_cheat.html",
      "summary": "微信ID：iLiCJohn 微信名称：John 🇨🇦 成智留学^_^ 收款邮箱：John.lee@ilearnincanada.com",
      "content_html": "<p>微信ID：iLiCJohn</p>\n<p>微信名称：John 🇨🇦 成智留学^<sup>_</sup>^</p>\n<p>收款邮箱：John.lee@ilearnincanada.com</p>\n<!-- more -->\n<p>事件概述：</p>\n<p>本人在与微信用户iLiCJohn（自称“成智留学”）协商学签续签服务过程中，遭遇其不透明收费、恶意扣款及拒绝退款的行为。对方在初期报价330加币全包服务，却在办理过程中额外索要150加币“签证申报费”，并在我提出质疑并协商取消服务时，以“时间已消耗”为由拒绝退款，甚至单方面终止服务并拉黑客户。</p>\n<h2>事件详细经过：</h2>\n<h3>本人2025年3月在微信上联系iLiCJohn，询问学签续签服务价格。</h3>\n<p>对方明确表示：“如果是朋友推荐的，服务费用是$330”，并未提及任何额外费用。</p>\n<p>基于这一报价，本人通过e-transfer于7月向John.lee@ilearnincanada.com转账330加币。</p>\n<p>对方告知我尚未进入加拿大境内，无法继续办理可以退款，我出于信任告知“你先收着吧，省的到时候再折腾了”。</p>\n<h3>2025年8月24日办理过程中突然加价</h3>\n<p>在提供全部所需身份材料后，对方突然告知330加币不包含“移民局申报费”150加币，要求额外支付。</p>\n<p>本人提出质疑，认为价格不透明且总额过高（合计480加币，常见中介服务费在150~200加币之间），并尝试协商取消服务并退款。</p>\n<h3>恶意拒绝退款并威胁</h3>\n<p>对方以“时间已消耗”为由拒绝退款，声称“已经没有退款可能”。</p>\n<p>甚至在本人提出协商方案（退300加币，扣30加币作为时间成本）后，对方态度强硬，单方面终止服务并称“不要再找我，你已经不是我们的客户”。并且拒绝继续进行办理。</p>\n<p>对方没有提供合同，并且有充足理由怀疑其漏税。</p>\n<p></p>\n<h2>最终结果</h2>\n<p>截至于2025年8月26日，服务未完成，330加币款项未退还，对方拒绝进一步沟通及继续办理。</p>\n<p>已向加拿大反欺诈系统与微信安全进行报告</p>\n<p>本人特意公开此事以避免更多人受害，网络交易有风险，转账需谨慎！</p>\n",
      "date_published": "2025-08-24T00:00:00.000Z",
      "date_modified": "2026-09-05T05:11:46.000Z",
      "authors": [],
      "tags": []
    },
    {
      "title": "G Hub彩虹六号不切换配置文件修复",
      "url": "https://leisiyu.dev/articles/GHubRainbowSixSiege.html",
      "id": "https://leisiyu.dev/articles/GHubRainbowSixSiege.html",
      "summary": "全网首发详细修复教程",
      "content_html": "<p class=\"textkai\">全网首发详细修复教程</p>\n<!-- more -->\n<h2>1. 准备工作</h2>\n<p>需要任何可以编辑DB文件的编辑器，如果没有可以下载<a href=\"https://sqlitebrowser.org/dl/\" target=\"_blank\" rel=\"noopener noreferrer\">DB Browser for SQLite</a>（选择no installer便携版本）</p>\n<p>以下教程基于DB Browser for SQLite编写，其他编辑器类似</p>\n<p>解压压缩包，打开<code>DB Browser for SQLite.exe</code></p>\n<p>退出G HUB</p>\n<h2>2. 打开G Hub settings.db</h2>\n<p>按下 <code>ctrl + O</code> - 地址栏输入：<code>C:%homepath%\\AppData\\Local\\LGHUB\\</code>并回车</p>\n<p>先右键<code>settings.db</code>，复制，粘贴到任何安全位置（备份）</p>\n<p>选择文件<code>settings.db</code>并打开</p>\n<h2>3. 打开保存的配置</h2>\n<p>切换到<code>浏览数据（B）</code>点击id为1的对应file的空（显示为<code>{...</code>）</p>\n<p>在右侧窗口会显示数据，选中窗口</p>\n<h2>4. 移除错误数据</h2>\n<p>按下<code>ctrl + F</code>搜索rainbow关键词</p>\n<p>删除所有在<code>APPLICATION_NAME_DESKTOP</code>的rainbow six siege文件，最后应该看起来像是<code>[]</code>，如果有非rainbow six的其他项目，请确保最后一条后面没有接<code>,</code></p>\n<h2>5. 写入更改</h2>\n<p>点击id为1的对应_date_created，此时询问是否保存，点击保存</p>\n<p>然后点击上面的<code>写入更改（W）</code>，关闭<code>DB Browser for SQLite</code></p>\n<h2>6. 重新启动G HUB</h2>\n<p>从开始菜单中重新启动G HUB，正常情况下不会跳数据损坏，如果跳了让他自己修复，修不了就把备份文件替换回去。</p>\n<p>搞不懂可以查Json语法或者问ChatGPT</p>\n<h2>7. ENJOY GAME</h2>\n<p>感谢<a href=\"https://www.reddit.com/r/LogitechG/comments/ysef0i/g_hub_not_switching_profiles\" target=\"_blank\" rel=\"noopener noreferrer\">G HUB not switching profiles - Reddit</a>提到的修复config数据库的解决方案</p>\n<p>但是原文提到的太模糊，没有详细的修复步骤</p>\n<p><s>G HUB这TM是哪个实习生写出来的Bug，甚至是GUI界面是完全不可见的</s></p>\n<p>本文为作者 Siyu Lei 原创内容，转载请注明出处并附上原文链接。（leisiyu.dev）</p>\n",
      "date_published": "2024-12-04T00:00:00.000Z",
      "date_modified": "2026-09-05T05:11:46.000Z",
      "authors": [],
      "tags": [
        "技术分享"
      ]
    },
    {
      "title": "Outlook增强指南",
      "url": "https://leisiyu.dev/articles/Outlook.html",
      "id": "https://leisiyu.dev/articles/Outlook.html",
      "summary": "桌面版后台常驻&禁用垃圾邮件",
      "content_html": "<p class=\"textkai\">桌面版后台常驻&amp;禁用垃圾邮件</p>\n<!-- more -->\n<h2>classic版本通过插件实现后台常驻，保持后台运行</h2>\n<p>微软的谜之设定，outlook没法设置成后台常驻，经常出现手机都收到邮件了但是电脑还得手动去看的问题。</p>\n<p>目前的解决方法只有KeepOutlookRunning（开源免费）/QuickTweaks（收费，$19.95）两个插件。</p>\n<p>开源插件KeepOutlookRunning有在office更新后掉插件的问题，故在此基础上二次开发KeepOutlookRunningInstaller，通过注册office和插件dll来避免问题。</p>\n<p>可以从<a href=\"https://github.com/lsy-404/KeepOutlookRunningInstaller/releases\" target=\"_blank\" rel=\"noopener noreferrer\">Github</a>/<a href=\"https://icloud.wuyilingwei.com/Release/\" target=\"_blank\" rel=\"noopener noreferrer\">个人网盘</a>获取</p>\n<p>双击安装即可，安装时需要联网访问Github获取DLL</p>\n<p>QuickTweaks收费，$19.95，不建议。</p>\n<h2>通过Microsoft Power Automate禁用垃圾邮件功能</h2>\n<p>微软很神奇的强制为所有个人/工作邮箱使用它那个误判贼高的垃圾邮件过滤系统，导致翻垃圾文件夹是必要的，那么这个功能除了让我丢通知没有一点作用。<s>他妈的你怎么连多大自己的邮件都拦</s></p>\n<p>还没有给关闭的选项，只能通过微软自家的自动化变相来实现。</p>\n<p>登录 <a href=\"https://make.powerautomate.com/\" target=\"_blank\" rel=\"noopener noreferrer\">power automate</a></p>\n<p>创建-Outlook-新电子邮件到达时</p>\n<p>授予相关邮箱访问授权</p>\n<p>选择新电子邮件到达时-文件夹（垃圾邮件）</p>\n<p>添加操作移动电子邮件-消息ID（选择上一步的ID）-文件夹（收件箱）</p>\n<p>保存即可</p>\n<p>这样会在垃圾邮件文件夹有新邮件的时候自动提出到收件箱，当然是比直接收邮件略慢几秒的。</p>\n<p>Microsoft Power Automate也是微软自家的功能，理论上不存在说安全问题。</p>\n<p>本文为作者 Siyu Lei 原创内容，转载请注明出处并附上原文链接。（leisiyu.dev）</p>\n",
      "date_published": "2024-11-27T00:00:00.000Z",
      "date_modified": "2026-09-05T05:11:46.000Z",
      "authors": [],
      "tags": [
        "技术分享"
      ]
    },
    {
      "title": "通过GH Action自动更新Waline",
      "url": "https://leisiyu.dev/articles/Waline_Update.html",
      "id": "https://leisiyu.dev/articles/Waline_Update.html",
      "summary": "每次Waline都要跳有更新了，一般也是兼容更新，可能还会有安全修复，跟上肯定属于没坏处那种，故想了个办法可以自动更新。 通过github仓库更新来触发vercel更新 1. 确保你的Vercel Project和仓库相连 如果没有相连可以手动创建仓库连接 2. Package.json 更改为最新版本 这样可以省去填版本号的麻烦，不用workflow...",
      "content_html": "<p class=\"textkai\">每次Waline都要跳有更新了，一般也是兼容更新，可能还会有安全修复，跟上肯定属于没坏处那种，故想了个办法可以自动更新。</p>\n<h2>通过github仓库更新来触发vercel更新</h2>\n<h3>1. 确保你的Vercel Project和仓库相连</h3>\n<p>如果没有相连可以手动创建仓库连接</p>\n<h3>2. Package.json 更改为最新版本</h3>\n<p>这样可以省去填版本号的麻烦，不用workflow也可以配置一个</p>\n<p>在package.json，改为：</p>\n<div class=\"language-json line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"json\" data-title=\"json\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code><span class=\"line\"><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"@waline/vercel\"</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">: </span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">\"latest\"</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div></div></div><h3>3. Workflow触发</h3>\n<p>已权限最小化，仅申请contents: write（提交commit必要），不需要额外的token。由于有提交，action会自动保活，不会出现半年自动禁用的问题。</p>\n<p>原理是通过有write权限的GITHUB_TOKEN提交一个完全空白的commit，触发vercel自动部署。</p>\n<p>默认cron定时为一个月。</p>\n<p>新建文件/.github/Auto_update.yml：</p>\n<div class=\"language-yml line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"yml\" data-title=\"yml\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code><span class=\"line\"><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">name</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">: </span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">Trigger Vercel Deployment</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\">on</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">:</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">  schedule</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">:</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    - </span><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">cron</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">: </span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">'0 0 1 * *'</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">  workflow_dispatch</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">:</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">permissions</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">:</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">  contents</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">: </span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">write</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">jobs</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">:</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">  trigger-vercel</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">:</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">    runs-on</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">: </span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">ubuntu-latest</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">    steps</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">:</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    - </span><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">name</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">: </span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">Checkout repository</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">      uses</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">: </span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">actions/checkout@v3</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    - </span><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">name</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">: </span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">Configure Git</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">      run</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">: </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">|</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">        git config user.name \"github-actions[bot]\"</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">        git config user.email \"github-actions[bot]@users.noreply.github.com\"</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    - </span><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">name</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">: </span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">Create an empty commit</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">      run</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">: </span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">git commit --allow-empty -m \"Trigger Vercel deployment\"</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">    - </span><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">name</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">: </span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">Push changes</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">      run</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">: </span><span style=\"--shiki-light:#A626A4;--shiki-dark:#C678DD\">|</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">        git remote set-url origin https://x-access-token:${{ secrets.GITHUB_TOKEN }}@github.com/${{ github.repository }}.git</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\">        git push origin HEAD</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><h2>另外的思路</h2>\n<p>这些思路理论上可行，但由于麻烦/权限管理问题没尝试。</p>\n<ul>\n<li>\n<p>通过vercel.json中配置定时任务去触发，由于不太搞得清楚api调用方式没搞。</p>\n</li>\n<li>\n<p>通过Action直接发送vercel部署命令，由于涉及到额外的token权限管理，加之相比起交白commit好像没啥特别的优势，白白增加配置的复杂度和增加安全隐患（毕竟再怎么说是长期token）。</p>\n</li>\n</ul>\n<p>本文为作者 Siyu Lei 原创内容，转载请注明出处并附上原文链接。（leisiyu.dev）</p>\n",
      "date_published": "2024-11-26T00:00:00.000Z",
      "date_modified": "2026-09-05T05:11:46.000Z",
      "authors": [],
      "tags": [
        "技术分享"
      ]
    },
    {
      "title": "回归线特别访谈与森空岛岛友茶话会的一些对比",
      "url": "https://leisiyu.dev/daliy/AneotAndSkd.html",
      "id": "https://leisiyu.dev/daliy/AneotAndSkd.html",
      "summary": "这是不是未免同步率太高了一点",
      "content_html": "<p>这是不是未免同步率太高了一点</p>\n<!-- more -->\n<h2>写在前面</h2>\n<p>在此，我首先为可能占用了大家宝贵的时间、牺牲了大家的阅读体验、影响了大家的好心情道歉，各位如果不喜欢还请忽略本文。不过有一点无需担心回归线Staff各司其职，本文的写作不会影响杂志制作进度，近期延期主要原因是春节期间不少Staff都有事情，所以进度会慢一些。</p>\n<p>我能理解到在广阔的创作领域内，灵感的交汇和想法的相似是自然而然的现象。然而，当发现官方栏目与我们同人作品相似的程度似乎<strong>有点点</strong>超出了普通灵感相遇的范畴。</p>\n<p>我们投入时间、精力，乃至心血，仅仅是为了表达对原作的热爱和对同好之间分享的喜悦，然而这些付出不仅往往得不到应有的回报，甚至会被不当借鉴或商用。虽然我们有捐赠收益、B站激励，虽顽子也曾打赏百来元。但这些远远不够负担参展、免费发放的费用，每一次参展背后，都是各位Staff自掏数千的印刷费用，更何谈付得起哪怕其中任何一位Staff时以年计无私奉献的报酬？我们一直是为热爱在进行创作，这完完全全是赔本买卖，到头来我们还要接受官方的不正当借鉴。这不该，也不应是非盈利社团的宿命。</p>\n<p>有一些也许不是巧合的巧合：岛友茶话会的问题设置和版块安排（如杨颜专访中将问题分为“关于方舟”“关于创作”“关于生活”）与2022年8月开始沿用至今的《回归线》特别专访版块有很多相似之处。</p>\n<p>尤其是在前两期采访杨颜和zc的文章中（最新一期大部分问题都注明了来自网友暂不讨论）有些并没有说来自于网友的问题，题目几乎和回归线一字不差。</p>\n<p>我完全能理解大家做这种专访思路有时会很相近，但是思路相近也很难会产生出一模一样的题目和排版；我也完全能理解（且欢迎）写稿子的时候学习前人经验，但是学习之前可不可以先和原作者说一声呢？</p>\n<p>本文仅将<strong>回归线特别访谈</strong>（最早2022年8月；同人）与<strong>森空岛岛友茶话会</strong>（最早2023年10月；官方）进行对比，以便于读者更好地理解两者的异同。</p>\n<h2>Part I</h2>\n<p>| 森空岛“岛友茶话会”第一期：魔法Zc目录（2023年10月30日） | 《回归线》 |\n| :</p>\n",
      "date_published": "2024-02-12T00:00:00.000Z",
      "date_modified": "2026-09-05T05:11:46.000Z",
      "authors": [],
      "tags": [
        "日常"
      ]
    },
    {
      "title": "浅记一次北美Frp搭建",
      "url": "https://leisiyu.dev/articles/buildfrp.html",
      "id": "https://leisiyu.dev/articles/buildfrp.html",
      "summary": "轻量级个人FRP服务搭建教程",
      "content_html": "<p class=\"textkai\">轻量级个人FRP服务搭建教程</p>\n<!-- more -->\n<p>国内就没必要这玩意了，SakuraFrp就行。要自建也可以当参考。</p>\n<p>Frp是一个轻量级的反向代理工具，可以将内网服务映射到公网，实现内网穿透。</p>\n<p>这大概算我找到的最便宜的内网穿透方案了。可以用来部署远程桌面、FTP文件传输或者Minecraft服务器啥的。</p>\n<p>需要的东西：</p>\n<ul>\n<li>一个VPS（一般价格在15-30元/月）</li>\n<li>一个域名（可选，com一般在75-100元/年左右）</li>\n<li>Xshell（或者其他SSH管理工具）</li>\n<li>Xftp（或者其他文件传输工具）</li>\n</ul>\n<p>服务商选用<a href=\"https://www.ionos.ca/servers/vps\" target=\"_blank\" rel=\"noopener noreferrer\">IONOS</a>我选的是最便宜的$2/月的VPS，配置为（1 vCore CPU，1 GB RAM，10 GB SSD storage，1 Gbit/s unlimited traffic），这玩意搭建个人FRP绰绰有余。（折合约人民币15元/月）</p>\n<p>实测IONOS Speedtest，有frp使用情况下，Hosted by Clouvider Ltd (New York, NY) [6199.77 km]，Download: 1557.67 Mbit/s - 2678.73 Mbit/s；Upload: 886.07 Mbit/s - 1017.50 Mbit/s（多次测试）</p>\n<p>建议仅限北美，其他地区自行寻找。</p>\n<p>服务器系统方面选用ubuntu，买完等他配置一会就行，用Xshell连接服务器，输入用户名密码即可。（我懒得改密码了，就这样吧）</p>\n<p>安装FRP，从github下载linux版本的FRP文件，解压，用xftp，连上服务器。</p>\n<p>手动用xftp把Frps那个二进制文件丢到/usr/bin/下面，再找个你喜欢的地方写个ini文件，我这里是/etc/frp/frps.ini，内容如下：</p>\n<div class=\"language-ini line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"ini\" data-title=\"ini\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code><span class=\"line\"><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">[common]</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\"># frp对客户端的服务端口</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#E45649;--shiki-dark:#C678DD\">bind_port</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#98C379\"> {frp-port}</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\"># token，客户端会用到，改的复杂些</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#E45649;--shiki-dark:#C678DD\">token</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#98C379\"> {token}</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\"># 访问frp客户端web服务的端口</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#E45649;--shiki-dark:#C678DD\">vhost_http_port</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#98C379\"> {web-port}</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\"># pool_count（下限），max_pool_count（上限）</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#E45649;--shiki-dark:#C678DD\">max_pool_count</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#98C379\"> 50</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\"># tcp流多路复用，默认为true</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#E45649;--shiki-dark:#C678DD\">tcp_mux</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#98C379\"> true</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#98C379\"> </span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\"># frp管理后台端口</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#E45649;--shiki-dark:#C678DD\">dashboard_port</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#98C379\"> {dashboard-port}</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\"># frp管理后台用户名和密码</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#E45649;--shiki-dark:#C678DD\">dashboard_user</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#98C379\"> {admin}</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#E45649;--shiki-dark:#C678DD\">dashboard_pwd</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#98C379\"> {password}</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\"># 允许服务监控</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#E45649;--shiki-dark:#C678DD\">enable_prometheus</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#98C379\"> true</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\"># frp日志配置</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#E45649;--shiki-dark:#C678DD\">log_file</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#98C379\"> /srv/frp/log</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#E45649;--shiki-dark:#C678DD\">log_level</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#98C379\"> info</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#E45649;--shiki-dark:#C678DD\">log_max_days</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#98C379\"> 3</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><p>将{frp-port}、{token}、{web-port}、{dashboard-port}、{admin}、{password}替换成你自己的端口和账户密码。</p>\n<p>日志文件夹自己建一个，有权限就行。</p>\n<p>然后退出去去IONOS VPS控制台，找到防火墙，把以上端口都开放或直接关闭（不是那么推荐，不过单frp的话直接关比较省心）。</p>\n<p>然后在服务器上输入以下指令：</p>\n<div class=\"language-shell line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"shell\" data-title=\"shell\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code><span class=\"line\"><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">nohup</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> frps</span><span style=\"--shiki-light:#986801;--shiki-dark:#D19A66\"> -c</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> ini文件路径</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> &amp;</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div></div></div><p>试着登录一下分配ip，端口为{dashboard-port}，用户名密码为{admin}{password}，能登就行。</p>\n<p>然后去创建一个systemd服务，路径为/etc/systemd/system/frps.service，内容如下：</p>\n<div class=\"language-ini line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"ini\" data-title=\"ini\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code><span class=\"line\"><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">[Unit]</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\"># 服务名称，可自定义</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#E45649;--shiki-dark:#C678DD\">Description</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#98C379\"> frp server</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#E45649;--shiki-dark:#C678DD\">After</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#98C379\"> network.target syslog.target</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#E45649;--shiki-dark:#C678DD\">Wants</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> =</span><span style=\"--shiki-light:#383A42;--shiki-dark:#98C379\"> network.target</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#98C379\"> </span></span>\n<span class=\"line\"><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">[Service]</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\"># 启动失败后重启服务</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#E45649;--shiki-dark:#C678DD\">Restart</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">=</span><span style=\"--shiki-light:#383A42;--shiki-dark:#98C379\">on-failure</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\"># 重启间隔时间</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#E45649;--shiki-dark:#C678DD\">RestartSec</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">=</span><span style=\"--shiki-light:#383A42;--shiki-dark:#98C379\">5</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\"># 修改为自己的frp目录，注意是frps</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#E45649;--shiki-dark:#C678DD\">ExecStart</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">=</span><span style=\"--shiki-light:#383A42;--shiki-dark:#98C379\">/usr/bin/frps -c /etc/frp/frps.ini</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#383A42;--shiki-dark:#98C379\"> </span></span>\n<span class=\"line\"><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">[Install]</span></span>\n<span class=\"line\"><span style=\"--shiki-light:#E45649;--shiki-dark:#C678DD\">WantedBy</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\">=</span><span style=\"--shiki-light:#383A42;--shiki-dark:#98C379\">multi-user.target</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div><div class=\"line-number\"></div></div></div><p>然后去添加服务自启动：</p>\n<div class=\"language-shell line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"shell\" data-title=\"shell\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code><span class=\"line\"><span style=\"--shiki-light:#4078F2;--shiki-dark:#61AFEF\">systemctl</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> enable</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> frps</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div></div></div><p>然后重启服务器，看看能不能自启动。如果一切正常，这个服务器除了续费就不用管了。</p>\n<p>如果有域名，可以配置一个子域名A记录到服务器ip就行，比如像我的就是frp.wuyilingwei.com。</p>\n<p>然后去客户端下载对应平台的frp客户端，windows可以试试Frp GUI，用对应token和域名+端口配置就行了。配置完记得开防火墙就行。</p>\n<p>北美低成本FRP服务搭建完毕。月均成本15元人民币（或2美刀，支持paypel），带宽1Gbps，独享ip，流量无限制。</p>\n<p>本文为作者 Siyu Lei 原创内容，转载请注明出处并附上原文链接。（leisiyu.dev）</p>\n",
      "date_published": "2024-01-26T00:00:00.000Z",
      "date_modified": "2026-09-05T05:11:46.000Z",
      "authors": [],
      "tags": [
        "技术分享"
      ]
    },
    {
      "title": "群星：多彩银河mod安装方法",
      "url": "https://leisiyu.dev/daliy/Colorful_Galaxy.html",
      "id": "https://leisiyu.dev/daliy/Colorful_Galaxy.html",
      "summary": "群星涩涩mod多彩银河安装及打开菜单教程",
      "content_html": "<p>群星涩涩mod多彩银河安装及打开菜单教程</p>\n<!-- more -->\n<p>*该教程仅适用于steam版群星，受发布时间影响，可能会有部分内容与实际情况不符。</p>\n<h2>安装</h2>\n<p>按下Win+R，输入<code>steam://open/console</code>，按下回车键打开steam控制台，输入<code>workshop_download_item 281990 2923834739</code>，回车，等待资源包 <em>无我原非你，从他不解伊</em> 下载完成，接着输入<code>workshop_download_item 281990 2748029219</code>，回车，等待脚本包 <em>缤纷多彩の银河</em> 下载完成，下载完成后关闭控制台。</p>\n<p>开启游戏，确保播放集中启用mod并将资源包置于脚本包之前。</p>\n<p>开始游戏，enjoy it!</p>\n<h2>打开涩涩菜单</h2>\n<p>群星-政府-法令即可看到一个只需要5宝石打开的一天法令</p>\n<p>*注意，星海共同体法令看清楚别点错了，不然会直接开战</p>\n<p>摸鱼这么久才想起来更新blog，果然涩涩是第一生产力（逃</p>\n<p>本文为作者 Siyu Lei 原创内容，转载请注明出处并附上原文链接。（leisiyu.dev）</p>\n",
      "date_published": "2023-09-18T00:00:00.000Z",
      "date_modified": "2026-09-05T05:11:46.000Z",
      "authors": [],
      "tags": [
        "游戏"
      ]
    },
    {
      "title": "OneDrive增强指南",
      "url": "https://leisiyu.dev/articles/OneDrive_Link.html",
      "id": "https://leisiyu.dev/articles/OneDrive_Link.html",
      "summary": "同步任意文件夹",
      "content_html": "<p class=\"textkai\">同步任意文件夹</p>\n<!-- more -->\n<p>首先按下Win+R，输入<code>cmd</code>，同时按住shift+ctrl的情况下点击确定，提权打开命令行。（正确情况下会有UAC提示及标题栏中的管理员字样）</p>\n<p>按下Win+E，打开资源管理器，右键OneDrive文件夹，点击属性，复制地址栏中的路径。</p>\n<p>使用以下指令链接你想要的文件夹到OneDrive文件夹，例如：</p>\n<div class=\"language-cmd line-numbers-mode\" data-highlighter=\"shiki\" data-ext=\"cmd\" data-title=\"cmd\" style=\"--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34\"><pre class=\"shiki shiki-themes one-light one-dark-pro vp-code\"><code><span class=\"line\"><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">mklink</span><span style=\"--shiki-light:#383A42;--shiki-dark:#ABB2BF\"> /</span><span style=\"--shiki-light:#E45649;--shiki-dark:#E06C75\">D</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"{OneDrive文件夹路径}\\{OneDrive文件夹中的相对路径}\"</span><span style=\"--shiki-light:#50A14F;--shiki-dark:#98C379\"> \"{你要链接的文件夹路径}\"</span></span></code></pre>\n<div class=\"line-numbers\" aria-hidden=\"true\" style=\"counter-reset:line-number 0\"><div class=\"line-number\"></div></div></div><p>将{}及其中的内容替换为你的路径。</p>\n<p>这是使用Windows的符号链接功能，可以将文件夹链接到其他位置，但是在资源管理器中仍然显示为原文件夹。</p>\n<p>可以在不移动文件夹的情况下将文件夹链接到其他位置，例如将将其加入到Onedrive文件夹中，以方便同步。</p>\n<p>在命令行中输入<code>mklink /?</code>查看更多用法。</p>\n<p>本文为作者 Siyu Lei 原创内容，转载请注明出处并附上原文链接。（leisiyu.dev）</p>\n",
      "date_published": "2023-09-18T00:00:00.000Z",
      "date_modified": "2026-09-05T05:11:46.000Z",
      "authors": [],
      "tags": [
        "技术分享"
      ]
    },
    {
      "title": "自动构建带root与Google Play的安卓子系统",
      "url": "https://leisiyu.dev/articles/WSA.html",
      "id": "https://leisiyu.dev/articles/WSA.html",
      "summary": "MagiskOnWSAOnlineBuild",
      "content_html": "<p class=\"textkai\"><a href=\"https://github.com/lsy-404/MagiskOnWSAOnlineBuild\" target=\"_blank\" rel=\"noopener noreferrer\">MagiskOnWSAOnlineBuild</a></p>\n<!-- more -->\n<h2>写在最前</h2>\n<p>本项目基于<a href=\"https://github.com/LSPosed/MagiskOnWSALocal\" target=\"_blank\" rel=\"noopener noreferrer\">Magisk on WSA (with Google Apps)</a>，该仓库<s>在古老的年代</s>曾经有过通过Github Action来自动部署的功能。</p>\n<p>但因为过于火爆和fork仓库过多，该仓库被判定为滥用Github Action而被封禁。</p>\n<p>但是对于很多人来说，安装Linux或者WSL自行下载源代码过于困难，我自己构建好拷贝给朋友来说又太麻烦了。</p>\n<h2>使用</h2>\n<p>直接下载<a href=\"https://github.com/lsy-404/MagiskOnWSAOnlineBuild/releases/latest\" target=\"_blank\" rel=\"noopener noreferrer\">最新的Release</a>即可</p>\n<h2>解决方案</h2>\n<p>于是我在仔细查看项目结构后通过Github Action来执行build，直接通过预设步骤进行构建并上传到release，方便大多数人使用。</p>\n<p>目前而言，通过强制性的要求Github Token的要求应该能避免很多人直接fork了去用，需要自己配置Token和仓库路径。</p>\n<p>不过workflow文件中写上了充分的注释，可以轻松的改进。</p>\n<h2>具体步骤：</h2>\n<ul>\n<li>安装Git</li>\n<li>克隆MagiskonWSA</li>\n<li>运行依赖安装文件</li>\n<li>构建版本</li>\n<li>下载Github CLI工具</li>\n<li>通过Token登录并发布新版本</li>\n</ul>\n<p>本文为作者 Siyu Lei 原创内容，转载请注明出处并附上原文链接。（leisiyu.dev）</p>\n",
      "date_published": "2023-06-06T00:00:00.000Z",
      "date_modified": "2026-09-05T05:11:46.000Z",
      "authors": [],
      "tags": [
        "技术分享"
      ]
    },
    {
      "title": "TO DO LIST",
      "url": "https://leisiyu.dev/sp/ToDo.html",
      "id": "https://leisiyu.dev/sp/ToDo.html",
      "summary": "咕↗咕↘咕↗↗↗",
      "content_html": "<p>咕↗咕↘咕↗↗↗</p>\n<!-- more -->\n<p class=\"textkai\">我只是一个学生，为爱发电，并没有对任何项目有维护和保障可用性的义务。</p>\n<h2>正在做的项目</h2>\n<p>海狸浮生记Steam创意工坊mod AI汉化v2.2多版本支持。（当前进度 画饼[x] - 重构发布系统构建脚本[x] - 自动版本支持 - 数据AI聚合更新）</p>\n<p><a href=\"https://github.com/lsy-404/epilogue\" target=\"_blank\" rel=\"noopener noreferrer\">epilogue</a> 桌面端 AI 文件工作流——本地优先、多 provider 故障转移、轻量托盘应用。让 AI 理解、整理并帮你回忆文件。（进行中）</p>\n<h2>维护中的项目</h2>\n<p><a href=\"https://github.com/lsy-404/Aneot_Alpha\" target=\"_blank\" rel=\"noopener noreferrer\">Aneot_Alpha</a> 为明日方舟同人杂志回归线提供网页更新 ） (Full support)</p>\n<p><a href=\"https://github.com/lsy-404/Timberborn_Mods_Universal_Translate\" target=\"_blank\" rel=\"noopener noreferrer\">Timberborn Mods Universal Translate</a> 海狸浮生记Steam创意工坊mod AI翻译v2。 (Full support)</p>\n<p><a href=\"https://github.com/lsy-404/LRC\" target=\"_blank\" rel=\"noopener noreferrer\">LRC</a> V宇宙词站，歌词收录站点。 (Full support)</p>\n<p><a href=\"https://github.com/lsy-404/Waline_On_Worker\" target=\"_blank\" rel=\"noopener noreferrer\">Waline On Worker</a> Waline 评论系统在 Cloudflare Workers 上的实现。 (Full support)</p>\n<p><a href=\"https://github.com/lsy-404/UofT-Tools\" target=\"_blank\" rel=\"noopener noreferrer\">UofT-Tools</a> 多伦多大学学生工具集。 (Full support)</p>\n<p><a href=\"https://github.com/seuyh/stellaris-dlc-unlocker\" target=\"_blank\" rel=\"noopener noreferrer\">Stellaris-DLC-Unlocker</a> (Only zhCN translates support)</p>\n<p><a href=\"https://github.com/lsy-404/MyUserScript/commits/main/\" target=\"_blank\" rel=\"noopener noreferrer\">MyUserScript</a> 个人用用户脚本 (Only bugs fix)</p>\n<p><a href=\"https://github.com/lsy-404/rdpwrap_AutoUpdate_CN\" target=\"_blank\" rel=\"noopener noreferrer\">rdpwrap_AutoUpdate_CN</a> RDP Wrapper Autoupdate 中文汉化版 (Only bugs fix)</p>\n<h2>完成的项目</h2>\n<p><a href=\"https://github.com/lsy-404/Waline_Autoupdate\" target=\"_blank\" rel=\"noopener noreferrer\">Waline Auto update</a>开源评论系统Waline的自动更新 (Finished on Nov 26, 2024)</p>\n<p><a href=\"https://github.com/lsy-404/SatisfactoryDedicatedServer\" target=\"_blank\" rel=\"noopener noreferrer\">Satisfactory Dedicated Server</a>对游戏幸福工厂v1.0错误关闭udp链接的守护进程(Finished on Nov 17, 2024)</p>\n<p><a href=\"https://github.com/lsy-404/KeepOutlookRunningInstaller\" target=\"_blank\" rel=\"noopener noreferrer\">Keep Outlook Running Installer</a>Outlook Classic保持后台运行和插件注册 (Finished on Nov 2, 2024)</p>\n<p><a href=\"https://github.com/lsy-404/7D2D_CTVI_i18n\" target=\"_blank\" rel=\"noopener noreferrer\">7D2D CVTI MOD Part I</a>主材料Mod完成汉化 (Finished on Apr 30, 2024)</p>\n<p><a href=\"https://github.com/lsy-404/Audio-Video-Merger\" target=\"_blank\" rel=\"noopener noreferrer\">Audio-Video-Merger</a>基于batch+ffmpeg的音画合并脚本，适用于Bilibili Evolved，用于合并下载的原音轨和视频 (Finished on Dec 7, 2023)</p>\n<p><a href=\"https://github.com/lsy-404/PRTS_cursor\" target=\"_blank\" rel=\"noopener noreferrer\">PRTS_cursor Public</a>明日方舟PRTS主题的光标包 (Finished on Jul 19, 2023)</p>\n<p><a href=\"https://github.com/lsy-404/rdpwrap_AutoUpdate_CN\" target=\"_blank\" rel=\"noopener noreferrer\">rdpwrap_AutoUpdate_CN</a>RDP Wrapper Autoupdate 中文汉化加强版 (Finished on May 28, 2023)</p>\n<h2>停止支持的项目</h2>\n<p><a href=\"https://github.com/lsy-404/MAAResUpdater\" target=\"_blank\" rel=\"noopener noreferrer\">MAAResUpdater</a> MAA已自带github源直接更新 (End Support on Apr 12, 2025)</p>\n<p><a href=\"https://github.com/lsy-404/Timberborn_Mods_Universal_zhCN_Translate\" target=\"_blank\" rel=\"noopener noreferrer\">Timberborn Mods Universal zhCN Translate</a> 海狸浮生记Steam创意工坊mod AI汉化v1。 (End Support on Dec 31, 2024, now it is v2)</p>\n<p><a href=\"https://github.com/lsy-404/LiteLoaderQQNT-HighlightReplies\" target=\"_blank\" rel=\"noopener noreferrer\">LiteLoaderQQNT-HighlightReplies</a>LLQQNT更换加载器方式，无空提供更新，相关功能已并入轻量工具箱。 (End Support on Mar 3, 2024)</p>\n<p><a href=\"https://github.com/lsy-404/MagiskOnWSAOnlineBuild\" target=\"_blank\" rel=\"noopener noreferrer\">MagiskOnWSAOnlineBuild</a>后续维护计划，WSA已被微软放弃 (End Support on Jan 12, 2024)</p>\n<h2>放弃的项目</h2>\n<p><a href=\"https://github.com/lsy-404/helldivers2AutoStratagems\" target=\"_blank\" rel=\"noopener noreferrer\">Helldiver 2 OCR/设置混合搓球器</a> HDR支持属于小众需求，与整体OCR设计冲突。 (Canceled)</p>\n<p><a href=\"https://github.com/lsy-404/StarRail_anjian\" target=\"_blank\" rel=\"noopener noreferrer\">StarRail按键精灵脚本</a>难写，占用焦点不划算 (Canceled)</p>\n<p>研究PCRS，改进其效率和前端体验。现在不用这个玩意了<s>userjs凑合凑合差不多也够用</s>。 (Canceled)</p>\n<p>为7D2D CVTI其他MOD模块提供全面汉化（暂时没有新服计划） (Canceled)</p>\n",
      "date_published": "2026-09-05T05:11:46.000Z",
      "date_modified": "2026-09-05T05:11:46.000Z",
      "authors": [],
      "tags": []
    },
    {
      "title": "News",
      "url": "https://leisiyu.dev/sp/Update.html",
      "id": "https://leisiyu.dev/sp/Update.html",
      "summary": "What happen?",
      "content_html": "<p>What happen?</p>\n<!-- more -->\n<h2>2025/11/29</h2>\n<p>重新设计openlist扩展功能和UI</p>\n<p>openlist现在支持智能路径修复</p>\n<h2>2025/11/28</h2>\n<p>icloud声明和数据更新</p>\n<h2>2025/11/15</h2>\n<p>音乐服务Music-Tag-Web v2完成功能扩展和权限控制设计</p>\n<h2>2025/11/12</h2>\n<p>音乐服务Music-Tag-Web v2切换数据库至mySQL</p>\n<h2>2025/11/11</h2>\n<p>音乐服务Music-Tag-Web v2完成安全补丁</p>\n<h2>2025/11/10</h2>\n<p>音乐服务Navidrome切换为Music-Tag-Web v2</p>\n<h2>2025/9/29</h2>\n<p>优化了部分资源大小，加快加载速度</p>\n<h2>2025/09/23</h2>\n<p>音乐服务Navidrome v0.55.1 -&gt; v0.58.0 Latest</p>\n<h2>2025/09/22</h2>\n<p>网盘上传接口直接上传至VPS，这应该会显著加快最大上传速度。</p>\n<h2>2025/09/15</h2>\n<p>Timberborn模组翻译更新完全通过编译实现，应该能避免导致游戏崩溃的问题。</p>\n",
      "date_published": "2026-09-05T05:11:46.000Z",
      "date_modified": "2026-09-05T05:11:46.000Z",
      "authors": [],
      "tags": []
    }
  ]
}