|
|
|
@ -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' |
|
|
|
|