import discord from 'discord.js'; import {HydratedDocument} from 'mongoose'; import {logger} from '../logger'; import {config} from '../config'; import {reactPreprocess} from '../functions/react-preprocess'; import {Alias, aliasModel} from '../models/Alias'; import {Guild, guildModel} from '../models/Guild'; import {Image, imageModel} from '../models/Image'; export async function handleReactImage(message: discord.Message): Promise{ try{ if(!message.guild || !message.guild.id || !message.content) return; const guild: HydratedDocument | null = await guildModel.findOne({id: message.guild.id}); if(!guild) return; // not in guild const alias: HydratedDocument | null = await aliasModel.findOne( {guild: guild, text: reactPreprocess(message.content)} ); if(!alias) return; // alias not exist if(!alias.images.length) return; // alias not linked const chosenImage: Image = alias.images[Math.floor(Math.random() * alias.images.length)]; const image: HydratedDocument | null = await imageModel.findById(chosenImage._id); if(!image) throw Error('image not exist'); await message.channel.send({ content: `${config.httpServer.external.url}/${image._id}${image.extension}` }); }catch(err: unknown){ let errMsg; if(err instanceof Error) errMsg = err.message; else errMsg = String(errMsg); logger.error(`While executing "handleReactImage", ${errMsg}`); } }