Discord机器人开发:如何提取消息内数字?已掌握提及用户方法
嘿,这个需求很常见,我帮你梳理下实现方法,直接上能用的代码和解释:
核心实现思路
- 先过滤目标命令:确保机器人只响应你指定的
>command命令 - 提取提及用户:你用的
message.mentions.users.first()是对的,这里帮你补充边界判断(比如没提及用户时的提示) - 提取数字:用正则表达式匹配消息中的数字,这是最可靠的方式,能精准定位连续的数字字符
完整代码示例(基于Discord.js v14)
const { Client, GatewayIntentBits } = require('discord.js'); const client = new Client({ intents: [ GatewayIntentBits.Guilds, GatewayIntentBits.GuildMessages, GatewayIntentBits.MessageContent // 必须开启这个意图才能读取消息内容 ] }); // 自定义命令前缀 const COMMAND_PREFIX = '>'; client.on('messageCreate', async (message) => { // 忽略机器人自身发送的消息 if (message.author.bot) return; // 检查是否触发目标命令 if (!message.content.startsWith(`${COMMAND_PREFIX}command`)) return; // 提取首个被提及的用户 const targetUser = message.mentions.users.first(); if (!targetUser) { return message.reply('请指定一个要提及的用户哦!'); } // 用正则匹配消息中的数字(匹配第一个连续数字序列) const numberMatch = message.content.match(/\d+/); if (!numberMatch) { return message.reply('请输入一个有效的数字哦!'); } // 把匹配到的字符串转为整数,如需小数可改用parseFloat const extractedNumber = parseInt(numberMatch[0], 10); // 回复测试结果 await message.reply(` 你提及的用户ID:${targetUser.id} 提取到的数字:${extractedNumber} `); }); // 替换成你的机器人Token,然后启动 client.login('YOUR_BOT_TOKEN_HERE');
关键细节说明
- 权限注意:一定要在Discord开发者 portal 的机器人页面,开启
Message Content Intent权限,否则机器人无法读取消息内容,代码会失效 - 正则扩展:如果需要匹配多个数字,可以把正则改成
/\d+/g,这样会返回所有数字的数组(比如['7853', '123']) - 小数支持:如果要提取小数,把正则调整为
/\d+\.?\d*/,然后用parseFloat转换 - 边界处理:代码里加了用户未提及、未输入数字的提示,提升机器人的交互友好性
内容的提问来源于stack exchange,提问作者elm
相关产品推荐
相关产品推荐

