botx-api 0.1.1

Обертка над BotX api (eXpress)
Documentation
# botx-api

## Описание
Обертка для api eXpress

## Использование
Добавьте в Cargo.toml
```toml
botx-api = { version = "*", features = ["anthill-di"] }
```

Доступны следующие features:

`botx-api-v-all` - включение фич всех версий (default)    
`botx-api-v2` - включает все апи 2ой версии    
`botx-api-v3` - включает все апи 3ой версии    
`botx-api-v4` - включает все апи 4ой версии    
`anthill-di` - добавляет зависимость от anthill-di и async-trait-with-sync (добавляет конструктор регистрации BotXApiContext в anthill-di)    

`token` - включить апи аутентификации бота    
`notifications-internal` - включить апи отправки события (боту)    
`notifications-direct` - включить апи отправки события (сообщения)    
`events-edit_event` - включить апи редактирования события (сообщения)    
`events-reply_event` - включить апи ответа на событие (сообщение)    
`events-status` - включить апи запроса состояния события    
`events-typing` - включить апи включения состояния печати    
`events-stop_typing` - включить апи остановки состояния печати    
`files-upload` - включить апи загрузки фала    
`files-download` - включить апи скачивания фала    
`stickers-new_sticker_pack` - включить апи создания набора стикеров    
`stickers-sticker_packs_list` - включить апи запроса списка наборов стикеров    
`stickers-add_sticker` - включить апи добавления набора стикеров    
`stickers-get_sticker_pack` - включить апи запроса информации о наборе стикеров    
`stickers-get_sticker` - включить апи запроса информации о стикере    
`stickers-update_sticker_pack` - включить апи обновления набора стикеров    
`stickers-delete_sticker` - включить апи удаления стикера    
`stickers-delete_sticker_pack` - включить апи удаления набора стикеров    

## Использование
Для использования создайте объект BotXApiContext
* Через метод new - с настройками клиента по умолчанию и конфигурацией бота
* Через метод from_client - с настроенным reqwest::async_impl::client::Client и конфигурацией бота
* Через метод from_env_with_default_client - с настройками клиента по умолчанию и конфигурацией бота из переменных окружения
* Через метод from_env - с настроенным reqwest::async_impl::client::Client и конфигурацией бота из переменных окружения
* Через регистрацию в anthill_di - зарегистрируйте BotXApiContext в контексте di методом extensions::IBotXApiContextExt::register_botx_api_context, опционально зарегистрируйте объекты BotXApiContextConfiguration как Singleton, reqwest::async_impl::client::Client, ApiEndpoints иначе будут взяты дефолтные настройки (конфигурация бота из переменных окружения)

Настройки бота берутся из переменных окружения:
* BOTX_API_CTS_URL - url cts сервера
* BOTX_API_BOT_ID - id бота
* BOTX_API_BOT_SECRET_KEY - секретный ключ бота

Все модели реализуют паттерн builder. Пример использования:
```rs
let internal_notification_request = InternalNotificationRequestBuilder::default()
    .with_group_chat_id(uuid::Uuid::from_str("de981642-5224-4e70-a8dd-9a933a8e096e"))
    .with_data(PingBotsCommandData { })
    .with_opts(PingBotsCommandOption { })
    .build()
    .expect("Не все поля запроса были указаны");
```

Для автоматического обновления авторизации добавлен метод retry_with_auth:
```rs
let internal_notification_request = InternalNotificationRequestBuilder::default()
    .with_group_chat_id(uuid::Uuid::from_str("de981642-5224-4e70-a8dd-9a933a8e096e"))
    .with_data(PingBotsCommandData { })
    .with_opts(PingBotsCommandOption { })
    .build()
    .expect("Не все поля запроса были указаны");

let internal_notification_result = retry_with_auth(&self.api, || internal_notification(&self.api, &internal_notification_request)).await;
```

При регистрации через anthill-di можно зарегистрировать свой объект ApiEndpoints, что позволяет менять api (бесполезно, но возможно)

Логика пишет логи через crate log. Включите логирование чтобы лучше понять работу вашего приложения

