@@ -5,60 +5,60 @@ import { getDb } from '../../Utils/functions/utils';
55import 'dotenv/config' ;
66
77export default {
8- async appendReply ( message : NetworkMessage , uncenEmbed : EmbedBuilder ) {
8+ async appendReply ( message : NetworkMessage ) {
99 const db = getDb ( ) ;
1010 let messageInDb : messageData | null | undefined = null ;
1111
1212 if ( message . reference ) {
1313 const referredMessage = await message . fetchReference ( ) . catch ( ( ) => null ) ;
1414
1515 if ( referredMessage ) {
16- messageInDb = await db ? .messageData . findFirst ( {
16+ messageInDb = await db . messageData . findFirst ( {
1717 where : {
1818 channelAndMessageIds : {
1919 some : { messageId : referredMessage . id } ,
2020 } ,
2121 } ,
2222 } ) ;
2323
24- let embed = referredMessage . embeds [ 0 ] ?. fields [ 0 ] ?. value ;
25- let compact = referredMessage . content ;
24+ // content of the message being replied to
25+ let replyContent = referredMessage . embeds [ 0 ] ?. fields [ 0 ] ?. value || referredMessage . content ;
2626
2727 // if the message is a reply to another reply, remove the older reply :D
2828 if ( messageInDb ?. reference ) {
29- const replaceReply = ( string : string ) => {
30- return string ?. split ( / > .* / g) . at ( - 1 ) ?. trimStart ( ) || string ;
31- } ;
32-
33- // messages that are being replied to
34- embed = replaceReply ( embed ) ;
35- compact = replaceReply ( compact ) ;
29+ replyContent = replyContent ?. split ( / > .* / g) . at ( - 1 ) ?. trimStart ( ) || replyContent ;
3630 }
3731
38- embed = embed ?. replaceAll ( '\n' , '\n> ' ) ;
39- compact = compact ?. replaceAll ( '\n' , '\n> ' ) ;
32+ replyContent = replyContent ?. replaceAll ( '\n' , '\n> ' ) ;
4033
41- message . content = `> ${ embed || compact } \n${ message . content } ` ;
42- message . compact_message = `> ${ embed || compact } \n${ message . compact_message } ` ;
43- uncenEmbed . setFields ( { name : 'Message' , value : message . content } ) ;
44- }
34+ const maxLength = 1000 ; // max length of an embed field (-24 just to be safe)
35+ const prefixLength = 6 ; // length of "> ", "\n" and "..."
36+ const availableLength = maxLength - prefixLength - message . content . length ;
37+
38+ // if it is too long, cut it off to make room for the reply
39+ if ( replyContent . length > availableLength ) {
40+ replyContent = replyContent . slice ( 0 , availableLength ) + '...' ;
41+ }
4542
43+ message . content = `> ${ replyContent } \n${ message . content } ` ;
44+ message . compact_message = `> ${ replyContent } \n${ message . compact_message } ` ;
45+ }
4646 }
4747 return messageInDb ;
4848 } ,
4949
5050 async attachImageToEmbed ( message : NetworkMessage , embed : EmbedBuilder , censoredEmbed : EmbedBuilder ) {
51- // Tenor Gifs / YouTube Thumbnails / Tenor Gifs
51+ // Tenor Gifs / Image URLs
5252 const imageURLRegex = / (?: (?: (?: [ A - Z a - z ] { 3 , 9 } : (?: \/ \/ ) ? ) (?: [ - ; : & = + $ , \w ] + @ ) ? [ A - Z a - z 0 - 9 . - ] + | (?: w w w .| [ - ; : & = + $ , \w ] + @ ) [ A - Z a - z 0 - 9 . - ] + ) (?: (?: \/ [ + ~ % / . \w - _ ] * ) ? \? ? (?: [ - + = & ; % @ . \w _ ] * ) # ? (?: [ \w ] * ) ) ? ) (?: \. j p g | \. j p e g | \. g i f | \. p n g | \. w e b p ) / ;
5353 const URLMatch = message . content . match ( imageURLRegex ) ;
5454
5555 if ( URLMatch ) {
5656 embed
5757 . setImage ( URLMatch [ 0 ] )
58- . setFields ( [ { name : 'Message' , value : message . content . replace ( URLMatch [ 0 ] , '\u200B' ) . trim ( ) } ] ) ;
58+ . setFields ( { name : 'Message' , value : message . content . replace ( URLMatch [ 0 ] , '\u200B' ) . trim ( ) } ) ;
5959 censoredEmbed
6060 . setImage ( URLMatch [ 0 ] )
61- . setFields ( [ { name : 'Message' , value : message . censored_content . replace ( URLMatch [ 0 ] , '\u200B' ) . trim ( ) } ] ) ;
61+ . setFields ( { name : 'Message' , value : message . censored_content . replace ( URLMatch [ 0 ] , '\u200B' ) . trim ( ) } ) ;
6262 }
6363
6464 const tenorRegex = / h t t p s : \/ \/ t e n o r \. c o m \/ v i e w \/ .* - ( \d + ) / ;
@@ -72,23 +72,17 @@ export default {
7272
7373 embed
7474 . setImage ( gifJSON . results [ 0 ] . media [ 0 ] . gif . url )
75- . setFields ( [ { name : 'Message' , value : message . content . replace ( gifMatch [ 0 ] , '\u200B' ) . trim ( ) } ] ) ;
75+ . setFields ( { name : 'Message' , value : message . content . replace ( gifMatch [ 0 ] , '\u200B' ) . trim ( ) } ) ;
7676 censoredEmbed
7777 . setImage ( gifJSON . results [ 0 ] . media [ 0 ] . gif . url )
78- . setFields ( [ { name : 'Message' , value : message . censored_content . replace ( gifMatch [ 0 ] , '\u200B' ) . trim ( ) } ] ) ;
79- }
80-
81- else if ( message . embeds [ 0 ] ?. provider ?. name === 'YouTube' && message . embeds [ 0 ] ?. data . thumbnail ) {
82- embed . setImage ( message . embeds [ 0 ] . data . thumbnail . url ) ;
83- censoredEmbed . setImage ( message . embeds [ 0 ] . data . thumbnail . url ) ;
78+ . setFields ( { name : 'Message' , value : message . censored_content . replace ( gifMatch [ 0 ] , '\u200B' ) . trim ( ) } ) ;
8479 }
8580
8681 // Attached Images (uploaded without url)
87- if ( message . attachments . size > 1 ) message . reply ( 'Due to Discord\'s Embed limitations, only the first attachment will be sent.' ) ;
88-
8982 const attachment = message . attachments . first ( ) ;
83+ if ( attachment ) {
84+ if ( message . attachments . size > 1 ) message . reply ( 'Due to Discord\'s Embed limitations, only the first attachment will be sent.' ) ;
9085
91- if ( attachment ?. contentType ?. includes ( 'mp4' ) === false ) {
9286 const newAttachment = new AttachmentBuilder ( `${ attachment . url } ` , { name : `${ attachment . name } ` } ) ;
9387 embed . setImage ( `attachment://${ newAttachment . name } ` ) ;
9488 censoredEmbed . setImage ( `attachment://${ newAttachment . name } ` ) ;
0 commit comments