Here I use my package wbData to download the gtf and fasta files from Wormbase (you could do it manually), then I use the BioConductor function extractUpstreamSeqs to extract the corresponding sequence.
For point 2, that should be doable using BioConductor tools: you can make a for loop on the genes of interest and use a function like findOverlaps() to find ORFs that intersect with your upstream region.
For point 3:
intronic sequences that also might regulate the expression of the genes
how do you define an intron that might regulate the expression, as opposed to another intron? That’s a biological problem more than a programming one. The best I can think of would be to import ATAC-Seq or ChIP-Seq data, and look for peaks in the introns. That becomes a pretty complicated problem if you’re not already comfortable with bioinformatics.