3番目にリアクションを付けた人を取得するサンプル
awaitReactionsだと指定した数のリアクションが付いてからイベントハンドラが実行されるのでリアクションを付けた人が分からない
awaitReactionsと違ってPromiseを返すわけではないのでawaitして結果を得られなくcallbackの中に処理を書くことになる
少し工夫することでシンプルにPromiseに包むことができる(後述)
code:js
client.on('messageCreate', message => {
// 3番目のリアクション、つまり3つ目リアクションが付いたときだけに絞り込む
// 対象の絵文字も絞り込む
const filter = reaction => reaction.count === 3 && reaction.emoji.name === '👍'
const collector = message.createReactionCollector({ filter })
collector.on('collect', (reaction, user) => {
// 使ったcollectorはもう必要ないので止める
collector.stop()
console.log(user.tag)
})
})
Promise版
code:js
const events = require('node:events')
client.on('messageCreate', async message => {
// 3番目のリアクション、つまり3つ目リアクションが付いたときだけに絞り込む
// 対象の絵文字も絞り込む
const filter = reaction => reaction.count === 3 && reaction.emoji.name === '👍'
const collector = message.createReactionCollector({ filter })
// 使ったcollectorはもう必要ないので止める
collector.stop()
console.log(user.tag)
})