A Python API wrapper for Fluxer.
Build bots and automated clients with a clean, type-safe, and event-driven architecture.
- Async-first design built on
asyncio - REST API support with automatic rate limiting
- WebSocket gateway for real-time events
- Command framework with decorators
- Modular cog system
- Strongly-typed data models
- Structured error handling and retry logic
- Clean separation between low-level
Clientand high-levelBot
pip install fluxer.pyRequires Python 3.10 or higher.
Voice requires LiveKit and ffmpeg:
pip install fluxer.py[voice]or
uv add fluxer.py --extra voiceffmpeg must be installed separately and available on your PATH.
On macOS (assuming you have Brew):
brew install ffmpegOn Debian/Ubuntu:
apt install ffmpegOn Windows: (assuming you have Chocolatey)
choco install ffmpegFor development:
git clone https://github.com/akarealemil/fluxer.py.git
cd fluxer.py
pip install -e .A batteries-included template is available to get you started quickly with a new bot project.
A simple bot with a ping command:
import fluxer
bot = fluxer.Bot(command_prefix="!", intents=fluxer.Intents.default())
@bot.event
async def on_ready():
print(f"Bot is ready! Logged in as {bot.user.username}")
@bot.command()
async def ping(ctx):
await ctx.reply("Pong!")
if __name__ == "__main__":
TOKEN = "your_bot_token"
bot.run(TOKEN)Use Bot if you need: - Decorator-based commands - Built-in command
parsing - Cog support - Rapid bot development
Use Client if you need: - Full event-driven control - A custom command
framework - Lower-level API interaction - Advanced or specialized
implementations
Bot extends Client, adding a command framework on top of the core
event system.
Core components:
HTTPClient-- Handles REST requests and rate limitsGateway-- Manages WebSocket connection and event dispatchClient-- Base event-driven interfaceBot-- High-level command frameworkCog-- Modular command grouping system
fluxer.py provides strongly-typed models representing Fluxer entities:
GuildChannelMessageUserGuildMemberVoiceStateWebhookEmbedEmoji
Models encapsulate both state and behavior, exposing convenience methods such as:
Message.reply()Channel.send()Guild.kick_member()
Requires fluxer.py[voice] and ffmpeg
@bot.command()
async def play(ctx, channel_id: int, *, path: str):
channel = await bot.fetch_channel(str(channel_id))
async with await channel.connect(bot) as vc:
await vc.play_file(path)For background playback with an after callback:
async with await channel.connect(bot) as vc:
vc.play(fluxer.FFmpegPCMAudio("music.mp3"), after=lambda e: print("done"))
# bot continues handling commands while audio playsPause and resume mid-playback:
vc.pause()
vc.resume()
print(vc.is_paused) # boolFFmpegPCMAudio accepts the same options as discord.py's FFmpegPCMAudio:
| Parameter | Description |
|---|---|
executable |
Path to ffmpeg binary (default: "ffmpeg") |
before_options |
Arguments inserted before -i (e.g. "-ss 30" to seek) |
options |
Arguments inserted after the source (e.g. "-filter:a volume=0.5") |
sample_rate |
Output sample rate in Hz (default: 48000) |
num_channels |
1 for mono, 2 for stereo (default: 2) |
Intents determine which events your application receives from the
WebSocket gateway.
Common usage:
fluxer.Intents.default()
fluxer.Intents.all()Limiting intents improves performance and ensures your application subscribes only to necessary events.
All library exceptions inherit from:
FluxerExceptionErrors include:
- HTTP errors mapped to REST status codes
- Gateway protocol errors
- Connection and retry-related failures
Full documentation is available at:
