我的社区分数莫名其妙掉了 1 分,找不到解决方案,只能去看源码分析了。

洛卡卡了 2026-07-17 17:54 1


我今天登录 CDK 的时候突然发现我的社区分数从 100 掉到 99 了 ^-^


卧槽,啥情况 这个还会掉的吗,我好像徽章也没变少啊,然后我搜了下站内相关的帖子好像没找到相关的说明解释,然后我看到了站内这位佬分享的CDK 社区分数机制详解说的是分数降低可能是因为违规了,但是按照每次扣 5 分的话,我也才掉了 1 分啊,关键是我也没被举报过呀,所以没办法我也开始去仓库 GitHub - linux-do/cdk: LINUX DO CD key · GitHub 梳理这个 ckd 的机制。然后我在大佬的分享的基础上再做一下完整的补充吧。



[!info] 先说明一下,这个是我基于仓库源码、公开接口及社区讨论进行的个人分析和总结,不代表 Linux DO 官方立场,也不保证未来版本不会调整。请以实际体验为准哈。





一、基本定义


首先CDK 社区分数 是 CDK 平台根据用户在 Linux DO 获得的徽章,以及在 CDK 平台产生的违规记录 计算出的一个内部准入指标。


我个人总结下来,它主要是用于判断 L 站用户能否发现查看和领取设置了最低分数要求的福利项目,比如:



[!example]

站内很多大佬发的邀请码、激活码、额度等福利,会要求“社区分数达到 X 分”才能领取(除了信任等级/用户等级外,这是另一个门槛)。分数不够的话就领不到。



我这边根据源码总结的机制如下:



[!info]



  • 分数范围:-100 至 100

  • 新用户初始分:通常显示为 0(需等待异步计算)

  • 主要加分来源:Linux DO 徽章对应分值

  • 明确扣分来源:CDK 管理员确认的项目违规记录

  • 数据存储:MySQL(最终分数) + Redis(徽章权重缓存)

  • 更新方式:定时任务 + 异步 Worker



大概就是上面这个核心机制了,然后还需要区分一些概念信息:



[!info]



  • Linux DO 信任等级:0 至 4 级,是独立的项目准入条件。

  • LDC 积分:用于付费领取或积分流转,与社区分数不是同一种积分。

  • Leaderboard 点数:LDC 的上游数据来源





二、 在哪里查看社区分数


既然分享了,这里就完善一下吧。


1. CDK 前端页面


我们登录 CDK 后,可以在个人信息或账户菜单中查看当前社区分数。


其中页面展示的是 mysql 中当前保存的最终分数, 而不是徽章原始总分,也不会显示每个徽章分别贡献了多少分的。


2. CDK 用户信息接口


我们在登录状态下可以访问 /api/v1/oauth/user-info,比如我的是



图中返回字段的 score 就表示我们当前社区分数。


这个接口返回的是已经完成计算并保存的结果。如果异步任务尚未运行或者计算失败或者数据尚未刷新,接口仍可能返回旧分数或新用户的初始 0 分的情况。


3. Linux DO 徽章接口


Linux DO 全部徽章目录我们可以通过 https://linux.do/badges.json 来查看。


如果要查询指定用户的徽章信息可以通过 https://linux.do/user-badges/{username}.json 的地址查看,比如我查看我自己的是这样的。



但是这个 json 中并不会返回每个徽章对应的分数。好可惜。这些接口展示的是上游徽章数据,不等于 CDK 最终采用的完整分数结果。CDK 会结合 redis 中的徽章权重缓存和 mysql 中的违规次数重新计算的。




三、社区分数是怎么计算的


根据源码仓库分析的社区分数的核心计算关系为:



[!info] 最终社区分数 = 徽章原始总分 − (违规次数 × 单次扣分),并限制在 -100 至 100 之间。



默认情况下,每次违规是对应 5 分的惩罚。因此我们可以理解为:



[!info] 最终社区分数 = 徽章原始总分 − 违规次数 × 5 分。



