ボットに「入力中...」と表示させたい
v14・v13
channel.sendTyping()を使用する
v12以前のstartTypingとは異なり一度しか動作しない
Discordのタイピング表示に関する挙動
v12
message.channel.startTyping() で入力開始、message.channel.stopTyping() で入力停止
止めるまでずっと続いて、止めたあとも数秒間続くことがある
startTyping() は Promise が返るけど、stopTyping() は void なので注意しよう。
setTimeout を使って1秒間表示させる例
この後に msg.reply('~') などを入れたい時は setTimeout() 内に入れよう。
code:js
message.channel.startTyping()
setTimeout(() => {
message.channel.stopTyping()
// message.reply('Hey!')
}, 1000)
async/await を使って処理の間だけ表示させる例
code:js
const sleep = time => new Promise(resolve => setTimeout(resolve, time))
client.on('message', async message => {
message.channel.startTyping()
await sleep(1000)
message.channel.stopTyping()
message.reply('Hey!')
})
注意
startTyping() に await を付けたりすると永遠に入力中になってしまう。
詳細は Discordのタイピング表示に関する挙動 を参照