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

discord.js机器人代码运行报Unexpected token '?'错误如何解决

问题原因与修复方案

1. 报错核心原因

你遇到的Unexpected token '?'语法错误是因为代码里用到的**空值合并运算符(??)**是ES2020新增的语法,只有Node.js v14.0.0及以上版本才支持。而你安装的discord.js版本依赖该语法特性,Node版本过低就会无法识别该符号。

2. 额外需要修复的代码问题

你的代码本身还存在几处错误,即使升级Node版本也无法正常运行,需要同步修改:

  • 初始化Discord Client实例时缺少new关键字
  • 未定义日志频道变量CHANNEL
  • 昵称变更的日志输出逻辑存在多余加号的笔误

3. 具体操作步骤

步骤1:升级Node.js版本

安装Node.js v14.0.0以上的LTS版本,安装完成后在终端执行node -v确认版本符合要求即可。

步骤2:替换为修正后的代码

const Discord = require("discord.js");
// 修复1:添加new关键字初始化Client
const bot = new Discord.Client();
// 修复2:填写你服务器里的日志频道名称
const CHANNEL = "你的日志频道名";

bot.on('guildMemberUpdate', function(oldMember, newMember) {
    //declare changes
    var Changes = {
        unknown: 0,
        addedRole: 1,
        removedRole: 2,
        username: 3,
        nickname: 4,
        avatar: 5
    };
    var change = Changes.unknown;

    //check if username changed
    if (newMember.user.username !== oldMember.user.username)
        change = Changes.username;

    //check if nickname changed
    if (newMember.nickname !== oldMember.nickname)
        change = Changes.nickname;

    //check if avatar changed
    if (newMember.user.displayAvatarURL() !== oldMember.user.displayAvatarURL())
        change = Changes.avatar;

    //log to console
    switch (change) {
        case Changes.unknown:
            console.log('[' + newMember.guild.name + '][UPDUSR] ' + newMember.user.username + '#' + newMember.user.discriminator);
            break;
        case Changes.username:
            console.log('[' + newMember.guild.name + '][UPDUSRNM] ' + oldMember.user.username + '#' + oldMember.user.discriminator +
                ' is now ' + newMember.user.username + '#' + newMember.user.discriminator);
            break;
        case Changes.nickname:
            console.log('[' + newMember.guild.name + '][UPDUSRNK] ' + newMember.user.username + '#' + newMember.user.discriminator +
                (oldMember.nickname != null ? ' (' + oldMember.nickname + ')' : '') +
                (newMember.nickname != null ? ' is now ' + newMember.nickname : ' no longer has a nickname.'));
            break;
        case Changes.avatar:
            console.log('[' + newMember.guild.name + '][UPDAVT] ' + newMember.user.username + '#' + newMember.user.discriminator);
            break;
    }

    //post in the guild's log channel
    var log = newMember.guild.channels.cache.find(channel => channel.name === CHANNEL);
    if (log) {
        switch (change) {
            case Changes.unknown:
                log.send('**[User Update]** ' + newMember);
                break;
            case Changes.username:
                log.send('**[User Username Changed]** ' + newMember + ': Username changed from ' +
                    oldMember.user.username + '#' + oldMember.user.discriminator + ' to ' +
                    newMember.user.username + '#' + newMember.user.discriminator);
                break;
            case Changes.nickname:
                log.send('**[User Nickname Changed]** ' + newMember + ': ' +
                    // 修复3:删除多余加号,修正输出逻辑
                    (oldMember.nickname != null ? 'Changed nickname from ' + oldMember.nickname : 'Set nickname') + ' to ' +
                    (newMember.nickname != null ? newMember.nickname + '.' : 'original username.'));
                break;
            case Changes.avatar:
                log.send('**[User Avatar Changed]** ' + newMember);
                break;
        }
    }
});
// 替换为你自己的机器人token
bot.login("你的机器人token");

步骤3:配置机器人权限

确保你在Discord开发者后台给机器人开启了Server Members Intent权限,否则guildMemberUpdate事件无法正常触发。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 20:18:01