App-bsky
view release on metacpan or search on metacpan
lib/App/bsky.pm view on Meta::CPAN
);
$self->say( '%s', ' ' x ( $depth * 4 ) );
}
method cmd_timeline (@args) {
GetOptionsFromArray( \@args, 'json!' => \my $json );
#~ use Data::Dump;
my $tl = $bsky->feed_getTimeline();
#$algorithm //= (), $limit //= (), $cursor //= ()
if ($json) {
$self->say( JSON::Tiny::to_json [ map { $_->_raw } @{ $tl->{feed} } ] );
}
else { # TODO: filter where $type ne 'app.bsky.feed.post'
for my $post ( @{ $tl->{feed} } ) {
my $depth = 0;
if ( $post->reply ) {
_dump_post( $self, $depth, $post->reply->parent );
$depth = 1;
}
lib/App/bsky.pm view on Meta::CPAN
$self->say( $res->{uri}->as_string );
}
method cmd_unlike ($uri) { # can take the post uri or the like uri
$bsky->unlike($uri);
}
method cmd_likes ( $uri, @args ) {
GetOptionsFromArray( \@args, 'json!' => \my $json );
my @likes;
my $cursor = ();
do {
my $likes = $bsky->feed_getLikes( uri => $uri, limit => 100, cursor => $cursor );
push @likes, @{ $likes->{likes} };
$cursor = $likes->{cursor};
} while ($cursor);
if ($json) {
$self->say( JSON::Tiny::to_json [ map { $_->_raw } @likes ] );
}
else {
$self->say(
'%s%s%s%s (%s)',
color('red'), $_->actor->handle->_raw,
color('reset'), defined $_->actor->displayName ? ' [' . $_->actor->displayName . ']' : '',
$_->createdAt->_raw
) for @likes;
lib/App/bsky.pm view on Meta::CPAN
method cmd_repost ($uri) {
my $res = $bsky->repost($uri);
$res // return;
$self->say( $res->{uri}->as_string );
}
method cmd_reposts ( $uri, @args ) {
GetOptionsFromArray( \@args, 'json!' => \my $json );
my @reposts;
my $cursor = ();
do {
my $reposts = $bsky->feed_getRepostedBy( uri => $uri, limit => 100, cursor => $cursor );
push @reposts, @{ $reposts->{repostedBy} };
$cursor = $reposts->{cursor};
} while ($cursor);
if ($json) {
$self->say( JSON::Tiny::to_json [ map { $_->_raw } @reposts ] );
}
else {
$self->say( '%s%s%s%s', color('red'), $_->handle->_raw, color('reset'), defined $_->displayName ? ' [' . $_->displayName . ']' : '' )
for @reposts;
}
scalar @reposts;
}
lib/App/bsky.pm view on Meta::CPAN
method cmd_unfollow ($actor) { # takes handle or did
my $res = $bsky->unfollow($actor);
# Sometimes, the backend hasn't caught up yet and actor_getProfile( ... ) has bad data
$self->say( $res->{viewer}{following} // 'okay' );
}
method cmd_follows (@args) {
GetOptionsFromArray( \@args, 'json!' => \my $json, 'handle|H=s' => \my $handle );
my @follows;
my $cursor = ();
do {
my $follows = $bsky->graph_getFollows( actor => $handle // $config->{session}{handle}, limit => 100, cursor => $cursor );
push @follows, @{ $follows->{follows} };
$cursor = $follows->{cursor};
} while ($cursor);
if ($json) {
$self->say( JSON::Tiny::to_json [ map { $_->_raw } @follows ] );
}
else {
for my $follow (@follows) {
$self->say(
sprintf '%s%s%s%s %s%s%s',
color('red'), $follow->handle->_raw, color('reset'), defined $follow->displayName ? ' [' . $follow->displayName . ']' : '',
color('blue'), $follow->did->_raw, color('reset')
);
}
}
return scalar @follows;
}
method cmd_followers (@args) {
GetOptionsFromArray( \@args, 'json!' => \my $json, 'handle|H=s' => \my $handle );
my @followers;
my $cursor = ();
do {
my $followers = $bsky->graph_getFollowers( actor => $handle // $config->{session}{handle}, limit => 100, cursor => $cursor );
if ( defined $followers->{followers} ) {
push @followers, @{ $followers->{followers} };
$cursor = $followers->{cursor};
}
} while ($cursor);
if ($json) {
$self->say( JSON::Tiny::to_json [ map { $_->_raw } @followers ] );
}
else {
for my $follower (@followers) {
$self->say(
sprintf '%s%s%s%s %s%s%s',
color('red'), $follower->handle->_raw,
color('reset'), defined $follower->displayName ? ' [' . $follower->displayName . ']' : '',
color('blue'), $follower->did->_raw, color('reset')
lib/App/bsky.pm view on Meta::CPAN
}
method cmd_unblock ($actor) { # takes handle or did
my $res = $bsky->unblock($actor);
defined $res ? $self->say( $res->{viewer}{blocking} ) : 0;
}
method cmd_blocks (@args) {
GetOptionsFromArray( \@args, 'json!' => \my $json );
my @blocks;
my $cursor = ();
do {
my $follows = $bsky->graph_getBlocks( limit => 100, cursor => $cursor );
push @blocks, @{ $follows->{blocks} };
$cursor = $follows->{cursor};
} while ($cursor);
if ($json) {
$self->say( JSON::Tiny::to_json [ map { $_->_raw } @blocks ] );
}
else {
for my $follow (@blocks) {
$self->say(
sprintf '%s%s%s%s %s%s%s',
color('red'), $follow->handle->_raw, color('reset'), defined $follow->displayName ? ' [' . $follow->displayName . ']' : '',
color('blue'), $follow->did->_raw, color('reset')
);
lib/App/bsky.pm view on Meta::CPAN
color('red') .
$ident .
color('reset') . ' [' .
$config->{session}{did} . ']' :
'Failed to log in as ' . $ident );
}
method cmd_notifications (@args) {
GetOptionsFromArray( \@args, 'all|a' => \my $all, 'json!' => \my $json );
my @notes;
my $cursor = ();
do {
my $notes = $bsky->notification_listNotifications( limit => 100, cursor => $cursor );
if ( defined $notes->{notifications} ) {
push @notes, @{ $notes->{notifications} };
$cursor = $all && $notes->{cursor} ? $notes->{cursor} : ();
}
} while ($cursor);
if ($json) {
$self->say( JSON::Tiny::to_json [ map { $_->_raw } @notes ] );
}
else {
for my $note (@notes) {
$self->say(
'%s%s%s%s %s', color('red'), $note->author->handle->_raw,
color('reset'),
defined $note->author->displayName ? ' [' . $note->author->displayName . ']' : '',
$note->author->did->_raw
( run in 0.231 second using v1.01-cache-2.11-cpan-4d50c553e7e )