Help with nested eval

Asked Jun 28, 2023·2 replies·Last activity 3 years ago·Open in Discord ↗
Archived from the original community forum
Things may have changed since it was written. Still stuck? Ask the community on Discord.

Trying to use an $(eval) command to randomly pick a URL from a pastebin to use as the URL for another $(eval) command. I thought the limit was 2 evals in a nest, so I figured this would work, but getting 'Unexpected identifier'.

$(eval const rss = $(urlfetch json $(eval a=$(urlfetch json https://pastebin.com/raw/RCjU9CFF).split("#");a[Math.floor(Math.random() *a.length)])); rss.items[0].description;)

Basic idea is to just have a list of rss2json links with different news outlets so the command randomly outputs news descriptions. There's probably a better way of doing this, but I'm still not sure why this doesn't work.

2 replies

Hi @Sleek Fox Let me advice my solution.

Saw your Pastebin there is one minor issue, leading " and trailing " by this date (2040 IST) which might not give what you want.

I advice you to make an array something like:-

js
[
`https://api.rss2json.com/v1/api.json?rss_url=https%3A%2F%2Ffeeds.skynews.com%2Ffeeds%2Frss%2Fworld.xml`,
`https://api.rss2json.com/v1/api.json?rss_url=https%3A%2F%2Ffeeds.bbci.co.uk%2Fnews%2Fworld%2Frss.xml`
]

Why array? To prevent any such .split() function.

You need to make a command which return link which then can be used by alias command.

js
const links = $(urlfetch json PASTEBIN_LINK); /* fetch the links */
let link = links[Math.floor(Math.random() * links.length)]; /* get any random link */
link; /* return the link, which can be used by it's alias command */
js
let data = $(urlfetch json $(query)); /* IIRC the ``link`` from parent command will be in $(query) */
data.items[0].title;

I haven't tested this approach, but this more likely to work. Commands are as follows:

js
!addcom -cd=5 -a=__cmdName !cmdName $(eval const links=$(urlfetch json PASTEBIN_LINK); let link = links[Math.floor(Math.random() * links.length)]; link;)
js
!addcom -cd=5 __cmdName $(eval let data = $(urlfetch json $(query)); data.items[0].title;)

If the command doesn't work, please feel free to ask.

Regards
Ritik Ranjan

image.png

Thank you very much. I was using .split() because I've used it before for other commands and figured it'd be fine here.