Obsidian Dice Roller 入门实例

介绍

Dice Roller 是 Obsidian 的一个插件,可以用来掷骰子,嗯,就是你想的那个🎲️。我第一次见到这个插件也觉得没什么用,可能就和鲤鱼王的水溅跃差不多。而且 GitHub star 不过 200,各项指标和 5.1k stars 的 Dataview 相比确实不够看。

野生鲤鱼王使用了水溅跃,但什么都没有发生

其貌不扬的 Dice Roller 除了用作桌游判定,还能够解决人生三大烦恼:早上吃啥、中午吃啥、晚上吃啥。

语法

文档: Dice Roller

List Roller

下面这行代码修改自 List Roller,首先在 Das Kapital 里做个列表,然后在列表末尾赋予一个 id(统一用 dice1234 的格式):

# Das Kapital

----
^dice1867

然后直接在 inline dice roller 代码中引用即可:

dice: 4d[[Das Kapital^dice1867]]

效果是随机抽取列表中的一项,不会抽到列表之外的内容,所以 Linter 和 tag 啥的可以放心大胆地用。不过这样还是有个缺点,原本的 section roller 是 quote 格式,骰子按钮可以常驻,现在扔一次就要手动点出去才会再次显示。

Formula

使用 dice: <formula> 的格式,formula 可以在设置中自定义,一开始尝试创建 RandomJournal 的 alias 没成功,因为我在 formula 里写的是 dice: #journal|link,而实际上只需要写冒号后面那部分即可,在渲染时空格会被忽略。

// Alias
RandomJournal
// Formula
#journal|link

// Usage
dice: RandomJournal
dice: #journal|link

Dataview

Dataview in Dice Roller 就更有意思了,比如下面这一行,会返回一个带有 #journal 标签的笔记链接,注意是链接,点击可以直接跳转的那种。

dice: #journal|line

也可以直接使用 Dataview Query,不过 where 和 from 不能同时使用,只能用 list 不能用 table。比如下面这行,效果是在今天创建,且修改时间最近的 10 条笔记中随机抽取一个,并返回链接。

dice: dv(list where file.cday = date(today) sort file.mtime desc limit 10)|link

Dice-mod

有的时候🎲️只需要 roll 一次,希望能够保留结果(比如用作模板的时候),就可以使用 Dice-mod,格式看起来很简单,但实际不知道怎么用,贴下 相关 issue,有空再研究吧。

dice-mod: 3d100 + 12|noform

实例

外卖

Dice Roller List Roller 最大的贡献就是解决了「今天吃啥」的历史性难题。实际上这个用法并不局限于外卖列表,也可以用在菜谱看板上,随机 roll 一个带做法和预览图的菜谱,想吃就跳转开始做,不想吃就重新 roll。

首先,新建一个名为 Takeout 的笔记,然后打开饿了么 / 美团 / Uber Eats / foodpanda /随便什么平台,输几个常点的外卖:

# Takeout

- ¥15 肠粉
- ¥17 麻辣烫
- ¥20 炸鸡
- ¥25 すき家
- ¥45 寿司/刺身
- Taco #todo

^dice3150

然后在 Dice Roller 模板中进行下面的设置:

// Alias
RandTakeout
// Formula
2d[[Takeout^dice3150]]

最后在日记模板里加上外卖骰子:

# {{date: YYYY-MM-DD}}

今天吃啥:
`dice: RandTakeout`

每日一文

笔记的最终目的并不是储存,而是使用。不是说把想看的内容复制进 Obsidian 就万事大吉,知识不会趁你不注意自己渗透进脑子里。「看了」不等于「会了」,所以我在日记模板中加入了类似「每日一句」的「随机一文」的功能,用于每日复习过往记录的笔记。

Obsidian 提供了 random note 的核心插件,绑定快捷键后即可快速开启随机笔记,但这个插件确实过于随机,并且没有提供排除特定文件/文件夹等进阶功能,对于笔记占大头的 vault 而言,roll 10 次可能有 7 次是日记,我已经在日记模板中加入了「去年今日」功能,所以默认插件的用处不大,于是用 Dataview 和 Dice Roller 自己实现了该功能,也不需要用到 DataviewJS。

废话不多说,直接上代码:

// Alias
RandOld
// Formula
dv(list where file.mday + dur(90 days) < date(today) and !contains(file.name, "W") and !contains(file.etags, "walkthrough") sort file.mtime asc limit 30)|link
// Usage
dice: RandOld|noform

如果看过前面一篇 Obsidian Dataview 入门实例,理解起来应该没什么难度。

只简单解释一下筛选笔记的几个条件:

  1. 90 天以上未修改(避免同一条笔记频繁出现)
  2. 文件名不包含 W(排除周记,可以自己拓展)
  3. 笔记不包含 walkthrough 标签(排除特定标签)
  4. 按照文件修改时间升序(从旧到新)
  5. 限制 30 个结果(和 4 组合,确保笔记足够旧且足够随机)

结语

Dice Roller 用好了会是很强大的工具,不过这玩意儿和桌游这么契合,居然没有 Obsidian 游戏插件/模板,利用 dice-mod 明明可以实现不错的玩法!

Vinfall's Geekademy

Sine īrā et studiō