这里需要注意的是,5 分是当前示例配置中的默认值,部署方是可以动态调整的。系统每次重新计算时,使用的是当时生效的配置,而不是在违规发生时写死一个永远不变的扣分金额的。


计算示例


比如某用户当前拥有的有效徽章合计为 85 分,但是他有 2 次 CDK 违规记录,那社区分数计算结果为 75 分。


当然,如果计算结果超过 100的话,最终只保存为 100;同样如果低于 -100的话,最终只保存 -100。


因此这样来看的话,页面上显示 100 分,并不代表用户的徽章原始总分一定正好是 100。原始总分可能是 100、105、120 或更高,只是最终显示被限制为 100分了。




四、哪些情况会加分


看了下,CDK当前没有直接根据发帖数量、点赞数量、登录天数、在线时长或论坛信任等级加分。系统明确采用的加分来源是 Linux DO 徽章,这个我们应该都是共识了。计算方式是这样的:



[!todo]



  1. CDK 从 https://linux.do/badges.json 获取徽章目录权重,缓存在 redis。

  2. https://linux.do/user-badges/用户名.json 获取用户拥有的徽章。

  3. 系统按徽章 ID 与 Redis 权重进行匹配和累计。这个徽章分数是存在 redis 里面的。



因此,只有我们发帖、互动或社区贡献只有在最终带来相应徽章时,才可能间接提高 CDK 社区分数。


至于徽章的权重是这样的:



[!example]



  • 大于 0 的徽章会加分。

  • 等于 0 的徽章不会影响分数。

  • 如果上游提供负数权重,也会降低分数,当前实现没有禁止负权重。

  • 用户拥有但 redis 中没有对应 id 的徽章会被忽略掉。

  • CDK 没有提供管理员在平台内配置每个徽章分值的功能(我在源码里面没找到,可能有另外配置平台,但是我通过代码看是读取 redis 的)。



所以总的来说徽章分值由 Linux DO 徽章接口提供,CDK 获取后缓存在 redis中使用的。




五、哪些情况会扣分


这个上面的大佬分享的帖子中还有我在站内搜索的都说的是只要违规被举报就会扣分。



因为我至今还没有违规被举报过,所以我在仓库中找到的唯一明确的本地扣分来源,是 CDK 项目被管理员正式判定为违规才算。


比如是这样的一个场景:



[!example]



  1. 用户举报一个 CDK 项目。

  2. 项目的举报数增加。

  3. 举报数达到系统阈值后,项目会自动隐藏并等待处理。

  4. 管理员审核项目。

  5. 只有管理员把项目状态判定为违规时,项目创建者的违规次数才会增加 1。

  6. 下一次社区分数重新计算时,系统根据违规次数扣分。



普通举报本身不会立即扣除项目创建者的社区分数。达到举报阈值并自动隐藏,也不等于已经确认违规了。




六、论坛被举报会影响社区分数吗


我根据仓库源码分析的是单纯在 Linux DO 论坛被举报的话,是不会被 CDK 直接读取并扣除社区分数的。


我看当前仓库并没有同步论坛举报次数、论坛处罚记录或论坛违规次数的功能的。CDK 直接记录的违规来源,是 CDK 管理员对 CDK 项目的违规判定这个。


不过论坛举报或处罚仍然可能会产生间接影响,比如:



[!example]



  • 如果导致某个徽章被撤销,下一次重算时徽章总分可能下降。

  • 如果导致论坛信任等级发生变化,用户下次登录 CDK 并同步资料后,项目的信任等级准入可能受影响。

  • 如果部署方启用了外部风控接口,相关风险信息可能导致请求被提示或阻断,但不会直接修改数字社区分数。



大概分析的就这么多了。




七、违规记录会过期或自动消除吗


这个基本上跟上面佬分析的是一致的。根据当前仓库实现,CDK 违规次数不会自动过期,也没有定期衰减机制。


所以每确认一次违规,违规次数会持续保留,并在今后的每次社区分数重算中继续参与计算。


但是这里我所说的永久累计还有两个比较重要边界情况,比如:



