summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorEugen Rochko <eugen@zeonfederated.com>2019-01-01 16:24:26 +0100
committerGitHub <noreply@github.com>2019-01-01 16:24:26 +0100
commited12619985f92a3ae698605a70a0d22c507a837b (patch)
tree2e5642f2021f6873cc656eda8e8d276bdda92dab /lib
parentf04f3ee4368afa0ffcd392acab4d9d7e24f12ac7 (diff)
Add tootctl accounts follow ACCT (#9414)
Fix #9369
Diffstat (limited to 'lib')
-rw-r--r--lib/mastodon/accounts_cli.rb60
1 files changed, 60 insertions, 0 deletions
diff --git a/lib/mastodon/accounts_cli.rb b/lib/mastodon/accounts_cli.rb
index bbda244eade..24fb67991a8 100644
--- a/lib/mastodon/accounts_cli.rb
+++ b/lib/mastodon/accounts_cli.rb
@@ -300,6 +300,66 @@ module Mastodon
end
end
+ desc 'follow ACCT', 'Make all local accounts follow account specified by ACCT'
+ long_desc <<-LONG_DESC
+ Make all local accounts follow an account specified by ACCT. ACCT can be
+ a simple username, in case of a local user. It can also be in the format
+ username@domain, in case of a remote user.
+ LONG_DESC
+ def follow(acct)
+ target_account = ResolveAccountService.new.call(acct)
+ processed = 0
+ failed = 0
+
+ if target_account.nil?
+ say("Target account (#{acct}) could not be resolved", :red)
+ exit(1)
+ end
+
+ Account.local.without_suspended.find_each do |account|
+ begin
+ FollowService.new.call(account, target_account)
+ processed += 1
+ say('.', :green, false)
+ rescue StandardError
+ failed += 1
+ say('.', :red, false)
+ end
+ end
+
+ say("OK, followed target from #{processed} accounts, skipped #{failed}", :green)
+ end
+
+ desc 'unfollow ACCT', 'Make all local accounts unfollow account specified by ACCT'
+ long_desc <<-LONG_DESC
+ Make all local accounts unfollow an account specified by ACCT. ACCT can be
+ a simple username, in case of a local user. It can also be in the format
+ username@domain, in case of a remote user.
+ LONG_DESC
+ def unfollow(acct)
+ target_account = Account.find_remote(*acct.split('@'))
+ processed = 0
+ failed = 0
+
+ if target_account.nil?
+ say("Target account (#{acct}) was not found", :red)
+ exit(1)
+ end
+
+ target_account.followers.local.find_each do |account|
+ begin
+ UnfollowService.new.call(account, target_account)
+ processed += 1
+ say('.', :green, false)
+ rescue StandardError
+ failed += 1
+ say('.', :red, false)
+ end
+ end
+
+ say("OK, unfollowed target from #{processed} accounts, skipped #{failed}", :green)
+ end
+
private
def rotate_keys_for_account(account, delay = 0)