Skip to main content

No project description provided

Project description

PyPi Package Version Package dwn stats Repo size

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:

image

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:

image

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(),
    )

image

You can specify the number of buttons in a row InlineKeyboardMarkup(buttons_in_row=1)

image

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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

vk_teams_async_bot-0.2.5.tar.gz (17.2 kB view details)

Uploaded Source

Built Distribution

vk_teams_async_bot-0.2.5-py3-none-any.whl (18.9 kB view details)

Uploaded Python 3

File details

Details for the file vk_teams_async_bot-0.2.5.tar.gz.

File metadata

  • Download URL: vk_teams_async_bot-0.2.5.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

Hashes for vk_teams_async_bot-0.2.5.tar.gz
Algorithm Hash digest
SHA256 83f1be871028d4fe8f2a20e8aa0f34b6029f90b75d490b0b76d6c72e047e3d22
MD5 2abf518b7c1b500b8287d674c0e7a719
BLAKE2b-256 66bf2ed98d82ebfaf8a7f91ecafe2cf7ed3b199a7ea88fc4da03805059962b56

See more details on using hashes here.

File details

Details for the file vk_teams_async_bot-0.2.5-py3-none-any.whl.

File metadata

File hashes

Hashes for vk_teams_async_bot-0.2.5-py3-none-any.whl
Algorithm Hash digest
SHA256 5a190e25af6302acc712aa147bf3cf1a22dee34a81f9efd28c44ae30c1a3ac6e
MD5 556dcd9d6723d567a277d2e1a11a00df
BLAKE2b-256 758dc9c13659d06eaae4218a7209ab77e037f5b81159a19bd16fe1aaa5b6e102

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page