🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Discord

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

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

0回答

808閲覧

Discord,jsでスラッシュコマンドを実行するとエラーが発生する

Jinaokun

総合スコア0

Discord

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

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2024/10/22 03:01

実現したいこと

スラッシュコマンドを動作できるようにする

発生している問題・分からないこと

スラッシュコマンドを実行するとDiscord内ではアプリケーションが応答しませんでした。とでて、下記のエラーメッセージが出てくる。

エラーメッセージ

error

1throw er; // Unhandled ‘error’ event ^

該当のソースコード

JavaScript

1const { Client, IntentsBitField, EmbedBuilder, ActionRowBuilder, ButtonBuilder, ButtonStyle, ModalBuilder, TextInputBuilder, TextInputStyle, ChannelType } = require('discord.js'); 2const { token } = require('./config.json'); // Bot tokenをconfig.jsonに保存 3 4const client = new Client({ intents: [IntentsBitField.Flags.Guilds, IntentsBitField.Flags.GuildMessages] }); 5 6client.on('ready', () => { 7 console.log(`Logged in as ${client.user.tag}!`); 8 9 // スラッシュコマンドを登録 (グローバルコマンドとして登録) 10 client.application.commands.create({ 11 name: 'mcid', 12 description: 'MCID認証モーダルを表示します', 13 }); 14 15 client.application.commands.create({ 16 name: 'ticket', 17 description: 'チケット作成ボタンを表示します', 18 }); 19 20 client.application.commands.create({ 21 name: 'help', 22 description: 'コマンド一覧を表示します', 23 }); 24 25 client.application.commands.create({ 26 name: 'userinfo', 27 description: 'ユーザー情報', 28 options: [{ 29 name: 'user', 30 description: '情報を見たいユーザー', 31 type: 6, // USER TYPE 32 }] 33 }); 34 35 client.application.commands.create({ 36 name: 'serverinfo', 37 description: 'サーバー情報', 38 }); 39 40 client.application.commands.create({ 41 name: 'ping', 42 description: 'ボットのping値を表示します', 43 }); 44}); 45 46client.on('interactionCreate', async interaction => { 47 if (!interaction.isChatInputCommand()) return; 48 49 if (interaction.commandName === 'mcid') { 50 // MCID認証モーダル 51 const modal = new ModalBuilder() 52 .setCustomId('mcidModal') 53 .setTitle('MCID認証'); 54 55 const mcidInput = new TextInputBuilder() 56 .setCustomId('mcidInput') 57 .setLabel("MCIDを入力してください") 58 .setStyle(TextInputStyle.Short); 59 60 const firstActionRow = new ActionRowBuilder().addComponents(mcidInput); 61 modal.addComponents(firstActionRow); 62 63 await interaction.showModal(modal); 64 } else if (interaction.commandName === 'ticket') { 65 // チケット作成ボタン 66 const row = new ActionRowBuilder() 67 .addComponents( 68 new ButtonBuilder() 69 .setCustomId('ticketButton') 70 .setLabel('チケットを作成') 71 .setStyle(ButtonStyle.Primary), 72 ); 73 74 await interaction.reply({ content: 'チケットを作成するには、下のボタンをクリックしてください。', components: [row] }); 75 } else if (interaction.commandName === 'help') { 76 // ヘルプコマンド 77 const embed = new EmbedBuilder() 78 .setColor(0x0099FF) 79 .setTitle('コマンド一覧') 80 .addFields( 81 { name: '/mcid', value: 'MCID認証モーダルを表示します', inline: true }, 82 { name: '/ticket', value: 'チケット作成ボタンを表示します', inline: true }, 83 { name: '/userinfo [user]', value: 'ユーザー情報を表示します', inline: true }, 84 { name: '/serverinfo', value: 'サーバー情報を表示します', inline: true }, 85 { name: '/ping', value: 'ボットのping値を表示します', inline: true }, 86 ); 87 88 await interaction.reply({ embeds: [embed] }); 89 } else if (interaction.commandName === 'userinfo') { 90 // ユーザー情報コマンド 91 const user = interaction.options.getUser('user') || interaction.user; 92 const embed = new EmbedBuilder() 93 .setColor(0x0099FF) 94 .setTitle(`${user.username}の情報`) 95 .setThumbnail(user.displayAvatarURL()) 96 .addFields( 97 { name: 'ユーザー名', value: user.username, inline: true }, 98 { name: 'Discriminator', value: user.discriminator, inline: true }, 99 { name: 'ID', value: user.id, inline: true }, 100 { name: 'Bot?', value: user.bot ? 'はい' : 'いいえ', inline: true }, 101 { name: 'アカウント作成日', value: user.createdAt.toLocaleDateString(), inline: true }, 102 ); 103 104 await interaction.reply({ embeds: [embed] }); 105 } else if (interaction.commandName === 'serverinfo') { 106 // サーバー情報コマンド 107 const guild = interaction.guild; 108 const embed = new EmbedBuilder() 109 .setColor(0x0099FF) 110 .setTitle(`${guild.name}の情報`) 111 .setThumbnail(guild.iconURL()) 112 .addFields( 113 { name: 'サーバー名', value: guild.name, inline: true }, 114 { name: 'ID', value: guild.id, inline: true }, 115 { name: 'オーナー', value: `<@${guild.ownerId}>`, inline: true }, 116 { name: 'メンバー数', value: guild.memberCount, inline: true }, 117 { name: 'チャンネル数', value: guild.channels.cache.size, inline: true }, 118 { name: 'ロール数', value: guild.roles.cache.size, inline: true }, 119 { name: '作成日', value: guild.createdAt.toLocaleDateString(), inline: true }, 120 ); 121 122 await interaction.reply({ embeds: [embed] }); 123 } else if (interaction.commandName === 'ping') { 124 // pingコマンド 125 await interaction.reply(`🏓 Pong! ${client.ws.ping}ms`); 126 } 127}); 128 129client.on('interactionCreate', async interaction => { 130 if (!interaction.isModalSubmit()) return; 131 132 if (interaction.customId === 'mcidModal') { 133 const mcid = interaction.fields.getTextInputValue('mcidInput'); 134 135 // 特定のメッセージチャンネルに送信 (チャンネルIDを指定) 136 const channel = client.channels.cache.get('認証メッセージを送信するチャンネルID'); 137 if (channel) { 138 channel.send(`<@${interaction.user.id}> が認証されました!\nMCID: ${mcid}`); 139 await interaction.reply({ content: '認証が完了しました!', ephemeral: true }); 140 } else { 141 await interaction.reply({ content: '認証に失敗しました。', ephemeral: true }); 142 } 143 } 144}); 145 146client.on('interactionCreate', async interaction => { 147 if (!interaction.isButton()) return; 148 149 if (interaction.customId === 'ticketButton') { 150 // チケットチャンネルを作成 151 const guild = interaction.guild; 152 const channel = await guild.channels.create({ 153 name: `ticket-${interaction.user.username}`, 154 type: ChannelType.GuildText, 155 // 必要に応じて、親カテゴリや権限を設定 156 }); 157 158 await interaction.reply({ content: `${channel} にチケットを作成しました。`, ephemeral: true }); 159 160 // チケットチャンネルにメッセージを送信 161 channel.send(`<@${interaction.user.id}>さん、チケットを作成しました。\n管理者を待機してください。`); 162 } 163}); 164 165client.login(token); 166 167// ソース: 168// 1. https://github.com/FabioSmuu/discord-ticket-bot subject to MIT 169// 2. https://github.com/nicti/NW-RtA-Tracker 170// 3. https://github.com/oneforall-bot/oneforall

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

teratailで検索したが出てこなかった

補足

特になし

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

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

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

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

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

TN8001

2024/10/22 03:58

JavaとJavaScriptは全く別の言語です。 「Java」タグは外してください。 「JavaScript」タグを付けてください。 質問はいつでも何度でも編集できます。
Jinaokun

2024/10/22 04:17

すいません。間違えました。
TN8001

2024/10/22 04:29

謝る必要はないですが、直してください。 質問のどこかに編集ボタンがあるはずです。 JavaScriptが得意な回答者の目につかない可能性があります。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

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

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

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問