关于十年之约
十年之约 · 不为流量写的博客,值得被人好好读。
这是一个非营利的个人博客联盟。目前有上千个博客在约,全站收录了十万余篇成员原创文章。加入这里不只是挂个名字:「虫洞」会把访客送到成员博客,让你写的东西真的有人读。
这里更多的是摄影、视觉、旅行、生活这类「搬不走的原创内容」,技术只占其中一格。大家约好的事只有一件:博客十年不关,一直写下去。
1.十年之约是什么
就是一个约定:从加入那天起,博客十年不关,或者更久,并且一直在写。
2.怎么加入
先读一遍《十年公约》,确认你的博客符合里面的要求。读完在公约页底部就能直接提交,审核通过后,我们会把你加进来。
- 1阅读《十年公约》确认你的站点符合公约里的要求
- 2提交博客读完公约,在公约页底部直接申请
- 3审核通过我们会在审核后完成添加
3.加入以后会怎样
你的博客会进入「虫洞」。有人点一下,就可能被送到你那里,每一次都是真实的到访。你的文章也会出现在全站的最新文章里,让更多同好翻到。
我们还会给你的博客记一份十年大事记:什么时候更新、有过什么变化,都记下来;哪天停更或关站了,也照实写。有人这样记着,「坚持十年」才不只是一句口号。
4.为什么要做这件事
把写博客从一时兴起,变成一件坚持十年的事。在这里你不是一个人在写:身边有一群同样约好十年不关站的博主,有访客通过虫洞找到你;你写下的东西放在自己的博客里,不会哪天被平台说下架就下架。
5.谁在维护
想一起维护的,写信到 foreverblog@email.cn。
6.以前的维护者
沈唁志、雨落泪尽、工匠盒子、图南山、即刻学术参与过运营,Wisp X、吾爱bug 提供过技术支持。他们现在已经不再维护了,谢谢他们这些年的付出。
7.成员标识
放在博客的页脚或侧边栏,来的人一眼就知道:这个站约好了要写十年。
标识由「一稿计划」设计。

<a href="https://www.foreverblog.cn/" target="_blank" title="十年之约成员博客"><img src="https://www.foreverblog.cn/assets/logo/logo_v2_black.png" alt="十年之约" style="width:auto;height:32px;"></a>
<a href="https://www.foreverblog.cn/" target="_blank" title="十年之约成员博客"><img src="https://www.foreverblog.cn/assets/logo/logo_v2_light.png" alt="十年之约" style="width:auto;height:32px;"></a>8.虫洞
虫洞是十年之约的一个入口:打开 https://www.foreverblog.cn/go.html ,它会从在约、半年内还在更新的成员博客里挑一个,把你送过去。更新得勤的博客,被挑中的机会大一些,具体怎么算写在虫洞规则里。
加入十年之约,你的博客就会进入虫洞。半年没更新的会暂时停送,重新更新后自动回来。
把虫洞按钮挂在博客的页脚、侧边栏或友链页。你的读者点一下,会去到另一位成员那里;别人挂着的按钮,也在把读者往你这儿送。

