Name | botik JSON |
Version |
0.0.2
JSON |
| download |
home_page | |
Summary | Botik core package |
upload_time | 2023-04-14 13:48:29 |
maintainer | |
docs_url | None |
author | |
requires_python | >=3.7 |
license | |
keywords |
api
framework
bot
messenger
async
botik
|
VCS |
|
bugtrack_url |
|
requirements |
No requirements were recorded.
|
Travis-CI |
No Travis.
|
coveralls test coverage |
No coveralls.
|
# Botik
Botik позволяет вам писать код для ботов, одновременно исполняемый на разных мессенджерах.
Так же вам предлагается перейти от типичного написания функций-хендлеров на новую абстракцию страниц.
[Техническая документация](https://botik.readthedocs.io)
## Установка
```python
# Telegram
pip install botik-telebot
# VK
pip install botik-vkbottle
```
## Пример кода страницы
Ваше приложение на Botik будет представлять собой набор страниц.
Страница — это объект для обработки пользовательского ввода и вывода.
```python
class ExamplePage(Page):
async def make_page_content(self, user):
text = "Пример страницы"
# ButtonCallback ожидает асинхронный метод с первым аргументом user,
# и всеми последующими с явным указанием их имен
self.markup.add_row([
ButtonData("Нажми меня!", ButtonCallback(self.send, message="Привет, мир!"))
])
self.markup.add_row([
ButtonData("Back", ButtonCallback(navigator.get_back)),
ButtonData("Home", ButtonCallback(navigator.change_page, path=f"~/"))
])
await self.send(user, text, markup=True)
```
## Запуск бота
### Создаем два модуля-входных точек для нашего приложения.
Сперва инициализируем Backbone фреймворк для работы с мессенджером и прокидываем его в конструктор ядра приложения.
```python
# Telegram
from telebot.async_telebot import AsyncTeleBot
from botik_telebot.app import TgApp
token = "токен бота"
bot = AsyncTeleBot(token)
app = TgApp(bot)
```
```python
# VK
from vkbottle import API
from vkbottle.bot import Bot
from botik_vkbottle.app import VkApp
token = "токен бота"
# Текущая реализация фреймворка требует ссылки на High и Low Level API
bot = Bot(token=token)
low_api = API(token)
app = VkApp(bot, low_api)
```
### Создаем экземпляры, описывающие наши будущие страницы
```python
# Первым аргументом тип страницы, вторым относительный адрес, третьим адрес или объект родительской страницы
main_data = PageData(MainPage, '/', '', inline=True, one_time=True)
page1 = PageData(FirstPage, '/page1', main_data, inline=False, one_time=False)
# ...
# Собираем их в список
pages = [main_data, page1]
```
### Устанавливаем странички и запускаем приложение!
```python
app.set_pages(pages)
app.start()
```
###### Основан на [pyTelegramBotAPI](https://github.com/eternnoir/pyTelegramBotAPI) и [VKBottle](https://github.com/vkbottle/vkbottle)
Raw data
{
"_id": null,
"home_page": "",
"name": "botik",
"maintainer": "",
"docs_url": null,
"requires_python": ">=3.7",
"maintainer_email": "",
"keywords": "api,framework,bot,messenger,async,botik",
"author": "",
"author_email": "dasstyx <dasstyx@gmail.com>",
"download_url": "https://files.pythonhosted.org/packages/4f/90/efff7ca79655f22bb99841836d8da6dc333e9fa4417b83eae4fc5d818175/botik-0.0.2.tar.gz",
"platform": null,
"description": "# Botik\r\n\r\nBotik \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0432\u0430\u043c \u043f\u0438\u0441\u0430\u0442\u044c \u043a\u043e\u0434 \u0434\u043b\u044f \u0431\u043e\u0442\u043e\u0432, \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u044b\u0439 \u043d\u0430 \u0440\u0430\u0437\u043d\u044b\u0445 \u043c\u0435\u0441\u0441\u0435\u043d\u0434\u0436\u0435\u0440\u0430\u0445.\r\n\u0422\u0430\u043a \u0436\u0435 \u0432\u0430\u043c \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u043e\u0442 \u0442\u0438\u043f\u0438\u0447\u043d\u043e\u0433\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u0439-\u0445\u0435\u043d\u0434\u043b\u0435\u0440\u043e\u0432 \u043d\u0430 \u043d\u043e\u0432\u0443\u044e \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u044e \u0441\u0442\u0440\u0430\u043d\u0438\u0446.\r\n\r\n[\u0422\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f](https://botik.readthedocs.io)\r\n\r\n## \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430\r\n\r\n```python\r\n# Telegram\r\npip install botik-telebot\r\n# VK\r\npip install botik-vkbottle\r\n```\r\n\r\n## \u041f\u0440\u0438\u043c\u0435\u0440 \u043a\u043e\u0434\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b\r\n\r\n\u0412\u0430\u0448\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043d\u0430 Botik \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u0441\u043e\u0431\u043e\u0439 \u043d\u0430\u0431\u043e\u0440 \u0441\u0442\u0440\u0430\u043d\u0438\u0446.\r\n\u0421\u0442\u0440\u0430\u043d\u0438\u0446\u0430 \u2014 \u044d\u0442\u043e \u043e\u0431\u044a\u0435\u043a\u0442 \u0434\u043b\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0433\u043e \u0432\u0432\u043e\u0434\u0430 \u0438 \u0432\u044b\u0432\u043e\u0434\u0430.\r\n\r\n```python\r\nclass ExamplePage(Page):\r\n async def make_page_content(self, user):\r\n text = \"\u041f\u0440\u0438\u043c\u0435\u0440 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b\"\r\n \r\n # ButtonCallback \u043e\u0436\u0438\u0434\u0430\u0435\u0442 \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u044b\u0439 \u043c\u0435\u0442\u043e\u0434 \u0441 \u043f\u0435\u0440\u0432\u044b\u043c \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u043c user,\r\n # \u0438 \u0432\u0441\u0435\u043c\u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c\u0438 \u0441 \u044f\u0432\u043d\u044b\u043c \u0443\u043a\u0430\u0437\u0430\u043d\u0438\u0435\u043c \u0438\u0445 \u0438\u043c\u0435\u043d\r\n self.markup.add_row([\r\n ButtonData(\"\u041d\u0430\u0436\u043c\u0438 \u043c\u0435\u043d\u044f!\", ButtonCallback(self.send, message=\"\u041f\u0440\u0438\u0432\u0435\u0442, \u043c\u0438\u0440!\"))\r\n ])\r\n self.markup.add_row([\r\n ButtonData(\"Back\", ButtonCallback(navigator.get_back)),\r\n ButtonData(\"Home\", ButtonCallback(navigator.change_page, path=f\"~/\"))\r\n ])\r\n \r\n await self.send(user, text, markup=True)\r\n```\r\n\r\n## \u0417\u0430\u043f\u0443\u0441\u043a \u0431\u043e\u0442\u0430\r\n\r\n### \u0421\u043e\u0437\u0434\u0430\u0435\u043c \u0434\u0432\u0430 \u043c\u043e\u0434\u0443\u043b\u044f-\u0432\u0445\u043e\u0434\u043d\u044b\u0445 \u0442\u043e\u0447\u0435\u043a \u0434\u043b\u044f \u043d\u0430\u0448\u0435\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f.\r\n\r\n\u0421\u043f\u0435\u0440\u0432\u0430 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u043c Backbone \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u043c\u0435\u0441\u0441\u0435\u043d\u0434\u0436\u0435\u0440\u043e\u043c \u0438 \u043f\u0440\u043e\u043a\u0438\u0434\u044b\u0432\u0430\u0435\u043c \u0435\u0433\u043e \u0432 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440 \u044f\u0434\u0440\u0430 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f.\r\n\r\n```python\r\n# Telegram\r\nfrom telebot.async_telebot import AsyncTeleBot\r\nfrom botik_telebot.app import TgApp\r\n\r\ntoken = \"\u0442\u043e\u043a\u0435\u043d \u0431\u043e\u0442\u0430\"\r\nbot = AsyncTeleBot(token)\r\n\r\napp = TgApp(bot)\r\n```\r\n\r\n```python\r\n# VK\r\nfrom vkbottle import API\r\nfrom vkbottle.bot import Bot\r\nfrom botik_vkbottle.app import VkApp\r\n\r\ntoken = \"\u0442\u043e\u043a\u0435\u043d \u0431\u043e\u0442\u0430\"\r\n\r\n# \u0422\u0435\u043a\u0443\u0449\u0430\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0430 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0441\u0441\u044b\u043b\u043a\u0438 \u043d\u0430 High \u0438 Low Level API\r\nbot = Bot(token=token)\r\nlow_api = API(token)\r\n\r\napp = VkApp(bot, low_api)\r\n```\r\n\r\n### \u0421\u043e\u0437\u0434\u0430\u0435\u043c \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u044b, \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0449\u0438\u0435 \u043d\u0430\u0448\u0438 \u0431\u0443\u0434\u0443\u0449\u0438\u0435 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b\r\n\r\n```python\r\n# \u041f\u0435\u0440\u0432\u044b\u043c \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u043c \u0442\u0438\u043f \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b, \u0432\u0442\u043e\u0440\u044b\u043c \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0430\u0434\u0440\u0435\u0441, \u0442\u0440\u0435\u0442\u044c\u0438\u043c \u0430\u0434\u0440\u0435\u0441 \u0438\u043b\u0438 \u043e\u0431\u044a\u0435\u043a\u0442 \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0439 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b\r\nmain_data = PageData(MainPage, '/', '', inline=True, one_time=True)\r\npage1 = PageData(FirstPage, '/page1', main_data, inline=False, one_time=False)\r\n# ...\r\n\r\n# \u0421\u043e\u0431\u0438\u0440\u0430\u0435\u043c \u0438\u0445 \u0432 \u0441\u043f\u0438\u0441\u043e\u043a\r\npages = [main_data, page1]\r\n```\r\n\r\n### \u0423\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u0441\u0442\u0440\u0430\u043d\u0438\u0447\u043a\u0438 \u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435!\r\n\r\n```python\r\napp.set_pages(pages)\r\n\r\napp.start()\r\n```\r\n\r\n###### \u041e\u0441\u043d\u043e\u0432\u0430\u043d \u043d\u0430 [pyTelegramBotAPI](https://github.com/eternnoir/pyTelegramBotAPI) \u0438 [VKBottle](https://github.com/vkbottle/vkbottle)\r\n",
"bugtrack_url": null,
"license": "",
"summary": "Botik core package",
"version": "0.0.2",
"split_keywords": [
"api",
"framework",
"bot",
"messenger",
"async",
"botik"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "2806c03a78f8e676e25f26d9c17c67c8b5a5b3cc5230e3e903567cce9d48be8a",
"md5": "fa5f65709cd2e0fed3abf393ea93288a",
"sha256": "73d587e57d50fe9ff26fe217d1a1f4f762fb711948ff1dec770ecc78c2d2d72f"
},
"downloads": -1,
"filename": "botik-0.0.2-py3-none-any.whl",
"has_sig": false,
"md5_digest": "fa5f65709cd2e0fed3abf393ea93288a",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.7",
"size": 17744,
"upload_time": "2023-04-14T13:48:25",
"upload_time_iso_8601": "2023-04-14T13:48:25.777611Z",
"url": "https://files.pythonhosted.org/packages/28/06/c03a78f8e676e25f26d9c17c67c8b5a5b3cc5230e3e903567cce9d48be8a/botik-0.0.2-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "4f90efff7ca79655f22bb99841836d8da6dc333e9fa4417b83eae4fc5d818175",
"md5": "1fe625546ca83fc5c25f1e911ce45f0c",
"sha256": "f5428437c5e4f5dcead89ce3ba4ad0f436af8b82be9935e610fbb260a0096751"
},
"downloads": -1,
"filename": "botik-0.0.2.tar.gz",
"has_sig": false,
"md5_digest": "1fe625546ca83fc5c25f1e911ce45f0c",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.7",
"size": 13233,
"upload_time": "2023-04-14T13:48:29",
"upload_time_iso_8601": "2023-04-14T13:48:29.180124Z",
"url": "https://files.pythonhosted.org/packages/4f/90/efff7ca79655f22bb99841836d8da6dc333e9fa4417b83eae4fc5d818175/botik-0.0.2.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2023-04-14 13:48:29",
"github": false,
"gitlab": false,
"bitbucket": false,
"lcname": "botik"
}