[2023] 打造更互動友善的 Discord 機器人 | Discord.js v14
目錄
- 介紹
- 改變 ready 事件
- 加入選項到 hello 指令
- 擷取使用者選項
- 互動應答
- 加入加法指令
- 判斷輸入值是否有效
- 計算結果
- 執行加法指令
- 加入打招呼指令
- 結語
介紹
嗨大家好,歡迎回來觀看我的另一個影片!如果你們已經按照之前的教學成功編寫了自己的 Discord 機器人,並使用了 Discord JSP 14,那麼今天的影片將會教你如何為你的斜線指令添加選項。這個影片將會建立在上一支影片的基礎上,所以如果你還沒看過那支影片的話,我強烈建議你先觀看那支影片以瞭解如何創建斜線指令和指令處理器。現在,讓我們開始吧!
改變 ready 事件
首先,我們需要將 ready 事件從字串改為 Discord 的枚舉。這樣將使機器人更可靠和準確,有助於未來的測試工作。
// 原本程式碼中的 ready 事件
client.on('ready', () => {
console.log('Bot is ready!');
});
// 更改後的 ready 事件
client.on(events.clientReady, () => {
console.log('Bot is ready!');
});
加入選項到 hello 指令
現在,讓我們為 hello 指令添加選項。目前,hello 指令只是簡單地回覆「hello」,並沒有提供任何選項。我們將會檢查用戶是否指定了一個要打招呼的對象,如果是的話,機器人將會向該對象打招呼。
// 原本程式碼中的 hello 指令
const ping = {
name: 'ping',
description: 'Ping!',
execute(interaction) {
interaction.reply('Pong!');
},
};
// 修改後的 hello 指令
const hello = {
name: 'hello',
description: 'Say hello to a user.',
options: [
{
name: 'user',
description: 'The user to say hi to.',
required: false, // 選項是否必填
type: 6, // 6 代表 User
},
],
execute(interaction) {
const userOption = interaction.options.getUser('user');
if (userOption) {
interaction.reply(`Hello, ${userOption.toString()}!`);
} else {
interaction.reply('Hello!');
}
},
};
擷取使用者選項
現在,讓我們在 interaction Create 函式中擷取使用者選項。首先,我們會擷取使用者選項,然後檢查選項是否為有效的數字。如果是有效的數字,我們就會執行加法操作。
// 原本程式碼中的 interaction create 函式
client.on('interactionCreate', async (interaction) => {
if (!interaction.isCommand()) return;
const { commandName } = interaction;
if (commandName === 'ping') {
// ...
}
// 其他指令的處理程式碼...
});
// 修改後的 interaction create 函式
client.on('interactionCreate', async (interaction) => {
if (!interaction.isCommand()) return;
const { commandName } = interaction;
if (commandName === 'hello') {
const userOption = interaction.options.getUser('user');
if (userOption) {
interaction.reply(`Hello, ${userOption.toString()}!`);
} else {
interaction.reply('Hello!');
}
}
// 其他指令的處理程式碼...
});
互動應答
現在,我們會根據使用者選項進行回覆。如果使用者有指定要打招呼的對象,機器人將會向該對象打招呼;否則,機器人將會給出一個普通的招呼。
// 原本程式碼中的 hello 指令執行程式碼
execute(interaction) {
const userOption = interaction.options.getUser('user');
if (userOption) {
interaction.reply(`Hello, ${userOption.toString()}!`);
} else {
interaction.reply('Hello!');
}
}
// 修改後的 hello 指令執行程式碼
execute(interaction) {
const userOption = interaction.options.getUser('user');
if (userOption) {
interaction.reply(`你好,${userOption.toString()}!`);
} else {
interaction.reply('你好!');
}
}
加入加法指令
現在,讓我們來加入一個新的指令,稱為「加法指令」。這個指令將接受兩個數字作為選項,並計算它們的和。
// 加法指令的程式碼
const add = {
name: 'add',
description: 'Add two numbers together.',
options: [
{
name: 'first_number',
description: 'The first number.',
required: true,
type: 4, // 4 代表數字
},
{
name: 'second_number',
description: 'The second number.',
required: true,
type: 4, // 4 代表數字
},
],
execute(interaction) {
const firstNumber = interaction.options.getNumber('first_number');
const secondNumber = interaction.options.getNumber('second_number');
const result = firstNumber + secondNumber;
interaction.reply(`The sum of ${firstNumber} and ${secondNumber} is ${result}.`);
},
};
判斷輸入值是否有效
現在,讓我們檢查使用者輸入的值是否為有效的數字。如果輸入值無效,我們將提示使用者輸入有效的數字。
// 加法指令的程式碼
execute(interaction) {
const firstNumber = interaction.options.getNumber('first_number');
const secondNumber = interaction.options.getNumber('second_number');
if (isNaN(firstNumber) || isNaN(secondNumber)) {
interaction.reply('Please enter a valid number.');
} else {
const result = firstNumber + secondNumber;
interaction.reply(`The sum of ${firstNumber} and ${secondNumber} is ${result}.`);
}
}
計算結果
現在,讓我們計算兩個數字的和並回覆給使用者。
// 加法指令的程式碼
execute(interaction) {
const firstNumber = interaction.options.getNumber('first_number');
const secondNumber = interaction.options.getNumber('second_number');
if (isNaN(firstNumber) || isNaN(secondNumber)) {
interaction.reply('Please enter a valid number.');
} else {
const result = firstNumber + secondNumber;
interaction.reply(`The sum of ${firstNumber} and ${secondNumber} is ${result}.`);
}
}
執行加法指令
現在,讓我們在 interaction create 函式中執行我們的加法指令。
// interaction create 函式中的程式碼
client.on('interactionCreate', async (interaction) => {
if (!interaction.isCommand()) return;
const { commandName } = interaction;
if (commandName === 'add') {
const firstNumber = interaction.options.getNumber('first_number');
const secondNumber = interaction.options.getNumber('second_number');
if (isNaN(firstNumber) || isNaN(secondNumber)) {
interaction.reply('Please enter a valid number.');
} else {
const result = firstNumber + secondNumber;
interaction.reply(`The sum of ${firstNumber} and ${secondNumber} is ${result}.`);
}
}
// 其他指令的處理程式碼...
});
加入打招呼指令
最後,讓我們添加一個打招呼指令,與之前的 hello 指令相似,如果有指定要打招呼的對象,機器人將會向該對象打招呼;否則,機器人將會給出一個普通的招呼。
// 打招呼指令的程式碼
const bye = {
name: 'bye',
description: 'Say bye to a user.',
options: [
{
name: 'user',
description: 'The user to say bye to.',
required: false,
type: 6, // 6 代表 User
},
],
execute(interaction) {
const userOption = interaction.options.getUser('user');
if (userOption) {
interaction.reply(`Goodbye, ${userOption.toString()}!`);
} else {
interaction.reply('Goodbye!');
}
},
};
結語
透過這個影片,你現在知道如何在斜線指令中添加選項,這將使你的機器人更加互動和友好。如果你有任何問題,請在下方留言,我會盡快回答你。另外,我們將在不久的將來創建一個高級的斜線指令處理器,以更好地整理程式碼,敬請期待!謝謝大家觀看,祝你們有美好的一天!再見!
将高亮部分翻译成繁体中文:
"歡迎回來觀看我的另一個影片!如果你們已經按照之前的教學成功編寫了自己的 Discord 機器人,並使用了 Discord JSP 14,那麼今天的影片將會教你如何為你的斜線指令添加選項。這個影片將會建立在上一支影片的基礎上,所以如果你還沒看過那支影片的話,我強烈建議你先觀看那支影片以瞭解如何創建斜線指令和指令處理器。現在,讓我們開始吧!"
将高亮部分翻译成繁体中文:
"你們已經知道如何為你的 Discord 機器人添加選項了!現在,你可以讓你的機器人更具互動性和友好性。如果你有任何問題,請在下方留言,我會盡快回答你。另外,我們將在不久的將來創建一個高級的斜線指令處理器,以更好地整理程式碼,敬請期待!謝謝大家觀看,祝你們有美好的一天!再見!"