<a href="https://www.foreverblog.cn/go.html" target="_blank" title="虫洞 · 随机访问十年之约成员博客"><img src="https://www.foreverblog.cn/assets/logo/wormhole_v2_light.webp" alt="十年之约虫洞" style="width:auto;height:32px;"></a>
<a href="https://www.foreverblog.cn/go.html" target="_blank" title="虫洞 · 随机访问十年之约成员博客"><img src="https://www.foreverblog.cn/assets/logo/wormhole_v2_dark.webp" alt="十年之约虫洞" style="width:auto;height:32px;"></a>虫洞这个点子,是受「开往 · 友链接力」启发的:https://github.com/travellings-link/travellings
9.B人表情包
B人是十年之约的形象:logo 外轮廓的那个 B,长出了五官和圆乎乎的身体。它带着 20 个表情,演的都是博主的日常:换友链、蹲 RSS、换主题、续域名。
把它接进你博客的评论区,来留言的人点开表情就能用。下面按评论系统写好了配置,照着复制。
B人表情包由「一稿计划」设计,版权归一稿计划所有。可以免费用在博客评论区和聊天里;不能商用,也不接受二次创作:改动过的表情、用 B人 形象画的新图,都不能发布。其他用途请写信到 foreverblog@email.cn。
嘚瑟
bren_smug
猥琐笑
bren_smirk
吃瓜
bren_melon
摆烂
bren_lieflat
无语
bren_speechless
暗中观察
bren_peek
你好
bren_hello
OK
bren_ok
收到
bren_received
点赞
bren_like
比心
bren_heart
CC攻击你
bren_cc
友链一下
bren_friendlink
RSS蹲你
bren_rss
更新了速来
bren_updated
装修中,勿催更
bren_wip
主题换了,文章没写
bren_newtheme
403
bren_403
虫洞串门
bren_wormhole
人可以鸽,域名得续
bren_renew
在图片上点右键,可以复制单张图片的地址。
在聊天里用:Telegram 上可以直接添加 B人表情包,微信扫下面的码添加,QQ 版正在审核。
接到你的评论区
找到你用的评论系统,点开对应的一项。
Twikoo
打开 Twikoo 管理面板,进入「配置管理 → 插件」,在 EMOTION_CDN 一项填上下面这一行,保存。这一行已经带上 Twikoo 自带的表情;原来填过别的地址的,用英文逗号把它们接在一起。
https://owo.imaegoo.com/owo.json,https://www.foreverblog.cn/stickers/bren/v1/owo.json再把下面这段样式加进博客的自定义 CSS。表情会按 120 像素显示,图上的字才看得清。
.twikoo .tk-owo-emotion[src*="/stickers/bren/"] { width: 120px; }Waline
在 Waline 初始化参数的 emoji 一项里加上下面这个地址,原来的几项留着。用 Hexo、Hugo 主题的,写在主题配置里 Waline 的 emoji 一项。
再把下面这段样式加进博客的自定义 CSS。表情会按 120 像素显示,图上的字才看得清。
.wl-content .wl-emoji[src*="/stickers/bren/"] { height: 120px; width: auto; }Artalk
打开 Artalk 控制中心,进入「设置 → 界面配置 → 表情包」,把地址换成下面这一个,再点顶部的「应用」。它同时带着 Artalk 自带的表情和「十年之约-B人」。
https://www.foreverblog.cn/stickers/bren/v1/artalk.json再把下面这段样式加进博客的自定义 CSS。表情会按 120 像素显示,图上的字才看得清。
img[atk-emoticon][src*="/stickers/bren/"] { max-height: 120px; height: 120px; }Valine
Valine 用了自定义表情,就不再显示自带的表情。把下面两项加进 Valine 的初始化参数。
emojiCDN: "https://www.foreverblog.cn/stickers/bren/v1/",
emojiMaps: {
"bren_smug": "bren_smug.webp",
"bren_smirk": "bren_smirk.webp",
"bren_melon": "bren_melon.webp",
"bren_lieflat": "bren_lieflat.webp",
"bren_speechless": "bren_speechless.webp",
"bren_peek": "bren_peek.webp",
"bren_hello": "bren_hello.webp",
"bren_ok": "bren_ok.webp",
"bren_received": "bren_received.webp",
"bren_like": "bren_like.webp",
"bren_heart": "bren_heart.webp",
"bren_cc": "bren_cc.webp",
"bren_friendlink": "bren_friendlink.webp",
"bren_rss": "bren_rss.webp",
"bren_updated": "bren_updated.webp",
"bren_wip": "bren_wip.webp",
"bren_newtheme": "bren_newtheme.webp",
"bren_403": "bren_403.webp",
"bren_wormhole": "bren_wormhole.webp",
"bren_renew": "bren_renew.webp"
}再把下面这段样式加进博客的自定义 CSS。表情会按 120 像素显示,图上的字才看得清。
.v .vcontent .vemoji[src*="/stickers/bren/"] { height: 120px; max-height: 120px; width: auto; }Discuss
Discuss 用了自定义表情,就不再显示自带的表情。在 Discuss 的初始化参数里加上下面这一项。
emotMaps: {
"十年之约-B人": {
"type": "image",
"items": {
"bren_smug": "https://www.foreverblog.cn/stickers/bren/v1/bren_smug.webp",
"bren_smirk": "https://www.foreverblog.cn/stickers/bren/v1/bren_smirk.webp",
"bren_melon": "https://www.foreverblog.cn/stickers/bren/v1/bren_melon.webp",
"bren_lieflat": "https://www.foreverblog.cn/stickers/bren/v1/bren_lieflat.webp",
"bren_speechless": "https://www.foreverblog.cn/stickers/bren/v1/bren_speechless.webp",
"bren_peek": "https://www.foreverblog.cn/stickers/bren/v1/bren_peek.webp",
"bren_hello": "https://www.foreverblog.cn/stickers/bren/v1/bren_hello.webp",
"bren_ok": "https://www.foreverblog.cn/stickers/bren/v1/bren_ok.webp",
"bren_received": "https://www.foreverblog.cn/stickers/bren/v1/bren_received.webp",
"bren_like": "https://www.foreverblog.cn/stickers/bren/v1/bren_like.webp",
"bren_heart": "https://www.foreverblog.cn/stickers/bren/v1/bren_heart.webp",
"bren_cc": "https://www.foreverblog.cn/stickers/bren/v1/bren_cc.webp",
"bren_friendlink": "https://www.foreverblog.cn/stickers/bren/v1/bren_friendlink.webp",
"bren_rss": "https://www.foreverblog.cn/stickers/bren/v1/bren_rss.webp",
"bren_updated": "https://www.foreverblog.cn/stickers/bren/v1/bren_updated.webp",
"bren_wip": "https://www.foreverblog.cn/stickers/bren/v1/bren_wip.webp",
"bren_newtheme": "https://www.foreverblog.cn/stickers/bren/v1/bren_newtheme.webp",
"bren_403": "https://www.foreverblog.cn/stickers/bren/v1/bren_403.webp",
"bren_wormhole": "https://www.foreverblog.cn/stickers/bren/v1/bren_wormhole.webp",
"bren_renew": "https://www.foreverblog.cn/stickers/bren/v1/bren_renew.webp"
}
}
}Typecho · 自带 OwO 表情的主题
用自带 OwO 表情的主题:把下面这份清单里「十年之约-B人」这一组,合并进主题自己的表情清单(一般是主题目录里的 OwO.json),再照下一项放行图片标签。
https://www.foreverblog.cn/stickers/bren/v1/owo.json<img src="" alt="" width="">Typecho · 原生评论
Typecho 原生评论没有表情面板:先到后台「设置 → 评论」,在「允许使用的 HTML 标签和属性」里加上下面这一行,评论里就能贴图片。
<img src="" alt="" width=""><img src="https://www.foreverblog.cn/stickers/bren/v1/bren_melon.webp" alt="吃瓜" width="120">WordPress · 原生评论
WordPress 原生评论没有表情面板,靠输入代码显示表情:把下面这段代码加进主题的 functions.php,评论里写 :bren_melon: 就会显示「吃瓜」。每张图的代码写在上面图片下方。
add_filter('smilies', function ($smilies) {
return array_merge($smilies, array (
':bren_smug:' => 'bren_smug.webp',
':bren_smirk:' => 'bren_smirk.webp',
':bren_melon:' => 'bren_melon.webp',
':bren_lieflat:' => 'bren_lieflat.webp',
':bren_speechless:' => 'bren_speechless.webp',
':bren_peek:' => 'bren_peek.webp',
':bren_hello:' => 'bren_hello.webp',
':bren_ok:' => 'bren_ok.webp',
':bren_received:' => 'bren_received.webp',
':bren_like:' => 'bren_like.webp',
':bren_heart:' => 'bren_heart.webp',
':bren_cc:' => 'bren_cc.webp',
':bren_friendlink:' => 'bren_friendlink.webp',
':bren_rss:' => 'bren_rss.webp',
':bren_updated:' => 'bren_updated.webp',
':bren_wip:' => 'bren_wip.webp',
':bren_newtheme:' => 'bren_newtheme.webp',
':bren_403:' => 'bren_403.webp',
':bren_wormhole:' => 'bren_wormhole.webp',
':bren_renew:' => 'bren_renew.webp',
));
});
add_filter('smilies_src', function ($url, $image) {
if (strpos($image, 'bren_') === 0) {
return 'https://www.foreverblog.cn/stickers/bren/v1/' . $image;
}
return $url;
}, 10, 2);再把下面这段样式加进博客的自定义 CSS。表情会按 120 像素显示,图上的字才看得清。
img.wp-smiley[src*="/stickers/bren/"] { height: 120px !important; max-height: 120px !important; width: auto !important; }WordPress · Argon 主题
用 Argon 主题的,把下面这段代码加进主题的 functions.php,表情面板里会多出「十年之约-B人」一组。
add_filter('argon_emotion_list', function ($groups) {
$groups[] = array (
'groupname' => '十年之约-B人',
'list' =>
array (
0 =>
array (
'type' => 'sticker',
'code' => 'bren_smug',
'src' => 'https://www.foreverblog.cn/stickers/bren/v1/bren_smug.webp',
),
1 =>
array (
'type' => 'sticker',
'code' => 'bren_smirk',
'src' => 'https://www.foreverblog.cn/stickers/bren/v1/bren_smirk.webp',
),
2 =>
array (
'type' => 'sticker',
'code' => 'bren_melon',
'src' => 'https://www.foreverblog.cn/stickers/bren/v1/bren_melon.webp',
),
3 =>
array (
'type' => 'sticker',
'code' => 'bren_lieflat',
'src' => 'https://www.foreverblog.cn/stickers/bren/v1/bren_lieflat.webp',
),
4 =>
array (
'type' => 'sticker',
'code' => 'bren_speechless',
'src' => 'https://www.foreverblog.cn/stickers/bren/v1/bren_speechless.webp',
),
5 =>
array (
'type' => 'sticker',
'code' => 'bren_peek',
'src' => 'https://www.foreverblog.cn/stickers/bren/v1/bren_peek.webp',
),
6 =>
array (
'type' => 'sticker',
'code' => 'bren_hello',
'src' => 'https://www.foreverblog.cn/stickers/bren/v1/bren_hello.webp',
),
7 =>
array (
'type' => 'sticker',
'code' => 'bren_ok',
'src' => 'https://www.foreverblog.cn/stickers/bren/v1/bren_ok.webp',
),
8 =>
array (
'type' => 'sticker',
'code' => 'bren_received',
'src' => 'https://www.foreverblog.cn/stickers/bren/v1/bren_received.webp',
),
9 =>
array (
'type' => 'sticker',
'code' => 'bren_like',
'src' => 'https://www.foreverblog.cn/stickers/bren/v1/bren_like.webp',
),
10 =>
array (
'type' => 'sticker',
'code' => 'bren_heart',
'src' => 'https://www.foreverblog.cn/stickers/bren/v1/bren_heart.webp',
),
11 =>
array (
'type' => 'sticker',
'code' => 'bren_cc',
'src' => 'https://www.foreverblog.cn/stickers/bren/v1/bren_cc.webp',
),
12 =>
array (
'type' => 'sticker',
'code' => 'bren_friendlink',
'src' => 'https://www.foreverblog.cn/stickers/bren/v1/bren_friendlink.webp',
),
13 =>
array (
'type' => 'sticker',
'code' => 'bren_rss',
'src' => 'https://www.foreverblog.cn/stickers/bren/v1/bren_rss.webp',
),
14 =>
array (
'type' => 'sticker',
'code' => 'bren_updated',
'src' => 'https://www.foreverblog.cn/stickers/bren/v1/bren_updated.webp',
),
15 =>
array (
'type' => 'sticker',
'code' => 'bren_wip',
'src' => 'https://www.foreverblog.cn/stickers/bren/v1/bren_wip.webp',
),
16 =>
array (
'type' => 'sticker',
'code' => 'bren_newtheme',
'src' => 'https://www.foreverblog.cn/stickers/bren/v1/bren_newtheme.webp',
),
17 =>
array (
'type' => 'sticker',
'code' => 'bren_403',
'src' => 'https://www.foreverblog.cn/stickers/bren/v1/bren_403.webp',
),
18 =>
array (
'type' => 'sticker',
'code' => 'bren_wormhole',
'src' => 'https://www.foreverblog.cn/stickers/bren/v1/bren_wormhole.webp',
),
19 =>
array (
'type' => 'sticker',
'code' => 'bren_renew',
'src' => 'https://www.foreverblog.cn/stickers/bren/v1/bren_renew.webp',
),
),
);
return $groups;
});WordPress · Sakurairo 主题
用 Sakurairo 主题的,把上面的表情图逐张另存下来,放进 wp-content/uploads 下新建的一个文件夹(例如 bren)。再到主题设置的「评论区域表情」里选上「自定义表情包」,在「自定义表情包路径」填 /bren,然后点这一项说明里的链接,更新表情列表。
只能贴图片的(Halo、Giscus、Gitalk、Utterances、Remark42、Isso、Emlog)
这些评论系统没有表情面板,但评论里能贴图片:复制图片地址,按下面的写法贴进评论。
[img]https://www.foreverblog.cn/stickers/bren/v1/bren_melon.webp[/img]Cusdis、Commento 和 Z-Blog 的评论里显示不了图片;Disqus 没查到加自定义表情的办法。