Giter Site home page Giter Site logo

vkbottle / vkbottle Goto Github PK

View Code? Open in Web Editor NEW
443.0 21.0 99.0 3.81 MB

Сustomizable asynchronous VK API framework

Home Page: https://vkbottle.readthedocs.io/ru/latest

License: MIT License

Python 100.00%
vk vk-api vkbottle user-longpoll async asyncio bot longpoll-api callback middleware

vkbottle's Introduction

VKBottle

VKBottle

Кастомизируемый, быстрый и удобный фреймворк для работы с VK API

GitHub Workflow Status PyPI - Downloads GitHub issues by-label PyPI

Hello World

from vkbottle.bot import Bot

bot = Bot("GroupToken")

@bot.on.message()
async def handler(_) -> str:
    return "Hello world!"

bot.run_forever()

Смотреть больше примеров!

Документация

Туториал для новичков
Техническая документация

Установка

Установить новейшую версию можно командой:

pip install vkbottle

Если вы ищете старые версии:

Contributing

ПР поддерживаются! Перед созданием пулл реквеста ознакомьтесь с CONTRIBUTION_GUIDE. Нам приятно видеть ваш вклад в развитие фреймворка.
Задавайте вопросы в блоке Issues или на нашем форуме в Telegram!

Мейнтейнеры: click

Лицензия

Copyright © 2019-2023 timoniq.
Copyright © 2022 FeeeeK.
Этот проект имеет MIT лицензию.

vkbottle's People

Contributors

darklyz avatar delvinru avatar dependabot-preview[bot] avatar dependabot[bot] avatar dhvcc avatar doncode avatar f1zztao avatar feeeek avatar kforbro avatar klalafuda avatar krilifon avatar l3nya avatar markelovstyle avatar mironovmeow avatar monosans avatar mrrollman avatar mrsmitix avatar mrtnvgr avatar ne0shka avatar nomilkinmyhome avatar olegt0rr avatar prostomarkeloff avatar rmdlv avatar tblkva avatar thebakercat avatar timoniq avatar vladislavkovalskyi avatar vypivshiy avatar walter-sparrow avatar yilbegan avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

vkbottle's Issues

TypeError: 'coroutine' object is not callable

Опишите баг
Вылетает исключение.
На предыдушей версии данной проблемы не наблюдалось
database для хранения состояния не использую

[VKBottle] While parent_processor was handling error occurred 
Traceback (most recent call last):
  File "/path/.venv/lib/python3.7/site-packages/vkbottle/framework/framework/swear_handler.py", line 26, in wrapper
    return await func(*args, **kwargs)
  File "/path/.venv/lib/python3.7/site-packages/vkbottle/framework/bot/processor.py", line 35, in parent_processor
    return await self.message_processor(obj, client_info)
  File "/path/.venv/lib/python3.7/site-packages/vkbottle/framework/bot/processor.py", line 81, in message_processor
    task = await rules[0].call(*args, **kwargs)
  File "/path/vkbot.py", line 305, in branch4_handler
    await bot.branch.add(ans.peer_id, "branch5", offer_id=offer.id)
  File "/path/.venv/lib/python3.7/site-packages/vkbottle/framework/framework/branch/database_branch.py", line 99, in add
    await self.get_branch(branch, context).enter()
  File "/path/.venv/lib/python3.7/site-packages/vkbottle/framework/framework/branch/database_branch.py", line 36, in get_branch
    branch = bare()
TypeError: 'coroutine' object is not callable
 [TIME 22:05:53]

Ваш код
await bot.branch.add(ans.peer_id, "branch5", offer_id=offer.id)

Заполните поля:
vkbottle-2.7.5
Установлен c GIT

Баг ошибка при работе branch (веток)

Опишите баг
После того как поподаешь в branch, выдает ошибку

