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

Discord.js添加guildMemberAdd事件报guildMember未定义如何解决

事件处理器guildMember is not defined报错修复

相关代码

通用事件加载逻辑

const fs = require('fs');

module.exports = (client, Discord) => {
  const load_dir = (dirs) => {
    const events_files = fs
      .readdirSync(`./events/${dirs}`)
      .filter((file) => file.endsWith('.js'));

    for (const file of events_files) {
      const event = require(`../events/${dirs}/${file}`);
      const event_name = file.split('.')[0];
      client.on(event_name, event.bind(null, client, Discord));
    }
  };

  ['client', 'guild'].forEach((e) => load_dir(e));
};

抛出错误的guildMemberAdd事件代码

const GuildSettings = require('../../models/GuildSettings');

module.exports = async (client, messages, args, Discord) => {
  const guildSettings = await GuildSettings.findOne({
    guild_id: guildMember.guild.id,
  });
  if (!guildSettings) return;
  if (!guildSettings.welcome_channel_id) {
    return;
  }

  const welcomeChannel = guildSettings.welcome_channel_id;

  if (!guildMember.guild.channels.cache.has(welcomeChannel)) {
    return;
  }
  if (guildSettings.welcome_role_id) {
    if (!guildMember.guild.roles.cache.has(guildSettings.welcome_role_id)) {
      return;
    }
    guildMember.roles.add(guildSettings.welcome_role_id);
  }

  guildMember.guild.channels.cache
    .get(welcomeChannel)
    .send(`Welcome <@${guildMember.user.id}> to Our server`);
};

报错信息:ReferenceError: guildMember is not defined,同加载逻辑下ready事件可正常运行。

错误原因

  1. 事件加载逻辑使用bind预传入了两个固定参数:client、Discord,所有事件回调接收参数时,前两个形参固定为这两个实例,后续参数才是Discord.js对应事件触发时自带的传参。
  2. ready事件触发时本身不传递任何参数,回调只接收预传入的client、Discord即可匹配参数列表,因此可以正常运行。
  3. guildMemberAdd事件触发时仅会传递1个参数:新加入服务器的成员对象guildMember。当前事件回调参数列表为(client, messages, args, Discord),既没有定义guildMember变量,参数顺序也完全错误,直接使用未声明的guildMember就会抛出引用错误。

修复后代码

调整guildMemberAdd.js的导出函数参数顺序,修正后完整代码如下:

const GuildSettings = require('../../models/GuildSettings');

// 参数顺序:前两个为bind预传入的client、Discord实例,第三个为事件触发时传递的guildMember对象
module.exports = async (client, Discord, guildMember) => {
  const guildSettings = await GuildSettings.findOne({
    guild_id: guildMember.guild.id,
  });
  if (!guildSettings) return;
  if (!guildSettings.welcome_channel_id) {
    return;
  }

  const welcomeChannel = guildSettings.welcome_channel_id;

  if (!guildMember.guild.channels.cache.has(welcomeChannel)) {
    return;
  }
  if (guildSettings.welcome_role_id) {
    if (!guildMember.guild.roles.cache.has(guildSettings.welcome_role_id)) {
      return;
    }
    guildMember.roles.add(guildSettings.welcome_role_id);
  }

  guildMember.guild.channels.cache
    .get(welcomeChannel)
    .send(`Welcome <@${guildMember.user.id}> to Our server`);
};

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 20:45:32