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

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

新規登録して質問してみよう
ただいま回答率
85.47%
Discord

Discordは、ゲーマー向けのボイスチャットアプリです。チャット・通話がブラウザ上で利用可能で、個人専用サーバーも開設できます。通話中でも音楽を流したり、PC画面を共有できるなど多機能な点が特徴です。

Node.js

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

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

Q&A

解決済

1回答

4183閲覧

discord.jsでメッセージにリアクションをしているユーザーを取得できない

sho_esaki

総合スコア9

Discord

Discordは、ゲーマー向けのボイスチャットアプリです。チャット・通話がブラウザ上で利用可能で、個人専用サーバーも開設できます。通話中でも音楽を流したり、PC画面を共有できるなど多機能な点が特徴です。

Node.js

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

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

0グッド

0クリップ

投稿2021/10/05 09:01

編集2021/10/05 13:09

前提・実現したいこと

discord.jsを使ってbotを作成しているのですが、
コマンドをうったらその一つ前のメッセージに対して、リアクションをしているユーザーの名前を抽出するところでうまくいきません。

reactions.cache.get(emoji)で、その中にusersがあるので、.usersでユーザーのコレクションを取得しているつもりなのですが、エラーメッセージが出力されてしまいます。
解決方法がわかる方いたらお願いします。

発生している問題・エラーメッセージ

エラーメッセージ TypeError: messageReactions.forEach is not a function

該当のソースコード

Javasctipt

1 if (message.content.startsWith('!react')){ 2 message.channel.messages.fetch({ before: message.id, limit: 1 }) 3 .then(messages => { 4 const messageReactions = messages.first().reactions.cache.get("????").users; 5 console.log(messageReactions); 6 messageReactions.forEach(function(data){ 7 console.log(data); 8 }) 9 }); 10 };

試したこと

ここに問題に対して試したことを記載してください。

最初のmessageReactionsの中身は以下のようになってるようです

<ref *1> ReactionUserManager { reaction: <ref *2> MessageReaction { message: Message { channelId: '891963669267771432', guildId: '566983097266995221', deleted: false, id: '891963679170527262', type: 'DEFAULT', system: false, content: 'aaa', author: [User], pinned: false, tts: false, nonce: null, embeds: [], components: [], attachments: Collection(0) [Map] {}, stickers: Collection(0) [Map] {}, createdTimestamp: 1632731112998, editedTimestamp: null, reactions: [ReactionManager], mentions: [MessageMentions], webhookId: null, groupActivityApplication: null, applicationId: null, activity: null, flags: [MessageFlags], reference: null, interaction: null }, me: false, users: [Circular *1], _emoji: ReactionEmoji { animated: null, name: '????', id: null, deleted: false, reaction: [Circular *2] }, count: 1 } }

補足情報(FW/ツールのバージョンなど)

discord.js v13
nods.js v16

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

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

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

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

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

guest

回答1

0

ベストアンサー

js

1 if (message.content.startsWith('!react')){ 2 message.channel.messages.fetch({ before: message.id, limit: 1 }) 3 .then(messages => { 4 const messageReactions = messages.first().reactions.cache.get("????").users.cache 5 console.log(messageReactions); 6 messageReactions.forEach(function(data){ 7 console.log(data); 8 }) 9 }); 10 };

MessageReaction#users は ReactionUserManagerなのでこれで解決すると思います

投稿2021/10/05 10:17

Waki285

総合スコア2014

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

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

sho_esaki

2021/10/05 13:05

回答ありがとうございます Collection(0) [Map] {} と出るだけで、リアクションをしたユーザーがとれてないようです・・ その前のget()のところではとれているのですが、、
Waki285

2021/10/06 01:01

だったらリアクションを誰もつけていないか、もしくはcacheにないかですね awaitを使用しawait messages.first().reactions.cache.get("????").users.fetch()とかでやるべきでしょう
sho_esaki

2021/10/06 04:36

``` const beforeMessage = await message.channel.messages.fetch({ before: message.id, limit: 1 }) const messageReactions = await beforeMessage.first().reactions.cache.get("????").users.fetch() console.log(messageReactions); messageReactions.forEach(function(data){ console.log(data.username); }) ``` こちらに変更し、無事に名前がとれました! ありがとうございます
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問