Skip to content

feat: ノート向けの特殊記法 %%command%% とテキスト系コマンド - #24

Open
otnc wants to merge 1 commit into
oto-labfrom
feat/note-commands-core
Open

otnc wants to merge 1 commit into
oto-labfrom
feat/note-commands-core

Conversation

@otnc

@otnc otnc commented Nov 12, 2026

Copy link
Copy Markdown
Member

What

ノート作成時にサーバーが %%command ...%% を展開する仕組み (#6) と、テキストを返すコマンドを追加する。

  • 記法: %%name.sub key:value メイン引数 文章%%。全角の %%、:、|、全角スペースも同じ扱い。コードブロックとインラインコードの中は処理しない。本文に %% を書くときは \%\%
  • 知らないコマンド名はそのまま残す。引数の誤りや失敗は NOTE_COMMAND_FAILED (400) で投稿を拒否し、理由を日本語で返す
  • notes/create と予約投稿の両方で動く (NoteCreateService.fetchAndCreate の先頭で展開)。リモートのノートには影響しない
  • 投稿フォームにボタンを追加。コマンドを選んで引数を入力すると、devuloper/note-commands/preview で結果をプレビューしてから記法を挿入する。選択中のテキストは入力欄の初期値になり、挿入時に置き換わる。ボタンからタイムゾーンなどの設定も保存できる (registry の client/devuloper)
コマンド Issue
rand.dice rand.choose rand.num rand.omikuji #16
font.bold font.italic font.bolditalic font.script font.fraktur font.double font.sans font.mono font.circle font.flip #19
progress #21
calc unit #20
time #11
banner #15

Closes #6, #11, #15, #16, #19, #20, #21

Why

サードパーティのクライアントからも使え、結果が標準のテキストとして連合する機能を、共通の仕組みの上に作るため。

Additional info (optional)

  • upstream とのコンフリクトを避けるため、フォーク独自のコードは packages/backend/src/devuloper/ と packages/frontend/src/devuloper/ にまとめた。upstream のファイルの変更は、NoteCreateService (3行)、CoreModule (3行)、endpoint-list.ts の末尾 (1行)、MkPostForm.vue (2行) だけ
  • 文言は locales に入れず、フォークのファイルに日本語で書いた。misskey-js の autogen も再生成していない (フロントエンドは型なしで呼ぶ)
  • ユーザー設定は registry に保存するので、マイグレーションは不要
  • エラーの kind は server にしている。client だと ApiCallService がメッセージを WWW-Authenticate ヘッダーに入れ、日本語で 500 になるため
  • 決めたこと: 乱数は crypto.randomInt。サイコロは 100 個、1000 面まで。time の入力は既定で Asia/Tokyo、夏時間で存在しない時刻は切り替え後、重複する時刻は先の方。$[unixtime] は他のサーバーで生の文字列になるので付けない。banner は半角英数字だけで横幅 48 文字まで。calc は eval を使わない自前のパーサー。通貨の換算はしない
  • 確認: backend のユニットテスト 47 件、frontend 4 件、backend / frontend の型チェック、ESLint (エラー 0)。Docker の PostgreSQL と Redis で起動したサーバーで notes/create とプレビューを実行し、展開とエラー応答を確認した

Checklist

  • Read the contribution guide
  • Test working in a local environment
  • (If needed) Add story of storybook
  • (If needed) Update CHANGELOG.md
  • (If possible) Add tests

ノート作成時にサーバーが %%command ...%% を展開する仕組みを追加する。
サードパーティのクライアントからも使え、結果は本文のテキストとして連合する。

- 記法の解析と実行 (packages/backend/src/devuloper/note-commands)
- 投稿フォームのボタンとプレビュー (packages/frontend/src/devuloper/note-commands)
- コマンド: rand.dice / rand.choose / rand.num / rand.omikuji、font.*、progress、calc、unit、time、banner

Closes #6, #11, #15, #16, #19, #20, #21
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

ノート向け機能のためのサーバー側特殊記法(%%command%%)

1 participant