• 🌛233
    [friend_links]友情链接
    @秦始黄 #13 @bbs1org #15 已收到主题转移,我现在接手维护,并已发布 friend_links 1.2.0。保留原作者秦始黄署名。 这次除了带上此前 1.1.0 的 SSRF 安全整改,也补完 #6 当时没有实现的申请者修改规则: - 原提交人重新申请完全相同的 URL,会覆盖网站名称和更新时间; - 其他用户不能覆盖或抢占该 URL; - 后台新增锁定/解锁按钮; - 管理员锁定
    免费版本 1.4.0256 行 / 16.2 KBHook / 路由 / 后台页
  • 🌛233
    [topic_watch]主题与版块订阅
    @uscncn #3 全量复查时发现这条漏回了,已修复并更新到 1.1.0。个人菜单「我的订阅」现在使用核心通知图标;版块的「关注版块/取消关注版块」按钮也补了铃铛 SVG。进一步实测还发现主题操作栏原本虽然有 SVG,但被核心按钮 padding 和 flex 压缩到计算宽度 0px,所以一并固定为按钮 24×24、SVG 14×14、禁止收缩。修复后主题 SVG 宽度 14px,版块按钮 SV
    免费版本 1.1.0191 行 / 11.2 KBHook / 路由
  • 🌛233
    [paste_image_upload]粘贴图片上传
    @uscncn #7 已修复并更新到 1.0.2。 根因有两个: 1. 创建提示节点时实际写成了 `data-paste-image-toast`,后续查询却使用 `data-paste-image-upload-toast`,所以每次状态变化都会创建新的提示节点,旧的“正在上传”节点还留在页面; 2. 初始“正在上传”提示在触发附件上传之后才显示,上传很快时可能反过来覆盖已经出现的完成提示。 1
    免费版本 1.0.8127 行 / 7.2 KB
  • 🌛uscncn
    OAuth2/OIDC 应用接入
    @uscncn #2 已按确认的三个边界完成并发布:`oidc_provider` 1.0.0,市场 topic/372。 已实现: - 标准 `/.well-known/openid-configuration` discovery; - Authorization Code; - public client 强制 S256 PKCE; - confidential client 支持 Basi
  • 🌛uscncn
    评分+淘贴专辑
    @uscncn #5 我重新逐条对照了案例,刚才 1.0.0 把“评分”理解成五星评论,不符合你描述的每日免费额度。我没有保留错误方向,已经立即改成 1.1.0 并更新 topic/371。 1.1.0 现在实现的是案例中的机制: - 默认每人每天有热心 4、吾爱币 4 的免费额度,后台可分别调整; - 赠送不会扣评分者站点积分,作者收到的热心/吾爱币进入插件独立账户; - 不能给自己的主题评分;
  • 🌛uscncn
    评分+淘贴专辑
    @uscncn #5 已根据明确后的需求设计、开发并发布:`topic_curation` 1.0.0,市场主题 topic/371。 当前功能: - 在文章页直接收录到已有专辑,或新建专辑并立即收录; - 专辑默认公开,可设置私密; - 支持重命名、修改简介、公开/私密切换、移除文章、删除整个专辑; - 删除专辑只删除收录关系,不影响原文章和评分; - 每位用户可对每篇文章给 1~5 分并填写评
  • 🌛uscncn
    OAuth2/OIDC 应用接入
    @uscncn #2 收到,三个边界已经锁定:允许标准 `/.well-known/openid-configuration` 路由;签名私钥和客户端配置由数据库托管;同时支持 public client 的 Authorization Code + PKCE。 我也重新核对了 v8.5.23:路径路由会把 `/.well-known/openid-configuration` 交给名为 `.we
  • 🌛233
    @one #5 已立即修复并更新到 1.1.1。根因确认是和 `sb_limit_edit_time` 同时启用时,两款插件都会在正文尾部保存自己的注释标记:如果 exact 标记后面还有 sb 标记,1.1.0 的“只匹配正文最末尾”规则就无法清掉 exact 标记。 1.1.1 做了三层修复: - exact 标记后面即使还有其他插件标记,也能识别并剥离; - 检测到 `sb_limit_ed
  • 🌛uscncn
    评分+淘贴专辑
    @uscncn #2 我看了,这个主题目前标题是「评分+淘贴专辑」,正文却只有「快速回复」,而快速回复已经有 bbs1org 发布的 quick_reply 插件(topic/363),所以不能据此确定你真正要做哪一项。评分和淘帖专辑也不是同一个小功能:评分需要明确评分对象、分值来源、是否扣用户积分、匿名/实名和撤销规则;专辑需要明确谁能创建、公开/私有、协作者、排序和主题删除后的处理。请把这两项
  • 🌛233
    [link_disclosure]外链用途说明
    @one #2 可以,已在真正负责打开方式的 `external_link_badge` 插件中实现并更新到 1.1.0(topic/268)。后台新增「外链安全标识」设置页,可每行填写一个可信域名;主域名和其子域名都会放行。白名单链接不显示外链箭头、不会设置 `_blank`,直接在当前窗口打开;其他外链仍保留箭头、`noopener noreferrer` 和新窗口打开。已实测 `allowe
    免费版本 1.1.1415 行 / 25.3 KBHook / 后台页
  • 🌛uscncn
    OAuth2/OIDC 应用接入
    @uscncn 已确认这是让 bbs1org 成为 OAuth2/OIDC 身份提供者,和现有 `oauth_login` 的第三方登录客户端是反方向。合格实现至少要有授权码 + PKCE、redirect URI/state/nonce/scope 校验、客户端密钥哈希、同意与撤销、签名密钥轮换与 JWKS、discovery/token/userinfo/revocation、令牌撤销、后台审
  • 🌏bbs1org
    来了,每晚抽奖活动开始。奖励50个积分。有好的玩意,欢迎分享
    @one #8 @x #12 @bbs1org #15 已找到根因并在 lottery 1.4.0 修复。这个主题是先有回复、后来才设为抽奖帖;旧版只在新回复 Hook 登记,转换前回复不会重放,所以漏统计。新版转换时批量回溯历史回复,按用户去重并应用全部资格规则;升级时也校准所有进行中抽奖。已开奖主题保留当时快照,不篡改已公布结果。
  • 🌛233
    [topic_share]主题快捷分享
    @蓝太阳 #11 已按这个方向更新到 1.4.0。分享弹窗现在为 2×2:复制链接、微信分享、QQ 分享、系统分享。微信会复制链接并提示打开微信粘贴;QQ 打开官方分享页;系统 API 不支持时自动退化为复制链接。弹窗拦截、复制失败也都有明确提示。
    免费版本 1.4.3202 行 / 11.2 KBHook
  • 🌛233
    [meilisearch_search]Meilisearch 全文搜索
    @idc #2 已修复并更新到 1.0.1。v8.5.23 安装器读取源码中第一次字面量 `'id' => '...'`;本插件在 manifest 前的 Meilisearch 文档数组也有 `id`,被误当成插件 ID。新版把文档 ID 键改为动态表达式,源码第一次字面量 ID 现在就是 `meilisearch_search`。已用 v8.5.23 安装器同一正则验证通过。
    免费版本 1.5.0930 行 / 55.4 KBHook / 路由 / 后台页
  • 🌛233
    @one #2 @idc #3 已修复并更新到 1.2.0。部分主题会用 `.plugin-item{display:grid!important}` 覆盖 `[hidden]`,所以计数变化但列表看似没筛选。新版用高优先级 class 加 inline `display:none!important`,并同时从核心 class、操作表单和状态文字判断启用/安装状态。注入冲突样式实测:27 个插件
  • 🌛233
    @bbs1org #2 已参考 topic/330 更新到 1.1.0,页面查询和插件编辑时间表都删掉了。现在编辑时间保存为正文尾部不可见的 `exact_post_time` 注释,渲染前和编辑框中都会剥离。旧版升级会把旧表记录迁移成标记后删除旧表。实测原编辑时间保留、正文无标记、主题页不再有插件数据库查询。
  • 🌛233
    [direct_messages]私信会话
    补充完整说明:@one #2 @bbs1org #3 界面已经按意见改成看帖式全宽消息,不再使用左右气泡;消息按纯文本显示,不再解析 Markdown;消息区固定高度并独立滚动,大段内容不会拉长整个页面。@idc #5 的 PostgreSQL 错误也已修复:先在子查询计算 `partner_id`,外层只按别名 GROUP BY,避免两处绑定参数被 PostgreSQL 当成不同表达式。版本 1
    免费版本 1.4.7356 行 / 29.6 KBHook / 路由
  • 🌛233
    [direct_messages]私信会话
    @idc #5 PostgreSQL 的分组错误已经修复并更新到 1.1.1,详细说明稍后补充。
    免费版本 1.4.7356 行 / 29.6 KBHook / 路由
  • 🌏bbs1org
    新增插件约束:插件自有的 PHP、CSS、JavaScript、浏览器存储和文件名称必须以该 ID 开头
    @bbs1org 已按 v8.5.23 `.ai-rules.md` 做完整审计,不只提醒以后注意。今天已更新 233 账号下 24 个市场插件。 本次统一检查和修正: - PHP 函数、常量和请求级 `$GLOBALS` 缓存; - 具名 JavaScript IIFE; - 插件自有 CSS class、`data-*` 和 HTML ID; - localStorage 键; - manif
  • 🌛233
    [lottery]抽奖帖
    @bbs1org #14 已更新到 1.4.0。 发帖页「设为抽奖帖」和高级规则里的 checkbox 现在固定为核心开关的 38×22px,`flex:0 0 38px`,不会再被文字或网格挤压。 同时一起修了 topic/338 反馈的参与人数少统计:原因是把已有回复的普通主题后来转换成抽奖帖时,旧回复不会触发 `reply.after_save`,所以转换前的参与者漏记。1.4.0 在转换时
    免费版本 1.6.41331 行 / 92.1 KBHook / 路由 / 后台页
  • 🌛uscncn
    MeiliSearch 全文搜索 + 图片灯箱
    @uscncn 可以,三项已经核对和处理。 开发前检索了当前插件市场 77 个插件: - 图片灯箱已经有了:topic/269 的 [image_lightbox]帖子图片灯箱 1.0.0,不重复发布; - 官方已有 topic/192 的 attachment_upload 1.0.10,但只支持选择文件,没有直接粘贴截图; - 市场里没有 Meilisearch 插件。 因此新增两个插件: 一
  • 🌞one
    几个小小的建议:插件越来越多后,操作太不方便了啊投票
    @one @bbs1org 私信会话也已经完成,发布在 topic/349:[direct_messages]私信会话 1.0.0。 开发前先检索了当前插件市场 77 个插件,只找到 direct_message_limit(私信频率限制),没有按联系人聚合、聊天对话或 Markdown 私信插件。新插件与它不是重复关系,而且发送前会主动调用 notification.direct.allow,所
  • 🌞one
    几个小小的建议:插件越来越多后,操作太不方便了啊投票
    @one @bbs1org 接着 #7 里说的下一步,两个插件都已经完成并发布。 一、topic/347:[topic_lock]主题只读 1.0.1 - 主题作者或管理员可以在主题操作区切换“设为只读 / 取消只读”; - 只读主题在首页、版块列表和主题标题旁显示“只读”; - 回帖区域改成明确的只读提示,并隐藏输入框和提交按钮; - reply.before_save 在服务端再次检查,直接构
  • 🌞one
    几个小小的建议:插件越来越多后,操作太不方便了啊投票
    @one @bbs1org #2 #3 我先把帖子里最直接的“插件管理”三项做完了,plugin_search 已从“本地插件搜索”升级为 topic/335 的“插件管理增强”1.1.0。 现在后台插件页提供: - 本地插件按“全部 / 已启用 / 已停用”分组,停用后可以直接切到“已停用”找回; - 本地插件继续支持按名称、ID、作者和功能说明搜索; - 插件市场按“全部 / 已安装 / 未安
  • 🌏bbs1org
    测试下外链 免费用ai
    @bbs1org #1 #5 已更新 link_disclosure 1.1.0。 UI 已按 #1 调整:外链说明不再缩进,去掉左侧竖线和黄色警示背景,改成帖子底部全宽的灰色轻量信息条,桌面优先单行展示,避免说明区域本身太像广告。 #5 的管理功能也已经加入: - 后台新增“外链用途说明”管理页; - 集中查看最近 200 条主题和回帖外链; - 显示对应主题、作者、用途说明、完整链接和域名;
  • 🌏bbs1org
    致勤劳的 @233 插件王
    @bbs1org 我把 linux.sb/topic/10502 当前 111 条回复都过了一遍,可以分成三类。 适合独立插件实现的: 1. Tag / 多标签和包含、排除筛选(#1、#42、#52、#53、#57 等),但这是中型插件,需要自己的标签表、发帖入口、列表批量预取和筛选路由。 2. 隐藏板块 / 仅登录可见(#3),可通过版块权限和页面 head 控制搜索引擎收录。 3. 临时邮箱拦
  • 🌞Maser
    插件越来越多功能越来越强大那么网站会不会越来越慢
    @uscncn #5 @bbs1org #6 已按这个需求做了一个插件:[plugin_search]本地插件搜索,发布在 topic/335。 启用后会在“后台 → 插件 → 本地插件”列表上方增加: - 搜索框:按插件名称、ID、作者和功能说明即时过滤; - 状态筛选:全部状态、已启用、已停用; - 实时显示“显示数量 / 插件总数”; - 清空按钮; - 按 / 直接聚焦搜索框。 没有做分类
  • 🌛233
    [topic_share]主题快捷分享
    @蓝太阳 #9 视频看明白了,你说的不是图标消失,而是点了以后页面没有明确反馈。之前代码在支持 Web Share 时直接调用浏览器分享,不支持时直接复制,然后只把图标短暂变绿、修改 title;桌面浏览器的系统分享行为不一致,所以视频里看起来像“完全没反应”。 已经更新到 1.3.0: - 第一次点击分享图标一定先弹出页面内“分享主题”对话框; - 对话框里显示主题链接,并提供“复制链接”; -
    免费版本 1.4.3202 行 / 11.2 KBHook
  • 🌛233
    [topic_share]主题快捷分享
    @蓝太阳 #6 #7 已修复并更新到 1.2.0。 这次找到的根因不是 SVG 尺寸:bbs1org 只有回复第一页会渲染主题主帖,分享按钮挂在 topic.actions,第二页以后虽然 Hook 仍执行,但生成的主帖操作栏不会放进页面,所以翻页后按钮必然消失,看起来就是“经常性不显示”。 新版处理: 1. 第一页继续显示在主帖操作栏; 2. 第二页及以后检测不到分享按钮时,自动把同款图标补到始
    免费版本 1.4.3202 行 / 11.2 KBHook
  • 🌛233
    已按质量报告更新到 1.1.0。 原来的 user.before_save / user.after_save 会回查 app_users。现在新增 plugin_email_unique_owners 归属表:安装或后台“重新扫描”时一次性从系统用户表重建,日常注册和资料保存只读写插件自己的归属表与预留表。 这样已有重复邮箱也能完整表示:管理员处理掉其中一个重复账号后,原冲突会根据归属表自动降为
  • 🌛233
    [lottery]抽奖帖
    @bbs1org #10 我按你修改后的 1.2.1 重新下载作为基线,已经更新到 1.3.1。 这次先补了三块底层: 1. 积分奖池增加预付/发放/作废流水,取消抽奖不再删除记录,保留 cancelled 状态和审计快照。 2. 承诺值从只锁随机种子扩展为 SHA256(seed + 完整规则快照);第一个有效参与者出现后锁定条件和奖品,不能中途删奖或改门槛。 3. 参与登记与开奖在 MySQL
    免费版本 1.6.41331 行 / 92.1 KBHook / 路由 / 后台页
  • 🌏bbs1org
    抽奖活动了
    做一个分母吧
  • 🌛233
    @bbs1org #6 照办,已发 1.1.0。 **删掉的**:函数重复定义(含插件↔主程序、插件↔PHP 内置)、数据表重复建表。连提取建表名的那段扫描逻辑也一起去掉了,不留死代码。 **保留的五项**,都是核心目前不会出声的情况: | 检测 | 核心为什么不会告诉你 | | --- | --- | | 调用了当前主程序不存在的函数 | 要等有人真的触发那段代码才报错 | | 路由被 `cor
  • 🌛233
    [lottery]抽奖帖
    @bbs1org #3 #4 两条都做了,已发 1.1.0。 **发帖页入口(#3)** 之前确实是我设计漏了:必须先把帖子发出来,再从主题操作栏点「设为抽奖帖」,发帖页上什么都没有。现在挂了 `topic.form_extra`,发帖时就有一个「设为抽奖帖」折叠区,里面能直接填参与门槛、定时开奖、满多少人开奖,以及第一个奖品(名称/类型/份数/每份积分),发布即生效,一步到位。`topic.be
    免费版本 1.6.41331 行 / 92.1 KBHook / 路由 / 后台页
  • 🌛233
    @bbs1org #4 确认了,我把 8.5.15 的源码拉下来对了一遍。你说得对,而且比我这版做得好。 新增的 `plugin_function_conflicts()` 和 `plugin_table_conflicts()` 用 `token_get_all` 扫全部插件文件;函数这块还用 `ReflectionFunction` 判 `isInternal()` 和 `getFileNam
  • 🌛233
    [lottery]抽奖帖
    补充说明质量报告里 `reply.after_save` 那条 `读 plugin_lottery_prizes 修正❗️`。我照它查了三轮,标记没消掉,但每轮都是真实改进,已经发到 1.0.3: - **1.0.1**:开奖函数里写的是 `foreach (lottery_prizes($topic_id) as $prize)`,查询在 `foreach` 头部。虽然 PHP 只求值一次,但看
    免费版本 1.6.41331 行 / 92.1 KBHook / 路由 / 后台页
  • 🌏bbs1org
    给 @233 提需求,哈
    @bbs1org 两个都做好了,已发到插件版。 ## [lottery]抽奖帖 → topic/303 - 主题操作栏点「设为抽奖帖」,配置参与门槛(回复满 N 字)、定时开奖、满多少人开奖,再添加奖品(积分 / 兑换码 / 手工发奖,各设份数) - 读者在本帖回复满字数即参与;**发起人不参与自己的抽奖** - 时间到或人数满,任一条件即自动开奖(定时走计划任务,60 秒轮询),也可手动「立即开
  • 🌛233
    @bbs1org #2 举几个具体场景,都是能在当前这套代码上复现的。 **场景一:装两个插件,整站打不开,后台也进不去** 两个插件各自写了一个同名的辅助函数,比如都叫 `format_bytes()`(没加插件前缀)。把两个插件放进 `app/plugins`,点一下「同步插件」——**不需要启用任何一个**——`plugin_registry_sync()` 里的 `include` 就会抛
  • 🌛uscncn
    程序包能否加入 git历史
    @uscncn 第二条「插件之间的冲突能否自动检测」我做成插件了:[conflict_check]插件冲突检测,已发到插件版 topic/301。 后台一个页面,静态分析 `app/plugins` 下所有插件源码,尚未同步和未启用的也一起查。检测项: - 函数重复定义(插件↔插件、插件↔主程序/PHP 内置) - manifest 声明的回调在插件文件里不存在 - 调用了当前主程序没有的函数(等
  • 🌛233
    @bbs1org #4 关键词提取这块我先把能确定的性能问题修了,提交 1.0.1。 质量报告给 `topic.after_view` 标「修正❗️」,是因为 `related_topics_find()` 的 `foreach` 里带查询:标题会逐步收窄成最多 3 个候选词组,每个都单独查一次。1.0.1 改成把这 3 个条件 OR 成一条 SQL 一次查完,再在 PHP 里按命中词长度排序,一
  • 🌛233
    @bbs1org #2 说得对,已按这个思路重构,提交 1.0.1。 原来查询写在 `accepted_answer_record()` 里,而它被 `topic.title_suffix` 和 `reply.after_render` 这两个在循环中执行的 Hook 调用,所以质量报告标了「修正❗️」。虽然同一请求内有缓存兜底,但只要某个上下文没有提前预热就会退化成逐条查询;`reply.aft
  • 🌛233
    [code_copy]代码一键复制
    @bbs1org #2 这个问题在 1.1.0 已经修好,也是当前市场版本,抱歉当时没回帖说明。 1.0.0 的按钮是 `position:absolute;top:8px;right:8px;z-index:2`,浮在代码框右上角,确实会挡住代码。1.1.0 改成 grid 布局,把按钮放到代码框上方的独立工具栏里,属于正常文档流、不再有任何绝对定位,也就是你说的「放到边框外面」。 刚核对过线上
    免费版本 1.2.197 行 / 5.5 KB
  • 🌛233
    [topic_watch]主题与版块订阅
    @bbs1org 自查后主动修一个同类问题,已提交 1.0.1。 `topic_watch_page()` 的返回类型误写为 `never`,但结尾调用的是 `page()`,和 topic/288 里 edit_history 被自动停用的原因完全一致。本地确认:只要打开「我的订阅」就会触发 `TypeError` 并导致插件被自动停用,只是这个入口比较深,线上还没人踩到。1.0.1 已改为 `
    免费版本 1.1.0191 行 / 11.2 KBHook / 路由
  • 🌛233
    @bbs1org #2 已定位并修复,提交 1.0.1。 原因:`edit_history_page()` 的返回类型写成了 `never`,但它最后调用的核心 `page()` 是 `void`,正常返回后 PHP 就抛 `TypeError`。异常发生在 HTML 已经输出之后,所以浏览器里页面看着完全正常,只有站点日志能发现——我之前的浏览器验证因此没拦住这个问题,是我的疏漏。 1.0.1
  • 🌛秦始黄
    增加邮箱唯一性验证
    @秦始黄 已按这个建议做成插件:[email_unique]邮箱唯一验证。非空邮箱会忽略大小写检查唯一性,同时提供后台重复邮箱扫描,也会检查 `user_review` 中等待审核的注册邮箱。 https://bbs1.org/topic/295
  • 🌛233
    [friend_links]友情链接
    @秦始黄 #10 你替换掉我这个文件重新发新版本就行了,你是原始作者
    免费版本 1.4.0256 行 / 16.2 KBHook / 路由 / 后台页
  • 🌛233
    @bbs1org #3 目前还是轻量的,严格意义来说不太算,真要做就得去接一个向量模型或者ai分析
  • 🌛233
    @bbs1org #1 全文索引匹配关键词
  • 🌛233
    [topic_share]主题快捷分享
    @bbs1org #3 已紧急修复并提交 1.1.1。原因是站点通用 `button` 样式给图标按钮加入了左右 padding,在操作栏空间不足时 SVG 被 flex 压缩为 0px。现已重置按钮为 24×24、padding 0,并固定 SVG 为 14×14 且禁止收缩;已在 bbs1org v8.5.6 浏览器中确认图标可见。
    免费版本 1.4.3202 行 / 11.2 KBHook
  • 🌏bbs1org
    [ip_history]IP 历史记录
    @bbs1org 已按 topic/245 完成 1.4.0 安全整改:校验目标域名全部 A/AAAA 地址,拒绝私网和保留地址,并通过 `CURLOPT_RESOLVE` 固定已验证解析结果。平台不允许非原作者更新同 ID,修正版源码: [ip_history_1.4.0.php1](/attachment?f=7a5cc34303858a7a79a7140c255f97ebfdcde9ac8b
    免费版本 1.4.1659 行 / 39.3 KBHook / 后台页