## Вклад
Откройте issue с вопросом или предложением

## Лицензия
MIT, можно использовать в любых целях

## Статус проекта
|Состояние|Метод|АPI|Описание|
|---|---|---|---|
|✅|GET|/api/v2/botx/bots/:bot_id/token||
|❌|POST|/api/v3/botx/notification/callback/direct|Отправка директ нотификации в чат (Deprecated)|
|✅|POST|/api/v4/botx/notifications/internal|Отправка внутренней бот нотификации|
|✅|POST|/api/v4/botx/notifications/direct|Отправка директ нотификации в чат|
|✅|POST|/api/v3/botx/events/edit_event|Редактирование события|
|✅|POST|/api/v3/botx/events/reply_event|Ответ (reply) на сообщение|
|✅|GET|/api/v3/botx/events/:sync_id/status|Статус сообщения|
|✅|POST|/api/v3/botx/events/typing|Отправка typing|
|✅|POST|/api/v3/botx/events/stop_typing|Отправка stop_typing|
|❌|GET|/api/v3/botx/chats/list|Получение списка чатов бота|
|❌|GET|/api/v3/botx/chats/info|Получение информации о чате|
|❌|POST|/api/v3/botx/chats/add_user|Добавление юзеров в чат|
|❌|POST|/api/v3/botx/chats/remove_user|Удаление юзеров из чата|
|❌|POST|/api/v3/botx/chats/add_admin|Добавление администратора в чат|
|❌|POST|/api/v3/botx/chats/stealth_set|Включение стелс режима в чате|
|❌|POST|/api/v3/botx/chats/stealth_disable|Отключение стелс режима в чате|
|❌|POST|/api/v3/botx/chats/create|Создание чата|
|❌|POST|/api/v3/botx/chats/pin_message|Закрепление сообщения в чате|
|❌|POST|/api/v3/botx/chats/unpin_message|Открепление сообщения в чате|
|❌|GET|/api/v3/botx/users/by_email|Поиск данных юзера по его почте (Deprecated)|
|❌|POST|/api/v3/botx/users/by_email|Поиск данных юзеров по их почтам|
|❌|GET|/api/v3/botx/users/by_huid|Поиск данных юзера по его huid|
|❌|GET|/api/v3/botx/users/by_login|Поиск данных юзера по его ad логину и ad домену|
|❌|GET|/api/v3/botx/users/by_other_id|Поиск данных юзера по дополнительному идентификатору|
|❌|GET|/api/v3/botx/users/users_as_csv|Получение списка пользователей на CTS|
|❌|GET|/api/v3/botx/users/update_profile|Обновление профиля юзера|
|❌|GET|/api/v3/botx/smartapps/list|Получение списка smartapp на CTS|
|❌|POST|/api/v3/botx/smartapps/event|Отправка smartapp события|
|❌|POST|/api/v3/botx/smartapps/notification|Отправка smartapp нотификации|
|❌|POST|/api/v3/botx/smartapps/upload_file|Загрузка smartapp файла|
|✅|GET|/api/v3/botx/stickers/packs|Получение списка наборов стикеров|
|✅|GET|/api/v3/botx/stickers/packs/:pack_id|Получение набора стикеров|
|✅|GET|/api/v3/botx/stickers/packs/:pack_id/stickers/:sticker_id|Получение стикера из набора стикеров|
|✅|POST|/api/v3/botx/stickers/packs|Создание набора стикеров|
|✅|POST|/api/v3/botx/stickers/packs/:pack_id/stickers|Добавление стикера в набор стикеров|
|✅|PUT|/api/v3/botx/stickers/packs/:pack_id|Редактирование набора стикеров|
|✅|DELETE|/api/v3/botx/stickers/packs/:pack_id|Удаление набора стикеров|
|✅|DELETE|/api/v3/botx/stickers/packs/:pack_id/stickers/:sticker_id|Удаление стикера из набора стикеров|
|✅|GET|/api/v3/botx/files/download|Скачивание файла|
|✅|POST|/api/v3/botx/files/upload|Загрузка файла|