寒士杰克 - 开发
type: channel
link: https://www.hansjack.com/categories/repo/
items: 开发日志：Discourse的开发网络
items: Typecho插件：增强渲染MarkdownPlus
items: phpBB扩展：数据库文档
items: 复古物语（Vintage Story）中国玩家社区已经开放！
items: AIP：我的世界AI机器人
items: Vue3Admin: 一款必备的Typecho后台面板插件
items: 自制Obsidian插件发布文章

开发日志：Discourse的开发网络
type: item
date: 2026-05-19T13:24:34+00:00
description: 一、技术人员请远离一个人能肝到什么程度，我仅仅学习过C语言基础+PHP基础，喜欢逛博客，部署各种应用在服务器中，服务器方面的“搞机玩家”。GPT从4.0开始就已经被大量用于网站的编程，2025年到26年更是AI发展迅速的一年转折点，看到国产Ds、GPT的image2、A社依旧发挥稳定。很多非技术人员开始用现金去代替技术门槛去制作想去制作的产品，类似花钱去定制，自己去做甲方。二、一生万“物”Discourse是目前开源社区最火的项目，很多大站都在使用，官方也是不断更新，理念很符合现代社区，内容去驱动，而不是积分去驱动。复古物语中文社区在搭建前夕，我思考很久，问AI，翻浏览器，PHPBB捣鼓了一两周去搞插件，去搞编辑器插件、模组库插件，后面最终我心境爆发了，绷不住了，哈哈哈，PHPBB虽然成熟，但是不能用于现代社区了，特别是内容驱动和多页面内容。我于是决心进入Discourse，很强！Discourse有很完善的功能、更现代的页面和编辑器、更优秀的性能优化。编辑器支持md、html、bbcode，解决了社区编辑问题，md最适合文本社区了，不需要特别多HTML。插件有：哔哩哔哩视频Onebox、积分插件、Discourse Connect、抽奖插件其中Discourse Connect解决了登录账号问题，特别是多站点，模组网站、维基mediawiki、服务器网站、积分商城网站、Waline评论系统账号均使用一个社区账号。[!NOTE]mediawiki是使用AI制作的兼容Discourse SSO的Auth认证插件，mediawiki可以安装扩展；Discourse SSO和普通Auth0不一样，需要单独写代码，其中Waline是使用替换js和原Github Auth去认证的（没有开源），其他网站都是SSO兼容的项目，单独开发的项目。积分插件还是不完善，ds比较偏向内容，而不是积分，我于是搭建了独立的积分网站，同步ds的数据库去计算积分。[!NOTE]单容器部署Discourse是没有数据库容器的，所以需要修改app.yml文件去开放数据库数据在内网，然后容器连一个网络即可解决（使用容器名称）。除了上面的账号互通，还支持了游戏官方的API认证，2FA验证，让账号绑定游戏账号，游戏官方有模组网站，账号也是游戏账号，于是也解决了模组作者对齐模组网站的想法，便于后期外国作者去我搭建的模组网站去提交和管理模组。Discourse积分插件很简单，只有数值统计逻辑，只用在抽奖插件上面（https://github.com/maiizii/discourse-choujiang），积分商城除了固定计算的积分，还有流动积分（当天固定可划入积分的流动积分），发布委托和解决委托可汇率进入积分（积分=真实积分），更加丰富了社区互助激励功能。

