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

Discord.js创建GuildScheduledEvent报错求助:TypeError问题排查

Discord.js 创建定时事件触发 TypeError 问题排查与解决

Discord API 新增了 GuildScheduledEvent 功能,我尝试用 Discord.js 编写斜杠命令实现机器人创建定时事件,但 GuildScheduledEvent 和 GuildScheduledEventManager 无法正常工作,持续抛出如下 TypeError:

TypeError: Cannot read properties of undefined (reading 'options')
    at new CachedManager (C:\dev\Discord Bots\node_modules\discord.js\src\managers\CachedManager.js:21:64)
    at new GuildScheduledEventManager (C:\dev\Discord Bots\node_modules\discord.js\src\managers\GuildScheduledEventManager.js:17:5)
    at Object.execute (C:\dev\Discord Bots\better bot\bot-data\commands\cancel_film.js:11:31)
    at Client.<anonymous> (C:\dev\Discord Bots\better bot\main.js:44:17)
    at Client.emit (node:events:513:28)
    at InteractionCreateAction.handle (C:\dev\Discord Bots\node_modules\discord.js\src\client\actions\InteractionCreate.js:97:12)
    at module.exports [as INTERACTION_CREATE] (C:\dev\Discord Bots\node_modules\discord.js\src\client\websocket\handlers\INTERACTION_CREATE.js:4:36)
    at WebSocketManager.handlePacket (C:\dev\Discord Bots\node_modules\discord.js\src\client\websocket\WebSocketManager.js:354:31)
    at WebSocketManager.<anonymous> (C:\dev\Discord Bots\node_modules\discord.js\src\client\websocket\WebSocketManager.js:238:12)
    at WebSocketManager.emit (C:\dev\Discord Bots\node_modules\@vladfrangu\async_event_emitter\dist\index.js:282:31)

我知道错误发生位置,但不清楚原因,以下是我的斜杠命令代码:

const { SlashCommandBuilder, GuildScheduledEventManager, GuildScheduledEventPrivacyLevel, GuildScheduledEventEntityType } = require('discord.js');

module.exports = {
    data: new SlashCommandBuilder()
        .setName('test_command')
        .setDescription('a test command')
    async execute(interaction) {
        const event_manager = new GuildScheduledEventManager('1039213773216546939')

        await event_manager.create({
            name: 'Test Event',
            scheduledStartTime: new Date(1687284000000),
            privacyLevel: GuildScheduledEventPrivacyLevel.GuildOnly,
            entityType: GuildScheduledEventEntityType.Voice,
            description: 'This is a test Scheduled Event',
            channel: '1118952214774419569',
            image: null,
            reason: 'Testing with creating a Scheduled Event'
        });
    }
}

注:使用 Node.js 环境


问题原因及修复方案

错误根源

你直接通过 Guild ID 实例化 GuildScheduledEventManager 的方式不符合 Discord.js 的设计逻辑。GuildScheduledEventManager 属于 Guild 对象的附属管理器,不能单独用 ID 字符串初始化——它需要依赖客户端实例和完整的 Guild 对象才能正常加载内部配置,直接传 ID 会导致内部找不到 options 属性,触发报错。

另外代码还有两个小问题:

  1. SlashCommandBuilder 定义末尾缺少逗号,会引发语法错误
  2. create 方法的 channel 参数需要传入 Channel 对象,而非 ID 字符串

修正后的代码

const { SlashCommandBuilder, GuildScheduledEventPrivacyLevel, GuildScheduledEventEntityType } = require('discord.js');

module.exports = {
    data: new SlashCommandBuilder()
        .setName('test_command')
        .setDescription('a test command'), // 补上缺失的逗号
    async execute(interaction) {
        // 限制命令仅在服务器内使用
        if (!interaction.guild) {
            return interaction.reply('此命令仅支持在服务器内使用!');
        }

        // 获取目标语音频道对象
        const targetChannel = interaction.guild.channels.cache.get('1118952214774419569');
        if (!targetChannel) {
            return interaction.reply('指定的语音频道不存在!');
        }

        try {
            // 使用 Guild 自带的 scheduledEvents 管理器创建事件
            await interaction.guild.scheduledEvents.create({
                name: 'Test Event',
                scheduledStartTime: new Date(1687284000000),
                privacyLevel: GuildScheduledEventPrivacyLevel.GuildOnly,
                entityType: GuildScheduledEventEntityType.Voice,
                description: 'This is a test Scheduled Event',
                channel: targetChannel,
                reason: 'Testing with creating a Scheduled Event'
            });
            await interaction.reply('定时事件创建成功!');
        } catch (err) {
            console.error(err);
            await interaction.reply('创建定时事件失败,请查看控制台日志!');
        }
    }
}

额外注意事项

  • 确保机器人拥有 ManageEvents 服务器权限,否则无法创建定时事件
  • 添加错误捕获逻辑可以快速定位创建失败的具体原因

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 14:22:37