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

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

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

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

Node.js

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

JavaScript

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

Q&A

1回答

1460閲覧

メンバー数をチャンネル名として表示する

poketatsu

総合スコア19

Discord

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

Node.js

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

JavaScript

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

0グッド

0クリップ

投稿2021/12/20 23:12

編集2022/01/10 01:24

#前提・実現させたいこと
メンバー数をチャンネル名として表示する

ボットを含めてですがメンバー数はなんとか表示できました。
役職ごとにも表示させたかったのですが、うまくいかなかったので、
どなたかご教授お願いします。

#エラーメッセージ

TypeError: guild.roles.get is not a function

#該当のコード

const Discord = require('discord.js') const client = new Discord.Client() const GUILD = '123456789' // 動作させるサーバーのID const CHANNEL = '123456789' // 名前を変更するチャンネルのID const CHANNEL2 = '123456789' //名前変更するチャンネルのID(男性) const roleID = '123456789'; //男性ロールID // ボットがオフラインのときの変更は出来ないから、起動時に辻褄を合わせる client.on('ready', () => { const guild = client.guilds.cache.get(GUILD) const channel = guild.channels.cache.get(CHANNEL) let memberCount = guild.roles.cache.get(roleID).members.size; channel.setName('メンバー数: ' + memberCount) }) // ボットがオフラインのときの変更は出来ないから、起動時に辻褄を合わせる client.on('ready', () => { const guild = client.guilds.cache.get(GUILD) const channel2 = guild.channels.cache.get(CHANNEL2) let memberCount = guild.roles.cache.get(roleID).members.size; channel2.setName('男性: ' + memberCount) }) // メンバーが参加したらチャンネル名を更新する client.on('guildMemberAdd', member => { // 指定したサーバーでのみ実行する if (member.guild.id === GUILD) { // チャンネルを取得して、名前を更新する const channel = member.guild.channels.cache.get(CHANNEL) let memberCount = guild.roles.cache.get(roleID).members.size; channel.setName('メンバー数: ' + memberCount) } }) // メンバーが参加したらチャンネル名を更新する client.on('guildMemberAdd', member => { // 指定したサーバーでのみ実行する if (member.guild.id === GUILD) { // チャンネルを取得して、名前を更新する const channel = member.guild.channels.cache.get(CHANNEL2) let memberCount = guild.roles.cache.get(roleID).members.size; channel.setName('男性: ' + memberCount) } }) // メンバーが退出したらチャンネル名を更新する(処理は上と同じ) client.on('guildMemberRemove', member => { if (member.guild.id === GUILD) { const channel = member.guild.channels.cache.get(CHANNEL) let memberCount = guild.roles.cache.get(roleID).members.size; channel.setName('メンバー数: ' + memberCount) } }) // メンバーが退出したらチャンネル名を更新する(処理は上と同じ) client.on('guildMemberRemove', member => { if (member.guild.id === GUILD) { const channel = member.guild.channels.cache.get(CHANNEL2) let memberCount = guild.roles.cache.get(roleID).members.size; channel.setName('男性: ' + memberCount) } }) //Botの起動とDiscordサーバーへの接続 client.login("Botのトークン")

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

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

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

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

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

Awayume

2021/12/30 16:50 編集

タグにJavaがついていますが、これはJavaScriptです。
poketatsu

2022/01/04 23:31

すみません!!修正しておきます!
guest

回答1

0

TypeError: guild.roles.get is not a function

は、 guild.rolesget がないという意味です。
discord.jsでは、情報を取得するとき、基本的に cache を挟む必要があります。
したがって、 guild.roles.cache.get(roleID).members.size; のようにすればよいと思います。

次に、

js

1memberCount = //略

というふうに定義していますが、 let もしくは constvar が必要になると思います。

次に、

js

1channel.setName('男性: ' + member.guild.memberCount)

これはサーバー(ギルド)のメンバーをカウントしているようです。
これの上で、

js

1let memberCount = guild.roles.cache.get(roleID).members.size;

と定義しているので、これを使って

js

1channel.setName('男性: ' + memberCount)

としてください。
なお、これらは複数箇所あるので、それぞれを変更するようにしてください。

投稿2021/12/30 16:48

編集2022/01/09 02:19
Awayume

総合スコア60

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

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

poketatsu

2022/01/08 22:21 編集

回答ありがとうございます。 修正はしたのですが、ロールごとではなく、ボットを含むサーバーの人数で数えてしまいます。
poketatsu

2022/01/08 22:21

回答ありがとうございます。 修正はしたのですが、ロールごとではなく、ボットを含むサーバーの人数で数えてしまいます。
Awayume

2022/01/09 02:16

修正しました
poketatsu

2022/01/10 01:30

ありがとうございます! コードの方、修正しておきました。 「ボットがオフラインのときの変更は出来ないから、起動時に辻褄を合わせる」のほうは、無事反映されたのですが、「メンバーが参加したらチャンネル名を更新する」と、「 メンバーが退出したらチャンネル名を更新する(処理は上と同じ)」が動いてくれないです。
poketatsu

2022/01/10 01:41

すみません。 ロールはサーバーに入ったときに、ロールを付与しているのですが、 この書き方だとロールを付与した時点で数えるのは、無理そうでしょうか。 また、方法があれば教えてほしいです。
Awayume

2022/01/10 02:26

> 動いてくれないです 具体的にどのような状態でしょうか?
poketatsu

2022/01/10 04:41

サーバーに参加したり退出したりするとこのようなエラーが出てしまいます。 C:\Program Files\nodejs\node.exe .......\Users\hopef\Desktop\勉強\member.js Uncaught ReferenceError: guild is not defined Process exited with code 1
Awayume

2023/09/17 14:12

回答を失念していました。今更ですが、 `guild.roles.cache.get`を`member.guild.roles.cache.get`とすればよいかと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問