本文介绍如何通过 Discord.js 编写一个轻量级机器人命令,响应 !getid 指令并准确获取被提及成员的唯一用户 ID(Snowflake),适用于调用 Tatsu 等第三方 API 的场景。
本文介绍如何通过 discord.js 编写一个轻量级机器人命令,响应 `!getid` 指令并准确获取被提及成员的唯一用户 id(snowflake),适用于调用 tatsu 等第三方 api 的场景。
在 Discord 开发中,许多第三方服务(如 Tatsu)要求提供用户的 18 位 Snowflake ID 才能查询其数据(例如活跃积分)。JavaScript 本身无法直接获取其他用户的 ID,但借助 Discord Bot 和官方 SDK discord.js,我们可以通过监听消息、解析提及(mentions)来安全、合规地提取目标成员 ID。
以下是一个完整、可运行的示例:
const { Client, GatewayIntentBits } = require('discord.js');
const client = new Client({
intents: [
GatewayIntentBits.Guilds,
GatewayIntentBits.GuildMessages,
GatewayIntentBits.MessageContent,
],
});
const TOKEN = 'YOUR_BOT_TOKEN'; // 替换为你的 Bot Token(需在 Discord Developer Portal 创建)
client.once('ready', () => {
console.log(`✅ 已登录:${client.user.tag}`);
});
client.on('messageCreate', (message) => {
// 忽略机器人自身消息,避免循环触发
if (message.author.bot) return;
if (message.content.startsWith('!getid')) {
const member = message.mentions.members.first();
if (member) {
// 发送格式化结果(含用户名 + ID),便于复制粘贴
message.reply(`? ${member.user.username} 的 Discord 用户 ID 是:\`\`\`${member.id}\`\`\``);
} else {
message.reply('⚠️ 请正确提及一名服务器成员(例如:`!getid @Alice`)');
}
}
});
client.login(TOKEN).catch(console.error);
? 关键说明与注意事项:
- ✅ 权限要求:Bot 需在服务器中拥有 View Channel 和 Read Message History 权限;若要提及成员,还需确保 Mention Everyone 权限未被误禁(实际只需用户能正常 @ 成员即可)。
- ✅ ID 类型区分:member.id 返回的是用户在当前服务器中的成员 ID(即 GuildMember ID),它与用户全局 ID(User ID)完全一致——Discord 中用户 ID 全局唯一,不会因服务器变化而改变。
- ⚠️ 隐私与合规:此方法仅对 Bot 有权限访问的服务器内成员生效;不可跨服务器获取 ID,且必须由用户主动提及,符合 Discord 的开发者政策。
- ? 安全提示:切勿将 TOKEN 硬编码提交至公开仓库;建议使用 .env 文件配合 dotenv 加载敏感配置。
- ? 对接 Tatsu API:获得 ID 后,即可构造标准请求,例如:
fetch(`https://api.tatsu.gg/v1/guilds/YOUR_GUILD_ID/members/${member.id}/points`, { headers: { Authorization: 'Bearer YOUR_TATSU_API_TOKEN' } });
掌握这一基础能力后,你不仅能对接 Tatsu 积分系统,还可扩展实现 ID 批量导出、权限校验、排行榜生成等实用功能。务必以最小权限原则部署 Bot,并持续关注 discord.js 官方文档 获取最新 API 变更。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











