2020-12-21 22:29:15 +00:00
package com.discord.stores ;
import com.PatchConfig ;
import com.discord.models.domain.ModelAllowedMentions ;
import com.discord.models.domain.ModelApplication ;
import com.discord.models.domain.ModelMessage ;
import com.discord.models.domain.ModelUser ;
2021-01-01 21:23:37 +00:00
import com.discord.models.domain.NonceGenerator ;
2020-12-21 22:29:15 +00:00
import com.discord.models.domain.activity.ModelActivity ;
import com.discord.models.sticker.dto.ModelSticker ;
import com.discord.utilities.messagesend.MessageResult ;
2021-01-01 21:23:37 +00:00
import com.discord.utilities.time.Clock ;
import com.discord.utilities.time.TimeUtils ;
2020-12-21 22:29:15 +00:00
import com.lytefast.flexinput.model.Attachment ;
import java.util.List ;
2021-01-01 21:23:37 +00:00
import cutthecord.commands.CommandHandler ;
2020-12-21 22:29:15 +00:00
import lanchon.dexpatcher.annotation.DexAdd ;
import lanchon.dexpatcher.annotation.DexEdit ;
2021-01-01 21:23:37 +00:00
import lanchon.dexpatcher.annotation.DexIgnore ;
2020-12-21 22:29:15 +00:00
import lanchon.dexpatcher.annotation.DexWrap ;
import rx.Observable ;
@DexEdit
2020-12-25 23:51:17 +00:00
public final class StoreMessages extends Store {
// TODO extra patch that allows @ user selection window to appear when entering a slash command
2020-12-21 22:29:15 +00:00
2021-01-01 21:23:37 +00:00
@DexIgnore
public StoreMessages ( StoreStream storeStream , Dispatcher dispatcher , Clock clock2 ) {
}
@DexIgnore
private final Dispatcher dispatcher = null ;
@DexIgnore
private final StoreMessagesHolder holder = new StoreMessagesHolder ( ) ;
@DexIgnore
private final Clock clock = null ;
2020-12-21 22:29:15 +00:00
// slashmessages patch
// Wrap edit function to check for commands
2020-12-25 23:51:17 +00:00
@SuppressWarnings ( " InfiniteRecursion " ) // Wrapped method
2020-12-21 22:29:15 +00:00
@DexWrap
2021-01-01 21:23:37 +00:00
public final void editMessage ( long messageId , long channelId , String content ) {
2020-12-21 22:29:15 +00:00
if ( ! PatchConfig . SLASH_COMMANDS_ENABLED ) {
// Patch not enabled
2021-01-01 21:23:37 +00:00
editMessage ( messageId , channelId , content ) ;
2020-12-21 22:29:15 +00:00
return ;
}
2021-01-01 21:23:37 +00:00
String interceptEditMessage = CommandHandler . interceptEditMessage ( this , channelId , content ) ;
editMessage ( messageId , channelId , interceptEditMessage ) ;
2020-12-21 22:29:15 +00:00
}
// Wrap send function to check for commands
2020-12-25 23:51:17 +00:00
@SuppressWarnings ( " InfiniteRecursion " ) // Wrapped method
2020-12-21 22:29:15 +00:00
@DexWrap
2021-01-01 21:23:37 +00:00
public final Observable < MessageResult > sendMessage ( long channel ,
ModelUser author ,
2020-12-21 22:29:15 +00:00
String message ,
2021-01-01 21:23:37 +00:00
List < ? extends ModelUser > mentionedUsers ,
List < ? extends Attachment < ? > > attachments ,
List < ModelSticker > stickers ,
2020-12-21 22:29:15 +00:00
ModelMessage . MessageReference messageReference ,
ModelAllowedMentions modelAllowedMentions ,
2021-01-01 21:23:37 +00:00
ModelApplication application ,
2020-12-21 22:29:15 +00:00
ModelActivity modelActivity ,
ModelMessage . Activity activity ,
Long l ,
Long l2 ,
Integer num ) {
if ( ! PatchConfig . SLASH_COMMANDS_ENABLED ) {
// Patch not enabled
2021-01-01 21:23:37 +00:00
return sendMessage ( channel , author , message , mentionedUsers , attachments , stickers , messageReference , modelAllowedMentions , application , modelActivity , activity , l , l2 , num ) ;
2020-12-21 22:29:15 +00:00
}
2021-01-01 21:23:37 +00:00
String interceptEditMessage = CommandHandler . interceptSendMessage ( this , channel , message ) ;
return sendMessage ( channel , author , interceptEditMessage , mentionedUsers , attachments , stickers , messageReference , modelAllowedMentions , application , modelActivity , activity , l , l2 , num ) ;
2020-12-21 22:29:15 +00:00
}
2021-01-01 21:23:37 +00:00
// Helper methods for slashcommands etc
2020-12-21 22:29:15 +00:00
2021-01-01 21:23:37 +00:00
// Sends a bot message to a channel, only visible by the local client
// TODO for whatever reason these can't be deleted.. when type -1/0
// this is a big workaround, we add an additional check in ModelMessage to see if this is an internal message or not, to prevent resends, and send internal responses as error messages
2020-12-21 22:29:15 +00:00
@DexAdd
2021-01-01 21:23:37 +00:00
@StoreThread
public void sendCTCBotMessageToChannel ( long channelId , String content ) {
long computeNonce = NonceGenerator . computeNonce ( ) ;
ModelMessage modelMessage = new ModelMessage ( computeNonce , String . valueOf ( computeNonce ) , channelId , - 2 /* Send failed */ , content , ModelUser . CTC_BOT , null , TimeUtils . currentTimeUTCDateString ( clock ) , null , null , null , false , null , false , null , null , null , null , null , false , null , false , null , null , null , null , null , null , null , null ) ;
modelMessage . setCTCMessage ( true ) ;
this . dispatcher . schedule ( new StoreMessages$sendMessage$1 ( this , modelMessage ) ) ;
2020-12-21 22:29:15 +00:00
}
}