一张图片引发的连锁反应。

图片

标题其实是法语,虽然我不会法语。只是觉得 kz 的 réaliser 这个标题很帅。 这里的意思是,即使在所有的服务器里都关掉,Discord 的 Rich Presence 会向好友们展示你的状态。

周三是个好日子,因为 AKB48 时隔15年的樱花曲 名残り桜 发售了。 别的不说,“青春はあっという間に散る”的转音特别不错。

于是我赶紧去 OTOTOY 购买,下载,导入 MusicBee, 点击播放键。

这个 You earned point 的语气很好玩

然后我发现 DiscordBee 的 Rich Presence 插件(朋友正在听)显示的是 MusicBee 图标,而不是专辑封面。

焕新

于是我找搜索引擎(不是谷歌)问,有什么好的播放器,能支持 Discord Rich Presence, 最好还能支持多个专辑艺术家

搜索引擎回答道,有 Foobar2000. 而上次研究的时候发现 Foobar2000 的自由度太高了,而找到的整合包又没有体验特别惊艳,明显超过 MusicBee 的。

于是我选择了搜索引擎的第二个选项:Music Presence, 支持多种播放器。 别被 URL 里的 GitHub 迷惑了,这个软件并不开源;我潜意识里觉得是的,之后想改才发现。

(当然,并不是说闭源就不好,毕竟作者似乎在用这个募集捐款。)

为了能方便地安装,我又去找了 Scoop 的 Bucket, 并将其添加下载。

Loon

Music Presence 的一大特点是,之前 DiscordBee 使用的是 “Playing” 的双关(玩游戏·听音乐),所以显示的是游戏图标。 而 Music Presence 可以做到和官方的 Spotify 连接一样,显示音乐图标。

另一大特点则是 Loon.

Discord 的 Rich Presence 无法上传许多张图片,DiscordBee 选择上传到 Imgur, 也是这次图片失效的原因。

而 Music Presence 选择了 Loon. Loon 倒是有源代码,但暂无许可证。

Loon 的客户端将本地图片通过 WebSockets 给服务端访问,服务端负责返回 URL 然后转发请求。有点像端口转发,但这里转发的只有专辑封面。

还挺巧妙的,不过总感觉没那么安全,怪怪的。

尤其是客户端用的是 C++,这也太不安全了吧!应该用 Rust 重写。

隧道

读了文档的我,发现可以自建 Loon 服务器。

于是急忙掏出两件套:因为注册得早而每个月送我 $5 的 fly.io, 以及 git clone.

找 Copilot 生成 Dockerfile 并丝滑地 fly deploy 之后,我发现怎么也连不上去,一点也不丝滑。

好吧,其实部署也不丝滑。首先需要 --ha=false 来避免 Fly.io 给你超级加倍(虽然初衷是好的),然后需要 --depot=false, 因为 Depot 的 builder 老是卡住。 不过相应地,总比试图在本地跑 Docker 要好一些,毕竟有人帮你 build image, 还有 Fly.io 的 registry.

然后发现官方的默认服务端也连不上去。

于是经过排查,发现是[数据删除]的 TUN 模式的问题。 但[数据删除]的 TUN 模式又有什么问题呢? AI 提议更改 MTU, 内核, 不行的话再改客户端的源代码。

于是我才发现 Music Presence 其实并不开源,只能死马当活马医地随便改改设置了。

然后突然就修好了——原来是严格路由的问题。 但严格路由又有什么问题呢?

原来是为了解决 Windows 的多宿主解析 (LLMNR) 导致的 DNS 泄露。

但并不只有 DNS, 因为我把用到的两个域名加入 hosts 文件,仍然连不上。

于是我找了个教程,把 LLMNR 关掉了,然后把严格路由关掉了。也顺手找了别的教程,把 NetBIOS 和 WPAD 关掉了,后者困扰了我不久,因为一直能看到前前司的请求——而这台电脑甚至没去过前前司,真的不知道哪里来的。

像素

于是 Music Presence 的连接成功了——但图片并没有被加载出来。这是为什么呢?

原来我把 fly.dev 打错成 fly.io 了,修正之。

Music Presence 的效果图

然后发现,本来限制的是图片宽度是 100, 但改成自建之后,图片的宽度限制仍然只有 128, 无法再提高了。

以及另外一个设置,缓存时间;这个限制了位数,最多999秒。

那我为什么不直接上传图片呢? 再加上 DiscordBee 是 Apache 2.0 开源的,我决定回到 DiscordBee.

叉子

正当我打算 Fork DiscordBee 的时候(确切地说,是填 Fork 名字的时候),我发现 PR 里有东西。

点开一看,正好有两个好功能:S3上传,和音乐图标。 后者还顺手修了 Imgur 的问题, 改成了 FreeImageHost.

怀着激动的心情下载 DiscordBee Experimental Release 3.2 之后,我发现功能都能用,甚至还有进度条。

感恩的心.jpg

doujincafe/DiscordBee 的效果图

唯一的小问题是 FreeImageHost 也是第三方服务,而且访问速度一般,导致要上传好久。

当然这好办。DiscordBee 是开源的,所以我已经召唤 Copilot Agent 在改了。

不过我没装 C# 的工具链,所以也只能仰仗 GitHub Actions 给我一份可以跑的 DLL 了。

——其实从网上(MusicBee 论坛)下载 DLL, 然后运行,这一步才是最不安全的吧,笑。