多步命令和消息收集器 discord.js

Posted

技术标签:

【中文标题】多步命令和消息收集器 discord.js【英文标题】:Multistep command and message collector discord.js 【发布时间】:2021-08-22 19:05:13 【问题描述】:

我正在尝试创建一个多步骤命令,在最后一次编辑嵌入之后,我想收集用户回复的内容。我尝试了 await message ,消息收集器,但没有成功。

这是命令的最后一部分。感谢您的帮助

                    .then(collected => 
                    var date = collected.first().emoji.name
                    switch (date)
                        case '1️⃣':
                            message.channel.send(`:white_check_mark: Tu as choisis d'ajouter un devoir pour lundi`).then(m => m.delete( timeout: 2000 ));
                            var date = 'lundi'
                            break;
                        case '2️⃣':
                            message.channel.send(`:white_check_mark: Tu as choisis d'ajouter un devoir pour mardi`).then(m => m.delete( timeout: 2000 ));
                            var date = 'mardi'
                            break;
                        case '3️⃣':
                            message.channel.send(`:white_check_mark: Tu as choisis d'ajouter un devoir pour mercredi`).then(m => m.delete( timeout: 2000 ));
                            var date = 'mercredi'
                            break;
                        case '4️⃣':
                            message.channel.send(`:white_check_mark: Tu as choisis d'ajouter un devoir pour jeudi`).then(m => m.delete( timeout: 2000 ));
                            var date = 'jeudi'
                            break;
                        case '5️⃣':
                            message.channel.send(`:white_check_mark: Tu as choisis d'ajouter un devoir pour vendredi`).then(m => m.delete( timeout: 2000 ));
                            var date = 'vendredi'
                            break;
                    setTimeout(() => 5000) 
                     m.reactions.removeAll()
                     const newEmbed = new Discord.MessageEmbed()
                    .setColor('RED')
                    .setTitle('Entrer le descriptif du devoir')
                    setTimeout(() => 7000) 
                
                    m.edit(newEmbed)
                    
                    const filter = m => m.author.id === message.author.id;
                    message.channel.awaitMessages(filter,time:10000).then(collected =>
                        console.log(m)
                    )

【问题讨论】:

到底出了什么问题?你收到错误了吗? 在控制台中给我发送这个:Message channel: TextChannel type: 'text', deleted: false, id: '834932687995011112', name: 'cmd', rawPosition: 2, parentID: '777092693264039948', permissionOverwrites: Collection [Map] , topic: null, lastMessageID: '850440734573199370', rateLimitPerUser: 0, 和其他参数 这对我来说似乎是预期的行为。你期待什么? 如果用户回复“Hello 123”,我希望得到“Hello 123”作为回报。 你做了console.log(m),它记录了m。有什么问题? 【参考方案1】:

TextChannel.awaitMessages() 方法返回 CollectionMap)。

由于您希望输出为字符串数组,您可以执行以下操作:

message.channel.awaitMessages(filter,time:10000).then(collected =>
  const list = [];
  collected.forEach((message) => 
    list.push(message.content);
  );
  console.log(list); // ["hello", "world"]
);

如果您只想要一条消息,可以使用MessageCollectorOptionsmax 属性并将其设置为1:

message.channel.awaitMessages(filter,time:10000, max:1).then(collected =>
  // in case the user did not answer
  if (typeof collected.first() === "undefined") 
    return;
  
  const string = collected.first().content;
  console.log(string); // "hello"
);

【讨论】:

以上是关于多步命令和消息收集器 discord.js的主要内容,如果未能解决你的问题,请参考以下文章

VB6 ADODB 因 SQL Compact 失败:多步操作生成错误

Discord.js:如何发送消息并从中收集反应

任何操作,除了发送消息,在我的收集器 discordjs 中都不起作用

在 R 中使用 broom 和 dplyr 进行“多步”回归

多步动画和过渡

在 yarn 和 cluster 模式下打印 spark 命令