Skip to content

限额与边界规则

本页汇总 DSH-Guild 的业务限额,并收录那些不体现在限额表里、但会影响使用方式的边界规则。限额全部集中在 packages/server/src/constants.ts 维护(社区加入数上限在社区路由内校验),不通过环境变量注入,需要调整直接改代码。

各模块的完整功能清单见功能清单,权限相关见权限与角色

一、限额总表

项目说明
每用户创建社区5 个 / 24 小时滚动窗口限流,防滥用
每用户加入社区20 个含自建
单条消息长度4000 字符Markdown 原文
单条消息附件数4 个图片与文件合计
单个上传对象50 MiB附件与分享包统一,走直写 R2 的单次 PUT
分享包体积50 MiB与上传上限同源;客户端可在插件设置 share.maxSizeMb 调小
附件原始文件名200 字符
讨论组名称80 字符
讨论组自动归档24 小时无新消息即归档,有人发言自动恢复
频道名1 ~ 80 字符
消息撤回窗口2 分钟超时后作者只能编辑,不能撤回;MANAGE_MESSAGES 不受此限

二、边界规则

限额表之外,还有一些规则会实际影响使用方式,但不容易从功能列表看出来。以下逐条列出。

附件上传不走 API 体积上限

普通 API 请求的 body 上限是 5 MiB,但 PUT /api/r2/objects(附件与分享包直传)豁免这一限制,直接按 50 MiB 的单次 PUT 走 R2。所以「附件能传 50 MiB」和「API body 限 5 MiB」并不矛盾 —— 前者不经过后者。

消息撤回与编辑是两个窗口

动作作者本人MANAGE_MESSAGES
编辑随时随时
撤回发送后 2 分钟内随时,不受限制

超窗口撤回会返回 RETRACT_EXPIRED(403),但编辑不受 2 分钟限制 —— 超时后作者仍可改内容。见权限与角色

未读与提及的计数口径

  • 自己发的消息不算未读,否则发完就给自己亮角标
  • 未读按 创建时间 > 我的已读位点 统计,已读位点存的是毫秒时间戳,不是消息 id
  • 进不去的私密讨论组不返回未读(既不亮角标,也不泄露该组是否活跃),只返回带 locked 标记的元数据

讨论组是惰性归档,没有定时器

自动归档不是在服务端跑定时任务,而是在读写列表时顺带检查状态为活跃距上次活动超过 24 小时 才归档,同时写入归档时间。所以「归档时间」可能略晚于「最后一次活动 + 24 小时」—— 取决于下次有人打开列表的时机。讨论组内再有人发言即自动恢复活跃。

公告频道的只读是「自动覆盖」

把频道类型切成 公告 时,系统自动为 @everyone 写入一条 deny(禁「发送消息」+「创建讨论组」);切回其他类型时自动撤销。因为 owner 绕过一切频道覆盖,所以 owner 在公告频道依然能发言,无需额外授权。你可以在自动覆盖之上继续手动调整,更新时会保留你已有的 deny 位。

发现页的排序不等于置顶

热门 按成员数排、活跃 按最近发言时间排、最新 按创建时间排。只有在没有搜索关键词时官方社区才会被置顶;一旦输入搜索词,就完全按排序规则返回,不再特殊对待。

邀请有两条路径,行为不同

路径对象建邀请记录发站内信发邮件
站内邀请已注册用户
站外邀请邮件任意邮箱

受理前会拦截两种情况:对方已是成员(409 ALREADY_MEMBER)、对方已有一条待处理邀请(409 INVITE_DUPLICATE)。接受 / 拒绝、或对方通过邀请码或公开社区自行加入时,会把遗留的待处理邀请一并收尾。

在线状态按窗口可见性判定

在线 / 离开只看 document.visibilityState刻意不用窗口焦点 —— 否则切到别的窗口就会被误标为离开。收到某人「离开本房间」的通知时客户端不会直接删掉他,而是去抖后重拉社区快照,因为他可能正在同一社区的其他频道在线。

讨论组的可见性与连接是两道门

即使讨论组本身可见,建立实时连接仍先要求父频道的「查看频道」权限,通过后才判讨论组可见性。私密讨论组的可进入者 = 发起人 / 组内成员名单 / 持有社区「管理讨论组」权限者。

分享包的可见性跟着来源社区走

isPublic 只在来源社区是公开社区时才为 true。也就是说,在私有社区里创建的分享不会因为「分享本身标记为公开」而对外可见。

三、插件设置

默认说明
serverUrlhttps://dsh-guild-api.huiwang.funServer 地址;自托管就改成自己的域名
handle""当前账号用户名(登录后自动写入)
token""(secret)会话令牌,登录后自动写入
autoReconnecttrueWebSocket 断线自动重连
share.maxSizeMb50会话分享包体积上限

首次启动会把默认 serverUrl 写进 DSH 的 settings 文档($DSH_HOME/settings.yamlguild 段):

yaml
guild:
  serverUrl: https://dsh-guild-api.huiwang.fun

之后以这份配置为准,启动流程不会覆盖你改过的值。