scrapbox-keichobot
バグ修正するついでにversionを刷新しておいた
使い方
選択範囲は無視する選択範囲を送信する
選択範囲が空白のときは何もしない
送信方法
Send
ボタンを押すか、 <C-Enter>
を押す
フィードバックボタンを押すと、そのボタンに書かれた内容が送信される
🙂と🙁は入力されるだけで送信はされない
終了方法
Exit
ボタンを押す
バグ
フィードバックボタンの記入がおかしい
カーソルが何行も先に吹き飛ばされてしまう
ページ遷移時にPopupMenuが消えてしまう
仕様
送信されるテキストの範囲
[/nishio/nisbot.icon]
が先頭にある行の次に最初に現れる、同じインデントの行から
アイコンは設定から変えられるようにする
カーソル行まで
記法を外したものが送信される
talk IDの保存
URLで保存する
2024-01-10
13:04:37 releaseする
12:52:08 後始末函数を登録できるようにした
event listenerの解除用
12:45:41 main.ts
を mod.ts
に変更
10:34:56 これだけ修正する
popupbarの位置
心の声送信
12:16:47 テスト終了
12:32:56 おわり
2024-01-09
19:18:29 ページ全体を聞くテストをしたら、終わりにする
19:45:33 おわり
19:16:31 テスト2回目
あとでnishioさんに聞いてみる
18:37:30 websocketを削り、DOM操作で書き込むようにコードを変更したらおしまい
18:08:26 E2Eテスト開始
かなりコードが複雑になってしまった。バグだらけだろう
明日refactoringしたほうがいいかもしれない
17:54:19 多分できた
dispose
を追加したい
17:15:23 想定以上に時間がかかることが判明
botテキストの挿入位置の制御がむずい
挿入箇所
最初に聞いたとき
選択範囲があるときは選択範囲の末尾に挿入
インデントは、選択範囲と交わっている行のインデントの中で、一番少ないものを採用する
2回目以降
新しく記入した回答の次に挿入する
回答のdetectコードはもう書いた
次の質問の挿入位置をglobalに持っておけばいい
14:43:36 コード追加
botの解答をscrapbox記法に変換する
選択範囲からtalk IDを取得
一番下方にあるIDを取得する
なければ新規作成する
14:02:12 makePlain
とそのテストを書いた
13:26:34 コードを読むのに時間がかかっている
popup menuの設定とキーバインドはpurgeする
各自で設定してくれい
あとは何を入れればいいか
やりたいことにあるもの
記法外しやtalk IDの検索は別のファイルに切り出そう
12:09:45 実装始め
githubで作業しよう
00:12:38 ページ作成
やりたいこととか
提供するAPI
startTalk(init)
現在の選択範囲か、ページ全体を尋ねる
scrapbox.Page.lines
が無いときは実行しない
init.talkId
が指定されていなければ
1. initialText
から検索
2. 選択範囲から検索
3. カーソル行から上の行から検索
4. ページ全体から検索
カーソルの下にあるのは探さないことにする
一つのページで複数の会話ができるようにしたいので
5. 新規作成
init.mode
で目的特化モードを指定する
init.entire===true
のときは、選択範囲の有無に関わらずページ全体を尋ねる
戻り値で操作函数を提供する
visible()
:popup menuの表示状態取得
open()
/ close()
:popupの開閉
ask()
:回答を投げる
回答範囲は上述
無効のときはその旨を返す
botの入力はwebsocketでやる
入力した範囲の最終行の次の行に書き込む
行の認識方法
1. 同じID
2. 同じ文字列
3. 同じ行数
4. (書き込み先の行をロスト)ページ末尾
exit()
:会話の終了
全ての状態が破棄される
再開
続きで入力したいことを選択して開始すればいい
✅記法を外して送信する
✅引用の >
はdefaultでつく
✅回答の行数に応じて聞き方を変える
一行だけのときはそのまま聞く
インデントは削る
UI実装例
popupmenu経由のときは、選択範囲を尋ねる
page menu経由のときは、ページ全体を流し込んで尋ねる
ページ末尾にチャットを書き込む
✅エラー処理
エラーのときは送信を無効にする
心の声
/^[((]/
にマッチする発言が心の声扱いされる
✅心の声は普通のモードで送り、それ以外の行が複数行ある時のみ相槌モードを使う
すでに送信した心の声を区別する方法がない
keichobotのログはfirebaseで管理されていて、REST API経由で取得できない
自前でログを保つしかない
途中から再開する場合
ログが無いのでどこまで送信したかは判別不能
しかし、再開時は選択範囲を指定して再開するので、問題にはならないだろう
ユーザーがまだ送信していないところだけ選択してくれればいい
✅目的特化モードを実装したい
startTalk
の mode
にわたす
あ、まずいな
ページ内からtalk IDを検索する処理と被ってしまう
現状だとこうなる
talk IDがカーソル行以上にない場合のみ、指定したmodeでchatを開始する
既存のtalk IDが見つかったときはmode指定を無視する
$ deno run -A https://scrapbox.io/api/code/takker/deno_bundleの代替コード/build.ts
mod.tsexport * from "https://raw.githubusercontent.com/takker99/scrapbox-keichobot/0.1.0/mod.ts";
example.tsexport * from "https://raw.githubusercontent.com/takker99/scrapbox-keichobot/0.1.0/example.ts";