Commits on Apr 7, 2015
  1. Reply to original status when replying to retweets

    * Stash entire statuses, not just their IDs
    * Refactored candidate selection to DRY it up
    * When replying, check for a retweet; if so, reply to the orginial status
    * Wait until we've selected the status to reply to before prefixing the
    screen_name of the source, since it may be a retweet
    committed Apr 4, 2015
Commits on Mar 31, 2015
  1. Release 0.20

    committed Mar 30, 2015
  2. Release 0.19

    committed Mar 30, 2015
  3. Prepare release 0.18

    committed Mar 30, 2015
Commits on Mar 26, 2015
  1. Prepare for a trial release

    committed Mar 25, 2015
  2. Deprecate SecondaryAccount

    committed Mar 25, 2015
Commits on Mar 25, 2015
  1. Possible circular ref closed

    Sometimes see warning from global destruction. May have been here. In any
    case, this seems safer.
    committed Mar 25, 2015
  2. Minor change to twitter api wrapper

    Seemed better to call request directly and avoid 1 extra sub call, since that
    where ->get and ->post go, anyway.
    committed Mar 25, 2015
  3. Add json helper methods

    committed Mar 25, 2015
  4. More Demeter fines

    committed Mar 25, 2015
  5. More homage to Demeter

    Applied native HashRef trait to `followers`.
    committed Mar 25, 2015
  6. Fix event name

    Still needs work, because we get this whether we are source or target,
    and we handle the source case wrong, at the moment.
    committed Mar 24, 2015
  7. Fix stash; emptied too soon

    Oops! Don't clear the stash until after the handler returns.
    committed Mar 24, 2015
  8. Replace path args

    So, AnyEvent::Twitter doesn't do all the little thing Net::Twitter does,
    like replace arguments in the path. Because, yes, Twitter does have some
    endpoints wher the ID (for example) isn't a query arg, it's part of the
    bloody path.
    committed Mar 24, 2015
  9. Fix typo and add a defined test

    committed Mar 24, 2015
  10. Use POE::Session's callback and events everywhere

    In some ways, this simplifies the code. I like callback and postback for
    avoiding deeply nested logic. And having everything be dispatchable events
    seems saner. But I don't care for the ugly function argument unpacking. *sigh*
    
    Also did some cleanup. Avoided `my $self = shift` in events, because I'm using
    `$_[SESSION]->callback` everywhere, now, and I don't want to be surprised by a
    change in argument position.
    
    This also eliminated the need for weakening `$self` in a couple places.
    
    Big change. Needs a shakeout.
    committed Mar 24, 2015
  11. Use formatted_status_text for entity decoding

    You know how Twitter likes to be "helpful" and sends you text with encoded
    entities? Well, this isn't a web app! So, let's use formatted_status_text
    where we decode HTML entities and we'll keep our text purdy.
    
    TODO: DRY this up. ETOOMUCHREPEATEDCODE.
    committed Mar 24, 2015
  12. Yes, we have UTF-8 in the source...

    See that ellipsis a few lines below the change. Yep. It was causing some text
    mangling.
    committed Mar 24, 2015
Commits on Mar 24, 2015
  1. Use AnyEvent::Twitter for the oauth handshake

    This was tricky. AnyEvent::HTTP calls cause resource leaks when using
    AnyEvent::Impl::POE. Using POE::Loop::AnyEvent, instead, solved that
    problem.
    
    Figuring out how to use postbacks was a pain. AnyEvent::Twitter chokes
    on them because they're blessed.
    committed Mar 24, 2015
Commits on Mar 22, 2015
  1. Events don't required a joined channel

    Put this back the way it was, because some events, like follows and
    unfollows should be processed, even if the channel hasn't been joined,
    yet.
    committed Mar 22, 2015
  2. Use AnyEvent::Twitter

    No need to write my own non-blocking Twitter REST API client; PUNYTAN
    has done an excellent job: https://metacpan.org/pod/AnyEvent::Twitter
    
    Wrapped it, for now, to preserve the existing call symantics, centralize
    error handling, and transform array args to comma delimited lists. (We
    aren't using multi-part posts in twirc, so no harm in that, here.)
    committed Mar 22, 2015
  3. Fix voice

    committed Mar 21, 2015
  4. Don't forget application/x-www-form-urlencoded!

    Twitter throws a 401 if you fail to include the correct content-type
    header.
    
    Now, POST requests can send arguments in the body.
    committed Mar 21, 2015
  5. Replace Net::Twitter with AnyEvent::HTTP

    Also:
    - add event handler for unfollow and move the code to remove a follower
    to  it (that way, it will properly handle an unfollow from an external
    app).
    
    - wrap get_user_by_nick so we don't have to lc the key at every call
    point
    
    Rough draft: needs refactoring, clean up, and extending the Twitter API
    calls to other modules in the distribution.
    committed Mar 21, 2015
Commits on Mar 21, 2015
Commits on Mar 20, 2015
  1. Dzil-ify

    committed Mar 20, 2015
  2. Let other events complete before shutting down

    I think yield is more appropriate here.
    committed Mar 19, 2015