如何用Discord.js实现查询JSON文件并返回结果的指令?
实现Discord.js机器人的!check指令查询JSON数据功能
实现步骤与代码示例
1. 准备工作
先安装Discord.js依赖:
npm install discord.js
确保你的机器人在Discord开发者平台已启用Message Content Intent(在Bot设置的Privileged Gateway Intents下开启),否则无法读取用户消息内容。
2. 核心代码实现
创建bot.js文件,内容如下:
const { Client, GatewayIntentBits } = require('discord.js'); const fs = require('fs'); const path = require('path'); // 初始化机器人,配置必要的权限意图 const client = new Client({ intents: [ GatewayIntentBits.Guilds, GatewayIntentBits.GuildMessages, GatewayIntentBits.MessageContent ] }); // 读取JSON数据的工具函数 const loadData = () => { // 假设data.json和bot.js在同一目录下 const dataPath = path.join(__dirname, 'data.json'); const rawContent = fs.readFileSync(dataPath, 'utf8'); return JSON.parse(rawContent); }; // 机器人上线提示 client.on('ready', () => { console.log(`已登录:${client.user.tag}`); }); // 监听用户消息 client.on('messageCreate', (message) => { // 忽略机器人自己发的消息 if (message.author.bot) return; // 拆分指令与参数 const [command, targetId] = message.content.trim().split(/\s+/); // 判断是否为!check指令 if (command !== '!check') return; // 检查是否传入ID参数 if (!targetId) { return message.reply('请指定要查询的ID,格式:!check <id>'); } // 加载JSON数据并查找对应条目 const dataList = loadData(); const matchedEntry = dataList.find(item => item.id === targetId); if (matchedEntry) { // 按要求格式拼接回复内容 const replyText = `name: ${matchedEntry.name}\nage:${matchedEntry.age}\nid:${matchedEntry.id}`; // 用代码块包裹回复 message.reply(`\`\`\`\n${replyText}\n\`\`\``); } else { message.reply(`未找到ID为${targetId}的记录`); } }); // 替换为你的机器人Token,从Discord开发者平台获取 client.login('你的机器人TOKEN');
3. 配置JSON数据文件
在同一目录下创建data.json,内容如下(可根据需求修改):
[ { "name": "adam", "age": "16", "id": "9" }, { "name": "jack", "age": "18", "id": "10" } ]
4. 运行机器人
执行命令启动机器人:
node bot.js
效果说明
当用户在Discord频道发送!check 9时,机器人会回复:
name: adam age:16 id:9
如果查询的ID不存在,机器人会返回对应的提示信息。
内容的提问来源于stack exchange,提问作者kaya
相关产品推荐
相关产品推荐

