Discord机器人启动正常但+hi指令无响应,如何解决?
Discord机器人指令无响应问题排查与解决
问题情况
- 机器人启动时可正常发送上线通知,但输入
+hi指令后无任何响应 - 多次重启机器人无效,但相同代码在另一机器人账号上能正常运行
相关截图


机器人代码
// - Discord Requires const Discord = require('discord.js'); const client = new Discord.Client(); const prefix = '+'; // - Imports const date = require('date-and-time'); const fs = require('fs'); const express = require("express")(); // - Embed const { MessageEmbed } = require('discord.js'); // - Logo const logo = './images/logo.png' // - On Start client.once('ready', () =>{ //- Status and Console log Message client.user.setPresence({activity: {name:"Counting-Days", type:'WATCHING'}, status:'online'}) .then(console.log) .catch(console.error); setTimeout(function(){ console.log("🍉I'm ready, from now on I'm gonna count Christmas Days!:)🍉"); }, 2000); // - Current Date and Time const now_date = new Date(); date.format(now_date, 'YYYY/MM/DD HH:mm:ss'); date.format(now_date, 'ddd, MMM DD YYYY'); date.format(now_date, 'hh:mm A [GMT]Z'); date.format(now_date, 'hh:mm A [GMT]Z', true); // - Makes the pattern for time const time_pattern = date.compile('hh:mm A'); const time = date.format(now_date, time_pattern); const date_pattern = date.compile('ddd, MMM DD YYYY') const date_a = date.format(now_date, date_pattern); // - Channel Message => Ready client.channels.cache.get('935621866926768159').send(`**🎄Christmas Countdown Bot🎄** is awake |Date: **${date_a}**, Time: **${time}**| and waiting to reply to |${prefix}| commands!✅`) }); // - Calculates the Days until Christmas (25/12/2022) const newYears = "25 Dec 2022"; const newYearsDate = new Date(newYears); const currentDate = new Date(); const totalSeconds = (newYearsDate - currentDate) / 1000; const days = Math.floor(totalSeconds / 3600 / 24); const hours = Math.floor(totalSeconds / 3600) % 24; const mins = Math.floor(totalSeconds / 60) % 60; const seconds = Math.floor(totalSeconds) % 60; client.on("message", function (message){ if (message.content === `${prefix}hi`){ message.channel.send(`Hey, ${days}`); } }) // -Token client.login('TOKEN')
解决方案
1. 修复事件监听兼容性问题
Discord.js v13及以上版本已废弃message事件,改用messageCreate事件,这是指令无响应的核心原因之一。修改事件监听代码:
// 替换原有的message事件 client.on("messageCreate", function (message){ if (message.content === `${prefix}hi`){ message.channel.send(`Hey, ${days}`); } })
2. 检查机器人权限配置
- 确认当前机器人账号在目标服务器拥有发送消息、读取消息历史权限,尤其是指令所在频道
- 对比能正常运行的机器人账号权限,排查权限差异
3. 优化指令匹配逻辑
原代码使用严格相等匹配,若消息前后有空格会触发失败,可改为:
client.on("messageCreate", function (message){ // 忽略机器人自身消息 if (message.author.bot) return; // 处理带空格的情况 if (message.content.trim() === `${prefix}hi`){ message.channel.send(`Hey, ${days}`); } })
4. 修正倒计时实时计算逻辑
原代码中days仅在启动时计算一次,后续不会更新,需将计算逻辑移入指令处理函数:
client.on("messageCreate", function (message){ if (message.content.trim() === `${prefix}hi`){ const currentDate = new Date(); const totalSeconds = (newYearsDate - currentDate) / 1000; const days = Math.floor(totalSeconds / 3600 / 24); message.channel.send(`Hey, ${days}`); } })
5. 排查账号状态
确认机器人账号未被服务器静音、封禁,或在目标频道无发送消息限制
内容的提问来源于stack exchange,提问作者Nick S
相关产品推荐
相关产品推荐

