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

如何查找以Discord用户标识开头的频道?discord.js v13.8.1问题

解决Discord.js 13.8.1中判断频道是否存在的问题

你的代码未生效大概率是以下几个原因导致的,对应解决方法如下:

1. 频道缓存未加载完全

Discord.js v13默认不会自动缓存服务器内所有频道,必须确保你启用了GUILD_CHANNELS Intent,客户端初始化时要配置该Intent:

const { Client, Intents } = require('discord.js');
const client = new Client({
  intents: [
    Intents.FLAGS.GUILDS,
    Intents.FLAGS.GUILD_CHANNELS, // 必须添加此Intent才能缓存频道
    // 按需添加其他Intent,比如GUILD_MESSAGES等
  ]
});

如果已经配置Intent但仍无效,可以手动拉取服务器所有频道更新缓存:

const guild = client.guilds.cache.get('851952021505441812');
await guild.channels.fetch(); // 手动同步所有频道到缓存

2. 大小写敏感问题

startsWith方法区分大小写,如果频道名称和用户tag的大小写不一致就会匹配失败。可以将两者统一转为小写(或大写)后再比较:

if(guild.channels.cache.some(channel => 
  channel.name.toLowerCase().startsWith(message.author.tag.toLowerCase())
)){
  return message.reply("Lol");
}

3. 改用some方法更高效

find方法会返回第一个匹配的频道对象,而判断“是否存在”用some方法更直接——它直接返回布尔值,性能也更优。

完整优化后的代码示例

const guild = client.guilds.cache.get('851952021505441812');
if (!guild) return console.log('未找到目标服务器');

try {
  await guild.channels.fetch(); // 确保频道缓存完整
  const hasMatchingChannel = guild.channels.cache.some(channel => 
    channel.name.toLowerCase().startsWith(message.author.tag.toLowerCase())
  );
  if (hasMatchingChannel) {
    return message.reply("Lol");
  }
} catch (err) {
  console.error('获取频道失败:', err);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 17:12:18