I am creating a discord bot (irrelevent) that sends images into the chat. The user can type out the name of the image without needing to type the file extention. The problem is that the bot doesn’t know what the file extention is so it will crash if the picture is a .jpg and the program was expecting a .png. Is there a way to make the program not require a file extention to open the file?
let image = imageName; message.channel.send({ files: [`media/stickers/${imageName}.png`] });
Answers:
Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.
Method 1
Using fs
– specifically the Promise version of fs, makes this quite simple
import { readdir } from 'fs/promises'; const getFullname = async (path, target) => (await readdir(path)) .find(file => file === target || file.split('.').slice(0,-1).join('.') === target ); try { const actualName = await getExtension('media/stickers', imageName); if (!actualName) { throw `File ${imageName} not found`; } message.channel.send({ files: [`media/stickers/${actualName}`] }); } catch(error) { // handle your errors here }
You can pass in the name with or without the extension and it will be found – note, this is NOT case insensitive … so XYZ
won’t match xyz.jpg
– easily changed if you need case insensitivity
Method 2
Unfortunately, the extension of the filename is required. You know file.mp4
and file.mp3
is entirely different.
However, you can use a try-except and a for loop to get the correct file!
I would suggest:
let image = imageName; let extensions = [".png", ".jpg", "gif"] // All the extensions you can think of const pass = () => {} for (const extension of extensions) { try { message.channel.send({ files: [`media/stickers/${imageName}${extension}`] }); // successfully get file and send break } catch(error) { pass() // do nothing, and go back to the loop and test other extension } }
I haven’t tried that before, and I am a Python programmer. But I hope you get the idea.
Method 3
There are only a few known image extensions like jpg, png, gif, jpeg. Maybe try and fetch the file with best guess extension, if it throws exception try the next format.
All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0