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

Discord.js v14欢迎消息失效,出现TypeError: replace不是函数错误

Discord.js v14 欢迎消息报错修复(TypeError: welcometxt.replace is not a function)

错误原因

你在已经获取到数据库数据data的情况下,重复调用了Welcome.findOne(),这个方法返回的是Mongoose Query对象而非字符串,因此无法调用replace()方法,直接触发类型错误。

修正后的代码

const { MessageAttachment } = require("discord.js");
const Welcome = require('../../settings/models/guild');

module.exports = async (client, member) => {
  const { guild } = member;

  // 改用async/await避免回调嵌套,更易维护
  const data = await Welcome.findOne({ guildID: guild.id });
  if (!data) return;

  const user = member.user;
  const channel = guild.channels.cache.get(data.welcomeChannel);
  if (!channel) return; // 新增频道存在性判断,避免无效操作

  // 直接使用数据库中存储的欢迎文本字段(请根据你的Schema字段名调整,示例为welcomeMessage)
  let welcometxt = data.welcomeMessage;

  // 替换模板变量
  welcometxt = welcometxt.replace('{member:mention}', `<@${user.id}>`);
  welcometxt = welcometxt.replace('{member:name}', user.username);
  welcometxt = welcometxt.replace('{member:id}', user.id);
  welcometxt = welcometxt.replace('{member:tag}', user.tag);
  welcometxt = welcometxt.replace('{member:createdAt}', user.createdAt.toLocaleString()); // 优化日期显示格式
  welcometxt = welcometxt.replace('{server:name}', guild.name);
  welcometxt = welcometxt.replace('{server:members}', guild.memberCount); // 使用官方成员统计接口,比缓存更准确

  await channel.send(welcometxt);
};

关键注意事项

  • 数据库字段匹配:确保你的guild Schema中存在存储欢迎文本的字段(示例用welcomeMessage),字段名需与代码对应
  • Intent配置:Discord.js v14必须开启对应意图才能触发guildMemberAdd事件,客户端初始化代码需添加:
    const { Client, GatewayIntentBits } = require('discord.js');
    const client = new Client({
      intents: [
        GatewayIntentBits.Guilds,
        GatewayIntentBits.GuildMembers
      ]
    });
    
  • 边界处理:新增频道存在性判断,避免因配置错误导致额外报错
  • 数据准确性:替换缓存成员数为官方guild.memberCount,优化日期显示格式提升用户体验

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 19:18:40