Typecho插件：增强渲染MarkdownPlus
type: item
date: 2026-04-01T11:26:16+00:00
description: 简单介绍MarkdownPlus是让Codex通过本站主题HansJack文章的渲染功能来剥离而出的Typecho插件，不确保你的主题能不能完美适配，不过添加了主题文章内容选中器。https://github.com/TGU-HansJack/MarkdownPlus主要功能提示块（alert）和引用块增强[!NOTE]111[!TIP]111[!IMPORTANT]111[!WARNING]111[!CAUTION]111并且支持折叠。行内语法增强!!剧透!!、++插入++、==高亮==、{字:注音}嵌入短代码{% youtube %}、{% bilibili %}、{% video %}、{% iframe/embed %}、{% comment %}Onebox 卡片段落里单独 URL 自动卡片化；GitHub repo/issue/PR 会调用 GitHub API 补全信息https://github.com/VintageStory-Community/vintagestory-forum-cnhttps://github.com/scgm0/MVL/pull/4https://github.com/VintageStory-Community/vintagestory-forum-cn/blob/main/README.md图片增强独立图片段落转 figure + figcaption，并自动 loading="lazy"代码块增强复制按钮、超过 10 行可折叠class Plugin implements PluginInterface { private const VERSION = '1.0.2'; private static $frontRendered = false; public static function activate() { \Typecho\Plugin::factory('Widget_Archive')->footer = [__CLASS__, 'renderFooter']; return _t('MarkdownPlus 已启用'); } public static function deactivate() { } public static function config(Form $form) { $selector = new Text( 'contentSelector', null, '.post-content, .post_content', _t('文章内容容器选择器'), _t('支持多个 CSS 选择器，使用英文逗号分隔。留空时默认匹配 default / OneBlog 的正文容器。') ); $form->addInput($selector); } public static function personalConfig(Form $form) { } private static function cut($text, $len) { if (function_exists('mb_substr')) { return mb_substr((string) $text, 0, (int) $len); } return substr((string) $text, 0, (int) $len); } private static function getConfig() { $defaults = [ 'contentSelector' => '.post-content, .post_content', ]; try { $raw = \Helper::options()->plugin('MarkdownPlus')->toArray(); if (!is_array($raw)) { $raw = []; } } catch (\Throwable $e) { $raw = []; } $cfg = array_merge($defaults, $raw); $selector = trim((string) ($cfg['contentSelector'] ?? '')); $selector = str_replace(["\r\n", "\r", "\n"], ' ', $selector); $selector = preg_replace('/\s{2,}/u', ' ', $selector); $selector = trim((string) $selector); if ($selector === '') { $selector = $defaults['contentSelector']; } $cfg['con…

phpBB扩展：数据库文档
type: item
date: 2026-03-22T03:03:09+00:00
description: 字段内容扩展中文名称数据库目录ext/hansjack/db扩展英文名称DataBase作者HansJack版本号0.0.1用途游戏论坛开发者展示自己的作品项目，支持项目展示、项目筛选、主题帖子绑定项目用于讨论、项目提交、项目审核、项目分类、版本更新涉及页面：ACP（后台管理） UCP（用户中心） 前台（app.php/db）ACP（管理员面板）路径： ACP -> 扩展 -> DataBase分为：项目管理、分类管理、标签管理、版本管理、扩展设置1. 项目管理功能：列表显示所有项目的条目搜索 / 筛选状态控制：pending（待审核）approved（已发布）rejected（拒绝）操作：审核通过 / 拒绝编辑内容删除开启评分2. 分类管理字段：分类名（模组/工具/其他）标识(URL路径)（mod / tool / other）{categorize}是否启用功能：新增分类编辑分类删除分类3. 标签管理功能：创建标签合并标签（防止重复）删除标签查看使用次数4. 版本管理用途：项目添加支持的游戏版本号、支持端（Win/Linux/Mac）链接导入版本号：https://api.vintagestory.at/stable-unstable.json5. 扩展设置是否开启审核标签最大数量允许上传文件大小、类型是否开启全局评分UCP（用户面板）路径： UCP -> 数据库1. 我的贡献用户可以看到：我提交的 Mod等 项目状态（审核中 / 已发布 / 被拒）项目编辑/更新查看页面2. 项目编辑/更新项目字段：名称描述项目唯一{id}（不可与已有项目重复，大小写不敏感，仅支持中文、英文、-、_）分类{categorize}（支持多选）支持端（支持多选）标签（支持创建和输入时下拉选择）预览图（支持多图片上传）绑定主题（仅自己发布的主题，下拉选择）版本添加：添加版本编辑版本删除版本版本字段：版本号支持端支持版本号上传项目文件更新日志前台页面路径：/app.php/db首页（数据库列表）顶部支持：搜索分类筛选标签筛选作者筛选版本筛选下方网格布局形式显示项目：展示：名称短描述标签作者分类封面图（第一张预览图）详情页面路径：/app.php/db/{categorize}/{id}展示：名称短描述标签作者分类预览图最新版本和下载按钮支持版本文件页面（位于详情页面，tabs切换两个内容）展示：历史版本下载按钮隐藏显示更新日志支持版本号更新时间

