どのように不調和でスラッシュコマンドボットを作成します.JS V 13


したがって、不一致はメッセージ内容を特権的な意図にして、ボットがそれをさらに要求しなければならないと確認した2022年初期から始まっている彼らのAPIでかなり大きな変化を実行しました.
それで、私はあなたがどのようにあなたのロボットを移行することができるかを共有するためにここにいます.
我々が始める前に、あなたがコミュニティとぶらぶらしたいならば、ここで我々の不協和サーバに加わることができます:DevHQ
このコードについては、ここでリポジトリを見つけることができます.Repository

始めましょう.
あなたのアプリケーションの更新スコープを使用してボットを招待する必要があります.スラッシュコマンドの登録に必要なコマンド.

まず最初に、常にNPMよりずっと良い糸を使うことを推奨します.npm -g install yarnボットのための新しいディレクトリを作りましょう.yarn init --yes不和をインストールしましょう.jsと他の依存関係
yarn add discord.js @discordjs/rest discord-api-types/v9 @discordjs/builders
インデックスを作成する時刻.以下のものをインポートします.
const fs = require('fs');
const {
    REST
} = require('@discordjs/rest');
const {
    Routes
} = require('discord-api-types/v9');
// Require the necessary discord.js classes
const {
    Client,
    Intents,
    Collection
} = require('discord.js');

// Create a new client instance
const client = new Client({
    intents: [Intents.FLAGS.GUILDS]
});
今、私たちは、スラッシュコマンドに対応するために必要なギルド意図を使用するクライアントインスタンスを作成しました.
今、私たちのボットのための動的なコマンド構造を作成するので、コマンドと呼ばれるディレクトリを作成し、インデックスにこれを追加できます.jsファイル
// Loading commands from the commands folder
const commandFiles = fs.readdirSync('./commands').filter(file => file.endsWith('.js'));
現在トークンのための時間です、GitHubにトークンを押すことは非常に我々がトークンを安全に保存するためにENVファイルを使わなければならないように勧められません.yarn add dotenvクリエイト.envファイルとあなたのトークンとテストギルド/サーバーIDをここに追加します.
TOKEN=YOUR_TOKEN_HERE
TEST_GUILD_ID=YOUR_GUILD_ID_HERE
このようにギルドIDをコピーできます

クリエイト.gitignoreファイルを追加します.
.env
インデックスファイルで設定する時間
// Loading the token from .env file
const dotenv = require('dotenv');
dotenv.config();
const TOKEN = process.env['TOKEN'];
私たちが最終的に私たちのトークンを得たので、それはテストギルドIDについて話す時間です、したがって、不一致のスラッシュコマンドは私たちに最初に登録することを要求します、そして、我々は開発で毎回、それを世界的に登録することができません、あるいは、我々は料金制限を得るつもりです、そして、潜在的にしばらくの間APIにアクセスするのを禁止されます.
我々は開発でこれを必要とするだけで、我々は生産に我々のボットを展開しているときにこれを行う必要はありません.それで、あなたのコマンドが世界的に利用可能であるとき、テストギルドIDを加えないでください.では、ギルドIDをインデックスファイルに追加しましょう.
const TEST_GUILD_ID = process.env['TEST_GUILD_ID'];
現在、我々のコマンドを登録する時間です、我々はテストギルドIDが利用可能であるかどうかに応じて自動的にグローバルと開発登録の間で切り替わる状態を作ります.
const commands = [];

// Creating a collection for commands in client
client.commands = new Collection();

for (const file of commandFiles) {
    const command = require(`./commands/${file}`);
    commands.push(command.data.toJSON());
    client.commands.set(command.data.name, command);
}

// When the client is ready, this only runs once
client.once('ready', () => {
    console.log('Ready!');
    // Registering the commands in the client
    const CLIENT_ID = client.user.id;
    const rest = new REST({
        version: '9'
    }).setToken(TOKEN);
    (async () => {
        try {
            if (!TEST_GUILD_ID) {
                await rest.put(
                    Routes.applicationCommands(CLIENT_ID), {
                        body: commands
                    },
                );
                console.log('Successfully registered application commands globally');
            } else {
                await rest.put(
                    Routes.applicationGuildCommands(CLIENT_ID, TEST_GUILD_ID), {
                        body: commands
                    },
                );
                console.log('Successfully registered application commands for development guild');
            }
        } catch (error) {
            if (error) console.error(error);
        }
    })();
});
今、我々は不協和音で我々の命令を登録しました、それを聞いて、彼らに反応する時間です
client.on('interactionCreate', async interaction => {
    if (!interaction.isCommand()) return;
    const command = client.commands.get(interaction.commandName);
    if (!command) return;
    try {
        await command.execute(interaction);
    } catch (error) {
        if (error) console.error(error);
        await interaction.reply({ content: 'There was an error while executing this command!', ephemeral: true });
    }
});
私たちのインデックスファイルの最後に、我々は我々のボットにログインする必要があります
// Login to Discord with your client's token
client.login(TOKEN);
これでコマンドサブディレクトリに移動できますし、pingを作りましょう.以下のコードを持つjsファイル
const { SlashCommandBuilder } = require('@discordjs/builders');

module.exports = {
    data: new SlashCommandBuilder()
        .setName('ping')
        .setDescription('Replies with pong'),
    async execute(interaction) {
        interaction.reply({ content: 'Pong' })
    }
};
我々は正常に正常に働いてピンポンボットを作成しました.JS V 13今、あなたは多くのコマンドを作成することができますあなたのボットの場合は、pingコマンドと同じ形式に従ってください.embedのコードは同じです、そして、我々がここで話していないボタンと選択メニューのような多くの新機能があります.embedを送信する場合は、次のようにします.
interaction.reply({ embeds: [embed] })
閉じるこの動画はお気に入りから削除されています

無料展開プラットフォーム
  • Railway
  • Qovery
  • OpeNode
  • Heroku
  • 次のいずれかを参照してください.