@ -31,263 +31,263 @@ class messageListener extends Listener {
return console . error ( err ) ;
} ) ;
} else {
return ;
}
if ( message . author . bot ) return ;
if ( message . author . bot ) return ;
/ * B a n n e d w o r d s s e c t i o n
*
* This section contains code about the banned words features
*
* /
/ * B a n n e d w o r d s s e c t i o n
*
* This section contains code about the banned words features
*
* /
// Banned words
const bannedWords = await BannedWords . findAll ( { where : { word : Sequelize . where ( Sequelize . fn ( 'LOCATE' , Sequelize . col ( 'word' ) , message . content . replace ( /\u200B/g , '' ) . replace ( /[\u0250-\ue007]/g , '' ) ) , Sequelize . Op . ne , 0 ) , serverID : message . guild . id } } ) ;
const whitelistWord = await WhitelistWord . findAll ( { where : { word : Sequelize . where ( Sequelize . fn ( 'LOCATE' , Sequelize . col ( 'word' ) , message . content . replace ( /\u200B/g , '' ) . replace ( /[\u0250-\ue007]/g , '' ) ) , Sequelize . Op . ne , 0 ) , serverID : message . guild . id } } ) ;
// Banned words
const bannedWords = await BannedWords . findAll ( { where : { word : Sequelize . where ( Sequelize . fn ( 'LOCATE' , Sequelize . col ( 'word' ) , message . content . replace ( /\u200B/g , '' ) . replace ( /[\u0250-\ue007]/g , '' ) ) , Sequelize . Op . ne , 0 ) , serverID : message . guild . id } } ) ;
const whitelistWord = await WhitelistWord . findAll ( { where : { word : Sequelize . where ( Sequelize . fn ( 'LOCATE' , Sequelize . col ( 'word' ) , message . content . replace ( /\u200B/g , '' ) . replace ( /[\u0250-\ue007]/g , '' ) ) , Sequelize . Op . ne , 0 ) , serverID : message . guild . id } } ) ;
if ( whitelistWord [ 0 ] ) {
return ; // If word is whitelisted just return
}
if ( bannedWords [ 0 ] ) {
// Remove accent
let censoredMessage = message . content . toLowerCase ( ) . normalize ( 'NFD' ) . replace ( /[\u0300-\u036f]/g , '' ) ;
// Remove zero width space character
censoredMessage = censoredMessage . replace ( /\u200B/g , '' ) ;
// Remove non latin character
censoredMessage = censoredMessage . replace ( /[\u0250-\ue007]/g , '' ) ;
for ( let i = 0 ; i < bannedWords . length ; i ++ ) {
if ( ! safe ( bannedWords [ i ] . get ( 'word' ) ) ) return ;
let regex = new RegExp ( bannedWords [ i ] . get ( 'word' ) , 'g' ) ;
censoredMessage = censoredMessage . replace ( regex , '█' . repeat ( bannedWords [ i ] . get ( 'word' ) . length ) ) ;
if ( whitelistWord [ 0 ] ) {
return ; // If word is whitelisted just return
}
let Embed = this . client . util . embed ( )
. setColor ( message . member . displayHexColor )
. setAuthor ( message . author . username , message . author . displayAvatarURL ( ) )
. setDescription ( censoredMessage ) ;
message . channel . send ( Embed ) ;
return message . delete ( { reason : ` Deleted message: ${ message . content } ` } ) ;
if ( bannedWords [ 0 ] ) {
// Remove accent
let censoredMessage = message . content . toLowerCase ( ) . normalize ( 'NFD' ) . replace ( /[\u0300-\u036f]/g , '' ) ;
// Remove zero width space character
censoredMessage = censoredMessage . replace ( /\u200B/g , '' ) ;
// Remove non latin character
censoredMessage = censoredMessage . replace ( /[\u0250-\ue007]/g , '' ) ;
} else {
/ * A u t o r e s p o n s e f e a t u r e & t a g
*
* This section contains autoresponse and tag feature
*
* /
// auto responses
const autoresponseStat = await autoResponseStat . findOne ( { where : { serverID : message . guild . id , stat : 'enable' } } ) ;
if ( autoresponseStat ) {
// Infinit haha very yes
if ( message . content . toLowerCase ( ) . startsWith ( 'haha very' ) && message . content . toLowerCase ( ) . endsWith ( 'yes' ) ) {
let yes = message . content . toLowerCase ( ) . replace ( 'haha' , '' ) ;
yes = yes . replace ( 'yes' , '' ) ;
yes += 'very' ;
return message . channel . send ( ` haha ${ yes } yes ` ) ;
} else if ( message . content . toLowerCase ( ) == 'haha yes' ) {
return message . channel . send ( 'haha very yes' ) ;
for ( let i = 0 ; i < bannedWords . length ; i ++ ) {
if ( ! safe ( bannedWords [ i ] . get ( 'word' ) ) ) return ;
let regex = new RegExp ( bannedWords [ i ] . get ( 'word' ) , 'g' ) ;
censoredMessage = censoredMessage . replace ( regex , '█' . repeat ( bannedWords [ i ] . get ( 'word' ) . length ) ) ;
}
let Embed = this . client . util . embed ( )
. setColor ( message . member . displayHexColor )
. setAuthor ( message . author . username , message . author . displayAvatarURL ( ) )
. setDescription ( censoredMessage ) ;
// Reply with images as attachement
const autoresponse = await autoResponse . findOne ( { where : { trigger : message . content . toLowerCase ( ) } } ) ;
if ( autoresponse ) {
autoResponse . findOne ( { where : { trigger : message . content . toLowerCase ( ) } } ) ;
let trigger = autoresponse . get ( 'trigger' ) ;
let type = autoresponse . get ( 'type' ) ;
let content = autoresponse . get ( 'response' ) ;
if ( trigger == message . content . toLowerCase ( ) && type == 'text' ) {
return message . channel . send ( content ) ;
} else if ( trigger == message . content . toLowerCase ( ) && type == 'react' ) {
return message . react ( content ) ;
} else if ( trigger == message . content . toLowerCase ( ) && type == 'image' ) {
return message . channel . send ( { files : [ content ] } ) ;
message . channel . send ( Embed ) ;
return message . delete ( { reason : ` Deleted message: ${ message . content } ` } ) ;
} else {
/ * A u t o r e s p o n s e f e a t u r e & t a g
*
* This section contains autoresponse and tag feature
*
* /
// auto responses
const autoresponseStat = await autoResponseStat . findOne ( { where : { serverID : message . guild . id , stat : 'enable' } } ) ;
if ( autoresponseStat ) {
// Infinit haha very yes
if ( message . content . toLowerCase ( ) . startsWith ( 'haha very' ) && message . content . toLowerCase ( ) . endsWith ( 'yes' ) ) {
let yes = message . content . toLowerCase ( ) . replace ( 'haha' , '' ) ;
yes = yes . replace ( 'yes' , '' ) ;
yes += 'very' ;
return message . channel . send ( ` haha ${ yes } yes ` ) ;
} else if ( message . content . toLowerCase ( ) == 'haha yes' ) {
return message . channel . send ( 'haha very yes' ) ;
}
}
}
// User autoresponse
const tag = await Tag . findOne ( { where : { trigger : message . content . toLowerCase ( ) , serverID : message . guild . id } } ) ;
if ( tag ) {
Tag . findOne ( { where : { trigger : message . content . toLowerCase ( ) , serverID : message . guild . id } } ) ;
let text = tag . get ( 'response' ) ;
if ( text . includes ( '[ban]' ) ) {
message . member . ban ( 'Tag ban :^)' ) ;
} else if ( text . includes ( '[kick]' ) ) {
message . member . kick ( 'Tag kick :^)' ) ;
} else if ( text . includes ( '[delete]' ) ) {
message . delete ( ) ;
}
text = rand . random ( text , message ) ;
let attach = '' ;
if ( text . includes ( '[attach:' ) ) {
attach = text . split ( /(\[attach:.*?])/ ) ;
for ( let i = 0 , l = attach . length ; i < l ; i ++ ) {
if ( attach [ i ] . includes ( '[attach:' ) ) {
attach = attach [ i ] . replace ( '[attach:' , '' ) . slice ( 0 , - 1 ) ;
i = attach . length ;
// Reply with images as attachement
const autoresponse = await autoResponse . findOne ( { where : { trigger : message . content . toLowerCase ( ) } } ) ;
if ( autoresponse ) {
autoResponse . findOne ( { where : { trigger : message . content . toLowerCase ( ) } } ) ;
let trigger = autoresponse . get ( 'trigger' ) ;
let type = autoresponse . get ( 'type' ) ;
let content = autoresponse . get ( 'response' ) ;
if ( trigger == message . content . toLowerCase ( ) && type == 'text' ) {
return message . channel . send ( content ) ;
} else if ( trigger == message . content . toLowerCase ( ) && type == 'react' ) {
return message . react ( content ) ;
} else if ( trigger == message . content . toLowerCase ( ) && type == 'image' ) {
return message . channel . send ( { files : [ content ] } ) ;
}
}
text = text . replace ( /(\[attach:.*?])/ , '' ) ;
}
// THIS SECTION IS VERY VERY BAD MUST CHANGE
if ( text . includes ( '[embed]' ) ) {
text = text . replace ( /\[embed\]/ , ' ' ) ;
let title = '' ;
let desc = '' ;
let image ;
let thumbnail ;
let footer = '' ;
let color ;
if ( text . includes ( '[embedImage:' ) ) {
image = text . split ( /(\[embedImage:.*?])/ ) ;
for ( let i = 0 , l = image . length ; i < l ; i ++ ) {
if ( image [ i ] . includes ( '[embedImage:' ) ) {
image = image [ i ] . replace ( '[embedImage:' , '' ) . slice ( 0 , - 1 ) ;
text = text . replace ( /(\[embedimage:.*?])/g , '' ) ;
i = image . length ;
// User autoresponse
const tag = await Tag . findOne ( { where : { trigger : message . content . toLowerCase ( ) , serverID : message . guild . id } } ) ;
if ( tag ) {
Tag . findOne ( { where : { trigger : message . content . toLowerCase ( ) , serverID : message . guild . id } } ) ;
let text = tag . get ( 'response' ) ;
if ( text . includes ( '[ban]' ) ) {
message . member . ban ( 'Tag ban :^)' ) ;
} else if ( text . includes ( '[kick]' ) ) {
message . member . kick ( 'Tag kick :^)' ) ;
} else if ( text . includes ( '[delete]' ) ) {
message . delete ( ) ;
}
text = rand . random ( text , message ) ;
let attach = '' ;
if ( text . includes ( '[attach:' ) ) {
attach = text . split ( /(\[attach:.*?])/ ) ;
for ( let i = 0 , l = attach . length ; i < l ; i ++ ) {
if ( attach [ i ] . includes ( '[attach:' ) ) {
attach = attach [ i ] . replace ( '[attach:' , '' ) . slice ( 0 , - 1 ) ;
i = attach . length ;
}
}
text = text . replace ( /(\[attach:.*?])/ , '' ) ;
}
if ( text . includes ( '[embedThumbnail:' ) ) {
thumbnail = text . split ( /(\[embedThumbnail:.*?])/ ) ;
for ( let i = 0 , l = thumbnail . length ; i < l ; i ++ ) {
if ( thumbnail [ i ] . includes ( '[embedThumbnail:' ) ) {
thumbnail = thumbnail [ i ] . replace ( '[embedThumbnail:' , '' ) . slice ( 0 , - 1 ) ;
text = text . replace ( /(\[embedThumbnail:.*?])/g , '' ) ;
i = thumbnail . length ;
// THIS SECTION IS VERY VERY BAD MUST CHANGE
if ( text . includes ( '[embed]' ) ) {
text = text . replace ( /\[embed\]/ , ' ' ) ;
let title = '' ;
let desc = '' ;
let image ;
let thumbnail ;
let footer = '' ;
let color ;
if ( text . includes ( '[embedImage:' ) ) {
image = text . split ( /(\[embedImage:.*?])/ ) ;
for ( let i = 0 , l = image . length ; i < l ; i ++ ) {
if ( image [ i ] . includes ( '[embedImage:' ) ) {
image = image [ i ] . replace ( '[embedImage:' , '' ) . slice ( 0 , - 1 ) ;
text = text . replace ( /(\[embedimage:.*?])/g , '' ) ;
i = image . length ;
}
}
}
}
if ( text . includes ( '[embedColor:' ) ) {
color = text . split ( /(\[embedColor:.*?])/ ) ;
for ( let i = 0 , l = color . length ; i < l ; i ++ ) {
if ( color [ i ] . includes ( '[embedColor:' ) ) {
color = color [ i ] . replace ( '[embedColor:' , '' ) . slice ( 0 , - 1 ) ;
text = text . replace ( /(\[embedColor:.*?])/g , '' ) ;
i = color . length ;
if ( text . includes ( '[embedThumbnail:' ) ) {
thumbnail = text . split ( /(\[embedThumbnail:.*?])/ ) ;
for ( let i = 0 , l = thumbnail . length ; i < l ; i ++ ) {
if ( thumbnail [ i ] . includes ( '[embedThumbnail:' ) ) {
thumbnail = thumbnail [ i ] . replace ( '[embedThumbnail:' , '' ) . slice ( 0 , - 1 ) ;
text = text . replace ( /(\[embedThumbnail:.*?])/g , '' ) ;
i = thumbnail . length ;
}
}
}
}
if ( text . includes ( '[embedTitle:' ) ) {
title = text . split ( /(\[embedTitle:.*?])/ ) ;
for ( let i = 0 , l = title . length ; i < l ; i ++ ) {
if ( title [ i ] . includes ( '[embedTitle:' ) ) {
title = title [ i ] . replace ( '[embedTitle:' , '' ) . slice ( 0 , - 1 ) ;
text = text . replace ( /(\[embedTitle:.*?])/g , '' ) ;
i = title . length ;
if ( text . includes ( '[embedColor:' ) ) {
color = text . split ( /(\[embedColor:.*?])/ ) ;
for ( let i = 0 , l = color . length ; i < l ; i ++ ) {
if ( color [ i ] . includes ( '[embedColor:' ) ) {
color = color [ i ] . replace ( '[embedColor:' , '' ) . slice ( 0 , - 1 ) ;
text = text . replace ( /(\[embedColor:.*?])/g , '' ) ;
i = color . length ;
}
}
}
}
if ( text . includes ( '[embedFooter:' ) ) {
footer = text . split ( /(\[embedFooter:.*?])/ ) ;
for ( let i = 0 , l = footer . length ; i < l ; i ++ ) {
if ( footer [ i ] . includes ( '[embedFooter:' ) ) {
footer = footer [ i ] . replace ( '[embedFooter:' , '' ) . slice ( 0 , - 1 ) ;
text = text . replace ( /(\[embedFooter:.*?])/g , '' ) ;
i = footer . length ;
if ( text . includes ( '[embedTitle:' ) ) {
title = text . split ( /(\[embedTitle:.*?])/ ) ;
for ( let i = 0 , l = title . length ; i < l ; i ++ ) {
if ( title [ i ] . includes ( '[embedTitle:' ) ) {
title = title [ i ] . replace ( '[embedTitle:' , '' ) . slice ( 0 , - 1 ) ;
text = text . replace ( /(\[embedTitle:.*?])/g , '' ) ;
i = title . length ;
}
}
}
}
if ( text . includes ( '[embedDesc:' ) ) {
desc = text . split ( /(\[embedDesc:.*?])/ ) ;
for ( let i = 0 , l = desc . length ; i < l ; i ++ ) {
if ( desc [ i ] . includes ( '[embedDesc:' ) ) {
desc = desc [ i ] . replace ( '[embedDesc:' , '' ) . slice ( 0 , - 1 ) ;
i = desc . length ;
if ( text . includes ( '[embedFooter:' ) ) {
footer = text . split ( /(\[embedFooter:.*?])/ ) ;
for ( let i = 0 , l = footer . length ; i < l ; i ++ ) {
if ( footer [ i ] . includes ( '[embedFooter:' ) ) {
footer = footer [ i ] . replace ( '[embedFooter:' , '' ) . slice ( 0 , - 1 ) ;
text = text . replace ( /(\[embedFooter:.*?])/g , '' ) ;
i = footer . length ;
}
}
}
if ( text . includes ( '[embedDesc:' ) ) {
desc = text . split ( /(\[embedDesc:.*?])/ ) ;
for ( let i = 0 , l = desc . length ; i < l ; i ++ ) {
if ( desc [ i ] . includes ( '[embedDesc:' ) ) {
desc = desc [ i ] . replace ( '[embedDesc:' , '' ) . slice ( 0 , - 1 ) ;
i = desc . length ;
}
}
}
const embed = this . client . util . embed ( )
. setColor ( color )
. setTitle ( title )
. setImage ( image )
. setThumbnail ( thumbnail )
. setDescription ( desc )
. setFooter ( footer )
. setTimestamp ( ) ;
if ( attach ) {
return message . channel . send ( embed , { files : [ attach ] } ) ;
} else {
return message . channel . send ( embed ) ;
}
}
const embed = this . client . util . embed ( )
. setColor ( color )
. setTitle ( title )
. setImage ( image )
. setThumbnail ( thumbnail )
. setDescription ( desc )
. setFooter ( footer )
. setTimestamp ( ) ;
if ( attach ) {
return message . channel . send ( embed , { files : [ attach ] } ) ;
return message . channel . send ( text , { files : [ attach ] } ) ;
} else {
return message . channel . send ( embed ) ;
return message . channel . send ( text ) ;
}
}
if ( attach ) {
return message . channel . send ( text , { files : [ attach ] } ) ;
} else {
return message . channel . send ( text ) ;
}
}
/ * Q u o t a t i o n f e a t u r e
*
* This section will contain the code for the quotation feature , it will detect link for it and send it as embed
*
* /
const quotationstat = await quotationStat . findOne ( { where : { serverID : message . guild . id , stat : 'enable' } } ) ;
/ * Q u o t a t i o n f e a t u r e
*
* This section will contain the code for the quotation feature , it will detect link for it and send it as embed
*
* /
const quotationstat = await quotationStat . findOne ( { where : { serverID : message . guild . id , stat : 'enable' } } ) ;
if ( quotationstat && message . content . includes ( 'discordapp.com/channels/' ) ) {
let url = message . content . split ( '/' ) ;
let guildID = url [ 4 ] ;
let channelID = url [ 5 ] ;
let messageID = url [ 6 ] . split ( ' ' ) [ 0 ] ;
// Verify if the guild, channel and message exist
let guild = this . client . guilds . resolve ( guildID ) ;
if ( ! guild ) return ;
let channel = this . client . channels . resolve ( channelID ) ;
if ( ! channel ) return ;
let quote = await channel . messages . fetch ( messageID )
. catch ( ( ) => {
return ;
} ) ;
if ( ! quote ) return ;
if ( quotationstat && message . content . includes ( 'discordapp.com/channels/' ) ) {
let url = message . content . split ( '/' ) ;
let guildID = url [ 4 ] ;
let channelID = url [ 5 ] ;
let messageID = url [ 6 ] . split ( ' ' ) [ 0 ] ;
let Embed = this . client . util . embed ( )
. setAuthor ( quote . author . username , quote . author . displayAvatarURL ( ) )
. setColor ( message . member ? message . member . displayHexColor : 'NAVY' )
. addField ( 'Jump to' , ` [message](https://discordapp.com/channels/ ${ message . guild . id } / ${ channelID } / ${ messageID } ) ` , true )
. addField ( 'In channel' , quote . channel . name , true )
. addField ( 'Quoted by' , message . author , true )
. setDescription ( quote . content )
. setTimestamp ( quote . createdTimestamp ) ;
if ( quote . member ) Embed . setAuthor ( ` ${ quote . author . username } # ${ quote . author . discriminator } ` , quote . author . displayAvatarURL ( ) ) ;
if ( quote . author . bot ) Embed . setAuthor ( ` ${ quote . author . username } # ${ quote . author . discriminator } (bot) ` , quote . author . displayAvatarURL ( ) ) ;
if ( guild . id != message . guild . id ) Embed . addField ( 'In guild' , guild . name , true ) ;
let Attachment = ( quote . attachments ) . array ( ) ;
if ( Attachment [ 0 ] ) Embed . setImage ( Attachment [ 0 ] . url ) ;
return message . channel . send ( Embed ) ;
// Verify if the guild, channel and message exist
let guild = this . client . guilds . resolve ( guildID ) ;
if ( ! guild ) return ;
let channel = this . client . channels . resolve ( channelID ) ;
if ( ! channel ) return ;
let quote = await channel . messages . fetch ( messageID )
. catch ( ( ) => {
return ;
} ) ;
if ( ! quote ) return ;
let Embed = this . client . util . embed ( )
. setAuthor ( quote . author . username , quote . author . displayAvatarURL ( ) )
. setColor ( message . member ? message . member . displayHexColor : 'NAVY' )
. addField ( 'Jump to' , ` [message](https://discordapp.com/channels/ ${ message . guild . id } / ${ channelID } / ${ messageID } ) ` , true )
. addField ( 'In channel' , quote . channel . name , true )
. addField ( 'Quoted by' , message . author , true )
. setDescription ( quote . content )
. setTimestamp ( quote . createdTimestamp ) ;
if ( quote . member ) Embed . setAuthor ( ` ${ quote . author . username } # ${ quote . author . discriminator } ` , quote . author . displayAvatarURL ( ) ) ;
if ( quote . author . bot ) Embed . setAuthor ( ` ${ quote . author . username } # ${ quote . author . discriminator } (bot) ` , quote . author . displayAvatarURL ( ) ) ;
if ( guild . id != message . guild . id ) Embed . addField ( 'In guild' , guild . name , true ) ;
let Attachment = ( quote . attachments ) . array ( ) ;
if ( Attachment [ 0 ] ) Embed . setImage ( Attachment [ 0 ] . url ) ;
return message . channel . send ( Embed ) ;
}
}
}
}
}