簡體   English   中英

Discord.js 不收集用戶的 DM

[英]Discord.js doesn't collect DM from user

我正在嘗試做一個機器人來驗證一個特殊公會的成員。 他們需要將"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 });
        }
    }
});

這有幾個錯誤。 首先,您使用的是 discord.js 的 v13,正如 MrMythical 在他們的評論中提到的那樣,頻道類型現在是大寫的,所以檢查if(message.channel.type != "dm")不會做太多,因為它總是會返回true 檢查是否(appChannel.type === "dm")也不起作用,因為它總是返回false 而且我什至不確定您為什么要檢查appChannel的類型是否為DM ,它不能是其他任何東西。 您的filter可能應該檢查答案是yes還是no

另一個錯誤是您沒有啟用DIRECT_MESSAGES意圖 沒有它,您的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 });
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM