[英]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.