复古物语（Vintage Story）中国玩家社区已经开放！
type: item
date: 2026-03-14T09:24:26+00:00
description: 搭建起因我曾经搭建过一个 Minecraft 论坛 —— 创梦联机论坛。不过由于当时正处于高中阶段，学业压力较大，最终无法继续维护项目，论坛只运行了大约一个月时间。后来接触到了 Vintage Story 这款游戏。这是一款非常适合喜欢 像素风、生存探索、自由玩法以及克苏鲁风格 的玩家的游戏。然而在中国区域，这款游戏的知名度仍然很低，主要原因包括：缺少玩家社区Wiki 资料中文翻译不完整下载渠道不明确正版购买流程较为困难这些问题导致很多玩家即使听说过这款游戏，也很难真正深入了解。因此，我决定搭建一个面向中文玩家的社区，并购买了域名：https://vintagestory.top开始部署论坛社区。这个社区的目标其实很简单 ——为中国玩家提供一个可以交流、分享和获取资源的平台。为什么不注册 .com 或其他域名？主要原因是个人经济能力有限。对我来说，域名只是网站的“入场券”。.com 域名已经被炒到很高的价格，而官方社区使用的是 .at 域名。.cn 域名又存在实名信息暴露的问题，因此最终选择了价格较为便宜的 .top 域名。社区内容社区目前计划提供以下内容：模组下载渠道整理和提供可用的游戏模组资源。游戏下载与购买指引提供学习版渠道说明，以及正版购买教程。玩家交流社区为玩家提供讨论游戏、分享经验和发布内容的平台。预计开发功能论坛目前基于 phpBB 搭建，未来计划逐步扩展功能。1. Markdown 渲染支持论坛目前主要使用 BBCode。由于现有 Markdown 插件兼容问题较多，未来可能会开发 专用 Markdown 渲染插件，以便更好地支持技术类和长文内容。2. 模组中文数据库（MDZ）计划开发 Mod 中文数据库：mod_db_zh（简称 MDZ）目标是为中文社区提供一个模组数据库系统，包括：模组分类与索引模组搜索功能模组讨论区（开发中 / 已发布）模组信息面板同时也欢迎中文社区开发原创模组。3. 服务器列表与 API未来将提供：服务器列表服务器信息展示服务器状态 API服务器数据面板方便玩家快速找到服务器。社区主旨与建议社区主旨开放自由，友善交流拒绝戾气、谩骂和恶意攻击希望这里能成为一个氛围友好、理性讨论的社区。社区建议赞助说明论坛未来仅接受 爱发电渠道赞助。除该渠道以外的任何收费或赞助方式均不属于本站行为，请注意辨别。赞助预计 在今年 11 月之后开放，在社区基本稳定前暂不接受赞助。隐私提示论坛不会主动收集用户隐私信息，但：网站 无法完全保证所有数据的绝对安全唯一重点保护的是 用户邮箱隐私因此建议：请不要在个人资料或帖子中填写真实隐私信息！

