Changeset 1401

Show
Ignore:
Timestamp:
03/08/07 20:13:52 (2 years ago)
Author:
jm3
Message:

preliminary share / invite peeps-ness working

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • feedmelinks/lib/FeedMeLinks/Bot.pm

    r1394 r1401  
    4343        if( ! $fml_username ) { 
    4444         if( $sessions_ref->{ $sender }{ "seen_welcome" } == 0 && !( $message =~ m/validate/ )) { 
    45                         $aim->send_im($sender, h("<b>Hi! I am the Feed Me Links bot!</b>\nType '<b>help</b>' for more info or click <b><a href='$site/set-up/IM?aim=$sender'>activate</a></b> to start adding links.") ); 
     45                        $aim->send_im($sender, h("<b>Hi! I am the Feed Me Links bot!</b>\nType '<b>help</b>' " 
     46                        . " for more info or click <b><a href='$site/set-up/IM?aim=$sender'>activate</a></b> to start adding links.") ); 
    4647                        $sessions_ref->{"$sender"} = build_empty_session( $sender ); 
    4748                        $sessions_ref->{ $sender }{ "seen_welcome" } = 1; 
    4849                } 
    4950        } else { 
    50                 log_mesg( \*LOG, "session", "authenticated session for $sender" ); 
    5151                if( $sessions_ref->{ $sender }{ "seen_welcome" } == 0 ) { 
    5252                        $aim->send_im( $sender, "Welcome back, " .  get_dude() . "!" ); 
    53                         $sessions_ref->{"$sender"} = build_authenticated_session( $fml_username ); 
     53                        $sessions_ref->{"$sender"} = build_authenticated_session( $fml_username, $sender ); 
    5454                        $sessions_ref->{ $sender }{ "seen_welcome" } = 1; 
    5555                } 
     
    7777                        my $info = $xp->getNodeText( "/result" ); 
    7878 
    79                         print "> raw: " . Dumper( $response->content ) . "\n"; 
    80                         print "< got $info back from FML\n"; 
    8179                        if( $info =~ m/http/ ) { 
    8280                                my $link_id = $info; 
     
    9391 
    9492                                $aim->send_im($sender, h("<b>Added</b>:\n<a href='$info'>$name</a>" )); 
    95                                 $aim->send_im($sender, h(get_message( "add_tags") . "\n" . get_message( "rename" ))); 
     93                                $aim->send_im($sender,  
     94                                        h( 
     95                                                get_message( "add_tags") . "\n"  
     96                                                . get_message( "rename" ) . "\n" 
     97                                                . get_message( "share" ) 
     98                                                )); 
    9699                        } else { 
    97100                                if( $info =~ m/Duplicate/ ) { 
     
    138141                        print "validation_response: $validation_response\n"; 
    139142 
    140                         $sessions_ref->{"$sender"} = build_authenticated_session( $claimed_fml_username ); 
    141                         #$aim->send_im($sender, "<b>Rebuilt an authenticated session for you</b>:\n" . Dumper( $sessions_ref )); 
    142  
    143                         $aim->send_im($sender, "<b>\n\nAll done -- that was easy</b>!\nNow your Feed Me Links account is linked to your AIM and you can start using Feed Me Links via AIM. To get started, paste any URL into this window." ); 
     143                        $sessions_ref->{"$sender"} = build_authenticated_session( $claimed_fml_username, $sender ); 
     144 
     145                        $aim->send_im($sender, "<b>\n\nAll done -- that was easy</b>!\nNow your Feed Me Links account is linked to your " 
     146                               . "AIM and you can start using Feed Me Links via AIM. To get started, paste any URL into this window." ); 
    144147                } else { 
    145148                        $aim->send_im($sender, h("Darn, that doesn't match our records. Please try again, or <a href='$site/contact-us?subject=AIM+issues:+'>contact us</a>.") ); 
     
    162165        # COMMAND: PEEPS ############################################################### 
    163166        } elsif( $fml_username && $message =~ m/peeps/ ) { 
    164                 $aim->send_im($sender, h("<b>what are you, SNACK FOOD?</b>\n(sorry, this part is unfinished, because I haven't decided what do with the peeps list yet. <a href='mailto:jm3\@feedmelinks.com'>What do you think</a>?)\n")); 
    165                 my $u = $sessions_ref->{ $sender } -> { "fml_username" }; 
    166          
    167                 my $response = $www->get( "$site/usr/" . substr( $u, 0, 1 ) . "/$u/contacts.xml", []); 
    168                 my $xp = XML::XPath->new(xml => $response->content); 
    169                 my $peeps = $xp->find("/fml"); 
    170                 # FIXME: peeps list here for sharing 
     167                $aim->send_im($sender, "Look at you, you have <a href='$site/peeps'>" . ( keys %{$sessions_ref->{$sender}->{"peeps"}} ) . " peeps</a>!" ); 
    171168                 
    172169        # COMMAND: VERSION ############################################################### 
     
    190187                $aim->send_im($sender, "<b>This is the Feed Me Links AIM Bot</b>: 
    191188From here, you can do most anything you can do on Feed Me Links. It's easy to get started. 
    192 <b>Paste</b> or <b>type a URL to begin</b>.\nother commands to try: who, version, credits, or help" ); 
     189<b>Paste</b> or <b>type a URL to begin</b>.\nother commands to try: who, peeps, credits, or help" ); 
    193190 
    194191        # COMMAND: STATUS ############################################################### 
     
    196193                log_mesg( \*LOG, "status", " $sender" ); 
    197194                $aim->send_im($sender, "<b>DEBUG DUMP</b>:\nsender: $sender\nmessage: $message" ); 
    198                 $aim->send_im($sender, Dumper( $sessions_ref )); 
    199195                print Dumper( $sessions_ref ) . "\n"; 
    200196         
     
    231227                        } 
    232228                        log_mesg( \*LOG, "debug", "response: $response_code renaming $link to $message" ); 
    233  
     229         
     230        # COMMAND: SHARE ############################################################### 
     231        } elsif( $fml_username && $sessions_ref->{$sender}->{"last_link"} && $sessions_ref->{$sender}->{"renamed"} == 0 && $message =~ m/\s*share\s*$/ ) { 
     232 
     233                        # cache anyone who we CAN share with in the session, first 
     234                        if( ! $sessions_ref->{ $sender }{ "shareables" } ) { 
     235                                my $shareables_ref = (); 
     236                                while( my ($peep_fml_username, $peep_aim_name) = each( %{$sessions_ref->{$sender}->{"peeps"}} )) { 
     237                                        if( $peep_aim_name ) { 
     238                                                $shareables_ref->{ $peep_fml_username } = $peep_aim_name; 
     239                                                log_mesg( \*LOG, "added $peep_fml_username to sharebles" ); 
     240                                        } 
     241                                } 
     242                                $sessions_ref->{ $sender }{ "shareables" } = $shareables_ref; 
     243                        } 
     244                         
     245                        my $shareables_string = get_printable_user_string_from_hash( $sessions_ref->{$sender}->{"shareables"} ); 
     246                        my $online_peeps = who_of_my_peeps_are_online( $sessions_ref, $sender ); 
     247                        my $online_string = get_printable_user_string_from_hash( $online_peeps ); 
     248 
     249                        $aim->send_im( $sender,  
     250                                "<b>Share it, baby!</b>\nOf your <a href='$site/peeps'>"  
     251                                . ( keys %{$sessions_ref->{$sender}->{"peeps"}} )  
     252                                . " peeps</a>, " 
     253                                . ( keys %{$sessions_ref->{$sender}->{"shareables"}} )  
     254                                . " (" . $shareables_string . ") " 
     255                                . " are using the Feed Me Links bot, and " 
     256                                . ( keys %{$online_peeps} )  
     257                                . ($online_string ? " (" . $online_string . ") " : "") 
     258                                . " are online to share with you right now." ); 
     259                                my $delta_not_using = (keys %{$sessions_ref->{$sender}->{"peeps"}}) - (keys %{$sessions_ref->{ $sender }{ "shareables" }}); 
     260                                if( $delta_not_using ) { 
     261                                        $aim->send_im( $sender, h("$delta_not_using of your peeps aren't using the cool Feed Me Links bot yet. " 
     262                                        . "Want to invite them so you can share and chat? <a href='$site/invite?mode=not_on_aim'><b>Click to invite</b></a> " )); 
     263                                } 
     264  
    234265        # COMMAND: TAG ############################################################### 
    235266        } elsif( $fml_username && $sessions_ref->{$sender}{"last_link"} && $sessions_ref->{$sender}->{"added_tags"} == 0 ) { 
     
    243274                        $tags = encode( $tags ); 
    244275                        # HACK: not sure why the proxy's credential'ed password isn't being passed in, but passing it on the URL works. whatever. 
    245                         my $url = "$site/api/add_tags/" . $sessions_ref->{$sender}{"fml_username"} . "&id=" . $sessions_ref->{$sender}{"last_link"} . "&tags=$tags&password=" . encode($sessions_ref->{$sender}{"fml_password"}); 
     276                        my $url = "$site/api/add_tags/" . $sessions_ref->{$sender}{"fml_username"} . "&id=" . $sessions_ref->{$sender}{"last_link"}  
     277                                . "&tags=$tags&password=" . encode($sessions_ref->{$sender}{"fml_password"}); 
    246278                        my $response = $sessions_ref->{$sender}->{"proxy"}->get( $url , []); 
    247279                        my $response_code = "" . XML::XPath->new(xml => $response->content)->findnodes('/rest/response/@code'); # HACK: string type coercion 
     
    289321 
    290322                        log_mesg( \*LOG, "debug", "summary: $summary" ); 
    291                 $aim->send_im($sender, h("You have <a href='$site/u/" . encode( $sessions_ref->{$sender}{"fml_username"}) . "/tags/" . encode($message) . "'>$num_links links</a> tagged with $message, including $summary" )); 
     323                $aim->send_im($sender, h("You have <a href='$site/u/" . encode( $sessions_ref->{$sender}{"fml_username"}) . "/tags/" . encode($message)  
     324                        . "'>$num_links links</a> tagged with $message, including $summary" )); 
    292325                } 
    293326 
     
    296329                my $peep = encode( $message ); 
    297330                $aim->send_im($sender, h("<a href='$site/u/$peep'>$peep</a> is your peep! APE CANNOT KILL APE!" )); 
    298                  
    299331 
    300332        } else { 
     
    351383} 
    352384 
     385# END MAIN ZZZZZZZZ HERE COME THOSE FORM-FEEDS! 
     386 
     387 
     388sub get_printable_user_string_from_hash { 
     389        my $hashref = $_[0]; 
     390 
     391        my $pretty_string = ""; 
     392        while( my ($name, $value) = each( %{$hashref})) { 
     393                $pretty_string .= "<a href='aim:goim?screenname=$value'>$name</a>, ";  
     394        } 
     395        $pretty_string =~ s/, $//; 
     396        return $pretty_string; 
     397} 
     398 
     399 
     400sub who_of_my_peeps_are_online { 
     401        my $sessions = $_[0]; 
     402        my $user = $_[1]; 
     403         
     404        my $aimers = $sessions->{$user}{ "shareables" }; 
     405        my $peeps_online_now_ref = (); 
     406        while( my ($peep_fml_username, $peep_aim_name) = each( %{$aimers} )) { 
     407                if( $sessions->{$peep_aim_name} ) { 
     408                        log_mesg( \*LOG, "debug", "$peep_aim_name is online, adding him to your list of immediate shareables" ); 
     409                        $peeps_online_now_ref->{$peep_fml_username} = $peep_aim_name; 
     410                } 
     411        } 
     412        return $peeps_online_now_ref; # FIXME: finish 
     413} 
     414 
    353415sub is_user_validated { 
    354         log_mesg( \*LOG, "debug", " is_user_validated() - no users with \@ signs?" ); 
    355416        my $sender = shift; 
    356417        my $response = $www->get( "$site/api/backroom/is_im_account_known&user=$sender" , []); 
     
    359420        $is_valid .= ""; 
    360421        my $fml_user = $xp->getNodeText("/rest/user"); 
    361         print "> trying to validate user $sender; FML server said: account $fml_user, valid=$is_valid\n"
     422        log_mesg( \*LOG, "authenticate", "trying to validate user $sender; FML server said: account $fml_user, valid=$is_valid" )
    362423 
    363424        if( $is_valid ) { 
     
    392453        #user and password 
    393454        my $u = $_[0]; 
     455        my $aim_name = $_[1]; 
    394456        my $p; 
    395         print "> building authenticated session for $u\n"; 
    396  
    397         print "> passing user: $u\n"; 
    398         print "> using url: $site/api/backroom/getPasswdForUser&user=$u\n"; 
     457        log_mesg( \*LOG, "session", "building authenticated session for $aim_name ($u)" ); 
    399458 
    400459        my $response = $www->get( "$site/api/backroom/getPasswdForUser&user=$u", []); 
     
    417476                $tags_ref->{ $tag_name } = $tag_id; 
    418477        } 
    419          
     478 
    420479        # CACHE THE USER's PEEPS IN THE SESSION OBJECT: 
    421480        $url = "$site/api/peeps?user=" . encode( $u ) . "&password=" . encode( $p ); 
     
    510569                "bro",  
    511570                "baby",  
     571                "beautiful",  
    512572                "brother",  
    513573                "fellow linkster",  
     
    518578} 
    519579 
    520 sub print_version { print "> " . get_version() . "\n"; } 
    521  
    522580sub get_version {  
    523581        my $version = "0.1.6"; 
     
    561619        my %messages = ( 
    562620                "add_tags" => "To add tags, just type them, separated by commas", 
    563                 "rename" => "To rename it, just type <b>rename: <em>new name...</em></b>" 
     621                "rename" => "To rename it, just type <b>rename: <em>new name...</em></b>", 
     622                "share" => "To share it with your friends, just type <b>share</b>" 
    564623        ); 
    565624        return $messages{ "$m" };