skip to Main Content

I’m using an API and I wanted to extract the API URLs, for this I made a code, but only a url appears, I will give example of the JSON code of the API.
Not to mention that a title comes, then comes in order first title and then the URL

{
 "items": [
     { "title":"YouTube", "url":"https://www.youtube.com/"}, 
     { "title":"Google", "url":"https://www.google.com/"},
     { "title":"Facebook", "url":"https://www.facebook.com/"},
     { "title":"Github", "url":"https://www.github.com"},
     { "title":"Microsoft", "url":"https://www.microsoft.com"}
 ]
}

It’s not exactly these urls, I used it as an example.

I would like to extract this information and leave as follows:

[Title](Url)

I want it to look like this, because the title will turn blue and when you click it goes to the site URL.

My code that didn’t work out is this:

        let response, channel, info;

        try {
            response = await axios.get(url)
            channel = response.data
            info = channel.items[0]
        }  catch (e) {
            return message.channel.send(`Error`)
        }

  let btn = new disbut.MessageButton()
     .setLabel("Site")
     .setStyle("url")
     .setURL("https://youtube.com")

        const embed = new MessageEmbed()
            .setColor("#ffff00")
            .setDescription(`[${info.title}](${info.url})n`)

        await message.channel.send({
          embed: embed,
          buttons: btn
          });

This info.url is where you get the URL and info.title is where you get the title, only there’s only 1 problem, it takes only 1 title and 1 url, I would like you to take them all and form a list in The Discord Bot

This is the result of the code:

But I wanted it to look like this:
Youtube
Google
Facebook
Github
Microsoft

So that only youtube appears
I need you to show at least 1 and a maximum of 10.
And when you click on each title, be redirected to the site.

2

Answers


  1. info only refers to channel.items[0], which is the first item

    You can use <Array>.map to map the items into your []() format and then <Array>.join to concatenate them into a string separated by newlines.

    .setDescription(channel.items.map(info => `[${info.title}](${info.url})`).join('n'))
    
    Login or Signup to reply.
  2. You need to format the items array as a Markdown list.

    Map the channel.items array to an array of list item strings, then join the entire thing together with newlines.

    .setDescription(
      channel.items.map(info => `* [${info.title}](${info.url})`).join("n")
    )
    
    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search