[!example]



  • 并不是每天重复新增一次 5 分扣除。一次违规始终对应一个违规计数,不会第二天自动变成两次违规的。

  • 永久存在的是违规计数及其扣分影响,不是用户总分永远固定不变。后续获得新徽章仍然可以抵消这部分扣分。



也就是说,除非管理员直接调整 mysql 数据,或者修改系统规则,或未来版本增加违规撤销功能,否则当前违规次数会一直保留的。




八、一次违规后,社区分数上限会变成 95 吗


因为我违规好像是永久的,且我们社区分数满分是 100,那如果违规一次是不是我们就永久社区分数上限 95 了呢?我之前是这样想的。但是我看了源码后认为是不一定的。


因为系统先计算徽章原始总分并扣除违规惩罚,最后才将结果限制到最高 100 分。


如果用户的徽章原始总分只有 100的话,一次违规后确实会得到 95 分。


但是如果用户的徽章原始总分达到 105,一次违规扣 5 分后仍然可以得到 100 分。


这样爱看的话,一次违规并不是把系统允许的最高分永久改成 95了,而是让用户获得满分所需的徽章原始分增加 5 分。


所以我们可以这样理解:



[!info] 达到满分所需的徽章原始分 = 100 + 违规次数对应的总扣分。



也就是说,一次违规默认需要至少 105 点徽章原始分才能显示 100 分;两次违规默认需要至少 110 点。




九、社区分数什么时候更新


这个其实都可以看出来,社区分数并不是实时同步的。


根据仓库代码,是按照当前示例配置和 Asia/Shanghai 时区来的:



[!todo]



  • 每天凌晨 1:00 更新徽章目录。

  • 每天凌晨 2:00 开始为近期活跃用户下发分数重算任务。

  • 用户任务默认间隔 1 秒下发,因此用户较多时,不会所有人都在 2:00 整完成更新。

  • 新用户第一次在 CDK 创建用户记录时,会额外下发一次首次计算任务。



而且定时任务不会无条件计算所有历史用户的。系统会选择最近登录过的活跃用户,计算窗口为 session 有效天数和 7 天中的较大值。按当前示例配置,可以近似理解为最近 7 天登录过的用户。当然这个是仓库里面写的,实际是否调整了定时机制就不得而知了。


现有用户重新登录时会同步用户名、昵称、头像、信任等级和最后登录时间,但不会因此同步完成一次社区分数重算。用户通常仍需等待异步任务的。


至于新用户为啥会是 0 分,可能是因为异步任务尚未完成,属于正常现象吧,等待定时任务刷新即行了。




十、为什么没有违规,分数仍然会降低呢


看源码分析的话,如果 mysql 中的违规次数确实为 0,分数降低大概率来自徽章数据发生变化了,而不是因为论坛举报的。


比如这些常见原因:


1. 用户拥有的徽章发生变化了


比如某个徽章被撤销,失效或者调整授予条件,又或者用户徽章接口暂时没有返回该徽章,都会导致下一次重算时少算对应分值的。


2. redis 徽章缓存被重建了


如果 redis 被清空了,或者迁移或重新初始化了,CDK 就会重新获取徽章目录的。重新获取到的权重与旧缓存不一致时,用户分数就可能发生变化的。


3. redis 徽章目录不完整


比如用户拥有某个徽章,但 redis 中缺少对应 id 时,该徽章就不会计入分数的。


4. 新增了负权重徽章


当前机制实现是允许负数徽章权重的。如果用户拥有这样的徽章,重算后总分可能下降。当然目前好像还没有这样的徽章吧?


5. 存在用户不可见的 CDK 违规记录


普通用户信息接口只返回总分,不返回违规次数。需要由平台管理员查询 mysql 才能完全确认是否为 0。 一般就是自己建立的 cdk 项目违规了。




十一、为什么会从 100 分变成 99 分


这个从源码分析后,为什么我的社区分数从 100 变成 99 了,我想可能是这样的。


页面显示的 100 分是经过上限处理后的结果,不代表此前徽章原始总分正好为 100。


