質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

1回答

1306閲覧

discord.jsのメッセージについたリアクションを引っ張ってくる方法

.tack

総合スコア8

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

1クリップ

投稿2021/10/26 12:01

昨日からdiscordのボットを触り始めた初心者です。
node.jsとdiscord.jsを使用してディスコボットを作成しています。
「ボットからメッセージを投げて、それにリアクションを付けた人の中から一人をランダムに抽選して発表する」
という機能を作りたいのですが、メッセージIDからそのメッセージについたリアクションの種類やリアクションしたユーザを引っ張ってくる方法が分かりません。

javascript

1client.on('messageReactionAdd', (reaction, user) => { 2 //処理A 3 })

ここの処理A部分でreaction.messageとuserを配列や外部ファイルに保存しておいて後で参照する方法も考えましたが、どうにもスマートではない気がして...
メッセージからリアクション情報を引っ張ってくる方法に関してアイディアや参考ページに心当たりがある方いらっしゃれば、ご教授頂ければ幸いです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

Messageオブジェクトが取得できているのであれば、Message.awaitReactions()を使えばいいのではないでしょうか。

filterで特定のリアクションのみ抽出するようにし、見つかったリアクションそれぞれのユーザをリストにまとめれば扱いやすいかと。

Message自体はChannel.send()の返値を使えばいいでしょう。

js

1const message = channel.send('メッセージ'); 2 3const filter = (reaction, _user) => { 4 return ['????', '????'].includes(reaction.emoji.name); 5}; 6 7message.awaitReactions({ filter }) 8 .then(collected => { 9 // collectedはCollection<string, MessageReaction> 10 // reaction.usersはReactionUserManager 11 // reaction.users.cacheはCollection<Snowflake, User> 12 // collected.map(...)だけだと[[User, User, ...], [User, ...], ...]となるためflattenする 13 const users = collected.map(reaction => reaction.users.cache.values()).flat(); 14 /* ... */ 15 });

上のコードは実際に試したわけではないので、雰囲気を感じていただければ。

ご参考まで。

投稿2021/10/26 12:45

編集2021/10/26 12:55
fj68

総合スコア752

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問