前提
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を使っているので、コードのリンクを貼っておきます。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。