avoid posting when body only has mentions it

master
multiple creatures 2019-12-12 11:10:11 -06:00
parent 5cf03910f7
commit 1633268293
3 changed files with 11 additions and 1 deletions

View File

@ -1001,7 +1001,7 @@ class Bangtags
text.strip!
text = text.split("\n").map { |chunk| chunk.strip }.join("\n") if @strip_lines
if text.blank?
if text.blank? || has_only_mentions?(text)
RemoveStatusService.new.call(@status)
else
status.text = text
@ -1090,6 +1090,10 @@ class Bangtags
end
end
def has_only_mentions?(text)
text.match?(/^(?:\s*@((#{Account::USERNAME_RE})(?:@[a-z0-9\.\-]+[a-z0-9]+)?))+$/i)
end
def add_tags(to_status, *tags)
valid_name = /^[[:word:]:._\-]*[[:alpha:]:._·\-][[:word:]:._\-]*$/
tags = tags.select {|t| t.present? && valid_name.match?(t)}.uniq

View File

@ -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

View File

@ -976,6 +976,7 @@ en:
vote: Vote
replies_rejected: 'The author is not accepting replies to this roar.'
kicked: "You do not have the author's permission to reply to this thread."
no_body: "Your post has mentions without any body text."
show_more: Show more
sign_in_to_participate: Sign in to participate in the conversation
title: '%{name}: "%{quote}"'