Add tootctl accounts reset-relationships (#10483)
				
					
				
			* Add `tootctl accounts reset` * Rename reset to reset-relationships * Improve command description
This commit is contained in:
		
				
					committed by
					
						 Eugen Rochko
						Eugen Rochko
					
				
			
			
				
	
			
			
			
						parent
						
							cb71c95e22
						
					
				
				
					commit
					08ba69b538
				
			| @@ -367,6 +367,73 @@ module Mastodon | |||||||
|       say("OK, unfollowed target from #{processed} accounts, skipped #{failed}", :green) |       say("OK, unfollowed target from #{processed} accounts, skipped #{failed}", :green) | ||||||
|     end |     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 :number, type: :numeric, aliases: [:n] | ||||||
|     option :all, type: :boolean |     option :all, type: :boolean | ||||||
|     desc 'approve [USERNAME]', 'Approve pending accounts' |     desc 'approve [USERNAME]', 'Approve pending accounts' | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user