11 Commits

Author SHA1 Message Date
Bo
9bb9d0b944 Make keyboard monitoring optional (#259) (#260)
* Make keyboard monitoring optional (#259)

* release version 0.9.9
2025-09-17 08:58:24 -05:00
Bo Peng
47a1013059 Update documentation for translation 2025-08-09 20:39:22 -05:00
Bo
6b691d310f Update to docs (#246)
* update installation instruction

* reneame configuration guide to configuration reference

* update docs
2025-08-08 11:04:42 -05:00
Bo
7c2be169fc Read the docs (#245)
* move docs to readthedocs
2025-08-08 10:34:47 -05:00
adawalli
2295bcc696 feat: add comprehensive Telegram notification support (#231)
* feat: add comprehensive Telegram notification support

Add complete Telegram bot integration for AI Marketplace Monitor notifications:

- Implement TelegramNotificationConfig with bot token and chat ID authentication
- Add MarkdownV2 message formatting with proper escaping for Telegram
- Implement intelligent message splitting for 4096 character limit
- Add global rate limiting (30 messages/second) with automatic retry logic
- Support for HTTP 429 handling and connection error recovery
- Add configuration validation and detailed error handling
- Include comprehensive unit tests with async operation mocking
- Add detailed setup documentation with troubleshooting guide
- Support environment variable configuration for security
- Compatible with individual users and group chats

Includes dependency: python-telegram-bot for reliable Telegram API integration

* refactor: remove redundant telegram auto-creation logic

- Remove duplicate telegram notification creation in config.py since notify_all already handles this
- Fix unnecessary else clause after early return in telegram.py
- Remove obsolete tests for auto-creation behavior
- Clean up unused imports

The notification system continues to work via the existing notify_all method which dynamically creates notification objects when user configs contain required fields.

* refactor: simplify message splitting using textwrap module

Replace manual word boundary splitting logic with Python's built-in
textwrap.wrap() function. This reduces ~30 lines of custom logic to
a single line while maintaining identical functionality.

- Use textwrap.wrap() with break_long_words=False
- Maintains word boundary splitting behavior
- All existing tests continue to pass
2025-08-04 19:40:55 -05:00
spawnpoint
d96b1792a8 Free Stuff Category Update (#159)
* Update facebook.py

Regional changes means soemtime "freestuff" is the category, and sometimes it is "free"

* Update README.md

* Update facebook.py

free enum - remove min_price and max_price from querystring

* Update README.md

fixed weird typos

* Update README.md

Added free category to documentation.
2025-05-26 08:38:26 -05:00
Bo
56bf13d091 add option category (#150)
* add option category

* Fix syntax error

* fix tests

* Update facebook.py with all categories (#151)

* document option category

---------

Co-authored-by: spawnpoint <spawnpoint@users.noreply.github.com>
2025-05-19 01:02:19 -05:00
Bo
c90523f2b6 Improve pushover (#132) (#133)
* Improve pushover (#132)
2025-04-14 14:21:47 -05:00
Bo
c53cf7f0d3 Issue102 (#131)
Fix pushover support #102
2025-04-13 22:37:40 -05:00
Bo
20730dcb9e Allow currency conversion (#123)
#122 support multiple currencies
2025-04-07 09:45:21 -05:00
Bo Peng
75bceef3c6 Re-upload under an AGPL license 2025-03-14 14:39:23 -05:00