Add `tootctl accounts reset-relationships` (#10483)
* Add `tootctl accounts reset` * Rename reset to reset-relationships * Improve command descriptionpull/983/head
parent
cb71c95e22
commit
08ba69b538
|
@ -367,6 +367,73 @@ module Mastodon
|
|||
say("OK, unfollowed target from #{processed} accounts, skipped #{failed}", :green)
|
||||
end
|
||||
|
||||
option :follows, type: :boolean, default: false
|
||||
option :followers, type: :boolean, default: false
|
||||
desc 'reset-relationships USERNAME', 'Reset all follows and/or followers for a user'
|
||||
long_desc <<-LONG_DESC
|
||||
Reset all follows and/or followers for a user specified by USERNAME.
|
||||
|
||||
With the --follows option, the command unfollows everyone that the account follows,
|
||||
and then re-follows the users that would be followed by a brand new account.
|
||||
|
||||
With the --followers option, the command removes all followers of the account.
|
||||
LONG_DESC
|
||||
def reset_relationships(username)
|
||||
unless options[:follows] || options[:followers]
|
||||
say('Please specify either --follows or --followers, or both', :red)
|
||||
exit(1)
|
||||
end
|
||||
|
||||
account = Account.find_local(username)
|
||||
|
||||
if account.nil?
|
||||
say('No user with such username', :red)
|
||||
exit(1)
|
||||
end
|
||||
|
||||
if options[:follows]
|
||||
processed = 0
|
||||
failed = 0
|
||||
|
||||
say("Unfollowing #{account.username}'s followees, this might take a while...")
|
||||
|
||||
Account.where(id: ::Follow.where(account: account).select(:target_account_id)).find_each do |target_account|
|
||||
begin
|
||||
UnfollowService.new.call(account, target_account)
|
||||
processed += 1
|
||||
say('.', :green, false)
|
||||
rescue StandardError
|
||||
failed += 1
|
||||
say('.', :red, false)
|
||||
end
|
||||
end
|
||||
|
||||
BootstrapTimelineWorker.perform_async(account.id)
|
||||
|
||||
say("OK, unfollowed #{processed} followees, skipped #{failed}", :green)
|
||||
end
|
||||
|
||||
if options[:followers]
|
||||
processed = 0
|
||||
failed = 0
|
||||
|
||||
say("Removing #{account.username}'s followers, this might take a while...")
|
||||
|
||||
Account.where(id: ::Follow.where(target_account: account).select(:account_id)).find_each do |target_account|
|
||||
begin
|
||||
UnfollowService.new.call(target_account, account)
|
||||
processed += 1
|
||||
say('.', :green, false)
|
||||
rescue StandardError
|
||||
failed += 1
|
||||
say('.', :red, false)
|
||||
end
|
||||
end
|
||||
|
||||
say("OK, removed #{processed} followers, skipped #{failed}", :green)
|
||||
end
|
||||
end
|
||||
|
||||
option :number, type: :numeric, aliases: [:n]
|
||||
option :all, type: :boolean
|
||||
desc 'approve [USERNAME]', 'Approve pending accounts'
|
||||
|
|
Loading…
Reference in New Issue