#Clean code without nesting on('collect'

16 messages · Page 1 of 1 (latest)

fluid kiln
#

I'm trying to get 5 sequential infos from the user but the only way to do that was nesting a lot of callbacks. Is there another way to do it without nesting and without using forms?

Example code:

 try {

    const cbResourceName = channel.createMessageComponentCollector({ filter: filterResourceName, componentType: ComponentType.StringSelect, time: 300000, max: 1 });

    cbResourceName.on('end', collected => {
        interaction.deleteReply().catch((e) => {})
    });

    cbResourceName.on('collect', async (userMsgResourceName) => {
        
        const cbVersion = interaction.channel.createMessageCollector({ filter: filterVersion, max: 1,time: 300000 });

        cbVersion.on('end', collected => {
            botMsgVersion.delete().catch(e => {});
        });

        cbVersion.on('collect', async (userVersion) => {
            
            const csChangelog = interaction.channel.createMessageCollector({ filter: filterChangelog, max: 1,time: 300000 });

            csChangelog.on('end', collected => {
                botMsgChangelog.delete().catch(e => {});
            });

            csChangelog.on('collect', async (userMsgChangelog) => {
                
                const cbChanges = interaction.channel.createMessageCollector({ filter: filterChanges, max: 1,time: 300000 });

                cbChanges.on('end', collected => {
                    botMsgChanges.delete().catch(e => {});
                });

                cbChanges.on('collect', async (userMsgChanges) => {
                    
                    const csImgLink = interaction.channel.createMessageCollector({ filter: filterImgLink, max: 1,time: 300000 });

                    csImgLink.on('end', collected => {
                        botMsgImgLink.delete().catch(e => {});
                    });

                    csImgLink.on('collect', async (userMsgImgLink) => {
                        
                    })
                })
            })
        })
    })
pastel aspen
#

• What's your exact discord.js npm list discord.js and node node -v version?
• Post the full error stack trace, not just the top part!
• Show your code!
• Explain what exactly your issue is.
• Not a discord.js issue? Check out #useful-servers.

pine knot
fluid kiln
#

Even with the awaitMessages it will be nested inside the awaitMessages.then(), no?

pine knot
#

Can be, you can also use async/await and avoid that.

fluid kiln
#

Nice, i'll try

pine knot
fluid kiln
#
let userMsgTitle = await channel.awaitMessages({ filter: filterTitle, time: 300000, max: 1 })

userMsgTitle.delete()

It isnt supposed to delete the message i just sent?

pine knot
#

You get back a collection of collected messages, that would effectively do nothing.

fluid kiln
#

This means there is no way to delete the message?

pine knot
#

There is

fluid kiln
#

Oh, now returns in a different way than before

#

Sometimes its good to use a brain

fluid kiln
#

Thanks god, i'm totally pleased right now

let title = await getTextMessageFromUser(`**Title**`, client, interaction, member, channel);
let version = await getTextMessageFromUser(`**Version**`, client, interaction, member, channel);