diff -crB from/smali/com/discord/gateway/io/IncomingParser.smali to/smali/com/discord/gateway/io/IncomingParser.smali
*** from/smali/com/discord/gateway/io/IncomingParser.smali	2020-11-16 13:22:49.331198415 +0000
--- to/smali/com/discord/gateway/io/IncomingParser.smali	2020-11-16 13:57:09.234000134 +0000
***************
*** 750,755 ****
--- 750,766 ----
  
      .line 57
      :goto_2
+ 
+     invoke-static {}, Lcom/discord/stores/StoreStream;->getUserSettings()Lcom/discord/stores/StoreUserSettings;
+ 
+     move-result-object v0
+ 
+     invoke-virtual {v0}, Lcom/discord/stores/StoreUserSettings;->getNoDelete()Z
+ 
+     move-result v4
+ 
+     if-nez v4, :cond_b
+ 
      new-instance v0, Lcom/discord/models/domain/ModelMessageDelete;
  
      invoke-direct {v0}, Lcom/discord/models/domain/ModelMessageDelete;-><init>()V
diff -crB from/smali/com/discord/models/domain/ModelChannel.smali to/smali/com/discord/models/domain/ModelChannel.smali
*** from/smali/com/discord/models/domain/ModelChannel.smali	2020-11-16 13:22:49.341198411 +0000
--- to/smali/com/discord/models/domain/ModelChannel.smali	2020-11-16 13:57:09.234000134 +0000
***************
*** 2292,2297 ****
--- 2292,2307 ----
          }
      .end annotation
  
+     invoke-static {}, Lcom/discord/stores/StoreStream;->getUserSettings()Lcom/discord/stores/StoreUserSettings;
+ 
+     move-result-object v0
+ 
+     invoke-virtual {v0}, Lcom/discord/stores/StoreUserSettings;->getLeakChannels()Z
+ 
+     move-result v0
+ 
+     if-eqz v0, :cond_0
+ 
      .line 1
      iget-object v0, p0, Lcom/discord/models/domain/ModelChannel;->permissionOverwrites:Ljava/util/Map;
  
diff -crB from/smali/com/discord/models/domain/ModelMessageEmbed.smali to/smali/com/discord/models/domain/ModelMessageEmbed.smali
*** from/smali/com/discord/models/domain/ModelMessageEmbed.smali	2020-11-16 13:22:49.351198404 +0000
--- to/smali/com/discord/models/domain/ModelMessageEmbed.smali	2020-11-16 13:57:09.234000134 +0000
***************
*** 1964,1970 ****
  .end method
  
  .method public isVideo()Z
!     .locals 2
  
      .line 1
      iget-object v0, p0, Lcom/discord/models/domain/ModelMessageEmbed;->type:Ljava/lang/String;
--- 1964,1970 ----
  .end method
  
  .method public isVideo()Z
!     .locals 3
  
      .line 1
      iget-object v0, p0, Lcom/discord/models/domain/ModelMessageEmbed;->type:Ljava/lang/String;
***************
*** 1973,1981 ****
  
      invoke-virtual {v0, v1}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
  
!     move-result v0
  
!     return v0
  .end method
  
  .method public toString()Ljava/lang/String;
--- 1973,2000 ----
  
      invoke-virtual {v0, v1}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
  
!     move-result v1
  
