Changeset 1401
- Timestamp:
- 03/08/07 20:13:52 (2 years ago)
- Files:
-
- feedmelinks/lib/FeedMeLinks/Bot.pm (modified) (18 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
feedmelinks/lib/FeedMeLinks/Bot.pm
r1394 r1401 43 43 if( ! $fml_username ) { 44 44 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.") ); 46 47 $sessions_ref->{"$sender"} = build_empty_session( $sender ); 47 48 $sessions_ref->{ $sender }{ "seen_welcome" } = 1; 48 49 } 49 50 } else { 50 log_mesg( \*LOG, "session", "authenticated session for $sender" );51 51 if( $sessions_ref->{ $sender }{ "seen_welcome" } == 0 ) { 52 52 $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 ); 54 54 $sessions_ref->{ $sender }{ "seen_welcome" } = 1; 55 55 } … … 77 77 my $info = $xp->getNodeText( "/result" ); 78 78 79 print "> raw: " . Dumper( $response->content ) . "\n";80 print "< got $info back from FML\n";81 79 if( $info =~ m/http/ ) { 82 80 my $link_id = $info; … … 93 91 94 92 $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 )); 96 99 } else { 97 100 if( $info =~ m/Duplicate/ ) { … … 138 141 print "validation_response: $validation_response\n"; 139 142 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 yourAIM 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." ); 144 147 } else { 145 148 $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>.") ); … … 162 165 # COMMAND: PEEPS ############################################################### 163 166 } 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>!" ); 171 168 172 169 # COMMAND: VERSION ############################################################### … … 190 187 $aim->send_im($sender, "<b>This is the Feed Me Links AIM Bot</b>: 191 188 From 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" ); 193 190 194 191 # COMMAND: STATUS ############################################################### … … 196 193 log_mesg( \*LOG, "status", " $sender" ); 197 194 $aim->send_im($sender, "<b>DEBUG DUMP</b>:\nsender: $sender\nmessage: $message" ); 198 $aim->send_im($sender, Dumper( $sessions_ref ));199 195 print Dumper( $sessions_ref ) . "\n"; 200 196 … … 231 227 } 232 228 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 234 265 # COMMAND: TAG ############################################################### 235 266 } elsif( $fml_username && $sessions_ref->{$sender}{"last_link"} && $sessions_ref->{$sender}->{"added_tags"} == 0 ) { … … 243 274 $tags = encode( $tags ); 244 275 # 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"}); 246 278 my $response = $sessions_ref->{$sender}->{"proxy"}->get( $url , []); 247 279 my $response_code = "" . XML::XPath->new(xml => $response->content)->findnodes('/rest/response/@code'); # HACK: string type coercion … … 289 321 290 322 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" )); 292 325 } 293 326 … … 296 329 my $peep = encode( $message ); 297 330 $aim->send_im($sender, h("<a href='$site/u/$peep'>$peep</a> is your peep! APE CANNOT KILL APE!" )); 298 299 331 300 332 } else { … … 351 383 } 352 384 385 # END MAIN ZZZZZZZZ HERE COME THOSE FORM-FEEDS! 386 387 388 sub 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 400 sub 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 353 415 sub is_user_validated { 354 log_mesg( \*LOG, "debug", " is_user_validated() - no users with \@ signs?" );355 416 my $sender = shift; 356 417 my $response = $www->get( "$site/api/backroom/is_im_account_known&user=$sender" , []); … … 359 420 $is_valid .= ""; 360 421 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" ); 362 423 363 424 if( $is_valid ) { … … 392 453 #user and password 393 454 my $u = $_[0]; 455 my $aim_name = $_[1]; 394 456 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)" ); 399 458 400 459 my $response = $www->get( "$site/api/backroom/getPasswdForUser&user=$u", []); … … 417 476 $tags_ref->{ $tag_name } = $tag_id; 418 477 } 419 478 420 479 # CACHE THE USER's PEEPS IN THE SESSION OBJECT: 421 480 $url = "$site/api/peeps?user=" . encode( $u ) . "&password=" . encode( $p ); … … 510 569 "bro", 511 570 "baby", 571 "beautiful", 512 572 "brother", 513 573 "fellow linkster", … … 518 578 } 519 579 520 sub print_version { print "> " . get_version() . "\n"; }521 522 580 sub get_version { 523 581 my $version = "0.1.6"; … … 561 619 my %messages = ( 562 620 "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>" 564 623 ); 565 624 return $messages{ "$m" };