Add tootctl accounts reset-relationships (#10483)
				
					
				
			* Add `tootctl accounts reset` * Rename reset to reset-relationships * Improve command description
This commit is contained in:
		
							parent
							
								
									cb71c95e22
								
							
						
					
					
						commit
						08ba69b538
					
				
					 1 changed files with 67 additions and 0 deletions
				
			
		| 
						 | 
				
			
			@ -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…
	
	Add table
		
		Reference in a new issue