Metadata-Version: 2.4
Name: openbot-id
Version: 1.1.0
Summary: Python client for the Openbot ID authorization API
Author: Kafnik
License-Expression: MIT
Keywords: telegram,authorization,fastapi,telebot
Classifier: Programming Language :: Python :: 3
Classifier: Operating System :: OS Independent
Requires-Python: >=3.10
Description-Content-Type: text/markdown
License-File: LICENSE
Dynamic: license-file

# Openbot ID — Python-библиотека

Релиз `1.1.0`. Библиотека проверяет права пользователей Telegram через защищённый Openbot ID API. База пользователей хранится только на сервере.

Лицензия: MIT. Автор: Kafnik.

## Установка из исходной папки

```bash
python -m pip install .
```

Используй виртуальное окружение (`python3 -m venv venv`).

## С pyTelegramBotAPI

```python
import os
import telebot
from openbot_id import OpenbotID

bot = telebot.TeleBot(os.environ["TELEGRAM_BOT_TOKEN"])
openbot = OpenbotID(api_key=os.environ["OPENBOT_API_KEY"], bot=bot)

@bot.message_handler(commands=["test"])
@openbot.check_level("tester", level=2)
def test(message):
    bot.reply_to(message, "✅ Доступ разрешён")

@bot.message_handler(commands=["panel"])
@openbot.require_access()
def panel(message):
    bot.reply_to(message, "Панель доступна")

# Несколько декораторов check_level означают ИЛИ:
@bot.message_handler(commands=["staff"])
@openbot.check_level("tester", level=2)
@openbot.check_level("developer", level=2)
def staff(message):
    bot.reply_to(message, "✅ Вы тестировщик или разработчик уровня 2+")

bot.infinity_polling()
```

Декоратор `@bot.message_handler` должен стоять выше `@openbot.check_level` и `@openbot.require_access`.

## Другие функции

```python
openbot.get_user(123456789)                # словарь с user_id, exists, status, level
openbot.get_status(123456789)              # статус
openbot.get_level(123456789)               # числовой уровень
openbot.has_level(123456789, "tester", 2)  # bool
openbot.check_access(123456789)            # bool
```

При отсутствии доступа команда не выполняется. Если API недоступен, проверка также не пропускает команду. При переданном `bot=bot` библиотека отвечает пользователю сообщением.

Сервер по умолчанию: `https://server.tail116c85.ts.net`. При смене сервера можно передать `api_url="https://..."`.

## Безопасность

- Выдавай разработчикам только их собственные ключи `ob_live_...`.
- Не публикуй главный секрет сервера, токены ботов или SQLite-базу.
- Для реального бота храни секреты в переменных окружения.
- Библиотека требует HTTPS.
- При отключении домашнего интернета API временно недоступен.

## Совпадение имён

На Linux-сервере есть локальный `openbot_id.py`, который управляет SQLite. Не устанавливай клиентский пакет в то же Python-окружение, пока серверный модуль не переименован или не вынесен в отдельный пакет.

## Тесты

```bash
python -m unittest discover -s tests -v
```
