scrapbox-keichobot
バグ修正するついでにversionを刷新しておいた
使い方
選択範囲は無視する選択範囲を送信する
選択範囲が空白のときは何もしない
送信方法
Sendボタンを押すか、<C-Enter>を押す
https://gyazo.com/8fc080303486d65af55eccf0938ada11
フィードバックボタンを押すと、そのボタンに書かれた内容が送信される
https://gyazo.com/dc49ffeeb8f56f73bc357cd9fd017aaf
🙂と🙁は入力されるだけで送信はされない
終了方法
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指定を無視する
code:mod.ts
code:example.ts