You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 04:36:14