about summary refs log tree commit diff
path: root/app/services/post_status_service.rb
diff options
context:
space:
mode:
Diffstat (limited to 'app/services/post_status_service.rb')
-rw-r--r--app/services/post_status_service.rb5
1 files changed, 5 insertions, 0 deletions
diff --git a/app/services/post_status_service.rb b/app/services/post_status_service.rb
index dc1a3bcdc..2fe1f3e56 100644
--- a/app/services/post_status_service.rb
+++ b/app/services/post_status_service.rb
@@ -55,6 +55,7 @@ class PostStatusService < BaseService
 
     raise Mastodon::LengthValidationError, I18n.t('statuses.replies_rejected') if recipient_rejects_replies?
     raise Mastodon::LengthValidationError, I18n.t('statuses.kicked') if kicked?
+    raise Mastodon::LengthValidationError, I18n.t('statuses.no_body') if has_only_mentions?
 
     return idempotency_duplicate if idempotency_given? && idempotency_duplicate?
 
@@ -98,6 +99,10 @@ class PostStatusService < BaseService
     @in_reply_to.present? && ConversationKick.where(account_id: @account.id, conversation_id: @in_reply_to.conversation_id).exists?
   end
 
+  def has_only_mentions?
+    @options[:nomentions].blank? && @text.match?(/^(?:\s*@((#{Account::USERNAME_RE})(?:@[a-z0-9\.\-]+[a-z0-9]+)?))+$/i)
+  end
+
   def mark_recipient_known
     @in_reply_to.account.mark_known! unless !Setting.auto_mark_known || @in_reply_to.account.known?
   end