This repository has been archived on 2023-05-27. You can view files and clone it, but cannot push or open issues or pull requests.
fediverse-imagebot/src/getLocalImage.ts

63 lines
1.9 KiB
TypeScript

import { createReadStream, ReadStream } from "node:fs"
import { readdir } from "node:fs/promises"
import { exit } from "node:process"
import args from "./helpers/args.js"
import crashHandler from "./helpers/crashHandler.js"
import { config } from "./helpers/types.js"
import postImage from "./postImage.js"
/**
* Get a local image from the filesystem
* @param conf Configuration object (see {@link config})
* @calls postImage with the image it randomly selects from the local directory
*/
export default async function getLocalImage(conf: config) {
// Get SFW directory
const sfw_files: string[] = await readdir(`${conf.directory}/sfw`).catch(
(e) => {
crashHandler("Error reading SFW image directory.", e)
return []
}
)
// Get NSFW directory
const nsfw_files: string[] = await readdir(`${conf.directory}/nsfw`).catch(
(e) => {
crashHandler("Error reading NSFW image directory.", e)
return []
}
)
const random = Math.floor(
Math.random() * (sfw_files.length + nsfw_files.length)
)
// Filler that is used to get a random file from the directories
let image: ReadStream
let sensitivity: boolean
let file: string
if (random >= sfw_files.length) {
// Image is NSFW, mark it sensitive
file = `${conf.directory}/nsfw/${nsfw_files[random - sfw_files.length]}`
image = createReadStream(file).on("error", (err: Error) => {
crashHandler(`Error reading file "${file}"`, err)
})
sensitivity = true
} else {
// Image is SFW, mark it not sensitive
file = `${conf.directory}/sfw/${sfw_files[random]}`
image = createReadStream(file).on("error", (err: Error) => {
crashHandler(`Error reading file "${file}"`, err)
})
sensitivity = false
}
if (args.verbose) {
console.log(`File being sent: ${file}`)
console.log(`Sensitivity: ${sensitivity}`)
}
await postImage(image, sensitivity, conf)
exit(0)
}