例如,用户此前的徽章原始总分可能为 103,但页面只显示 100。之后某个徽章权重变化导致原始总分下降到 99,页面就会从 100 变为 99。


因此,从 100 变成 99 不一定意味着只少了 1 分,也可能是原先高于 100 的隐藏余量已经全部消耗。


主要是从代码来看当前系统没有为用户保存每次重算时的徽章明细快照,也没有公开的分数变更流水。因此,如果旧的用户徽章响应和 redis 缓存已经发生变化,事后可能无法准确还原究竟是哪一个徽章导致变化。


所以我觉得我的分数下降可能是因为我获得的某个徽章分数下调导致的。




十二、场景 FAQ


差不多就这些了,根据上面我们的分析,总结几个常见的 FAQ 吧。


Q1:论坛被举报会直接扣 CDK 社区分数吗?


不会的。当前实现没有读取论坛举报记录。只有论坛处理间接影响徽章、信任等级或外部风控时,才可能影响 CDK 使用体验。


Q2:举报一个 CDK 项目后,创建者会立即扣 5 分吗?


不会的。举报只会增加项目举报数。只有管理员正式判定项目违规后,创建者的违规次数才增加,扣分会在后续重算中体现的。


Q3:一次违规会每天继续扣 5 分吗?


不会的。一次违规只会增加一个违规计数的。系统每次重算时都会应用这一个 5 分惩罚,是不会每天新增一条扣分记录的。


Q4:一次违规后,最高只能得到 95 分吗?


这个不一定。比如徽章原始总分达到 105 时,一次违规扣 5 分后仍然会显示为 100 分的。


Q5:违规记录会像论坛记录一样过期吗?


根据当前源码机制来看,是不会自动过期的。仓库中我并没有发现违规次数衰减或自动清除的机制。


Q6:管理员把项目恢复正常,会返还扣分吗?


当前来看不会。恢复项目正常状态会处理项目状态和举报数,但不会自动减少创建者的违规次数的。


Q7:获得新徽章后,分数会立即增加吗?


这个也不一定。可能需要等待用户分数异步任务重新获取徽章并完成计算的。


Q8:为什么我的徽章增加了,分数没有变化?


这个可能是因为任务还没有运行,或者redis 中缺少该徽章权重,又或者该徽章权重为 0,或者用户已经达到 100 分上限了。


Q9:为什么没有违规,分数却下降了?


这个优先检查用户徽章集合变化,redis 缓存重建,权重变化,负权重徽章和数据迁移等等。论坛举报本身不会直接扣分的。


Q10:为什么从 100 分变成了 99 分?


比如我此前真实徽章原始分可能高于 100,只是页面截断显示为 100。重新计算后原始分下降到 99,页面才会显示出这样的变化。


Q11:社区分数高就一定能领取所有项目吗?


这个不一定。项目一般还会检查信任等级,开放时间,库存,同 IP 限制,领取记录和其他风控条件等等,主要还是看项目本身限制。


Q12:信任等级高,社区分数也一定高吗?


这个也不一定。信任等级与社区分数是两套独立数据。信任等级由 oauth 用户信息同步 的,社区分数主要由徽章权重和 CDK 违规次数计算。 升到 3 级别就可以拿到徽章也会提高社区分数的


Q13:LDC 扣费会降低社区分数吗?


这个不会。LDC 支付积分与社区分数是两套独立的机制。


Q14:在哪里查看每个徽章具体多少分?


我们可以通过查看 https://linux.do/badges.json 的徽章属性,但是并没有显示每个徽章对应的分数,这个应该是以 CDK 部署实例 redis 中的 user:badges 为准的。当前前端没有提供徽章分值明细页。


Q15:为什么两个 CDK 实例显示的分数可能不同?


这个可能与 redis 缓存建立时间,徽章权重版本,或者配置中的每次违规扣分值,以及异步任务更新时间不同有关吧。我还没遇到过。


Q16:社区分数能人工恢复吗?


目前普通用户没有修改分数或违规次数的接口吧。管理人员是可以直接调整 mysql 数据的,但这属于平台管理行为,不是当前公开业务流程。


