Discord JS,等待消息,不同的输入

Posted

技术标签:

【中文标题】Discord JS,等待消息,不同的输入【英文标题】:Discord JS, Await Message, different inputs 【发布时间】:2020-10-08 23:11:48 【问题描述】:

我正在制作一个不和谐的机器人,选择你自己的冒险风格游戏。我使用一个命令来启动它,然后等待消息以允许另外 3 个不同的响应。我在响应中使用 If 语句来确定下一步要做什么,但是如果消息不等于响应之一,则什么也不会发生。

const embed = new discord.RichEmbed()
            .setTitle("__**The Jungle!**__")
            .setColor("#49499c")
            .setDescription("a Pond\nExplore a Tree\nFollow a trail")
            //.attachFiles(["./pictures/Jungle.jpg"])
        const filter = response => 
            return response.author.id === message.author.id;
                   
        message.channel.send(embed).then(() => 
            message.channel.awaitMessages(filter,  max: 1, time: 30000, errors: ['time'] )
                .then(collected => 
                    if (collected.first()=="Explore a Pond")
                    
                        Pond.execute(message, args, client);
                    
                    else if (collected.first()=="Explore a Tree")
                    
                        Tree.execute(message, args, client);
                    
                    else if (collected.first()=="Follow a Trail")
                    
                        Trail.execute(message, args, client);
                    
                )
                .catch(collected => 
                    message.channel.send('Time up');
                );
        );

所以我需要一些办法,让他们再试一次。最好当他们输入错误时,它会让他们输入另一个输入,直到它正确为止。所以我想它会再次上升到等待消息之前。

任何想法或帮助都会很棒。谢谢。

【问题讨论】:

您能否提供更多信息,当条件不充分时您期望会发生什么? 使用默认值怎么样?就像如果没有一个选择与用户的匹配,它会被重定向到一个随机的 @Tenclea,主要是把他们拼错了。所以我宁愿尝试找到仍然让他们完全控制。 @sebastian-ruehmann ,如果不满足条件,我希望它返回等待消息。这样他们就可以正确地重新输入输入。 【参考方案1】:

您可以通过调用函数使代码自行循环:

const question = function (message) 
    message.channel.send(embed).then(() =>  
    message.channel.awaitMessages(filter,  max: 1, time: 30000, errors: ['time'] ) 
    .then(collected => 
        if (collected.first()=="Explore a Pond")  Pond.execute(message, args, client);  
        else if (collected.first()=="Explore a Tree")  Tree.execute(message, args, client);  
        else if (collected.first()=="Follow a Trail")  Trail.execute(message, args, client);  
        else  message.channel.send("Could not find this answer"); return question(message); 
    )
     .catch(collected =>  message.channel.send('Time up'); ); );

如果您遇到任何问题,请告诉我:)

【讨论】:

以上是关于Discord JS,等待消息,不同的输入的主要内容,如果未能解决你的问题,请参考以下文章

Discord js直接消息等待不起作用

C# Discord如何等待带有前缀的消息,然后响应它[关闭]

Discord.JS 如何等待会员反应

如何让 Discord 机器人异步等待对多条消息的反应?

如何在 discord.js 中同时向不同频道发送消息?

从未等待协程 discord.py