カラムクエリ
カラムクエリは、カラムに流れてくるノートを絞り込むための式です。AiScript のサブセットで書き、true を返したノートが表示されます。「〇〇を隠す」を書くときは、条件を書いてから全体を !(...) で包みます。
/// @ 1.2.1
// 特定のキーワードを含むノートを隠す — true = 表示
!(note.text != null && note.text.lower().incl("ネタバレ"))クエリの定義・編集・ストアからの導入は「クエリ」カラムで行い、どのカラムに適用するかは各カラムのフィルタメニューのトグルで切り替えます。タイムラインのほか、クライアント検索の結果にも適用できます。複数のクエリは And で合成されるため、1 本のクエリには 1 つの機能だけ持たせるのが扱いやすくなります。
参照できるもの
式の中から自由に参照できるのは note だけです。次のフィールドは高速に評価でき、ローカルに溜まったノートの検索にも使えます。
note.text note.cw note.visibility note.localOnly
note.renoteId note.replyId
note.user.username note.user.host note.user.name
note.files.len note.reactions["絵文字名"]比較と論理演算、文字列の incl / starts_with / ends_with / lower / upper、配列の incl / len、let、再帰しない純粋な関数が使えます。
この範囲を外れるフィールド(note.user.isCat、note.channelId、note.renote.text、note.poll など)も動きますが、1 件ずつ評価する遅い経路に落ちます。結果は変わらず、速度だけの違いです。どちらの経路で動いているかは、クエリカラムの ⚡ / 🐢 のバッジで分かります(⚠ は解釈できない箇所があるもの)。
書くときの注意
- null を
&&の短絡で避ける —note.text/note.cw/note.user.nameは null になることがあります。note.text != null && note.text.incl("x")の形にします。letは先に評価されるためガードになりません - 二項演算子の後ろで改行しない — 式は 1 行に収めるか、関数に切り出します
- 外部と通信できない —
Mk:apiや現在時刻の取得、非同期処理は保存時に拒否されます - ハッシュタグ専用のフィールドはない — 本文の文字列一致で代用します。前方一致で意図しないタグにも当たる点に注意してください
- カラム設定に既にあるものは作らない — リノート除外、リプライ除外、メディアのみなどはカラムのフィルタメニューにトグルで用意されています(出るトグルはタイムラインの種類とサーバーで変わります)
動かなくなったとき
- クエリの本体を無効にすると、適用しているカラムからは「無いもの」として扱われます
- 評価に時間がかかりすぎるクエリは自動で止まります。クエリカラムで「再開」できます
- 参照先が消えた、解釈できない、といった場合は該当ノートを表示しない側に倒します。セーフモード中はクエリ自体を止め、すべて表示します
- 編集には履歴が残り、前の版に戻せます
保存場所
設定フォルダの queries/ に、式 <slug>.is とメタ情報 <slug>.meta.json5 の 2 ファイルで保存されます。他の配布物と同じく、全アカウント用とアカウントごとのプールで管理します。
入れる・配る
ストアから入れたクエリをそのまま使うことも、編集して自分用に直すこともできます。入れただけではどのカラムにも適用されないので、使うカラムのフィルタメニューで有効にしてください。ストア側で更新されると、差分つきで知らされます。新規作成と編集の入口は開発者モードで開放されます。作ったものは MisStore で配布できます(提出のしかた / 書式)。