Metadata-Version: 2.4
Name: kroxy
Version: 0.1.0
Summary: A professional Discord utility library by @kroxy
Author-email: kroxy <kroxy@example.com>
License: MIT
Project-URL: Homepage, https://pypi.org/project/kroxy
Project-URL: Repository, https://github.com/kroxy/kroxy
Keywords: discord,bot,antinuke,giveaway,music,utility
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: OS Independent
Classifier: Topic :: Communications :: Chat
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Requires-Python: >=3.9
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: aiohttp>=3.8.0
Provides-Extra: dev
Requires-Dist: build; extra == "dev"
Requires-Dist: twine; extra == "dev"
Dynamic: license-file

# kroxy

A professional Discord utility library by **@kroxy**.

## Install

```bash
pip install kroxy
```

## Modules

### `kroxy.discord`

| Module | Description |
|---|---|
| `api` | Async Discord REST API client |
| `commands` | Slash & prefix command builders |
| `utils` | Embed builder, mentions, timestamps, permissions |
| `antinuke` | Anti-nuke protection with rate-limit tracking |
| `checkers` | Permission & role checks with hierarchy validation |
| `giveaway` | Full-featured weighted giveaway system |
| `music` | Queue-based music player state manager |

### `kroxy.website` *(coming soon)*

---

## Quick Examples

### Anti-Nuke

```python
from kroxy.discord import AntiNuke

antinuke = AntiNuke(whitelist=[OWNER_ID])

async def punish(action, user_id, guild):
    print(f"NUKE DETECTED: {action} by {user_id}")

antinuke.on_trigger = punish
antinuke.punishment = "ban"

# In your event handler:
await antinuke.on_member_ban(user_id=some_user_id, guild=guild)
```

### Giveaway

```python
from kroxy.discord.giveaway import GiveawayManager

manager = GiveawayManager()

async def on_giveaway_end(giveaway, winners):
    print(f"Winners of {giveaway.prize}: {winners}")

manager.on_end = on_giveaway_end

giveaway = await manager.create(
    prize="Discord Nitro",
    host_id=123456789,
    channel_id=987654321,
    guild_id=111111111,
    duration=3600,     # 1 hour
    winner_count=2,
)
```

### Embed Builder

```python
from kroxy.discord import Utils

embed = Utils.build_embed(
    title="Hello from kroxy!",
    description="This is a professional embed.",
    color=0x5865F2,
    fields=[{"name": "Field", "value": "Value", "inline": True}],
    footer="kroxy library",
    timestamp=True,
)
```

### Slash Command

```python
from kroxy.discord.commands import SlashCommand, Option

@SlashCommand.decorator(
    name="ping",
    description="Check bot latency",
)
async def ping(interaction):
    await interaction.response.send_message("Pong!")
```

### Music Player

```python
from kroxy.discord.music import MusicPlayerManager, Track

manager = MusicPlayerManager()
player = manager.get_or_create(guild_id=111111111, channel_id=222222222)

track = Track(
    title="My Song",
    url="https://youtube.com/...",
    stream_url="https://...",
    duration=240,
    requester_id=123456789,
)
player.queue.add(track)
await player.play_next()
```

---

## License

MIT © kroxy
