@@ -30,20 +30,29 @@ export class Discord {
3030
3131 static async sendMessage (
3232 channelId : string ,
33- message : Eris . MessageContent ,
33+ messageContent : Eris . MessageContent ,
3434 files : Eris . MessageFile | Eris . MessageFile [ ] | undefined = undefined ,
3535 ) : Promise < boolean > {
36+ let success = false ;
3637 try {
37- const i = await this . getInstance ( ) ;
38+ const discord = await this . getInstance ( ) ;
39+
40+ if ( typeof messageContent === 'string' ) {
41+ for ( const message of Discord . splitMessage ( messageContent ) ) {
42+ await discord . createMessage ( channelId , message , files ) ;
43+ }
44+ } else {
45+ await discord . createMessage ( channelId , messageContent , files ) ;
46+ }
3847
39- // Todo - retry mechanism
40- await i . createMessage ( channelId , message , files ) ;
41- await this . disconnect ( ) ;
42- return true ;
48+ success = true ;
4349 } catch ( err ) {
4450 firebase . logger . error ( 'An error occurred while trying to send a message to discord.' , err ) ;
45- return false ;
51+ } finally {
52+ await this . disconnect ( ) ;
4653 }
54+
55+ return success ;
4756 }
4857
4958 static async getInstance ( ) : Promise < Eris . Client > {
@@ -84,4 +93,30 @@ export class Discord {
8493 instance . disconnect ( { reconnect : false } ) ;
8594 instance = null ;
8695 }
96+
97+ static splitMessage ( message : string , maxMessageSize : number = 1950 ) : Array < string > {
98+ const numberOfMessages = Math . ceil ( message . length / maxMessageSize ) ;
99+ const messages : Array < string > = new Array < string > ( numberOfMessages ) ;
100+
101+ for ( let i = 0 , pointer = 0 ; i < numberOfMessages ; i ++ ) {
102+ let messageSize = maxMessageSize ;
103+
104+ let prefix = '' ;
105+ if ( i !== 0 ) {
106+ prefix = '...' ;
107+ messageSize -= 3 ;
108+ }
109+
110+ let suffix = '' ;
111+ if ( i !== numberOfMessages - 1 ) {
112+ suffix = '...' ;
113+ messageSize -= 3 ;
114+ }
115+
116+ messages [ i ] = `${ prefix } ${ message . substr ( pointer , messageSize ) } ${ suffix } ` ;
117+ pointer += messageSize ;
118+ }
119+
120+ return messages ;
121+ }
87122}
0 commit comments