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

如何用discord.js实现机器人延迟创建专属私密频道并发送embed?

解决方案(基于discord.js v14)

核心步骤拆解

  • 监听guildMemberAdd事件捕获新用户
  • 用setTimeout实现15分钟延迟执行逻辑
  • 创建私密文本频道,配置仅目标用户和Staff角色可见的权限
  • 在新频道发送预设Embed消息

代码实现示例

const { Client, GatewayIntentBits, EmbedBuilder, PermissionsBitField } = require('discord.js');
const client = new Client({ 
  intents: [
    GatewayIntentBits.Guilds, 
    GatewayIntentBits.GuildMembers // 必须开启此意图才能监听成员加入事件
  ] 
});

// 替换为你的实际配置
const STAFF_ROLE_ID = '你的Staff角色ID';
const GUILD_ID = '目标服务器ID';

client.on('guildMemberAdd', async (member) => {
  // 只处理目标服务器的用户
  if (member.guild.id !== GUILD_ID) return;

  // 设置15分钟延迟(单位:毫秒)
  setTimeout(async () => {
    // 防止用户中途退出服务器,提前终止操作
    if (!member.guild.members.cache.has(member.id)) return;

    try {
      // 获取Staff角色
      const staffRole = member.guild.roles.cache.get(STAFF_ROLE_ID);
      if (!staffRole) {
        console.error('未找到指定的Staff角色');
        return;
      }

      // 创建私密频道
      const privateChannel = await member.guild.channels.create({
        name: `专属咨询-${member.user.username}`,
        type: 0, // 文本频道类型
        permissionOverwrites: [
          // 拒绝全体成员查看频道
          {
            id: member.guild.roles.everyone,
            deny: [PermissionsBitField.Flags.ViewChannel]
          },
          // 允许用户查看和发送消息
          {
            id: member.id,
            allow: [PermissionsBitField.Flags.ViewChannel, PermissionsBitField.Flags.SendMessages]
          },
          // 允许Staff角色查看、管理频道和发送消息
          {
            id: staffRole.id,
            allow: [PermissionsBitField.Flags.ViewChannel, PermissionsBitField.Flags.ManageChannels, PermissionsBitField.Flags.SendMessages]
          }
        ],
        // 可选:指定频道分类ID,将频道放入特定分类下
        // parent: '你的分类ID'
      });

      // 构建并发送Embed消息
      const welcomeEmbed = new EmbedBuilder()
        .setColor('#2ecc71')
        .setTitle('欢迎加入!')
        .setDescription('这里是你的专属咨询频道,Staff成员会尽快跟进你的需求😉')
        .addFields(
          { name: '用户名', value: member.user.tag, inline: true },
          { name: '加入时间', value: new Date(member.joinedTimestamp).toLocaleString(), inline: true }
        )
        .setTimestamp();

      await privateChannel.send({ embeds: [welcomeEmbed] });
      console.log(`已为用户${member.user.tag}创建专属频道`);
    } catch (error) {
      console.error('创建频道或发送消息出错:', error);
    }
  }, 15 * 60 * 1000);
});

client.login('你的机器人Token');

关键注意事项

  • 必须在Discord开发者门户为机器人开启服务器成员意图(Server Members Intent),否则无法触发guildMemberAdd事件
  • 确保机器人拥有ManageChannels、SendMessages等必要权限
  • 代码中加入了用户退出判断,避免延迟结束后执行无效操作
  • 可根据需求调整频道命名规则、Embed样式和权限细节

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 01:45:30