如何使用quick.db实现白名单命令:执行!whitelist @user/userid时将用户数据存入数据库
实现基于quick.db的Discord白名单命令
我来帮你搞定这个白名单命令的开发,基于quick.db其实很简单,咱们一步步来:
1. 安装必要依赖
首先确保你已经安装了discord.js(用于Discord机器人开发)和quick.db(轻量级数据库),如果没装的话,执行以下命令:
npm install quick.db discord.js
2. 核心代码实现
下面是完整的命令逻辑,我会加上详细注释帮你理解:
const { Client, GatewayIntentBits } = require('discord.js'); const db = require('quick.db'); // 初始化Discord客户端,需要启用必要的意图 const client = new Client({ intents: [ GatewayIntentBits.Guilds, GatewayIntentBits.GuildMessages, GatewayIntentBits.MessageContent ] }); // 监听机器人启动事件 client.on('ready', () => { console.log(`Logged in as ${client.user.tag}!`); }); // 监听消息事件,处理命令 client.on('messageCreate', async (message) => { // 忽略机器人自己的消息 if (message.author.bot) return; // 检查命令前缀和指令 const prefix = '!'; if (!message.content.startsWith(prefix)) return; const args = message.content.slice(prefix.length).trim().split(/ +/); const command = args.shift().toLowerCase(); // 处理!whitelist命令 if (command === 'whitelist') { // 检查用户是否有管理员权限(可选,根据你的需求调整) if (!message.member.permissions.has('Administrator')) { return message.reply('你没有权限执行这个命令!'); } // 检查是否提供了用户参数 if (!args[0]) { return message.reply('请提及用户或者输入用户ID!格式:`!whitelist @用户/用户ID`'); } // 解析目标用户:处理提及或ID let targetUser; if (message.mentions.users.first()) { // 如果是用户提及 targetUser = message.mentions.users.first(); } else { // 如果是用户ID,尝试获取用户 try { targetUser = await client.users.fetch(args[0]); } catch (err) { return message.reply('无法找到该用户,请检查ID是否正确!'); } } // 将用户添加到白名单:用用户ID作为唯一标识存储到数据库 db.set(`whitelist_${targetUser.id}`, true); // 发送成功反馈 message.reply(`已成功将 **${targetUser.tag}** 添加到白名单!`); } }); // 登录机器人(替换成你的机器人Token) client.login('你的机器人Token');
3. 关键逻辑说明
- 用户解析:同时支持用户提及(@用户)和直接输入用户ID,覆盖不同使用场景;
- 权限控制:加入了管理员权限检查,你可以根据需求修改权限要求(比如换成特定角色);
- 数据库存储:用
db.set()以whitelist_用户ID为键存储布尔值true,这样后续检查用户是否在白名单时,直接用db.has(whitelist_${user.id})就能快速判断;
4. 扩展功能建议
如果你需要更多功能,可以参考这些:
- 查看白名单:遍历数据库中所有以
whitelist_开头的键,提取用户ID并获取用户信息后返回; - 移除白名单:添加
!unwhitelist命令,用db.delete(whitelist_${targetUser.id})删除对应数据; - 白名单检查:编写工具函数,比如
isWhitelisted(userId) { return db.has(whitelist_${userId}); },方便在其他逻辑中调用;
内容的提问来源于stack exchange,提问作者Arijit Debnath