Q17:分数更新失败会被清零吗?


这个通常不会。计算失败时会保留 mysql 中已有的旧分数;新用户因为还没有成功计算,可能继续显示初始 0 分的。




大概就是上面这些了。有个懵懂的了解了。当然上面说的是我基于仓库源码分析出来的结果,具体是否有另外调整就是管理员项目机制了。这个不可而知。


如果想快速提升社区,就优先去刷徽章页面里的任务,多参与社区活动、帮助别人解决问题等等都是可以的。


核心提升途径就是:



[!info] 完成各种徽章任务。徽章数量越多、分值越高的徽章,社区分数涨得越明显(重复获得同一徽章通常只算一次,不同徽章贡献不同分值)



查看自己的徽章方式可以通过 https://linux.do/badges 这里查看自己已经拥有和未拥有的徽章。


推荐参考帖子:


盘点 L 站的徽章长期更新!(2026.2.17 更新!)

[!warning] 注意!!
做 Wiki 编辑的徽章就做,别把整个教程帖子内容覆盖成无意义的内容!!!

[!caution] 注意、注意、注意
由于服务器有延迟,可能会存在达成了徽章获取条件但没有拿到徽章的情况,请坐和放宽,至多到第二天的凌晨四点就会刷新徽章获取情况。如果还是没有,请试试在 cdk.linux.do …
最新回复 (13)
  • Galact 07-17 18:01
    1

    额,所以叽里咕噜说那么多,是在哪扣的那一分呢


    佬友太强了,在闲聊区也要整这么长嘛,不过我之前让AI修小助手的bug也是看的这个

  • 洛卡卡了 楼主 07-17 18:05
    2

    好像没分析出来,得出来的结论好像是因为某个徽章分数下调了,因为今天同样有佬反馈分数掉了一分,就是不知道是哪个徽章了,扒不出来了

  • apparition 07-17 18:08
    3

    太好了,前面没看中间没看

    逃过一劫

  • 阿良Spike 07-17 18:10
    4

    我一直想知道为啥你会从 100 到 99,直到看到第 11 条。感谢佬的好文!

  • xuanxuan 07-17 18:14
    5

    你这个已经是列入长文章阅读,没个目录真不知道自己到那一步了


    太强了,佬

    至少终于知道自己为什么社区分数被扣了。

  • 灰質心 07-17 18:16
    6

    我之前分数达到94还是95了,就因为我改了几个帖子里的链接,掉到88了,很后悔TT

    总之就是改链接导致几个著名链接徽章消失了,下次不删掉老链接了 直接把新的链接附加在下面

  • 文月 07-17 18:17
    7

    太强了,第一次知道这个社区分数还能扣


    看前面吓我一跳,因为徽章加分是一次性的,扣分看起来是可重复的


    不过正常人也不会cdk违规吧,还好还好

  • Galact 07-17 18:19
    8

    没事,100和99没区别,如佬友分析的,现在可能是四舍了,没准之后就是五入了。


    佬友虽然排版挺好的,但是对闲聊区来说这个还是太长了(

  • Thanatos 07-17 18:22
    10



    吓得我看了眼,要是99我强迫症又要犯了

  • xuanxuan 07-17 18:23
    11

    已移到文档共建,我是用 app 看的,不知道佬有没有加目录,可以方便其他佬跳转自己想看的部分




    那就 OK 了,perfect

  • 咕嘎治愈世界 07-17 18:26
    12

    今日最佳社区文章系列。我刷了接近8小时,这是真神了,不是这期真神了系列

  • xuanxuan 07-17 18:29
    13

    话说,文档共建默认是 wiki 帖,那从其他板块迁到文档共建帖子不设为 wiki 是不是超期就不能编辑了,只有 wiki 帖才能长期有编辑能力吗,还是要申请自我管理才能有长期编辑能力。

  • 尤菲 07-17 18:29
    14

    改链接会导致引用徽章消失吗,还有这种机制?

* 帖子来源Linux.do
返回