Discordのタイピング表示に関する挙動
なのでtypingStartイベントがあるのに対してtypingStopがなかったりする
つまりサーバー側でタイピングの終了に関する処理は一切していなくて、全部クライアント側にあることになる
どうやってタイピング表示を止めているか
最後のタイピングから10秒程度経ったら
(同じチャンネルに)メッセージが送信されたら
Discord.js(v12以前)のstopTypingはどうなってるのか startTypingをすると約10秒ごとにAPIを叩いている
stopTypingをするまでこれが続く
おそらくプログラム側から扱いやすくするためにこうなっている
10秒ごとに繰り返しAPIを叩いているから、stopTypingでループをやめるまで完了しないpromiseを返すことになる
ループが続いている限りはAPI実行でエラーが発生する可能性があるからpromiseを完了にできない
なのでこのpromiseをawaitすると処理が進まずに期待した動作にならないので注意
注意点:メッセージを送信すると同時に stopTyping したほうがいい
上に書いた動作から stopTyping を実行せずにメッセージを送信すると、意図しない挙動をすることになる
「メッセージを送信するとタイピングが終わったとみなす挙動」と「stopTyping するまで10秒ごとにAPIを叩く動作」
挙動としてはメッセージを送信するとタイピング表示が無くなるが、最大10秒後に復活する