`[VKBottle] While parent_processor was handling error occurred 

Traceback (most recent call last):
  File "D:\vk-bot-qwest\env\lib\site-packages\vkbottle\framework\framework\swear_handler.py", line 26, in wrapper
    return await func(*args, **kwargs)
  File "D:\vk-bot-qwest\env\lib\site-packages\vkbottle\framework\bot\processor.py", line 35, in parent_processor
    return await self.message_processor(obj, client_info)
  File "D:\vk-bot-qwest\env\lib\site-packages\vkbottle\framework\bot\processor.py", line 81, in message_processor
    task = await rules[0].call(*args, **kwargs)
  File "calback.py", line 28, in wrapper
    await bot.branch.add(ans.peer_id, "my_branch", mark=mark)
  File "D:\vk-bot-qwest\env\lib\site-packages\vkbottle\framework\framework\branch\database_branch.py", line 99, in add
    await self.get_branch(branch, context).enter()
  File "D:\vk-bot-qwest\env\lib\site-packages\vkbottle\framework\framework\branch\database_branch.py", line 36, in get_branch
    branch = bare()
TypeError: 'coroutine' object is not callable`

Что должно было случится
не должно быть ошибки, работа бота должна продолжаться

Ваш код
https://pastebin.com/ewDxEP2m

@bot.on.message(text="ставлю боту <mark:int>", lower=True)
async def wrapper(ans: Message, mark):
    await ans("Теперь расскажи, что ты думаешь о нем:")
    await bot.branch.add(ans.peer_id, "my_branch", mark=mark)
 
@bot.branch.simple_branch("my_branch")
async def branch(ans: Message, mark):
    if ans.text.lower() in ["это все", "да"]:
        await ans(f"Окей, твоя оценка «{mark}» и рассказ о боте заcчитан!")
        await bot.branch.exit(ans.peer_id)
 
    await ans(f"Ты считаешь, что {ans.text}. Мы тебя поняли. Это все?")

Заполните поля:

  • OS: Windows 10 x64
  • Version of vkbottle: 2.7.5

Дополнительная информация
...

Методы не поддерживают параметры captcha_sid и captcha_key

Опишите баг
Для прохождения капчи нужно в параметрах указать captcha_sid и captcha_key
Т.к в коде методы не принимают **kwargs или captcha_sid или captcha_key, питон пишет что таких параметров нет.

