我想知道在调用斜杠命令之后是否可能通过DMs获取用户的输入。我已经创建了一个小的迷你游戏,理想的情况下,可以在用户的DMs中发挥,以避免垃圾邮件的频道,它被调用。我的代码结构的一个示例如下:
module.exports = {
data: new SlashCommandBuilder()
.setName('game')
.setDescription('Play game'),
async execute(interaction) {
const score = await gameLogic(interaction.user);
await interaction.reply(score);
},
};然后我向用户发送一个DM,让他们知道游戏已经启动,并调用一个等待用户输入的函数。
async function gameLogic(user) {
user.send("Game time");
let userInput = getUserInput();
.... game logic ...
}我尝试过使用消息收集器和awaitMessage,但似乎无法工作。真正尝试用尽所有的选择,直到转移到另一个解决方案。
我很感激你的建议!
编辑不幸的是,我不记得我到底尝试过什么,但我可以给出一些例子。
我的邮件收集器就是这样的:
async function getUserInput() {
console.log("Awaiting user input");
const filter = message => message.author.id === m_user.id;
const collector = m_interaction.channel.createMessageCollector({ filter, max: 1, time: 15000, errors: ['time'] })
collector.on('collect', message => console.log(`You wrote ${message.content}`));
collector.on('error', collected => console.log("Time out"));
} 我的awaitMessage是这样的:
async function getUserInput() {
const filter = message => message.author.id === m_user.id;
const message = await m_interaction.channel.awaitMessages({ filter, max: 1, time: 15000, errors: ['time'] })
.then(message => m_interaction.channel.send(`You wrote ${message.content}`))
.catch(collected => m_interaction.channel.send("Time out"));
console.log(message);
}我确信这些方法将用于从命令调用的通道收集输入,但我不确定如何修改它们以通过DMs收集输入。我确实读了一些关于dmChannel的东西,但似乎没能按照我想要的方式工作。
编辑2+解决方案--我已经成功地将DMChannel与用户存储在一起。
const channel = user.createDM();现在我可以在那里使用MessageCollector了。希望这能帮上忙。
发布于 2022-02-07 20:04:46
我已经设法将DMChannel与用户存储在一起。
const channel = user.createDM();现在我可以在那里使用MessageCollector了。希望这能帮上忙。
https://stackoverflow.com/questions/71016289
复制相似问题