Revision history for Net-Jabber-Bot

2.1.9 2026-03-22 Todd Rinaldo

  [Fixes]
  - Fix uninitialized value warning in SendJabberMessage when concatenating
    error strings from chunked messages via .= on undef variable; also fix
    POD method name typo (get_ident -> get_responses) and broken E<gt>
    escape sequence (PR #58)
  - Guard all public API methods (ChangeStatus, GetRoster, GetStatus,
    Process, JoinForum, AddUser, RmUser) against crashes when called while
    disconnected — previously crashed with "Can't call method on an
    undefined value" (PR #55)
  - Fix misleading "Message not relevant to bot" debug log that fired for
    all messages instead of only genuinely irrelevant ones (PR #57)

  [Improvements]
  - Add Stop() method for graceful shutdown of Start() event loop; Start()
    now returns the loop iteration count and can be re-called after Stop()
    (PR #56)

  [Maintenance]
  - Remove dead code: unused $iqReply and unreachable block in
    _jabber_in_iq_message, unused $reconnect_timeout in Start() (PR #57)
  - Remove legacy Class::Std commented-out attribute declarations, write
    real documentation for GetStatus, AddUser, and RmUser methods (PR #58)
  - New test: t/07-test_disconnect_public_api.t for public API calls while
    disconnected (PR #55)
  - New test: t/08-test_start_stop.t for Stop() and Start() lifecycle
    (PR #56)

2.1.8 2026-03-20 Todd Rinaldo

  [Fixes]
  - #12  Fix broken reconnection (called nonexistent InitJabber), fix
         IsConnected always returning truthy, handle undef jabber_client
         after disconnect, and plug memory leak in messages_sent_today (PR #18)
  - #14  Fix GTalk connection failures and from_full operator precedence bug
         that returned only the username instead of user@server/alias (PR #16)
  - #9   Update POD docs to match newline-preserving regex behavior and add
         multiline message tests (PR #19)
  - #28  Remove legacy developer names from bot_example.pl AUTHOR section
         (PR #29)
  - #30  Migrate from Moose to Moo, replace MooseX::Types with
         Type::Tiny/Types::Standard, remove Config::Std dependency (PR #47)
  - #37  Remove disproportionate sleep 30 from BUILD legacy parameter
         handling (PR #43)
  - #38  Fix MockJabberClient::Disconnect setting is_connected=1 instead
         of 0 (PR #44)
  - #39  Add missing RosterDB/RosterRequest/RosterDBJIDs stubs to mock
         client (PR #45)
  - #40  Fix uninitialized value warnings from .= on fresh variables in
         tests (PR #42)
  - #48  Suppress 'Subroutine redefined' warnings in MockJabberClient
         (PR #50)
  - #32  Eliminate unnecessary sleeps from mock test suite, cutting runtime
         from ~120s to ~60s (PR #51)
  - Fix four bugs in Bot.pm: broken string interpolation of method call,
    typo in error message, variable shadowing in SetForumSubject, and crash
    on reconnect from undefined background_function (PR #20)
  - Mask plaintext password in DEBUG log output and fix operator precedence
    bug (PR #26)
  - ReconnectToServer now survives _init_jabber failures instead of
    dying on transient server outages; partial jabber_client state is
    cleaned up and the retry loop continues with exponential backoff.
    Also fixes $] version formatting in IQ responses. (PR #53)
  - Don't count unsent messages toward the hourly rate limit;
    _send_individual_message was incrementing the counter before checking
    IsConnected, which could exhaust the limit during disconnection and
    block legitimate messages after reconnection. (PR #54)

  [Improvements]
  - #13  Add optional $from parameter to SendPersonalMessage,
         SendGroupMessage, and SendJabberMessage for relay bots (PR #17)
  - #36  Make auto-subscribe to presence requests configurable via new
         auto_subscribe attribute (PR #46)

  [Maintenance]
  - #23  Consolidate three CI workflows into single testsuite.yml, update
         actions/checkout v1→v4, use perldocker/perl-tester images, add
         dynamic perl-actions/perl-versions matrix (PR #24)
  - #33  Extend CI test matrix back to Perl 5.10 (PR #52)
  - Modernize Makefile.PL: separate TEST_REQUIRES, add CONFIGURE_REQUIRES,
    MIN_PERL_VERSION, upgrade META_MERGE to meta-spec v2 (PR #21)
  - Modernize POD: fix typos, update URLs to cpan-authors org, fix command
    injection in bot_example.pl, fix string comparison bug in
    gtalk_RSSbot.pl (PR #22)
  - Add cpanfile for modern CI dependency management (PR #24)
  - Add CLAUDE.md with project conventions (PR #25)
  - Move README.md to .github
  - New test: t/07-test_reconnect_failure.t for reconnection resilience
  - New test: t/07-test_disconnect_message_count.t for rate-limit
    accounting during disconnection

2.1.7 2020-11-05 Todd Rinaldo
- #15 Fix _send_individual_message to not strip new lines.

2.1.6
- Fix examples for new moose code
- Spelling errors in documentation
- Display server error message when we think there was a disconnect event.
- Allow the user to specify the path to the CA cert bundle via the 'ssl_ca_path' parameter.
- Move jabber object creation to lazy moose
- Add ignore file to repo
- Clean up POD so new() documentation lays out correctly
- Remove DD from code. Moose has a helper sub already for this anyways
- Explicitly set priority of users - Adam Malone
- Allow the user to specify the path to the CA cert bundle via the 'ssl_ca_path' parameter - Jan Schaumann
- Don't bail if the IQ message doesn't contain a query - Jan Schaumann
- Allow user to disable server certificate validity check - eleksir
- Use Mozilla::CA for default path for ssl_ca_path - eleksir
- Fix undefined warnings due to insufficient Moose Laziness
- Misc distro file cleanup.
- Automated testing with github actions
- Remove author tests from user installs.
- Point support to github now.

2.1.5
- resource now unique per instance of bot based on alias_hostname_pid
- new dependency from core modules - Sys::Hostname
- __PACKAGE__->meta->make_immutable; for performance.
- Removed gtalk option. Use tls => 1, server_host => 'gmail.com' instead.
- using 'componentname' in connect rather than after connection like we were hacking it in.
- All non-printable characters stripped and replaced with '.' via [:printable:] regex
- Added documentation on minimal connect parameters now we have quite a few optionals.

2.1.4
- _process_jabber_message was failing to parse multiline strings - fixed
- Move to github - http://github.com/toddr/perl-net-jabber-bot
- Tickets/Groups will stay on Google for now.
- Discussed using Backend of POE::Component::Jabber which would be a more stable/supported solution but requires perl 5.10
- MooseX::Types now.
- no Moose and no MooseX::Types at end of object for droppings

2.1.3
- Tests were failing if people didn't have Config::Std installed which is only used for Author tests

2.1.2
- Added warning message for legacy users initializing with message_callback or background_activity.

2.1.1 
- Add proper meta data into makefile.pl
- Cleanup debug messages. Used to be able to do them inline but moose subs don't call inside a string any more.

2.1.0 
- MOOSE!!!

2.0.9
- New subroutines (AddUser, RmUser, GetStatus, GetRoster) to track ??? 
- IsConnected reports connect status now.
- ReConnect now works as expected. Calls background each re-connect attempt.

2.0.8
- Bot now resonds to iq requests for version info. Also added gtalk example into the manifest (forgot for 2.0.7)

2.0.7
- Fix to get gtalk working, kindly provided by Yago Jesus. It's doing something really funky with setting the hostname to gmail.com.
- Need to later review why we're doing this. maybe we're ignorning connect messages from the server?
- Also added gtalk bot example courtesy of Yago
- New subs: GetRoster, ChangeStatus

2.0.6
- Test::Pod::Coverage not configured to skip tests if not avail. Corrected this.

2.0.5
- Missed a test file mentioning IO::Prompt (t/03)

2.0.4
- Removed some email addresses present.
- Tidy up manifest
- Referring to google project in POD now.
- Inserted gtalk fixes so the module will work with them.
- Funky eval issue with gtalk client commented out. We'll have to look at that later, but for now we don't need it at all

2.0.3
- Creation of Mock Client to allow automation of testing without a server.
- Also added Example script so someone can see how to use the module.

2.0.2
- Added Log::Log4Perl as dependancy. This should be in everyone's CPAN so it shouldn't be a big deal that people need to install it even though it's not necessary for people to use the module...

2.0.1
- Oops! Guess I need to make this module dependant on Net::Jabber if it's ever going to make test.

2.0.0
- Move to 3 digit version (see pause.perl.org FAQ about starting with 2 digit version and going to 3)
- internal callback maker created to reduce code.

1.2.1
- Call back functions how call self funcion via anonymous subs.
- Minor bug fixes and cleanup.

1.2.0
- Re-enabled config test, plus fixed some docs. Versioning changes from here out to be 3 digit.
- Bot will respond to different addressings per forum (all messages, jbot:, etc.)

1.1
- Initial CPAN release - Basic tests built. Still more needed. Some of the limits are hard
- coded. Arguably, these should be more in a child module, not the base class?

- 1.0 Initial pre-CPAN release -- Does basic stuff but no tests yet. not CPAN ready
