iT邦幫忙

2022 iThome 鐵人賽

0
自我挑戰組

node.js 前端後端全都要系列 第 18

Day18- Discord.js v14 機器人接收指令(三)

  • 分享至 

  • xImage
  •  

前言

前面成功的建立指令,也可以獲取基本的伺服器與個人資料了,還缺少最重要的就是和機器人的互動。
所以這邊就要來講最基本的也最重要的,與機器人的互動指令。

互動指令

  • 會需要機器人讀取指令的時候,就只有有互動的產生,或著文字產生等情況。
client.on('interactionCreate', async interaction => {  }); 
// 這邊可以偵測 當有個 interaction產生時 便會執行後面的函式
  • 再來就是要確定你的互動是否為設定的模式
    client.on('interactionCreate', async interaction => {
        if (!interaction.isChatInputCommand()) return;
        //確定這項互動是以指令的形式,不是的話就return
        const { commandName } = interaction;
        //把互動的名詞存進 commandName
        if (commandName === 'ping') {
            await interaction.reply('Pong!');
            //如果執行ping指令 ,就回復他 Pong
            
        } else if (commandName === 'server') {
            await interaction.reply(`伺服器名稱: ${interaction.guild.name}\n人員總數: ${interaction.guild.memberCount}`);
            //將我們獲取到的伺服器資料以文字回傳
            
        } else if (commandName === 'user') {
            await interaction.reply(`你的名字為: ${interaction.user.tag}\n你的id為: ${interaction.user.id}`);
            //將我們獲取到的用戶資料以文字回傳
        }
    });

範例程式碼

const { REST, SlashCommandBuilder, Routes } = require('discord.js');
const { Client, GatewayIntentBits } = require('discord.js');
const { clientId, guildId, token } = require('./token.json');

const client = new Client({ intents: [GatewayIntentBits.Guilds] });

const commands = [
	new SlashCommandBuilder().setName('ping').setDescription('Replies with pong!'),
	new SlashCommandBuilder().setName('server').setDescription('Replies with server info!'),
	new SlashCommandBuilder().setName('user').setDescription('Replies with user info!'),
]
	.map(command => command.toJSON());

const rest = new REST({ version: '10' }).setToken(token);

rest.put(Routes.applicationGuildCommands(clientId, guildId), { body: commands })
	.then((data) => console.log(`Successfully registered ${data.length} application commands.`))
	.catch(console.error);

    client.once('ready', () => {
        console.log('Ready!');
    });
    
    client.on('interactionCreate', async interaction => {
        if (!interaction.isChatInputCommand()) return;
    
        const { commandName } = interaction;
    
        if (commandName === 'ping') {
            await interaction.reply('Pong!');
        } else if (commandName === 'server') {
            await interaction.reply(`伺服器名稱: ${interaction.guild.name}\n人員總數: ${interaction.guild.memberCount}`);
        } else if (commandName === 'user') {
            await interaction.reply(`你的名字為: ${interaction.user.tag}\n你的id為: ${interaction.user.id}`);
        }
    });
    
    client.login(token);

成品展示

https://ithelp.ithome.com.tw/upload/images/20221017/20152680mc62OZMY2P.jpg
https://ithelp.ithome.com.tw/upload/images/20221017/201526804coWXU08G8.jpg


上一篇
Day17- Discord.js v14 機器人接收指令(二)
下一篇
Day19- Discord.js v14 機器人接收指令(四)
系列文
node.js 前端後端全都要25
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
Matsumimusu
iT邦新手 5 級 ‧ 2023-08-16 21:53:52

請問這有一定要用"/"指令嗎
不能像v12一樣用
client.on('message',msg => {}
的方式嗎
還是寫法有變呢?

我要留言

立即登入留言