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

如何在discord.js中配置前缀实现.ping触发pong回复?

解决Discord.js机器人前缀配置问题,实现.ping响应pong

没问题,我来帮你搞定这个前缀配置的问题!你当前的代码里已经定义了prefix = ".",但ping命令的判断逻辑没有用到这个前缀,所以机器人只会在你输入纯ping时回复,而不是.ping。下面是具体的修改方案:

问题分析

你现在的ping判断是:

if (msg.content === 'ping') {
  msg.channel.send('pong');
}

这只会匹配内容完全等于ping的消息,但你想要的是匹配.ping,也就是前缀+命令名的格式,同时我们可以优化命令处理逻辑,让后续添加新命令更方便。

修改后的完整代码

require('dotenv').config();
const Discord = require('discord.js');
const bot = new Discord.Client();
const TOKEN = process.env.TOKEN;
const prefix = ".";

bot.login(TOKEN);

bot.on('ready', () => {
  console.info(`Logged in as ${bot.user.tag}!`);
});

bot.on('message', msg => {
  // 忽略机器人自己发送的消息,避免循环触发
  if (msg.author.bot) return;
  
  // 检查消息是否以我们定义的前缀开头
  if (!msg.content.startsWith(prefix)) return;

  // 提取命令和参数:移除前缀,拆分内容为命令和参数数组
  const args = msg.content.slice(prefix.length).trim().split(/ +/);
  const command = args.shift().toLowerCase(); // 转为小写,让命令不区分大小写

  // 处理ping命令
  if (command === 'ping') {
    msg.channel.send('pong');
  } 
  // 处理kick命令(这里也把前缀改成我们定义的.,统一格式)
  else if (command === 'kick') {
    if (msg.mentions.users.size) {
      const taggedUser = msg.mentions.users.first();
      msg.channel.send(`You wanted to kick: ${taggedUser.username}`);
    } else {
      msg.reply('Please tag a valid user!');
    }
  }
});

关键修改点说明

  • 忽略机器人自身消息:添加if (msg.author.bot) return;,防止机器人响应自己发送的消息,避免无限循环。
  • 前缀检查:用msg.content.startsWith(prefix)过滤掉不以.开头的消息,只处理我们的命令。
  • 命令提取:通过slice(prefix.length)移除前缀,再拆分出命令和参数,这样后续添加新命令时,只需要判断command的值即可,逻辑更清晰。
  • 统一kick命令前缀:把原来的!kick改成匹配kick命令(对应.kick),和我们的前缀保持一致,避免混合不同前缀导致混乱。

现在你输入.ping,机器人就会回复pong啦!如果需要添加其他命令,直接在message事件里继续添加else if (command === 'xxx')的逻辑即可。

内容的提问来源于stack exchange,提问作者Og_8fw

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 23:23:11