38 lines
833 B
Ruby
38 lines
833 B
Ruby
# frozen_string_literal: true
|
|
|
|
require 'similar_text'
|
|
|
|
class StatusSimilarityService < BaseService
|
|
def call?(status_text = "", account_id = nil)
|
|
@status_text = status_text
|
|
@account_id = account_id
|
|
|
|
# Not alike if no status_text or no account
|
|
# : todo : come up with solution for same image spamming
|
|
return false if @status_text.length == 0 || @account_id.nil?
|
|
|
|
alike?
|
|
end
|
|
|
|
private
|
|
|
|
def alike?
|
|
last_status_text = nil
|
|
key = "last_status_from_account:#{@account_id}"
|
|
|
|
Redis.current.with do |conn|
|
|
last_status_text = conn.get(key) || ""
|
|
conn.setex(key, 300, @status_text)
|
|
end
|
|
|
|
if last_status_text.nil? || last_status_text.empty? || last_status_text.length == 0
|
|
return false
|
|
end
|
|
|
|
likeness = last_status_text.similar(@status_text)
|
|
|
|
likeness > 85
|
|
end
|
|
|
|
end
|