AIP：我的世界AI机器人
type: item
date: 2026-03-09T06:38:01+00:00
description: 1. 起因我舍友放假回来宿舍一直玩Minecarft，正好我也打算看看AI对这游戏影响：上周末玩了一下Minecraft，又因为我最近几个月都在玩AI Coding，于是想到能不能使用GPT 5.4去做一个模组：AIPlayers (AIP){% comment https://www.hansjack.com/memos#comment-33 %}2. 思路采用Forge模组，借鉴Britone的寻路逻辑、自研的任务型脚本。多AI玩家之间通过同一个知识库互相获取世界信息，数据来自Minecarft Wiki。使用阿里模型QWEN-ASR实现语音发送命令，Openai中转API实现对话。3. 转折点昨天晚上我才发现已经有项目做的很强，成熟了。其中Mindcraft实现LLM在我的世界服务器中进行命令深层思考然后调用项目中做好的动作逻辑。相比较我的AIP优点是完全可以AI驱动运动，而不是脚本写死的任务。不过，运行一晚上后发现Mindcraft项目很耗费延迟，很容易卡死循环，任务复杂很难依靠简单API去完成，这需要更好的机器（基础设施）。已经把Mindcraft项目加入我的AIPlayers项目中，意味着我的项目跃升至AI智能化，旧AIP项目做了寻路A*算法、动作逻辑、GOAP，但是依旧不智能，自从加入Mindcraft就已经更上一层楼了！🤗{% comment https://www.hansjack.com/memos#comment-36 %}

Vue3Admin: 一款必备的Typecho后台面板插件
type: item
date: 2026-02-13T03:03:00+00:00
description: 1、制作背景和功能预览https://github.com/mx-space/mx-admin界面参考与布局实现：Vue3Admin 的后台视觉与交互中，存在基于 mx-admin 的结构化参考与适配实现。采纳内容：侧边栏/内容区变量体系（--sidebar-width、--page-bg、--content-shadow 等）、折叠与移动端遮罩布局思路、Toast 的 sonner 风格层次、评论页 master-detail 分栏交互、Dashboard/Settings 的间距与尺寸标尺映射。调用点：Vue3Admin: admin/assets/app.css, admin/assets/app.js; 来源参考: mx-admin/src/components/sidebar/index.module.css, mx-admin/src/layouts/sidebar/index.module.css, mx-admin/src/layouts/sidebar/index.tsx, mx-admin/src/index.css目前Typecho的后台面板即便官方1.3.0依旧没有进行美化（轻量博客系统，也是合理之中）。于是，参考mx-space系统的后台面板界面进行制作适合现代化的后台面板插件：Vue3Adminhttps://github.com/TGU-HansJack/Vue3Admin-Typecho仪表盘数据统计：图表、数字、快捷操作博文编辑器基于Vditor编辑器，全屏编辑等文件管理提供网格布局预览提供友链页面和功能支持额外功能展示插件面板和守兔塔安全插件功能 免费开源Typecho守兔塔防御应用插件 - 李的日志维护进行备份、升级更加详细的路由数据更完善的AI功能更完善的数据存储本地化更细节的通知系统更好用的代码编辑器和自定义字段更细粒化的权限2、如何使用（1）安装与启用将插件目录上传到：usr/plugins/Vue3Admin/。在 Typecho 后台插件管理中启用 Vue3Admin。启用后插件会自动：复制插件内置的 admin/ 到站点根目录：/Vue3Admin/。修改站点根目录 config.inc.php 内的 __TYPECHO_ADMIN_DIR__ 为 /Vue3Admin/，从而“弃用”旧的 /admin/。完成后请通过 https://你的域名/Vue3Admin/ 访问新后台。（2）如何补救？修改config.inc.php文件中的：// admin directory (relative path) define('__TYPECHO_ADMIN_DIR__', '/Vue3Admin/');如果后台出现域名被截断，补齐域名即可，目前没有解决这个问题。（3）如何添加前台访客统计为了避免把后台面板请求计入统计，并兼容一些缓存/静态化场景，推荐在主题的 footer.php（或页面底部公共文件，建议放在 前）添加以下代码： 其他说明：记录字段：访问 IP（服务端获取）、访问路径（path）、文章 ID（cid，仅文章页）、访问设备（由 UA 解析）、访问时间（服务端时间）。上报端点：站点根目录的 /Vue3Admin/track.php（插件启用后会自动部署）。如果站点在反代/CDN 后，想显示真实访客 IP，请确保服务器正确传递 CF-Connecting-IP / X-Forwarded-For / X-Real-IP 等请求头。（4）插件的配置在插件设置中可配置：主色（Primary Color）：用于面板主题色（CSS 变量）。Vue3 CDN：默认使用 https://unpkg.com/。ECharts CDN：默认使用 https://cdn.jsdelivr.net/。如站点环境无法访问外网 CDN，请替换为自建静态资源地址。3、数据库相关介绍1.2.3版本之前（不包括1.2.3版本）：插件会自动创建/升级数据表（表前缀统一使用 v3a_，实际表名会拼接 Typecho 表前缀，例如 typecho_v3a_visit_log）。注：后续会将数据库转本地文件存储，避免数据库操作复杂或者其他安全问题。1.2.3版本后本地化数据，需要迁移操作！1.2.3版本开始替换本地数据，之前的版本如何迁移数据？可以通过维护/升级底部的旧数据迁移进行删除旧数据库、然后生成目前本地数据（如图）4、如何升级？请下载>=1.1.0版本！在后台面板的左侧栏中，底部维护下拉菜单有升级页面，点击进入，右上角的蓝色下载图标按钮就是升级按钮。必要的时候可以设置升级决策：严格升级 不以 release 为准，直接对比 GitHub 默认分支最新 commit。全局替换 升级时同步替换站点根目录 /…

自制Obsidian插件发布文章
type: item
date: 2025-08-21T05:16:00+00:00
description: 前言很显然，这篇文章是使用我自己制作的obsidian插件发布的文章，既可以使用手机版本的obsidian也可以在windows上面使用obsidian进行发送文章，先设置obdsidian插件比如xmlrpc的链接，账号密码等。一、插件说明为了防止文件上传出错，我并没有加文件上传的逻辑，不过可以使用piclist等插件继续上传文件。1、功能要点使用 XML-RPC 对接 Typecho，支持：标题 title自定义路径 slug标签 tags（数组或逗号分隔）分类 categories（可选）文章内容（当前笔记正文）是否草稿 draft（发布时 publish=false）首次发布会把返回的 cid 写回到笔记 Frontmatter（默认键名 cid），二次发布自动改为 editPost 更新。支持自行映射 Frontmatter 字段名（如把 tags 改成 blogtags 等）。2、安装与配置插件文件夹名：typecho-xmlrpc-publisher下载最新版本，解压 ZIP，把整个 typecho-xmlrpc-publisher 文件夹放到你的库目录：<你的库>/.obsidian/plugins/在 Obsidian 设置 → 第三方插件，启用 Typecho XML-RPC Publisher。typecho需要的配置：obsidian最新版本配置：版本下载最新1.3版本(1.0是打包文件，后续只更新main.js文件，只发布代码，代码在更新内容后面)，添加mainifest.json文件在插件里面：{ "id": "typecho-xmlrpc-publisher", "name": "Typecho XML-RPC Publisher", "version": "1.3.0", "minAppVersion": "1.5.0", "description": "通过 XML-RPC （MetaWeblog） 将当前笔记发布到 Typecho 博客。支持标题、slug、标签、类别、草稿；可选是否更新发布时间；支持强制同步服务器发布时间。", "author": "Hans J. Han", "authorUrl": "https://www.hansjack.com", "isDesktopOnly": false, "js": "main.js" }最终插件文件夹有：如果样式错乱，可以添加styles.css文件：.post-card, .comment-card { border: 1px solid var(--background-modifier-border); border-radius: 6px; padding: 10px; margin-bottom: 10px; } .post-header, .comment-header { display: flex; justify-content: space-between; align-items: center; } .post-title { font-weight: bold; color: var(--text-accent); text-decoration: none; } .post-meta { font-size: 12px; color: var(--text-muted); margin-top: 4px; } .post-actions, .comment-actions { display: flex; gap: 6px; /* 按钮间距 */ } .action-btn { padding: 2px 8px; border-radius: 4px; border: 1px solid var(--background-modifier-border); background: var(--interactive-normal); cursor: pointer; } .action-btn:hover { background: var(--interactive-hover); }其他配置默认即可：参考我的Typecho配置：Endpoint：Typecho 的 XML-RPC 入口（常见为 https://你的站点/action/xmlrpc，需后台启用 MetaWeblog/XML-RPC 功能）Username / Password：Typecho 后台账号Default Blog ID：填 0Frontmatter 映射：可修改 title/slug/tags/categories/draft/cid 对应的键名3、使用说明参考文章：--- title: slug: tags: categorie…