Files
redux-scraper/rake/bluesky.rake
2025-08-14 21:13:37 +00:00

80 lines
2.4 KiB
Ruby

# typed: true
# frozen_string_literal: true
T.bind(self, T.all(Rake::DSL, Object))
namespace :bluesky do
desc "Start the Bluesky monitor"
task monitor: :environment do
Tasks::Bluesky::Monitor.new.run
end
def resolve_did(handle)
DIDKit::Resolver.new.resolve_handle(handle)&.did
end
desc "Add a DID or hashtag to the Bluesky monitor"
task add: :environment do
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}"
raise "did is required" if did.blank?
user =
Domain::User::BlueskyUser.find_or_create_by!(did:) do |user|
user.handle = handle
end
Domain::Bluesky::Job::ScanUserJob.perform_later(user:)
Domain::Bluesky::Job::ScanPostsJob.perform_later(user:)
Domain::Bluesky::MonitoredObject.create!(value: did, kind: :user_did)
elsif (did = ENV["did"])
raise "did is required" if did.blank?
user =
Domain::User::BlueskyUser.find_or_create_by!(did:) do |user|
user.handle = nil
end
Domain::Bluesky::Job::ScanUserJob.perform_later(user:)
Domain::Bluesky::Job::ScanPostsJob.perform_later(user:)
Domain::Bluesky::MonitoredObject.create!(value: did, kind: :user_did)
else
raise "hashtag, handle, or did is required"
end
end
desc "Remove a DID or hashtag from the Bluesky monitor"
task remove: :environment do
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
raise "hashtag, handle, or did is required"
end
end
end