!     invoke-static {}, Lcom/discord/stores/StoreStream;->getUserSettings()Lcom/discord/stores/StoreUserSettings;
! 
!     move-result-object v2
! 
!     invoke-virtual {v2}, Lcom/discord/stores/StoreUserSettings;->getAutoplayGifs()Z
! 
!     move-result v2
! 
!     if-nez v2, :cond_0
! 
!     const-string/jumbo v2, "gifv"
! 
!     invoke-virtual {v0, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
! 
!     move-result v2
! 
!     or-int v1, v1, v2
! 
!     :cond_0
!     return v1
  .end method
  
  .method public toString()Ljava/lang/String;
diff -crB from/smali/com/discord/stores/StoreUserSettings.smali to/smali/com/discord/stores/StoreUserSettings.smali
*** from/smali/com/discord/stores/StoreUserSettings.smali	2020-11-16 13:22:49.513198310 +0000
--- to/smali/com/discord/stores/StoreUserSettings.smali	2020-11-16 13:57:09.234000134 +0000
***************
*** 403,408 ****
--- 403,692 ----
      return-void
  .end method
  
+ .method public getAutoplayGifs()Z
+     .locals 3
+ 
+     iget-object v0, p0, Lcom/discord/stores/StoreUserSettings;->prefs:Landroid/content/SharedPreferences;
+ 
+     const-string v1, "CACHE_KEY_CTC_AUTOPLAY_GIFS"
+ 
+     const/4 v2, 0x1
+ 
+     invoke-interface {v0, v1, v2}, Landroid/content/SharedPreferences;->getBoolean(Ljava/lang/String;Z)Z
+ 
+     move-result v0
+ 
+     return v0
+ .end method
+ 
+ .method public setAutoplayGifs(Z)V
+     .locals 2
+ 
+     iget-object v0, p0, Lcom/discord/stores/StoreUserSettings;->prefs:Landroid/content/SharedPreferences;
+ 
+     invoke-interface {v0}, Landroid/content/SharedPreferences;->edit()Landroid/content/SharedPreferences$Editor;
+ 
+     move-result-object v0
+ 
+     const-string v1, "CACHE_KEY_CTC_AUTOPLAY_GIFS"
+ 
+     invoke-interface {v0, v1, p1}, Landroid/content/SharedPreferences$Editor;->putBoolean(Ljava/lang/String;Z)Landroid/content/SharedPreferences$Editor;
+ 
+     move-result-object p1
+ 
+     invoke-interface {p1}, Landroid/content/SharedPreferences$Editor;->apply()V
+ 
+     return-void
+ .end method
+ 
+ .method public getLeakChannels()Z
+     .locals 3
+ 
+     iget-object v0, p0, Lcom/discord/stores/StoreUserSettings;->prefs:Landroid/content/SharedPreferences;
+ 
+     const-string v1, "CACHE_KEY_CTC_LEAK_CHANNELS"
+ 
+     const/4 v2, 0x1
+ 
+     invoke-interface {v0, v1, v2}, Landroid/content/SharedPreferences;->getBoolean(Ljava/lang/String;Z)Z
+ 
+     move-result v0
+ 
+     return v0
+ .end method
+ 
+ .method public setLeakChannels(Z)V
+     .locals 2
+ 
+     iget-object v0, p0, Lcom/discord/stores/StoreUserSettings;->prefs:Landroid/content/SharedPreferences;
+ 
+     invoke-interface {v0}, Landroid/content/SharedPreferences;->edit()Landroid/content/SharedPreferences$Editor;
+ 
+     move-result-object v0
+ 
+     const-string v1, "CACHE_KEY_CTC_LEAK_CHANNELS"
+ 
+     invoke-interface {v0, v1, p1}, Landroid/content/SharedPreferences$Editor;->putBoolean(Ljava/lang/String;Z)Landroid/content/SharedPreferences$Editor;
+ 
+     move-result-object p1
+ 
+     invoke-interface {p1}, Landroid/content/SharedPreferences$Editor;->apply()V
+ 
+     return-void
+ .end method
+ 
+ .method public getImageSpoiler()Z
+     .locals 3
+ 
+     iget-object v0, p0, Lcom/discord/stores/StoreUserSettings;->prefs:Landroid/content/SharedPreferences;
+ 
+     const-string v1, "CACHE_KEY_CTC_IMAGE_SPOILER"
+ 
+     const/4 v2, 0x0
+ 
+     invoke-interface {v0, v1, v2}, Landroid/content/SharedPreferences;->getBoolean(Ljava/lang/String;Z)Z
+ 
+     move-result v0
+ 
+     return v0
+ .end method
+ 
+ .method public setImageSpoiler(Z)V
+     .locals 2
+ 
+     iget-object v0, p0, Lcom/discord/stores/StoreUserSettings;->prefs:Landroid/content/SharedPreferences;
+ 
+     invoke-interface {v0}, Landroid/content/SharedPreferences;->edit()Landroid/content/SharedPreferences$Editor;
+ 
+     move-result-object v0
+ 
+     const-string v1, "CACHE_KEY_CTC_IMAGE_SPOILER"
+ 
+     invoke-interface {v0, v1, p1}, Landroid/content/SharedPreferences$Editor;->putBoolean(Ljava/lang/String;Z)Landroid/content/SharedPreferences$Editor;
+ 
+     move-result-object p1
+ 
+     invoke-interface {p1}, Landroid/content/SharedPreferences$Editor;->apply()V
+ 
+     return-void
+ .end method
+ 
+ 
+ .method public getNoDelete()Z
+     .locals 3
+ 
+     iget-object v0, p0, Lcom/discord/stores/StoreUserSettings;->prefs:Landroid/content/SharedPreferences;
+ 
+     const-string v1, "CACHE_KEY_CTC_NO_DELETE"
+ 
+     const/4 v2, 0x0
+ 
+     invoke-interface {v0, v1, v2}, Landroid/content/SharedPreferences;->getBoolean(Ljava/lang/String;Z)Z
+ 
+     move-result v0
+ 
+     return v0
+ .end method
+ 
+ .method public setNoDelete(Z)V
+     .locals 2
+ 
+     iget-object v0, p0, Lcom/discord/stores/StoreUserSettings;->prefs:Landroid/content/SharedPreferences;
+ 
+     invoke-interface {v0}, Landroid/content/SharedPreferences;->edit()Landroid/content/SharedPreferences$Editor;
+ 
+     move-result-object v0
+ 
+     const-string v1, "CACHE_KEY_CTC_NO_DELETE"
+ 
+     invoke-interface {v0, v1, p1}, Landroid/content/SharedPreferences$Editor;->putBoolean(Ljava/lang/String;Z)Landroid/content/SharedPreferences$Editor;
+ 
+     move-result-object p1
+ 
+     invoke-interface {p1}, Landroid/content/SharedPreferences$Editor;->apply()V
+ 
+     return-void
+ .end method
+ 
+ .method public getShowTyping()Z
+     .locals 3
+ 
+     iget-object v0, p0, Lcom/discord/stores/StoreUserSettings;->prefs:Landroid/content/SharedPreferences;
+ 
+     const-string v1, "CACHE_KEY_CTC_SHOW_TYPING"
+ 
+     const/4 v2, 0x1
+ 
+     invoke-interface {v0, v1, v2}, Landroid/content/SharedPreferences;->getBoolean(Ljava/lang/String;Z)Z
+ 
+     move-result v0
+ 
+     return v0
+ .end method
+ 
+ .method public setShowTyping(Z)V
+     .locals 2
+ 
+     iget-object v0, p0, Lcom/discord/stores/StoreUserSettings;->prefs:Landroid/content/SharedPreferences;
+ 
+     invoke-interface {v0}, Landroid/content/SharedPreferences;->edit()Landroid/content/SharedPreferences$Editor;
+ 
+     move-result-object v0
+ 
+     const-string v1, "CACHE_KEY_CTC_SHOW_TYPING"
+ 
+     invoke-interface {v0, v1, p1}, Landroid/content/SharedPreferences$Editor;->putBoolean(Ljava/lang/String;Z)Landroid/content/SharedPreferences$Editor;
+ 
+     move-result-object p1
+ 
+     invoke-interface {p1}, Landroid/content/SharedPreferences$Editor;->apply()V
+ 
+     return-void
+ .end method
+ 
+ 
+ .method public getStoredToken()Ljava/lang/String;
+     .locals 3
+ 
+     iget-object v0, p0, Lcom/discord/stores/StoreAuthentication;->prefs:Landroid/content/SharedPreferences;
+ 
+     const-string v1, "none"
+ 
+     const-string v2, "STORE_AUTHED_TOKEN"
+ 
+     invoke-interface {v0, v2, v1}, Landroid/content/SharedPreferences;->getString(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+ 
+     move-result-object v0
+ 
+     return-object v0
+ .end method
+ 
+ 
+ .method public setStoredToken(Ljava/lang/String;)V
+     .locals 2
+ 
+     iget-object v0, p0, Lcom/discord/stores/StoreAuthentication;->prefs:Landroid/content/SharedPreferences;
+ 
+     invoke-interface {v0}, Landroid/content/SharedPreferences;->edit()Landroid/content/SharedPreferences$Editor;
+ 
+     move-result-object v0
+ 
+     const-string v1, "STORE_AUTHED_TOKEN"
+ 
+     invoke-interface {v0, v1, p1}, Landroid/content/SharedPreferences$Editor;->putString(Ljava/lang/String;Ljava/lang/String;)Landroid/content/SharedPreferences$Editor;
+ 
+     move-result-object p1
+ 
+     invoke-interface {p1}, Landroid/content/SharedPreferences$Editor;->apply()V
+ 
+     return-void
+ .end method
+ 
+ .method public getAccountToken(Ljava/lang/String;)Ljava/lang/String;
+     .locals 3
+ 
+     const-string v2, "STORE_AUTHED_TOKEN_CTC_USER_"
+ 
+     invoke-virtual {p1}, Ljava/lang/String;->toUpperCase()Ljava/lang/String;
+ 
+     move-result-object p1
+ 
+     new-instance v0, Ljava/lang/StringBuilder;
+ 
+     invoke-direct {v0, v2}, Ljava/lang/StringBuilder;-><init>(Ljava/lang/String;)V
+ 
+     invoke-virtual {v0, p1}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
+ 
+     invoke-virtual {v0}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
+ 
+     move-result-object v2
+ 
+     iget-object v0, p0, Lcom/discord/stores/StoreAuthentication;->prefs:Landroid/content/SharedPreferences;
+ 
+     const-string v1, "none"
+ 
+     invoke-interface {v0, v2, v1}, Landroid/content/SharedPreferences;->getString(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+ 
+     move-result-object v0
+ 
+     return-object v0
+ .end method
+ 
+ 
+ .method public setAccountToken(Ljava/lang/String;Ljava/lang/String;)V
+     .locals 2
+ 
+     const-string v1, "STORE_AUTHED_TOKEN_CTC_USER_"
+ 
+     invoke-virtual {p1}, Ljava/lang/String;->toUpperCase()Ljava/lang/String;
+ 
+     move-result-object p1
+ 
+     new-instance v0, Ljava/lang/StringBuilder;
+ 
+     invoke-direct {v0, v1}, Ljava/lang/StringBuilder;-><init>(Ljava/lang/String;)V
+ 
+     invoke-virtual {v0, p1}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
+ 
+     invoke-virtual {v0}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
+ 
+     move-result-object v1
+ 
+     iget-object v0, p0, Lcom/discord/stores/StoreAuthentication;->prefs:Landroid/content/SharedPreferences;
+ 
+     invoke-interface {v0}, Landroid/content/SharedPreferences;->edit()Landroid/content/SharedPreferences$Editor;
+ 
+     move-result-object v0
+ 
+     invoke-interface {v0, v1, p2}, Landroid/content/SharedPreferences$Editor;->putString(Ljava/lang/String;Ljava/lang/String;)Landroid/content/SharedPreferences$Editor;
+ 
+     move-result-object p1
+ 
+     invoke-interface {p1}, Landroid/content/SharedPreferences$Editor;->apply()V
+ 
+     return-void
+ .end method
+ 
  .method private getAdjustedTheme(Ljava/lang/String;)Ljava/lang/String;
      .locals 1
  
diff -crB from/smali/com/discord/utilities/rest/SendUtils$getPart$1$1.smali to/smali/com/discord/utilities/rest/SendUtils$getPart$1$1.smali
*** from/smali/com/discord/utilities/rest/SendUtils$getPart$1$1.smali	2020-11-16 13:22:49.577198273 +0000
--- to/smali/com/discord/utilities/rest/SendUtils$getPart$1$1.smali	2020-11-16 13:57:09.234000134 +0000
***************
*** 46,51 ****
--- 46,85 ----
      return-void
  .end method
  
+ .method public static final interceptFilename(Ljava/lang/String;)Ljava/lang/String;
+     .locals 3
+ 
+     invoke-static {}, Lcom/discord/stores/StoreStream;->getUserSettings()Lcom/discord/stores/StoreUserSettings;
+ 
+     move-result-object v0
+ 
+     invoke-virtual {v0}, Lcom/discord/stores/StoreUserSettings;->getImageSpoiler()Z
+ 
+     move-result v1
+ 
+     if-eqz v1, :cond_1
+ 
+     new-instance v2, Ljava/lang/StringBuilder;
+ 
+     const-string v1, "SPOILER_"
+ 
+     invoke-direct {v2, v1}, Ljava/lang/StringBuilder;-><init>(Ljava/lang/String;)V
+ 
+     invoke-virtual {v2, p0}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
+ 
+     invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
+ 
+     move-result-object p0
+ 
+     # I commented this out and do this in StoreMessages now as this'd only work for a single image
+     # const/4 v1, 0x0
+ 
+     # invoke-virtual {v0, v1}, Lcom/discord/stores/StoreUserSettings;->setImageSpoiler(Z)V
+ 
+     :cond_1
+     return-object p0
+ .end method
+ 
  
  # virtual methods
  .method public final invoke(Lokhttp3/RequestBody;Ljava/lang/String;Landroid/graphics/Bitmap$CompressFormat;)Lcom/discord/utilities/rest/SendUtils$FileUpload;
***************
*** 79,84 ****
--- 113,122 ----
  
      move-result-object v2
  
+     invoke-static {v2}, Lcom/discord/utilities/rest/SendUtils$getPart$1$1;->interceptFilename(Ljava/lang/String;)Ljava/lang/String;
+ 
+     move-result-object v2
+ 
      .line 4
      iget-object p1, p0, Lcom/discord/utilities/rest/SendUtils$getPart$1$1;->this$0:Lcom/discord/utilities/rest/SendUtils$getPart$1;
  
diff -crB from/smali/com/discord/widgets/chat/input/WidgetChatInputEditText$1.smali to/smali/com/discord/widgets/chat/input/WidgetChatInputEditText$1.smali
*** from/smali/com/discord/widgets/chat/input/WidgetChatInputEditText$1.smali	2020-11-16 13:22:49.677198215 +0000
--- to/smali/com/discord/widgets/chat/input/WidgetChatInputEditText$1.smali	2020-11-16 13:57:09.234000134 +0000
***************
*** 59,64 ****
--- 59,74 ----
  
      move-result p1
  
+     invoke-static {}, Lcom/discord/stores/StoreStream;->getUserSettings()Lcom/discord/stores/StoreUserSettings;
+ 
+     move-result-object v0
+ 
+     invoke-virtual {v0}, Lcom/discord/stores/StoreUserSettings;->getShowTyping()Z
+ 
+     move-result v0
+ 
+     if-eqz v0, :cond_1
+ 
      .line 4
      iget-boolean v0, p0, Lcom/discord/widgets/chat/input/WidgetChatInputEditText$1;->empty:Z
  
diff -crB from/smali/com/discord/widgets/chat/input/WidgetChatInputEditText.smali to/smali/com/discord/widgets/chat/input/WidgetChatInputEditText.smali
*** from/smali/com/discord/widgets/chat/input/WidgetChatInputEditText.smali	2020-11-16 13:22:49.677198215 +0000
--- to/smali/com/discord/widgets/chat/input/WidgetChatInputEditText.smali	2020-11-16 14:09:59.478815215 +0000
***************
*** 6,12 ****
  # instance fields
  .field public channelId:J
  
! .field private editText:Lcom/lytefast/flexinput/widget/FlexEditText;
  
  .field private final emptyTextSubject:Lrx/subjects/Subject;
      .annotation system Ldalvik/annotation/Signature;
--- 6,12 ----
  # instance fields
  .field public channelId:J
  
! .field public editText:Lcom/lytefast/flexinput/widget/FlexEditText;
  
  .field private final emptyTextSubject:Lrx/subjects/Subject;
      .annotation system Ldalvik/annotation/Signature;
diff -crB from/smali/com/discord/widgets/chat/input/WidgetChatInputSend.smali to/smali/com/discord/widgets/chat/input/WidgetChatInputSend.smali
*** from/smali/com/discord/widgets/chat/input/WidgetChatInputSend.smali	2020-11-16 13:22:49.681198212 +0000
--- to/smali/com/discord/widgets/chat/input/WidgetChatInputSend.smali	2020-11-16 13:57:09.234000134 +0000
***************
*** 64,69 ****
--- 64,96 ----
      return p0
  .end method
  
+ .method public static final access$SetInput(Lcom/discord/widgets/chat/input/WidgetChatInputSend;Lcom/discord/widgets/chat/input/WidgetChatInputEditText;Ljava/lang/CharSequence;)Z
+     .locals 1
+ 
+     .line 147
+     iget-object v0, p1, Lcom/discord/widgets/chat/input/WidgetChatInputEditText;->editText:Lcom/lytefast/flexinput/widget/FlexEditText;
+ 
+     .line 148
+     invoke-virtual {v0, p2}, Lcom/lytefast/flexinput/widget/FlexEditText;->setText(Ljava/lang/CharSequence;)V
+ 
+     .line 149
+     invoke-virtual {p1}, Lcom/discord/widgets/chat/input/WidgetChatInputEditText;->clearLastTypingEmission()V
+ 
+     .line 150
+     invoke-static {}, Lcom/discord/stores/StoreStream;->getChat()Lcom/discord/stores/StoreChat;
+ 
+     move-result-object p1
+ 
+     const/4 v0, 0x0
+ 
+     .line 152
+     invoke-virtual {p1, v0}, Lcom/discord/stores/StoreChat;->setEditingMessage(Lcom/discord/stores/StoreChat$EditingMessage;)V
+ 
+     const/4 p1, 0x1
+ 
+     return p1
+ .end method
+ 
  .method private final clearInput(Lcom/discord/widgets/chat/input/WidgetChatInputEditText;Lcom/discord/widgets/chat/input/AppFlexInputViewModel;Ljava/lang/Boolean;)Z
      .locals 1
  
diff -crB from/smali/com/discord/widgets/chat/list/InlineMediaView.smali to/smali/com/discord/widgets/chat/list/InlineMediaView.smali
*** from/smali/com/discord/widgets/chat/list/InlineMediaView.smali	2020-11-16 13:22:49.773198158 +0000
--- to/smali/com/discord/widgets/chat/list/InlineMediaView.smali	2020-11-16 13:57:09.234000134 +0000
***************
*** 1256,1261 ****
--- 1256,1271 ----
  
      move-result v1
  
+     invoke-static {}, Lcom/discord/stores/StoreStream;->getUserSettings()Lcom/discord/stores/StoreUserSettings;
+ 
+     move-result-object v7
+ 
+     invoke-virtual {v7}, Lcom/discord/stores/StoreUserSettings;->getAutoplayGifs()Z
+ 
+     move-result v7
+ 
+     and-int v1, v1, v7
+ 
      if-eqz v1, :cond_6
  
      const/4 v7, 0x1