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

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

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

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

JavaScript

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

Q&A

解決済

1回答

2628閲覧

Discord.js (JavaScript)でロールの取得・表示をしたい

SAAT

総合スコア14

Discord

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

JavaScript

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

0グッド

1クリップ

投稿2020/04/01 03:34

前提・実現したいこと

Discord.jsでロールの取得を行いたい

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

Discordでinfomeと入力した人のロールを表示するコードを作りましたが、undefined ど表示されてしまします。
どう変更すればいいのかお教えください。

該当のソースコード

js

1if (msg.content === `infome`) msg.reply(` 2 取得済みのロール: ${msg.author.roles} 3`)

試したこと

roles や roleなどいろいろ打ち込んでみましたがやはり undefinedになりました

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

特になし

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

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

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

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

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

guest

回答1

0

ベストアンサー

discord.jsのドキュメントを確認しましょう。
https://discord.js.org/#/docs/main/stable/class/Message?scrollTo=author
にあるように、message.authorはUser型を返します。これはサーバーとは関係ないユーザーを表します。各サーバーに依存しないので、サーバーごとに異なる役職のような情報をUser型は持っていません。

各サーバーに所属しているメンバーを取得したい場合は、message.authorの代わりにmessage.memberを使うべきです。こちらはGuildMember型で、ギルドに依存するメンバーを表しますので、各サーバーごとに異なる役職のような情報も持っています。
https://discord.js.org/#/docs/main/stable/class/Message?scrollTo=member

実際、下記リンクのように
https://discord.js.org/#/docs/main/stable/class/GuildMember?scrollTo=roles
役職にかかわる情報も保持していますね。

投稿2020/04/01 08:08

suomo

総合スコア82

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

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

SAAT

2020/04/01 10:08

詳しいご説明ありがとうございます guildmember型であるということがよく理解することができました そこでMessageで返信するにはどのような形にすればよいでしょうか よろしくお願いします.
suomo

2020/04/02 05:16

引き続き回答いたしますが、私自身discord.jsはさほど利用経験がないため、以下に記載する内容より簡便な方法がある、あるいは想定通りに動作しない可能性もあります。 動作するようであれば、後程解答本文に追記いたします。 --------------- https://discord.js.org/#/docs/main/stable/class/GuildMemberRoleManager?scrollTo=cache こちらをご覧いただきたいのですが、`GuildMember`型が持つ`roles`は`GuildMemberRoleManager`型になっていて、その中に`cache`というpロパティがあります。これは説明文にあるように > The roles of this member メンバーが持つロールの一覧になっているようです。 今回はメンバーが持つロールの名前の一覧を返信したいということですから、 msg.member.roles.cache でとれたCollectionに対して、map(role => role.name) をつければ役職の名前の一覧を得られます。 まとめると以下のようになりましょうか ```js if (msg.content === `infome`) msg.reply(` 取得済みのロール: ${msg.member.roles.cache.map(role => role.name)} `) ``` 中の処理が長いので、もう少し表示に手を加えたいなどあれば、if文の中で 先に `msg.member.roles.cache.map(role => role.name)` この部分の処理をしていい感じにしてから、最後にreplyするのがよいと思われます。
SAAT

2020/04/02 10:45

ありがとうございます 完全に理解することができました。
SAAT

2020/04/02 11:19

cacheを外したことで成功しました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問