2019-09-13 20:02:41 +00:00
const gm = require ( "gm" ) . subClass ( {
imageMagick : true
} ) ;
const gmToBuffer = require ( "../utils/gmbuffer.js" ) ;
const wrap = require ( "../utils/wrap.js" ) ;
exports . run = async ( message , args ) => {
if ( args . length === 0 ) return ` ${ message . author . mention } , you need to provide an image to make a Sonic meme! ` ;
message . channel . sendTyping ( ) ;
const template = "./assets/images/sonic.jpg" ;
2019-10-28 16:02:00 +00:00
const file = ` /tmp/ ${ Math . random ( ) . toString ( 36 ) . substring ( 2 , 15 ) } .png ` ;
2019-09-13 20:02:41 +00:00
const cleanedMessage = args . join ( " " ) . replace ( /&/g , "\\&" ) . replace ( />/g , "\\>" ) . replace ( /</g , "\\<" ) ;
gm ( 474 , 332 ) . out ( "+size" ) . gravity ( "Center" ) . out ( "-pointsize" , 40 ) . out ( "-font" , "Bitstream Vera Sans" ) . out ( ` pango: ${ wrap ( cleanedMessage , { width : 15 , indent : "" } )} ` ) . negative ( ) . out ( "-fuzz" , "30%" ) . transparent ( "black" ) . write ( file , async ( error ) => {
if ( error ) console . error ;
const command = gm ( template ) . composite ( file ) . gravity ( "Center" ) . geometry ( "474x332+160+10" ) ;
const resultBuffer = await gmToBuffer ( command ) ;
return message . channel . createMessage ( "" , {
file : resultBuffer ,
name : "sonic.png"
} ) ;
} ) ;
} ;