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

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

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

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

JavaScript

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

Q&A

解決済

1回答

1531閲覧

Discord.jsでpermissionsを使おうとしたらエラー

sumwave

総合スコア11

Discord

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

JavaScript

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

0グッド

0クリップ

投稿2022/12/09 12:16

編集2022/12/10 16:51

前提

Discord.js v14でエセ認証botを作っています。
管理者のみが実行できるようコードを作っていたら、
よく分からないエラーが発生したので、わかる人いたら回答お願いします。

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

パスはとりあえずそのままにしておきます。

C:\Users\kazun\OneDrive\Git\ibuki-bot2\node_modules\discord.js\src\managers\GuildMemberRoleManager.js:37 return this.guild.roles.cache.filter(role => this.member._roles.includes(role.id)).set(everyone.id, everyone); ^ TypeError: Cannot read properties of undefined (reading 'id') at get cache [as cache] (C:\Users\kazun\OneDrive\Git\ibuki-bot2\node_modules\discord.js\src\managers\GuildMemberRoleManager.js:37:101) at get permissions [as permissions] (C:\Users\kazun\OneDrive\Git\ibuki-bot2\node_modules\discord.js\src\structures\GuildMember.js:238:47) at Client.<anonymous> (C:\Users\kazun\OneDrive\Git\ibuki-bot2\main.js:47:24) at Client.emit (node:events:513:28) at InteractionCreateAction.handle (C:\Users\kazun\OneDrive\Git\ibuki-bot2\node_modules\discord.js\src\client\actions\InteractionCreate.js:97:12) at module.exports [as INTERACTION_CREATE] (C:\Users\kazun\OneDrive\Git\ibuki-bot2\node_modules\discord.js\src\client\websocket\handlers\INTERACTION_CREATE.js:4:36) at WebSocketManager.handlePacket (C:\Users\kazun\OneDrive\Git\ibuki-bot2\node_modules\discord.js\src\client\websocket\WebSocketManager.js:352:31) at WebSocketShard.onPacket (C:\Users\kazun\OneDrive\Git\ibuki-bot2\node_modules\discord.js\src\client\websocket\WebSocketShard.js:489:22) at WebSocketShard.onMessage (C:\Users\kazun\OneDrive\Git\ibuki-bot2\node_modules\discord.js\src\client\websocket\WebSocketShard.js:328:10) at callListener (C:\Users\kazun\OneDrive\Git\ibuki-bot2\node_modules\ws\lib\event-target.js:290:14) Node.js v18.12.1

環境

Node.js 18.12.1
Discord.js 14.7.1
dotenv 16.0.3

該当のソースコード

こちらが該当のコード一部です。
if内の.permissionsでエラーが起こっているようです。

javascript

1const member = interaction.guild.members.cache.get(interaction.user.id); 2if (member.permissions.has(PermissionsBitField.Flags.Administrator)) {};

下のコードでテスト用にでもお使いください。

javascript

1require('dotenv').config(); 2const { 3 Client, 4 GatewayIntentBits, 5 Partials, 6 Events, 7 EmbedBuilder, 8 ButtonBuilder, 9 ButtonStyle, 10 ActionRowBuilder, 11 SlashCommandBuilder, 12 PermissionsBitField 13} = require("discord.js"), 14 client = new Client({ 15 partials: [ 16 Partials.GuildMember, 17 Partials.Message, 18 Partials.User 19 ], 20 intents: [ 21 GatewayIntentBits.DirectMessages, 22 GatewayIntentBits.GuildIntegrations, 23 GatewayIntentBits.GuildMessages, 24 GatewayIntentBits.MessageContent 25 ] 26 }), 27 json = {}; 28client.on(Events.ClientReady, () => { 29 client.guilds.cache.map(guild => { 30 client.guilds.cache.get(guild.id).commands.set([ 31 new SlashCommandBuilder() 32 .setName("authbtncreate") 33 .setDescription("認証ボタンを作成します。") 34 .addRoleOption(option => option 35 .setName("roles") 36 .setDescription("付与する際に使用するロールを選択します。") 37 .setRequired(true) 38 ) 39 ]); 40 }); 41}); 42client.on(Events.InteractionCreate, interaction => { 43 console.log("インタラクション受信"); 44 switch (interaction.commandName) { 45 case "authbtncreate": { 46 const member = interaction.guild.members.cache.get(interaction.user.id); 47 if (member.permissions.has(PermissionsBitField.Flags.Administrator)) { 48 const roleID = interaction.options.getRole("roles").id; 49 const button = new ButtonBuilder() 50 .setLabel("認証!") 51 .setStyle(ButtonStyle.Primary) 52 .setCustomId("authenticatorbutton" + roleID); 53 const components = new ActionRowBuilder() 54 .addComponents(button); 55 const embed = new EmbedBuilder() 56 .setTitle("認証をして僕たちとこのサーバーを楽しもう!") 57 .setDescription("✅認証は下のボタンを押下する必要があります。") 58 .setAuthor(interaction.guild); 59 interaction.channel.send({ embeds: [embed], components: [components] }) 60 .then(() => { interaction.reply({ content: "作成が完了しました!", ephemeral: true }); }); 61 console.log("認証ボタン作成"); 62 } else interaction.reply({ content: "コマンド発行者自身に管理者権限がないため、実行することが出来ません..." }); 63 break; 64 } 65 }; 66}); 67client.login(process.env.token);

GitHubを使っているので、コードのリンクを貼っておきます。

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

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

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

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

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

guest

回答1

0

自己解決

インテントが足りなかったようです。

javascript

1const client = new Client({ 2 partials: [], //僕のコードではもうこれいらない(fetch等で代用 3 intents: [GatewayIntentBits.Guilds] //メッセージも取得しないのでインテントもこれ1つで十分 4});

GatewayIntentBits.Guilds というインテントを追加したら、エラーは発生しなくなりました。

投稿2022/12/10 07:51

sumwave

総合スコア11

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問