【问题标题】:Discord.js doesn't collect DM from userDiscord.js 不会从用户那里收集 DM
【发布时间】:2021-12-31 15:50:48
【问题描述】:

我正在尝试制作一个机器人来验证特殊公会的成员。 他们需要将"verify" 发送到特定频道,然后他们必须回答几个问题。但是,收集器似乎无法正常工作。控制台中没有显示任何内容。

client.on('messageCreate', async message => {
    if(message.author.id === botId) return;

    if(message.channel.type != "dm") {
        if(message.channelId == verifyChannelId && message.content == "verify") {
            let appChannel = (await message.author.send('Hello, I\'m gonna asking you a few questions..')).channel;

            appChannel.send('Are you on european server? (Yes/No)');
        
            const filter = m => (appChannel.type === "dm");
            const collector = appChannel.createMessageCollector({ filter, time: 15000 });
        
            collector.on('collect', m => {
                console.log(`Collected ${m.content}`);
            });
        
            collector.on('end', collected => {
                console.log(`Collected ${collected.size} items`);
            });

            message.delete({ timeout: 1000 });
        } else {
            message.delete({ timeout: 1000 });
        }
    }
});

【问题讨论】:

标签: javascript discord discord.js


【解决方案1】:

这有几个错误。首先,您使用的是discord.js 的v13,正如MrMythical 在他们的评论中提到的channel types are now uppercase,所以检查if(message.channel.type != "dm") 不会做太多,因为它总是会返回true。检查(appChannel.type === "dm") 是否也不起作用,因为它总是返回false。而且我什至不确定您为什么要检查appChannel 的类型是否为DM,反正它不可能是其他任何东西。您的filter 可能应该检查答案是yes 还是no

另一个错误是您没有启用DIRECT_MESSAGES intents。没有它,您的createMessageCollector 将无法在 DM 频道中使用。查看下面的工作代码:

const client = new Client({
  intents: [
    Intents.FLAGS.GUILDS,
    Intents.FLAGS.GUILD_MESSAGES,
    Intents.FLAGS.DIRECT_MESSAGES,
  ],
});

// ...

client.on('messageCreate', async (message) => {
  // it could be if (message.author.bot) return;
  if (message.author.id === botId) return;
  if (message.channel.type === 'DM') return;
  if (message.channelId !== verifyChannelId) return;

  if (message.content.toLowerCase() === 'verify') {
    let sentMessage = await message.author.send(
      "Hello, I'm gonna asking you a few questions..",
    );
    let dmChannel = sentMessage.channel;

    dmChannel.send('Are you on a European server? (Yes/No)');

    const filter = (m) => ['yes', 'no'].includes(m.content.toLowerCase());
    const collector = dmChannel.createMessageCollector({
      filter,
      // max: 1,
      time: 15000,
    });

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

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

  // delete the message even if it wasn't "verify"
  message.delete({ timeout: 1000 });
});

【讨论】:

    猜你喜欢
    • 2021-10-17
    • 1970-01-01
    • 1970-01-01
    • 2020-11-05
    • 2017-09-22
    • 2019-11-25
    • 1970-01-01
    • 2015-11-21
    • 1970-01-01
    相关资源
    最近更新 更多