Metadata-Version: 2.4
Name: kdefender-wrapper
Version: 0.4.0
Summary: A Telegram bot wrapper for K-Defender security
Author-email: Fire-K <karpov.konstantin.s@gmail.com>
License-Expression: MIT
Project-URL: Homepage, https://github.com/FIRE-K/K-Defender
Project-URL: Issues, https://github.com/FIRE-K/K-Defender/issues
Classifier: Intended Audience :: Developers
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.8
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Framework :: AsyncIO
Classifier: Topic :: Security
Requires-Python: >=3.8
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: aiohttp>=3.8
Requires-Dist: deep-translator>=1.11.0
Dynamic: license-file

# K-Defender-wrapper

🛡️ **K-Defender-wrapper** protects Telegram bot handlers with K-Defender verdict checks.
Works with both **async** and **sync** bot libraries.

---

## Features

- Async + sync support in one API
- Compatible with aiogram, python-telegram-bot, TeleBot and similar frameworks
- Decorator-based protection (`@kdefender_check`)
- Automatic message/callback text detection
- Safe-by-default blocking on failed verdict/network errors

---

## Installation

```bash
pip install kdefender-wrapper
```

## Quick Start (aiogram / PTB async)
```python
from kdefender_wrapper import setup, close, kdefender_check

await setup(
    bot=bot,
    url=URL,
    chat_token=CHAT_TOKEN,  # token from K-Defender
    lang="en"
)

@kdefender_check()
async def handler(message):
    await message.answer("Message accepted")

@kdefender_check(param="message")
async def strict_handler(message):
    await message.answer("Message accepted")

await close()
```

## Quick Start (TeleBot sync)
```python
from kdefender_wrapper import setup, close, kdefender_check

setup(
    bot=bot,
    url=URL,
    chat_token=CHAT_TOKEN,
    lang="en"
)

@kdefender_check()
def handler(message):
    bot.reply_to(message, "Message accepted")

close()
```

## How It Works
1. User message is intercepted
2. Text is sent to K-Defender `/check/`
3. JSON verdict is parsed
4. Handler executes only for `{"result":"ok"}`
5. Otherwise message is blocked and user gets a safe notice
