Python WebSocket client library for strims.gg chat with synchronous and asynchronous support.
- Synchronous and asynchronous APIs
- Type-safe Pydantic models
- Event-driven message handling
- Built-in authentication
- Comprehensive error handling
pip install wsggpyDevelopment installation:
git clone https://github.com/user/wsggpy.git
cd wsggpy
pip install -e .[dev]from wsggpy import Session, ChatEnvironment
session = Session(
login_key="your_jwt_token",
url=ChatEnvironment.PRODUCTION
)
@session.add_message_handler
def on_message(message, session):
print(f"{message.sender.nick}: {message.message}")
session.open()
session.send_message("Hello, chat!")
session.close()import asyncio
from wsggpy import AsyncSession, ChatEnvironment
async def main():
session = AsyncSession(
login_key="your_jwt_token",
url=ChatEnvironment.PRODUCTION
)
@session.add_message_handler
def on_message(message, session):
print(f"{message.sender.nick}: {message.message}")
await session.open()
await session.send_message("Hello from async!")
await session.close()
asyncio.run(main())# Synchronous
session = wsggpy.Session(
login_key="token", # Optional JWT token
url="wss://chat.strims.gg/ws", # WebSocket URL
user_agent="wsggpy/0.1.0" # User agent
)
# Asynchronous
session = wsggpy.AsyncSession(
login_key="token",
url="wss://chat.strims.gg/ws",
user_agent="wsggpy/0.1.0"
)# Synchronous
session.open()
session.close()
session.is_connected()
# Asynchronous
await session.open()
await session.close()
session.is_connected()
# Context manager (async only)
async with session:
await session.send_message("Hello!")# Basic messaging
session.send_message("Hello!")
session.send_action("waves") # /me waves
session.send_private_message("username", "Private message")
# Moderation (requires permissions)
session.send_ban("username", "reason", duration=3600)
session.send_permanent_ban("username", "reason")
session.send_unban("username")
session.send_mute("username", duration=1800)
session.send_unmute("username")
# Utilities
session.send_ping()session.add_message_handler(callback)
session.add_private_message_handler(callback)
session.add_ban_handler(callback)
session.add_unban_handler(callback)
session.add_mute_handler(callback)
session.add_unmute_handler(callback)
session.add_join_handler(callback)
session.add_quit_handler(callback)
session.add_broadcast_handler(callback)
session.add_ping_handler(callback)
session.add_names_handler(callback)
session.add_error_handler(callback)
session.add_socket_error_handler(callback)
session.add_generic_handler(callback) # All eventsusers = session.get_users() # List[User]
user = session.get_user("username") # Optional[User]
# Check user features
if user and user.has_feature(wsggpy.UserFeature.MODERATOR):
print("User is a moderator")All models are immutable Pydantic models:
User- Chat user with features and metadataMessage- Chat message with sender and timestampPrivateMessage- Direct message between usersBan/Mute- Moderation events with durationRoomAction- User join/quit eventsBroadcast- System broadcast messagesPing- Heartbeat eventsNames- User list updates
wsggpy.UserFeature.ADMIN
wsggpy.UserFeature.MODERATOR
wsggpy.UserFeature.BOT
wsggpy.UserFeature.PROTECTEDfrom wsggpy import ChatEnvironment
# Production chat
ChatEnvironment.PRODUCTION # "wss://chat.strims.gg/ws"
# Development chat
ChatEnvironment.DEV # "wss://chat2.strims.gg/ws"from wsggpy.exceptions import (
WSGGError, # Base exception
ConnectionError, # Connection failures
AuthenticationError, # Auth failures
MessageError, # Message send failures
ProtocolError, # Protocol parsing errors
RateLimitError, # Rate limiting
PermissionError # Insufficient permissions
)
try:
session.open()
session.send_message("Hello!")
except wsggpy.ConnectionError as e:
print(f"Connection failed: {e}")
except wsggpy.MessageError as e:
print(f"Message failed: {e}")python -m venv venv
source venv/bin/activate # or venv\Scripts\activate on Windows
pip install -e .[dev]# Lint and format
ruff check --fix src/ tests/ examples/
ruff format src/ tests/ examples/
# Type checking
mypy src/
# Tests
pytest --cov=src/wsggpy --cov-report=htmlwsggpy/
βββ src/wsggpy/ # Main package
β βββ __init__.py # Public API exports
β βββ models.py # Pydantic data models
β βββ session.py # Synchronous session
β βββ async_session.py # Asynchronous session
β βββ protocol.py # WebSocket protocol handling
β βββ handlers.py # Event handler management
β βββ exceptions.py # Exception hierarchy
βββ tests/ # Test suite
βββ examples/ # Usage examples
βββ pyproject.toml # Project configuration
MIT License - see LICENSE file for details.