📜  discord.js 验证 (1)

📅  最后修改于: 2023-12-03 15:14:42.354000             🧑  作者: Mango

Discord.js 验证

Discord.js 是一个针对 Discord 的 JavaScript 库,使开发者可以轻松地构建和管理 Discord 机器人。Discord.js 验证是一个常见的机器人特性,它可以提供安全性并限制机器人的使用。在这篇文章中,我们将学习如何在 Discord.js 中实现验证。

什么是验证

验证是一种用于限制机器人访问服务器的功能。它要求用户通过某种方式证明自己的身份,例如回答一个问题或提供一个特定的代码。验证可以有效地防止机器人被滥用,保护服务器的安全。

Discord.js 实现验证

我们可以使用 Discord.js 创建一个简单但有效的验证系统。我们将通过以下步骤实现它:

  1. 创建验证系统所需的角色
  2. 发送验证消息
  3. 监听消息,并在回答正确时添加验证角色
  4. 限制未验证用户的访问
创建验证系统所需的角色

我们需要创建两个不同的角色 - 一个是待验证的用户角色,另一个是已验证的用户角色。我们将待验证的用户角色称为“Unverified”,已验证的用户角色称为“Verified”。

我们可以使用 Discord.js 中的 role.create() 方法创建这两个角色:

const unverifiedRole = message.guild.roles.create({
  data: {
    name: 'Unverified',
    color: 'BLUE'
  }
});

const verifiedRole = await message.guild.roles.create({
  data: {
    name: 'Verified',
    color: 'GREEN'
  }
});

这将创建两个新的角色,并将它们保存在 unverifiedRole 和 verifiedRole 变量中,供后续使用。

发送验证消息

现在我们需要向待验证用户发送一条消息,要求他们提供一个验证码。我们会使用 Discord.js 发送一条包含验证码的消息,并等待用户回答。

const code = generateCode(); // 这里是生成验证码的方法

message.author.send(`请在这里输入代码:${code}`).then((msg) => {
  // 等待用户回答
  const collector = new Discord.MessageCollector(
    message.author.dmChannel,
    (m) => m.author.id === message.author.id,
    { time: 60000 } // 1 分钟超时
  );
  
  collector.on('collect', (codeMsg) => {
    if (codeMsg.content === code) {
      // 如果回答正确,添加 Verified 角色
      message.member.roles.add(verifiedRole);
      message.member.roles.remove(unverifiedRole);
    }
    collector.stop();
  });

  collector.on('end', () => {
    msg.edit('已超时,请重新验证');
  });
});

这段代码会向用户发送一条包含验证码的私人消息,并等待用户回答。如果用户回答正确,我们会将 Verified 角色添加到他们的角色列表中,并移除 Unverified 角色。

限制未验证用户的访问

最后,我们需要防止未验证用户访问我们的服务器。我们可以使用 Discord.js 提供的 guildMemberAdd 事件,并在用户加入服务器时检查用户是否已完成验证。如果未完成验证,则将其限制为只能访问某些频道。

client.on('guildMemberAdd', (member) => {
  if (!member.roles.cache.find((r) => r.name === 'Verified')) {
    const channel = member.guild.channels.cache.find((c) => c.name === 'verification');
    member.roles.add(unverifiedRole);
    member.send('欢迎加入服务器,请输入验证码进行验证').then(() => {
      channel.send(`<@${member.user.id}> 已加入,请检查验证码`);
    });
  }
});

这段代码会检查用户是否已存在 Verified 角色,如果没有,则将其添加到待验证角色列表中,并限制其访问频道。在这种情况下,我们将用户发送到 verification 频道。

结论

在这篇文章中,我们学习了如何在 Discord.js 中实现验证。验证是一个很重要的特性,它可以确保机器人的安全,防止滥用和恶意行为。如果你正在开发一个 Discord 机器人,那么实现一个验证系统是一个非常好的主意。