我正在try 创建一个discord机器人,它可以创建一个线程,并在运行命令后收集消息.以下是我的代码:

require('dotenv').config();

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

module.exports = {
    data: new SlashCommandBuilder()
        .setName('start')
        .setDescription('Start the story'),
    async execute(interaction, client) {
        
        ...

        const filter = () => true;

        client.collectors.set(`collector${channel.id}`, channel.createMessageCollector({ filter, time: 30000, max: 1000 }));

        const collector = client.collectors.get(`collector${channel.id}`);

        collector.on('collect', m => {
            console.log(`Collected ${m.content}`);
        });

        collector.on('end', collected => {
            console.log(`Collected ${collected.size} items`);
        });

        ...
    },
};

我的第一个 idea 是,在命令运行后,收集器将从内存中删除,这就是为什么我为客户端提供了一个属性,一个名为Colltors的集合,但Collect事件仍然不会运行,End事件将仅在线程删除后或时间限制结束时运行,但随后它会记录"Collect 0 Items",即使发送了消息.

我try 在index.js中的函数中创建它,但也没有帮助.

更新:添加() => true作为筛选器,不做任何更改...

推荐答案

我通过在index.js中向客户端的意图添加GatewayIntentBits.GuildMessagesGatewayIntentBits.MessageContent来解决这个问题,因此我在其中创建客户端对象的行现在如下所示:

const client = new Client({ intents: [GatewayIntentBits.Guilds, GatewayIntentBits.GuildMessages, GatewayIntentBits.MessageContent] });

Javascript相关问答推荐

在类型脚本中使用浏览器特定属性的正确方法是什么?

详细更改参考价值:"

Express.js:以块形式发送响应

如何在ReactJS中修复这种不需要的按钮行为?

在JavaScript中对大型级联数组进行切片的最有效方法?

React Native平面列表自动滚动

vanillajs-datepicker未设置输入值,日期单击时未触发更改事件

警告!合同执行期间遇到错误[执行已恢复](Base Layer 2)

在vercel throws上部署带有gunjs的sveltekit应用无法找到模块./' lib/文本编码'

如何使用JavaScript将文本插入空div

在nextjs服务器端api调用中传递认证凭证

如何从URL获取令牌?

IF语句的计算结果与实际情况相反

如何将数据块添加到d3力有向图中?

将Node.js包发布到GitHub包-错误ENEEDAUTH

从另一个数组中的对应行/键值对更新数组中的键值对对象

如何在DYGRAPS中更改鼠标事件和键盘输入

无法检索与Puppeteer的蒸汽游戏的Bundle 包价格

是否可以在不更改组件标识的情况下换出Reaction组件定义(以维护状态/引用等)?如果是这样的话,是如何做到的呢?

select 2-删除js插入的项目将其保留为选项