开发Discord欢迎消息机器人报SyntaxError: Unexpected end of input错误求解
问题根因
你遇到的SyntaxError: Unexpected end of input是典型的代码语法结构不完整导致的解析错误,核心是两处语法问题:
- 你的
ready事件监听的回调函数只写了起始大括号,没有添加闭合的}),导致整个代码的作用域嵌套结构混乱,Node.js解析到代码末尾都找不到对应的闭合标记 - 你已经引入了
config.json配置文件,但client.login()传入的token变量没有定义,无法读取到你的机器人密钥
修正方案
首先把同步操作前冗余的await删掉(非必须但符合代码规范),补全缺失的闭合括号,修正token读取逻辑,修正后的完整代码如下:
const Discord = require('discord.js'); // 额外补充:discord.js v13+需要显式声明成员相关意图,否则接收不到guildMemberAdd事件 const client = new Discord.Client({ intents: ["GUILDS", "GUILD_MEMBERS"] }); const config = require("./config.json"); client.on("ready", () => { console.log("im on!"); }); // 补全ready事件的回调闭合标记 client.on("guildMemberAdd", async (member) => { // 以下cache操作都是同步方法,不需要加await let guild = client.guilds.cache.get("你的服务器ID"); let channel = client.channels.cache.get("欢迎频道ID"); let emoji = member.guild.emojis.cache.find(emoji => emoji.name === "你自定义的表情名"); if (guild != member.guild) { return console.log("i dont recognize this server..."); } else { let embed = new Discord.MessageEmbed() .setColor("#7c2ae8") .setAuthor(member.user.tag, member.user.displayAvatarURL()) .setTitle(`${emoji} 欢迎 ${emoji}`) .setImage("https://tenor.com/view/dancing-baby-pacifier-shades-gif-5960764") .setDescription(`**${member.user}**,欢迎加入 **${guild.name}**!现在服务器共有 **${member.guild.memberCount}** 名成员,玩得开心~`) .setThumbnail(member.user.displayAvatarURL({ dynamic: true, format: "png", size: 1024 })) .setFooter('用户ID: ' + member.user.id) .setTimestamp(); // discord.js v13+发送embed的语法有变化,需要放到对象的embeds数组里 await channel.send({embeds: [embed]}); } }); // 修正token读取路径,确保你的config.json里有token字段 client.login(config.token);
额外注意事项
- 如果你使用的是discord.js v13及以上版本,必须在Discord开发者后台的机器人设置页开启
Server Members Intent权限,否则无法接收到新成员加入事件 - 确认你的
config.json文件放在项目根目录,且结构正确,示例结构如下:
{ "token": "你的机器人token" }
内容的提问来源于stack exchange,提问作者LuCasxx
相关产品推荐
相关产品推荐

