Refactor complete for the most part, excluding any oopsies.
This commit is contained in:
+33
-12
@@ -2811,7 +2811,7 @@ Just type to talk!
|
|||||||
Lists available timelines to view.
|
Lists available timelines to view.
|
||||||
|
|
||||||
/timeline <name>
|
/timeline <name>
|
||||||
Switch to timeline (home, public, federated, notifications, etc.)
|
Switch to timeline (home, local, federated, notifications, etc.)
|
||||||
|
|
||||||
/visibility [level]
|
/visibility [level]
|
||||||
Show current post visibility or set to: public, unlisted, private, direct
|
Show current post visibility or set to: public, unlisted, private, direct
|
||||||
@@ -2863,6 +2863,25 @@ EOF
|
|||||||
&linein("PRESS RETURN/ENTER>");
|
&linein("PRESS RETURN/ENTER>");
|
||||||
print <<"EOF";
|
print <<"EOF";
|
||||||
|
|
||||||
|
*** LISTS (FEDIVERSE PRIVACY-AWARE) ***
|
||||||
|
|
||||||
|
/lists - show your lists
|
||||||
|
/liston listname - add list to your timeline
|
||||||
|
/listoff listname - remove list from timeline
|
||||||
|
/again @me/listname - view posts from specific list
|
||||||
|
|
||||||
|
LIST MANAGEMENT:
|
||||||
|
/withlist listname create public - create new public list
|
||||||
|
/withlist listname create private - create new private list
|
||||||
|
/withlist listname delete - delete list (with confirmation)
|
||||||
|
/withlist listname add username - add user to list
|
||||||
|
/withlist listname delete username - remove user from list
|
||||||
|
/withlist listname desc "new description" - update description
|
||||||
|
/withlist listname name "new title" - rename list
|
||||||
|
|
||||||
|
FEDIVERSE PRIVACY: Lists respect ActivityPub privacy principles.
|
||||||
|
You can only access and manage your own lists (not other users' lists).
|
||||||
|
|
||||||
*** CONFIGURATION ***
|
*** CONFIGURATION ***
|
||||||
|
|
||||||
Use /set to turn on options or set them at runtime.
|
Use /set to turn on options or set them at runtime.
|
||||||
@@ -2876,13 +2895,15 @@ see the documentation.
|
|||||||
|
|
||||||
*** ABOUT TTYverse ***
|
*** ABOUT TTYverse ***
|
||||||
|
|
||||||
TTYverse $TTYverse_VERSION - Fediverse client derived from TTYtter
|
TTYverse $TTYverse_VERSION - Command-line fediverse client
|
||||||
Original TTYtter by Cameron Kaiser
|
Fediverse-only client for Mastodon, Pleroma, GoToSocial and other ActivityPub servers
|
||||||
|
Derived from TTYtter by Cameron Kaiser
|
||||||
|
|
||||||
This software is offered AS IS, with no guarantees.
|
This software is offered AS IS, with no guarantees.
|
||||||
It is not endorsed by any fediverse server operators or developers.
|
It is not endorsed by any fediverse server operators or developers.
|
||||||
|
|
||||||
Documentation: http://www.floodgap.com/software/ttytter/
|
Supports: Mastodon, Pleroma, GoToSocial, and other ActivityPub-compatible servers
|
||||||
|
Privacy-focused: Respects fediverse privacy principles (own lists only, etc.)
|
||||||
Suggestions: mention \@stormux\@social.stormux.org
|
Suggestions: mention \@stormux\@social.stormux.org
|
||||||
|
|
||||||
EOF
|
EOF
|
||||||
@@ -7575,7 +7596,7 @@ sub get_post {
|
|||||||
$w->{'tag'}->{'type'},
|
$w->{'tag'}->{'type'},
|
||||||
$w->{'tag'}->{'payload'},
|
$w->{'tag'}->{'payload'},
|
||||||
$w->{'reblogs_count'},
|
$w->{'reblogs_count'},
|
||||||
$w->{'user'}->{'screen_name'}, $w->{'created_at'},
|
$w->{'user'}->{'username'}, $w->{'created_at'},
|
||||||
$l) = split(/\s/, $k, 17);
|
$l) = split(/\s/, $k, 17);
|
||||||
($w->{'source'}, $k) = split(/\|/, $l, 2);
|
($w->{'source'}, $k) = split(/\|/, $l, 2);
|
||||||
$w->{'text'} = pack("H*", $k);
|
$w->{'text'} = pack("H*", $k);
|
||||||
@@ -8715,7 +8736,7 @@ sub normalizejson {
|
|||||||
|
|
||||||
# Set booster as the main user (who performed the boost action)
|
# Set booster as the main user (who performed the boost action)
|
||||||
$boost_user = {
|
$boost_user = {
|
||||||
'screen_name' => $booster,
|
'username' => $booster,
|
||||||
'acct' => $booster
|
'acct' => $booster
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
@@ -8964,13 +8985,13 @@ sub map_single_status {
|
|||||||
$status->{'favorite_count'} = $status->{'favourites_count'} if exists($status->{'favourites_count'});
|
$status->{'favorite_count'} = $status->{'favourites_count'} if exists($status->{'favourites_count'});
|
||||||
$status->{'in_reply_to_status_id_str'} = $status->{'in_reply_to_id'} if exists($status->{'in_reply_to_id'});
|
$status->{'in_reply_to_status_id_str'} = $status->{'in_reply_to_id'} if exists($status->{'in_reply_to_id'});
|
||||||
|
|
||||||
# User/Account field mappings
|
# User/Account field mappings - native fediverse fields preferred
|
||||||
if (exists($status->{'user'}) && ref($status->{'user'}) eq 'HASH') {
|
if (exists($status->{'user'}) && ref($status->{'user'}) eq 'HASH') {
|
||||||
my $user = $status->{'user'};
|
my $user = $status->{'user'};
|
||||||
$user->{'screen_name'} = $user->{'username'} if exists($user->{'username'});
|
# Map display fields only for compatibility with display functions
|
||||||
$user->{'name'} = $user->{'display_name'} if exists($user->{'display_name'});
|
$user->{'name'} = $user->{'display_name'} if exists($user->{'display_name'});
|
||||||
$user->{'profile_image_url'} = $user->{'avatar'} if exists($user->{'avatar'});
|
$user->{'profile_image_url'} = $user->{'avatar'} if exists($user->{'avatar'});
|
||||||
# Keep acct field for full handle (username@domain.com)
|
# Native fediverse fields: username, acct (username@domain.com)
|
||||||
}
|
}
|
||||||
|
|
||||||
# Recursively map reblogged status - with depth limit to prevent infinite recursion
|
# Recursively map reblogged status - with depth limit to prevent infinite recursion
|
||||||
@@ -8985,14 +9006,14 @@ sub map_single_status {
|
|||||||
sub map_user_object {
|
sub map_user_object {
|
||||||
my $user = shift;
|
my $user = shift;
|
||||||
|
|
||||||
# Map Mastodon user fields to fediverse-compatible fields
|
# Map display-only fields for legacy compatibility
|
||||||
$user->{'screen_name'} = $user->{'username'} if exists($user->{'username'});
|
|
||||||
$user->{'name'} = $user->{'display_name'} if exists($user->{'display_name'});
|
$user->{'name'} = $user->{'display_name'} if exists($user->{'display_name'});
|
||||||
$user->{'profile_image_url'} = $user->{'avatar'} if exists($user->{'avatar'});
|
$user->{'profile_image_url'} = $user->{'avatar'} if exists($user->{'avatar'});
|
||||||
# Keep acct field for full handle (username@domain.com)
|
# Count fields use native names already
|
||||||
$user->{'followers_count'} = $user->{'followers_count'} if exists($user->{'followers_count'});
|
$user->{'followers_count'} = $user->{'followers_count'} if exists($user->{'followers_count'});
|
||||||
$user->{'friends_count'} = $user->{'following_count'} if exists($user->{'following_count'});
|
$user->{'friends_count'} = $user->{'following_count'} if exists($user->{'following_count'});
|
||||||
$user->{'statuses_count'} = $user->{'statuses_count'} if exists($user->{'statuses_count'});
|
$user->{'statuses_count'} = $user->{'statuses_count'} if exists($user->{'statuses_count'});
|
||||||
|
# Use native fediverse username/acct fields directly
|
||||||
|
|
||||||
return $user;
|
return $user;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user