Что должно было случится
Фреймворк должен в параметрах передать captcha_sid и captcha_key (https://vk.com/dev/captcha_error)

Ваш код

async def solve_captcha(e: VKError):
    # ... Solve captcha and get the answer
    await e.method_requested(**e.params_requested, captcha_key=resp['captchaSolve'], captcha_sid=captcha_sid)

Exception

Traceback (most recent call last):
  File "/home/nm17/.cache/pypoetry/virtualenvs/nicevk-guMaWNlW-py3.8/lib/python3.8/site-packages/vkbottle/framework/user/processor.py", line 75, in _processor
    return await self._message_processor(*data)
  File "/home/nm17/.cache/pypoetry/virtualenvs/nicevk-guMaWNlW-py3.8/lib/python3.8/site-packages/vkbottle/framework/user/processor.py", line 123, in _message_processor
    task = await rule.call(message, *args, **kwargs)
  File "/home/nm17/PycharmProjects/nicevk/nicevk/plugins/type_plugin.py", line 24, in help_
    await ans.api.messages.edit(ans.peer_id, ans.id, mes)
  File "/home/nm17/.cache/pypoetry/virtualenvs/nicevk-guMaWNlW-py3.8/lib/python3.8/site-packages/vkbottle/types/methods/messages.py", line 235, in __call__
    return await self.request(
  File "/home/nm17/.cache/pypoetry/virtualenvs/nicevk-guMaWNlW-py3.8/lib/python3.8/site-packages/vkbottle/api/api/request.py", line 82, in __call__
    response = await request(
  File "/home/nm17/.cache/pypoetry/virtualenvs/nicevk-guMaWNlW-py3.8/lib/python3.8/site-packages/vkbottle/api/api/request.py", line 63, in request
    raise exception
vkbottle.utils.exceptions.VKError: (14, 'Captcha needed', <Method MessagesEdit>, {'peer_id': 580903823, 'message_id': 1108976, 'message': 'ggf'})

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/nm17/.cache/pypoetry/virtualenvs/nicevk-guMaWNlW-py3.8/lib/python3.8/site-packages/vkbottle/framework/user/user.py", line 228, in emulate
    await self._processor(update, update_code, update_fields)
  File "/home/nm17/.cache/pypoetry/virtualenvs/nicevk-guMaWNlW-py3.8/lib/python3.8/site-packages/vkbottle/framework/user/processor.py", line 78, in _processor
    await self.error_handler.handle_error(e)
  File "/home/nm17/.cache/pypoetry/virtualenvs/nicevk-guMaWNlW-py3.8/lib/python3.8/site-packages/vkbottle/framework/framework/error_handler/error_handler.py", line 15, in handle_error
    return await self.handled_errors[e.error_code](e)
  File "/home/nm17/PycharmProjects/nicevk/nicevk/api.py", line 39, in solve_captcha
    await e.method_requested(**e.params_requested, captcha_key=resp['captchaSolve'], captcha_sid=captcha_sid)
TypeError: __call__() got an unexpected keyword argument 'captcha_key'

Заполните поля:

  • OS: Ubuntu 20.04 (Python v3.8.2)
  • Version of vkbottle: v2.7.3

Дополнительная информация
...

ImportError

Опишите баг
Traceback (most recent call last):
File "/data/data/com.termux/files/usr/lib/python3.8/multiprocessing/synchronize.py", line 28, in
from _multiprocessing import SemLock, sem_unlink
ImportError: cannot import name 'SemLock' from '_multiprocessing' (/data/data/com.termux/files/usr/lib/python3.8/lib-dynload/_multiprocessing.cpython-38.so)

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "bot.py", line 3, in
bot = Bot("31fc73ccaafdabe479534eb645e1256ba6a59bcca734766ddbc1d86e57f0de3a741f6f63ad990593c9314")
File "/data/data/com.termux/files/usr/lib/python3.8/site-packages/vkbottle/framework/bot/bot.py", line 94, in init
logger.add(
File "/data/data/com.termux/files/usr/lib/python3.8/site-packages/loguru/_logger.py", line 935, in add
handler = Handler(
File "/data/data/com.termux/files/usr/lib/python3.8/site-packages/loguru/_handler.py", line 85, in init
self._queue = multiprocessing.SimpleQueue()
File "/data/data/com.termux/files/usr/lib/python3.8/multiprocessing/context.py", line 113, in SimpleQueue
return SimpleQueue(ctx=self.get_context())
File "/data/data/com.termux/files/usr/lib/python3.8/multiprocessing/queues.py", line 336, in init
self._rlock = ctx.Lock()
File "/data/data/com.termux/files/usr/lib/python3.8/multiprocessing/context.py", line 67, in Lock
from .synchronize import Lock
File "/data/data/com.termux/files/usr/lib/python3.8/multiprocessing/synchronize.py", line 30, in
raise ImportError("This platform lacks a functioning sem_open" +
ImportError: This platform lacks a functioning sem_open implementation, therefore, the required synchronization primitives needed will not function, see issue 3770.

Что должно было случится
Ответит мне в сообщениях , выходит ошибка

Ваш код
https://pastebin.com/FuXm9JUd

Заполните поля:

  • OS: Android (PyDroid 3)
  • Version of vkbottle: 2.7.4

Дополнительная информация
...

Баг - Chat action events don't process by AsyncHandleManager

Опишите баг
Chat action events don't process by AsyncHandleManager

Что должно было случится
N/A

Ваш код
N/A

Заполните поля:

  • OS: Windows
  • Version of vkbottle: Latest

Дополнительная информация
...

Новая возможность - User Longpoll API similar to bot's

Запрос на возможность связан с проблемой? Если да, опишите
Добавление схожего с ботами API для User класса. Иногда очень хочется быстро перенести систему хендлеров из бота в юзера и обратно, но к сожалению с текущим состоянием юзер лп это невозможно

Опишите решение, которое вы бы хотели видеть

  • Схожее API для хендлеров (message, chat_message, message_handler для добавления правил на сообщения с поддержкой всех col rules, event для хендлинга событий соответственно)
  • Все основные воркеры из ботов: branch через те же генераторы, middleware, extension
  • Нормальные error_handlerы
  • Перенос хендлеров бота в юзера и обратно без проблем и страшного кода

Опишите решения, которые вы временно предприняли для решения этого вопроса
Уродливые самодельные объявляющие хендлеры декораторы и прочие костыли

[Дополнительно] Пример псевдокода

user = User("user-token")

@user.on.message(text=["привет", "прив"])
async def wrapper(ans: Message):
    await user.branch.add(ans.peer_id, "some_branch")
    await ans("Привет, расскажи как жизнь")

Менеджер для handler return

[Дополнительно] Пример псевдокода

class MyManager(HandlerReturnManager):
    @value_instance(str)
    async def handle(value: str):
        await bot.api.messages.send(peer_id=self.event.peer_id, message=value)

Возникновение ошибки в AttachmentRule

Опишите баг
При создании хэндлера с правилом AttachmentRule возникает ошибка AttributeError

Ваш код
https://pastebin.com/9sCmiTAt

Заполните поля:

  • OS: Windows
  • Version of vkbottle: Latest

Дополнительная информация
Использую vkbottle.framework.user.User, возможно у Bot такой проблемы не будет, так как attachments типизированы.

KeyError: 'client_info'

изображение

Видимо, с веб версии ВКонтакте client_info не высылается и бот совсем отказывается работать.

Make TokenManager

Make TokenManager for multiple token storage and then switch them in case of too many requests per second error

#TODO

Баг

Опишите баг
Теряется позиционный аргумент

Что должно было случится
На запрос должен сработать соответствующий хендлер без ошибок.

Ваш код
https://pastebin.com/hAcKgDhT

Заполните поля:

  • OS: Windows 10 Pro
  • Version of vkbottle: 2.7.6

Дополнительная информация
Код ошибки - https://pastebin.com/db1c1xdi

Middleware не работает как это было задумано

Запрос на возможность связан с проблемой? Если да, опишите
Невозможно сделать пост-обработку

Опишите решения, которые вы временно предприняли для решения этого вопроса
Встраиваю пост-обработку в хендлеры

[Дополнительно] Пример псевдокода

class MyMiddleware(Middleware):
    async def pre(message: Message):
        # pre handling
    async def post(message: Message):
        # post handling

Придется избавиться от старого интерфейса Middleware.middleware

Новая возможность: трансляция в вкскрипт для метода execute

Опишите решение, которое вы бы хотели видеть
Хендлер, транслирующий код в vkscript для последующего вызова

Опишите решения, которые вы временно предприняли для решения этого вопроса
Просто сохраняя код в отдельных файлах .vkscript или в строках

[Дополнительно] Пример псевдокода

@vkscript
def code(api: API):
    names = []
    for user in api.users.get(user_ids=[1, 2, 3]):
        names.append(user.first_name)
    return names

Далее просто:

await api.execute(code)

Баг

Опишите баг
В cls_branch хендлеры срабатывают по цепочке

Что должно было случится
Хендлер должен сработать в соотвестивии с условием заданным в нём, и не обязательно соблюдая цепочку.

Ваш код
image

image

Заполните поля:

  • OS: Windows
  • Version of vkbottle: 2.7.2

Дополнительная информация
...

More Bot templates

Idea

Make some bot templates to make bots easily created "in one string" like this:

Echo("token").ready().run(skip_updates=False)

From echo template example

Todo

Some template ideas to make in the nearest future:

  • Echo bot template
  • ChatManager bot template
  • TextBot bot template

Leave your enhancements for bot templates in this issue. Pull requests are welcome

Возникла проблема при использование vkbottle uploader

Делаю бота через vkbottle.bot в группе.
Суть заключается в том, что человек пишет в лс группы "привет" и прикрепляет картинку к сообщению, бот же должен сохранить ссылку на вложение и отослать на другой сайт, после оттуда сохранить к себе и отправить(загрузить) тому человеку, который прислал её в лс группы.

Код скрипта с python на pastebin: https://pastebin.com/TzHHYra2

также прикрепляю скрин ошибки в консоли

Screenshot_10

Прошу помочь! Как это исправить/решить?

Branches compat. events

Прекрасно бы было увидеть возможность совмещения бранчей со всеми событиями, таким образом можно будет создавать такие конструкции как:

  • Даю тебе задание написать комментарий "[комментарий]" под записью [запись]
  • Пишет комментарий [комментарий] под записью [запись]
  • Спасибо!

It's going to be great if branches are compatible with all types of events;

  • My task for you: write comment [comment] for post [post]
  • Manage task. Write comment [comment] for post [post]
  • Thank you!

Exception

Опишите баг
pydantic.error_wrappers.ValidationError: 1 validation error for GetByIdModel

Что должно было случится
Ошибки быть не должно

Ваш код
https://pastebin.com/jUvzJipT

Заполните поля:

  • OS: Ubuntu 16.04
  • Version of vkbottle: Latest

Дополнительная информация
N/A

Validator Error [User LP]

pydantic.error_wrappers.ValidationError: 1 validation error for Message
fwd_messages -> 0 -> attachments
value is not a valid dict (type=type_error.dict)

This happens to all other objects

Баг в работе с бранч

Опишите баг

  • заходим в branch1 await bot.branch.add(ans.peer_id, 'branch1')
  • пользователь отвечает на сообщения и вызывается код branch1
  • await bot.branch.exit(ans.peer_id)
  • await bot.branch.add(ans.peer_id, 'branch2')
  • пользователь пишет сообщение, но снова попадает в branch1

Что должно было случится
Пользователь должен попадать в branch2

Заполните поля:

  • Version of vkbottle-2.7.5
    pip install git+https://github.com/timoniq/vkbottle.git

Дополнительная информация
мой код успешно работает на vkbottle-2.7.3 но ломается на vkbottle-2.7.5

Баг

Опишите баг
AttributeError: module 'vkbottle.types.objects' has no attribute 'photos'

Что должно было случится
Ошибки быть не должно.

Ваш код
https://pastebin.com/nkGKATBs

Заполните поля:

  • OS: Ubuntu
  • Version of vkbottle: 2.7

Дополнительная информация
...

data как атрибут класса, а не его экземпляра

В VBMLRule (и других правилах) self.data является атрибутом самого класса, а надо чтобы она была атрибутом его экземпляров, к примеру сейчас не работают команды в кол-ве > 1.
Следует заменить self.data['pattern'] = patterns на self.data = {'pattern': patterns} (и так для каждого правила соответственно), тогда для каждого экземпляра класса будет существовать своя data и баг будет пофиксен. С уважением, пользователь vkbottle!

Не работают бранчи в блупринтах

Опишите баг
Бранчи не работают в блупринтах

Что должно было случится
Бранчи работают в блупринтах

Ваш код
imageimageimage
image

main.py / routes/test_branch.py / проверка / вывод консоли

Заполните поля:

  • OS: Windows 10 x64
  • Version of vkbottle: 2.7.4

Дополнительная информация
...

Ошибка при работе росток (sprout)

Опишите баг
При попадание в росток, получаю ошибку

[======== Running on http://0.0.0.0:8080 ========
(Press CTRL+C to quit)VKBottle
] Using JSON_MODULE - json [TIME 16:06:48]
[VKBottle] Using asyncio loop - asyncio.windows_events [TIME 16:06:48]
[VKBottle] While parent_processor was handling error occurred 

Traceback (most recent call last):
  File "D:\vk-bot-qwest\env\lib\site-packages\vkbottle\framework\framework\swear_handler.py", line 26, in wrapper
    return await func(*args, **kwargs)
  File "D:\vk-bot-qwest\env\lib\site-packages\vkbottle\framework\bot\processor.py", line 35, in parent_processor
    return await self.message_processor(obj, client_info)
  File "D:\vk-bot-qwest\env\lib\site-packages\vkbottle\framework\bot\processor.py", line 81, in message_processor
    task = await rules[0].call(*args, **kwargs)
  File "calback.py", line 28, in wrapper
    await bot.branch.add(ans.peer_id, "my_branch")
  File "D:\vk-bot-qwest\env\lib\site-packages\vkbottle\framework\framework\branch\database_branch.py", line 99, in add
    await self.get_branch(branch, context).enter()
  File "D:\vk-bot-qwest\env\lib\site-packages\vkbottle\framework\framework\branch\database_branch.py", line 36, in get_branch
    branch = bare()
TypeError: 'coroutine' object is not callable

Что должно было случится
Я подозреваю что должен быть цикл бесконечный где при наступление события он выходит, но после того как попадаешь в росток выпадает ошибка и бот не реагирует

Ваш код

@bot.on.message(text="хочу в бранч", lower=True)
async def wrapper(ans: Message):
    await ans("Теперь ты в бранче!")
    await bot.branch.add(ans.peer_id, "my_branch")


@bot.branch.simple_branch("my_branch")
async def branch(ans: Message):
    if ans.text.lower() == "выйти":
        await ans("Окей, вывожу!")
        await bot.branch.exit(ans.peer_id)

    await ans("Ты в бранче. Пиши «выйти», чтобы выйти отсюда.")

Заполните поля:

  • OS: Windows 10
  • Version of vkbottle: 2.7.5

Дополнительная информация
...

Баг

Опишите баг
Не отвечает на сообщение со стороны юзера

Что должно было случится
Сработает соответствующий хендлер

Ваш код
https://pastebin.com/WrgxNe0m

Заполните поля:

  • OS: Windows 10 Pro
  • Version of vkbottle: 2.7.5

Дополнительная информация
Ошибка в консоли:
https://pastebin.com/A0JxtSLv

Баг

Опишите баг
В cls_branch хендлеры срабатывают по цепочке

Что должно было случится
Хендлер должен сработать в соотвестивии с условием заданным в нём, и не обязательно соблюдая цепочку.

Ваш код
https://pastebin.com/2nCJMTQb
https://pastebin.com/puZC8xZd

Заполните поля:

  • OS: Windows 10
  • Version of vkbottle: 2.7.2

Дополнительная информация
Значит проблема в библиотеке, потому что клавиатура составлена по инструкции, а судя по документации этот код должен работать с клавиатурой.
Пересоздал issue, так как в прошлом вы даже не пытались разобраться с проблемой.

Баг

Опишите баг
Please check your internet connection

Что должно было случится
Пишу боту, но выходит такая ошибка

Ваш код
https://pastebin.com/B11cWBxh

Заполните поля:

  • OS: Pythonanywhere
  • Version of vkbottle: 2.7.5

Дополнительная информация
https://vk.com/photo589229003_457240189

Баг

Что должно было случится
Должно отправится сообщение c кнопкой ссылкой

Ваш код

keyboard = Keyboard(one_time=True)
keyboard.add_row()
keyboard.add_button(OpenLink('Пополнить', link='https://vk.com/'))
keyboard = keyboard.generate()
await ans('text', keyboard=keyboard)

Опишите баг
Не удается отправить клавиатуру с кнопкой типа OpenLink
Получаю ошибку

[911, 'Keyboard format is invalid: button [0][0] has action type which is not compatible with setting colors']

Exception

Опишите баг
AttributeError: can't set attribute

Что должно было случится
The code supposed to work fine.

Ваш код
Traceback (most recent call last):
bot = Bot(tokens=token, debug=True)
File "C:\Users\12568\PycharmProjects\ScheduleBot\venv\lib\site-packages\vkbottle\framework\bot\bot.py", line 106, in init
self.api.group_id = self.group_id
AttributeError: can't set attribute

Заполните поля:

  • OS: Windows
  • Version of vkbottle: Latest

Дополнительная информация
N/A

Баг - Blueprints don't concatenate Middlewares on start up

Опишите баг
Blueprints don't concatenate Middlewares on start up

Что должно было случится
Опишите ожидаемое поведение фреймворка

Ваш код
AttributeError: 'NoneType' object has no attribute 'middleware_handler'

Заполните поля:

  • OS: Windows
  • Version of vkbottle: Latest

Дополнительная информация
...

Баг с клавиатурой (Location)

Опишите баг
При использование Location в клавиатуре выдает ошибку 911 (возможно из за того что передается label по дефолту)

[VKBottle] Using JSON_MODULE - json======== Running on http://0.0.0.0:8080 ========
(Press CTRL+C to quit)
[TIME 01:06:03]
[VKBottle] Using asyncio loop - asyncio.windows_events [TIME 01:06:03]
[VKBottle] While parent_processor was handling error occurred 

Traceback (most recent call last):
  File "D:\vk-bot-qwest\env\lib\site-packages\vkbottle\framework\framework\swear_handler.py", line 26, in wrapper
    return await func(*args, **kwargs)
  File "D:\vk-bot-qwest\env\lib\site-packages\vkbottle\framework\bot\processor.py", line 35, in parent_processor
    return await self.message_processor(obj, client_info)
  File "D:\vk-bot-qwest\env\lib\site-packages\vkbottle\framework\bot\processor.py", line 81, in message_processor
    task = await rules[0].call(*args, **kwargs)
  File "calback.py", line 28, in wrapper
    await ans('Хай, студент, рад тебя видеть сегодня!', keyboard = keyboard_gen(
  File "D:\vk-bot-qwest\env\lib\site-packages\vkbottle\types\message.py", line 92, in __call__
    _mid = await self.api.messages.send(
  File "D:\vk-bot-qwest\env\lib\site-packages\vkbottle\types\methods\messages.py", line 1107, in __call__
    return await self.request(
  File "D:\vk-bot-qwest\env\lib\site-packages\vkbottle\api\api\request.py", line 26, in __call__
    response = await request(
  File "D:\vk-bot-qwest\env\lib\site-packages\vkbottle\api\api\util\requester.py", line 68, in request
    return await error_handler.handle_error(exception)
  File "D:\vk-bot-qwest\env\lib\site-packages\vkbottle\api\api\error_handler\error_handler.py", line 28, in handle_error
    return await self.unhandled_error(e)
  File "D:\vk-bot-qwest\env\lib\site-packages\vkbottle\api\api\error_handler\error_handler.py", line 58, in unhandled_error
    raise e
vkbottle.utils.exceptions.VKError: (911, 'Keyboard format is invalid: button [1][0] action contains unknown fields', <Method MessagesSend>, {'random_id': 1201898978, 'peer_id': 30893183, 'message': 'Хай, студент, рад тебя видеть сегодня!', 'keyboard': '{"one_time": false, "buttons": [[{"action": {"type": "text", "label": "\\u041a\\u043d\\u043e\\u043f\\u043a\\u0430 #1"}, "color": "positive"}, {"action": {"type": "text", "label": "\\u041a\\u043d\\u043e\\u043f\\u043a\\u0430 #2"}, "color": "default"}], [{"action": {"type": "location", "label": "\\u0414\\u0435\\u0430\\u043d\\u043e\\u043d \\u0431\\u0435\\u0441\\u043f\\u043b\\u0430\\u0442\\u043d\\u043e"}}]], "inline": false}'}) 

Что должно было случится
Клавиатура должна отправляться корректно

Ваш код

@bot.on.message(text="привет", lower=True)
async def wrapper(ans: Message):
     await ans('Хай, студент, рад тебя видеть сегодня!', keyboard = keyboard_gen(
    [
        [{"text": "Кнопка #1", "color": "positive"}, {"text": "Кнопка #2"}], # Это первый ряд кнопок
        [{"type": "location", "text": "Деанон бесплатно"}], # Это второй ряд
    ]
))

Заполните поля:

  • OS: Windows 10 x64
  • Version of vkbottle: 2.7.5

Дополнительная информация*
Если отправлять клавиатуру без поля text, то присвоится пустой label

Баг с клавиатурой

Опишите баг
При добавлений кнопки с типом open_link/location/vkpay/vkapps нельзя указывать цвет для кнопки, а библиотека делает это по умолчанию для всех кнопок. Как следствие 911 ошибка.

Что должно было случится
Должна была сгенерироваться и отправиться валидная клавиатура

Ваш код
image

Обработка всех непрочитанных сообщений

Запрос на возможность связан с проблемой? Если да, опишите
Сейчас бот получает сообщения только с момента когда он запущен.
Если сделать перезапуск бота когда пользователи ему пишут, то сообщения останутся непрочитанными и неотвеченными.

Опишите решение, которое вы бы хотели видеть
При запуске бот получается все непрочитанные сообщения и обрабатывает их.
Возможно это какой-то параметр при запуске

Изменение работы бранчей

Запрос на возможность связан с проблемой? Если да, опишите
На данный момент бранчи работают не так, как хотелось бы. Допустим мне нужно поместить в бранч только определенного юзера из беседы, чтобы для остальных пользователей хэндлеры не блокировались. Но есть проблема, в AsyncHandleManager._processor обрабатывается только peer_id.

Опишите решение, которое вы бы хотели видеть
В AbstractBranchGenerator можно добавить метод contains, который будет принимать 1 аргумент в качестве списка из целых чисел typing.List[int] и проходить циклом по очереди self.branch.queue. Если ключ из очереди есть в списке из аргумента, то возвращаем его return key

Опишите решения, которые вы временно предприняли для решения этого вопроса
Описано выше

[Дополнительно] Пример псевдокода

from typing import List, Optional
from typing_extensions import final


class AbstractBranchGenerator(ABC):
    ...
    @final
    def contains(self, keys: List[int]) -> Optional[int]:
        for key in self.branch.queue:
            if key in keys:
                return key


async def _processor(self, obj: dict, client_info: dict):
    ...

    key = self.branch.contains([message.peer_id, message.from_id])
    if key:
        await self._branched_processor(key, obj, client_info, middleware_args)


async def _branched_processor(
       self,
       key: int,
       obj: dict, 
       client_info: dict, 
       middleware_args: list
    ):

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.