mirror of
https://github.com/simplex-chat/simplex-chat.git
synced 2026-11-05 04:07:44 +00:00
A code redeemed while a store receipt is held put the code's badge on the profile, and the held receipt then waited behind it; for a subscription the store kept charging every period meanwhile. Code redemption and invoice creation now answer "store purchase open" while the profile holds an App Store subscription receipt, or another receipt whose last failure can clear on its own. A receipt that failed for good does not block, except an Apple subscription, which Apple keeps charging; an uncredited Play subscription is refunded by Play. Run: 003-badge-subscriptions-ui, slice 6
SimpleX Chat Python library
Python 3.11+ client for SimpleX Chat bots. Equivalent to the Node.js library.
Install
pip install simplex-chat
The native libsimplex is downloaded lazily on first use. To pre-fetch:
python -m simplex_chat install # sqlite (default)
python -m simplex_chat install --backend postgres # linux-x86_64 only
Quick start
import re
from simplex_chat import Bot, BotProfile, Message, SqliteDb, TextMessage
bot = Bot(
profile=BotProfile(display_name="Squaring bot"),
db=SqliteDb(file_prefix="./squaring_bot"),
welcome="Send me a number, I'll square it.",
)
@bot.on_message(content_type="text", text=re.compile(r"^-?\d+(\.\d+)?$"))
async def square(msg: TextMessage) -> None:
n = float(msg.text or "0")
await msg.reply(f"{n} * {n} = {n * n}")
@bot.on_message(content_type="text")
async def fallback(msg: Message) -> None:
await msg.reply("Send me a number, like 7 or 3.14.")
if __name__ == "__main__":
bot.run()
bot.run() blocks. The connection address is logged on startup — paste it into a SimpleX client to talk to the bot. Ctrl+C to stop.
Three decorators: @bot.on_message(...), @bot.on_command(name), @bot.on_event(tag). Message handlers are first-match-wins in registration order, so register specific filters first and catch-alls last.
See examples/squaring_bot.py for the full example.
Development
uv venv && source .venv/bin/activate
uv pip install -e '.[dev]'
ruff check && pyright && pytest tests/
Wire types under src/simplex_chat/types/_*.py are generated. Regenerate with cabal test simplex-chat-test --test-options='--match Python'.
Release
Manual for now. Bump _version.py:__version__, build a wheel, upload to PyPI:
uv build --wheel
uv publish --token "$PYPI_TOKEN"