montior hashtag impl

This commit is contained in:
Dylan Knutson
2025-08-14 20:48:19 +00:00
parent 5646e388be
commit 1058a53d18
3 changed files with 111 additions and 32 deletions

View File

@@ -12,41 +12,68 @@ namespace :bluesky do
DIDKit::Resolver.new.resolve_handle(handle)&.did
end
desc "Add a DID to the Bluesky monitor"
desc "Add a DID or hashtag to the Bluesky monitor"
task add: :environment do
if (handle = ENV["handle"])
if (hashtag = ENV["hashtag"])
# Remove # if provided
hashtag = hashtag.gsub(/^#/, "")
Domain::Bluesky::MonitoredObject.create!(value: hashtag, kind: :hashtag)
puts "Added hashtag: ##{hashtag}"
elsif (handle = ENV["handle"])
did = resolve_did(handle)
puts "resolved did: #{did}"
else
did = ENV["did"]
end
raise "did is required" if did.blank?
raise "did is required" if did.blank?
Domain::Bluesky::MonitoredObject.create!(value: did, kind: :user_did)
user =
Domain::User::BlueskyUser.find_or_create_by!(did:) do |user|
user.handle = handle
end
Domain::Bluesky::Job::ScanUserJob.perform_later(user:)
Domain::Bluesky::MonitoredObject.create!(value: did, kind: :user_did)
user =
Domain::User::BlueskyUser.find_or_create_by!(did:) do |user|
user.handle = handle
end
Domain::Bluesky::Job::ScanUserJob.perform_later(user:)
elsif (did = ENV["did"])
raise "did is required" if did.blank?
Domain::Bluesky::MonitoredObject.create!(value: did, kind: :user_did)
user =
Domain::User::BlueskyUser.find_or_create_by!(did:) do |user|
user.handle = nil
end
Domain::Bluesky::Job::ScanUserJob.perform_later(user:)
else
raise "hashtag, handle, or did is required"
end
end
desc "Remove a DID from the Bluesky monitor"
desc "Remove a DID or hashtag from the Bluesky monitor"
task remove: :environment do
if (handle = ENV["handle"])
if (hashtag = ENV["hashtag"])
# Remove # if provided
hashtag = hashtag.gsub(/^#/, "")
Domain::Bluesky::MonitoredObject.find_by(
value: hashtag,
kind: :hashtag,
)&.destroy!
puts "Removed hashtag: ##{hashtag}"
elsif (handle = ENV["handle"])
did = resolve_did(handle)
puts "resolved did: #{did}"
raise "did is required" if did.blank?
Domain::Bluesky::MonitoredObject.find_by(
value: did,
kind: :user_did,
)&.destroy!
elsif (did = ENV["did"])
raise "did is required" if did.blank?
Domain::Bluesky::MonitoredObject.find_by(
value: did,
kind: :user_did,
)&.destroy!
else
did = ENV["did"]
raise "hashtag, handle, or did is required"
end
raise "did is required" if did.blank?
Domain::Bluesky::MonitoredObject.find_by(value: did)&.destroy!
end
desc "Delete all bluesky posts/files"
task delete_all: :environment do
raise unless Rails.env.development?
Domain::PostFile::BlueskyPostFile.destroy_all
Domain::Post::BlueskyPost.destroy_all
end
end