No project description provided
Project description
Table of Contents
Introduction
This library provides the ability to interact with VK Teams Bot API.
API description - https://teams.vk.com/botapi/
Метабот for creating a bot and getting a token.
Installing
pip install -U vk-teams-async-bot
# OR
poetry add vk-teams-async-bot
Implemented methods in this library
method | ENDPOINT | EXISTS | name in library |
---|---|---|---|
GET | /self/get | ✅ | bot.self_get |
GET | /messages/sendText | ✅ | bot.send_text |
GET | /messages/sendFile | ✅ | bot.send_file_by_id |
POST | /messages/sendFile | ✅ | bot.send_file |
GET | /messages/sendVoice | ✅ | bot.send_voice |
POST | /messages/sendVoice | ✅ | bot.send_voice_by_id |
GET | /messages/editText | ✅ | bot.edit_text |
GET | /messages/deleteMessages | ✅ | bot.delete_msg |
GET | /messages/answerCallbackQuery | ✅ | bot.answer_callback_query |
Examples
Basic initialization
import asyncio
from vk_teams_async_bot.bot import Bot
from vk_teams_async_bot.events import Event
from vk_teams_async_bot.filter import Filter
from vk_teams_async_bot.handler import CommandHandler
app = Bot(bot_token="TOKEN", url="URL")
async def cmd_start(event: Event, bot: Bot):
await bot.send_text(chat_id=event.chat.chatId, text="Hello")
app.dispatcher.add_handler(
CommandHandler(callback=cmd_start, filters=Filter.command("/start")),
)
async def main():
await app.start_polling()
if __name__ == "__main__":
asyncio.run(main())
Send messages
Without formatting
async def cmd_start(event: Event, bot: Bot):
await bot.send_text(chat_id=event.chat.chatId, text="Hello")
await bot.send_text(chat_id=event.chat.chatId, text="<b>Hello</b>")
await bot.send_text(chat_id=event.chat.chatId, text="*Hello*")
Result:
MarkdownV2
parse_mode=ParseMode.MARKDOWNV2
- All special characters that do not represent the beginning or end of the style must be escaped using a backslash \
Methods MarkdownV2
1. *hello* - bold
2. _hello_ - italic
3. __hello__ - underline
4. ~hello~ - strikethrought
5. [hello](https://example.com) - hyperlinked text
6. @\[user@company\] - to mention the VK Teams user
7. ```hello``` - inline code
8. ```python print("hello") ``` - multiline block code
9. Ordered list:
1. First element
2. Second element
10. Unordered list:
- First element
- Second element
11. Quote:
>Begin of quote
>End of quote
async def cmd_start(event: Event, bot: Bot):
text = \
"""
*hello*
_hello_
__hello__
"""
await bot.send_text(
chat_id=event.chat.chatId, text=text, parse_mode=ParseMode.MARKDOWNV2
)
Result:
InlineKeyboard
from vk_teams_async_bot.constants import StyleKeyboard
from vk_teams_async_bot.handler import CommandHandler
from vk_teams_async_bot.helpers import InlineKeyboardMarkup, KeyboardButton
def keyboad_start_menu():
keyboard = InlineKeyboardMarkup(buttons_in_row=3)
keyboard.add(
KeyboardButton(
text="🛠 first button",
callback_data="cb_one",
style=StyleKeyboard.PRIMARY,
),
KeyboardButton(
text="🕹 second button",
callback_data="cb_two",
style=StyleKeyboard.BASE,
),
KeyboardButton(
text="🌐 third button",
url="https://example.com/",
style=StyleKeyboard.ATTENTION,
),
)
return keyboard
async def cmd_start(event: Event, bot: Bot):
text = """hello"""
await bot.send_text(
chat_id=event.chat.chatId,
text=text,
inline_keyboard_markup=keyboad_start_menu(),
)
You can specify the number of buttons in a row
InlineKeyboardMarkup(buttons_in_row=1)
Middleware
You can check the incoming request or add any data for further use in handlers.
Check the access rights of the user or group
from vk_teams_async_bot.middleware import Middleware
class AccessMiddleware(Middleware):
async def handle(self, event, bot):
allowed_chats = [
"id@chat.agent",
]
if event.chat.chatId not in allowed_chats:
text = f"Does not have rights to use the bot - {event.chat.chatId}"
await bot.send_text(chat_id=event.chat.chatId, text=text)
raise PermissionError(text)
return event
async def main():
app.dispatcher.middlewares = [AccessMiddleware(),]
await app.start_polling()
if __name__ == "__main__":
asyncio.run(main())
Add a user or group role
Let's imagine that we have a data source on our side with roles or user rights that we want to use to access a specific menu or handler
from vk_teams_async_bot.middleware import Middleware
class UserRoleMiddleware(Middleware):
async def handle(self, event, bot):
roles = {
"id@chat.agent": "admin",
}
event.middleware_data.update({"role": roles.get(event.chat.chatId)})
logger.debug(
"UserRoleMiddleware role for {chatID} - {role}".format(
chatID=event.chat.chatId, role=event.middleware_data.get("role")
)
)
return event
async def main():
app.dispatcher.middlewares = [UserRoleMiddleware(),]
await app.start_polling()
if __name__ == "__main__":
asyncio.run(main())
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file vk_teams_async_bot-0.2.6.tar.gz
.
File metadata
- Download URL: vk_teams_async_bot-0.2.6.tar.gz
- Upload date:
- Size: 17.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.8.3 CPython/3.11.7 Windows/10
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 91c2fe80ec8d8848af98bb119db64303988c42acc6f4ee0b69b4898a3c14927b |
|
MD5 | 2fe093ca417eb497b9b39f8d3c5bd224 |
|
BLAKE2b-256 | 988c9fe18d0c8ea6e89871102826f15d4f8985938ee733695068f65072e5016e |
File details
Details for the file vk_teams_async_bot-0.2.6-py3-none-any.whl
.
File metadata
- Download URL: vk_teams_async_bot-0.2.6-py3-none-any.whl
- Upload date:
- Size: 18.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.8.3 CPython/3.11.7 Windows/10
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 5721f07ff2e52eeb1b6b545e47d8bfdd786a4a40505ce7884cc7ff8bcad0bde8 |
|
MD5 | e8e12aa04694b5fe5ccb83e0d7697442 |
|
BLAKE2b-256 | 9b51601147d0f060401776de7b11f8de09f17d67939dcdcbcb7a3b39e3ef5530 |