You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何使用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

火山引擎 最新活动