vkbottle / vkbottle Goto Github PK
View Code? Open in Web Editor NEWСustomizable asynchronous VK API framework
Home Page: https://vkbottle.readthedocs.io/ru/latest
License: MIT License
Сustomizable asynchronous VK API framework
Home Page: https://vkbottle.readthedocs.io/ru/latest
License: MIT License
Опишите баг
Возникает ошибка валидации поля в GetIdByModel
.
Ваш код
https://pastebin.com/YX5wG8SW
Заполните поля:
Дополнительная информация
Такое происходит при отправке плейлиста
Запрос на возможность связан с проблемой? Если да, опишите
На данный момент бранчи работают не так, как хотелось бы. Допустим мне нужно поместить в бранч только определенного юзера из беседы, чтобы для остальных пользователей хэндлеры не блокировались. Но есть проблема, в 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
):
Запрос на возможность связан с проблемой? Если да, опишите
Сейчас бот получает сообщения только с момента когда он запущен.
Если сделать перезапуск бота когда пользователи ему пишут, то сообщения останутся непрочитанными и неотвеченными.
Опишите решение, которое вы бы хотели видеть
При запуске бот получается все непрочитанные сообщения и обрабатывает их.
Возможно это какой-то параметр при запуске
Enhancement to add LP models for all events. Moreover, debugging options for themselves
https://github.com/timoniq/vkbottle/blob/master/vkbottle/user.py
Traceback (most recent call last): File "c:\Users\User\game_bot\test.py", line 1, in <module> from vkbottle.user import User ModuleNotFoundError: No module named 'vkbottle.user'
Прекрасно бы было увидеть возможность совмещения бранчей со всеми событиями, таким образом можно будет создавать такие конструкции как:
It's going to be great if branches are compatible with all types of events;
В VBMLRule (и других правилах) self.data является атрибутом самого класса, а надо чтобы она была атрибутом его экземпляров, к примеру сейчас не работают команды в кол-ве > 1.
Следует заменить self.data['pattern'] = patterns на self.data = {'pattern': patterns} (и так для каждого правила соответственно), тогда для каждого экземпляра класса будет существовать своя data и баг будет пофиксен. С уважением, пользователь vkbottle!
Что должно было случится
Должно отправится сообщение 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']
Опишите баг
При создании хэндлера с правилом AttachmentRule
возникает ошибка AttributeError
Ваш код
https://pastebin.com/9sCmiTAt
Заполните поля:
Дополнительная информация
Использую vkbottle.framework.user.User
, возможно у Bot
такой проблемы не будет, так как attachments
типизированы.
Опишите баг
Не отвечает на сообщение со стороны юзера
Что должно было случится
Сработает соответствующий хендлер
Ваш код
https://pastebin.com/WrgxNe0m
Заполните поля:
Дополнительная информация
Ошибка в консоли:
https://pastebin.com/A0JxtSLv
Делаю бота через vkbottle.bot в группе.
Суть заключается в том, что человек пишет в лс группы "привет" и прикрепляет картинку к сообщению, бот же должен сохранить ссылку на вложение и отослать на другой сайт, после оттуда сохранить к себе и отправить(загрузить) тому человеку, который прислал её в лс группы.
Код скрипта с python на pastebin: https://pastebin.com/TzHHYra2
также прикрепляю скрин ошибки в консоли
Прошу помочь! Как это исправить/решить?
Опишите баг
Вылетает исключение.
На предыдушей версии данной проблемы не наблюдалось
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
Часто сталкиваюсь с такой ситуацией, когда ВК пробрасывает исключение Too many requests per second, поэтому неплохо было бы сделать какой-нибудь контроллер, который будет управлять запросами API.
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
Запрос на возможность связан с проблемой? Если да, опишите
Невозможно сделать пост-обработку
Опишите решения, которые вы временно предприняли для решения этого вопроса
Встраиваю пост-обработку в хендлеры
[Дополнительно] Пример псевдокода
class MyMiddleware(Middleware):
async def pre(message: Message):
# pre handling
async def post(message: Message):
# post handling
Придется избавиться от старого интерфейса Middleware.middleware
Опишите баг
Теряется позиционный аргумент
Что должно было случится
На запрос должен сработать соответствующий хендлер без ошибок.
Ваш код
https://pastebin.com/hAcKgDhT
Заполните поля:
Дополнительная информация
Код ошибки - https://pastebin.com/db1c1xdi
Опишите баг
После того как поподаешь в 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}. Мы тебя поняли. Это все?")
Заполните поля:
Дополнительная информация
...
Опишите баг
При попадание в росток, получаю ошибку
[======== 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("Ты в бранче. Пиши «выйти», чтобы выйти отсюда.")
Заполните поля:
Дополнительная информация
...
Опишите баг
Не работают chat_invite и chat_mention в блупринтах
Опишите баг
await bot.branch.add(ans.peer_id, 'branch1')
await bot.branch.exit(ans.peer_id)
await bot.branch.add(ans.peer_id, 'branch2')
Что должно было случится
Пользователь должен попадать в branch2
Заполните поля:
pip install git+https://github.com/timoniq/vkbottle.git
Дополнительная информация
мой код успешно работает на vkbottle-2.7.3 но ломается на vkbottle-2.7.5
.
Опишите баг
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
Заполните поля:
Дополнительная информация
N/A
Use asynchronous framework in README; Delete bot.process
method; Use bot.emulate
in callback-api section.
Make TokenManager for multiple token storage and then switch them in case of too many requests per second error
#TODO
In the VK API documentation written, that the event "wall_reply_delete" has object, which contains next fields: owner_id (integer), id (integer), deleter_id (integer), post_id (integer). But, when I was trying to get that event, I got event (dict) this type: {'type': 'wall_reply_delete', 'object': {'owner_id': -162948621, 'id': 76498, 'post_id': 76366}}
Documentation: https://vk.com/dev/groups_events
Error on start up.
Опишите баг
Blueprints don't concatenate Middlewares on start up
Что должно было случится
Опишите ожидаемое поведение фреймворка
Ваш код
AttributeError: 'NoneType' object has no attribute 'middleware_handler'
Заполните поля:
Дополнительная информация
...
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
Some template ideas to make in the nearest future:
Echo
bot templateChatManager
bot templateTextBot
bot templateLeave your enhancements for bot templates in this issue. Pull requests are welcome
Опишите баг
В cls_branch хендлеры срабатывают по цепочке
Что должно было случится
Хендлер должен сработать в соотвестивии с условием заданным в нём, и не обязательно соблюдая цепочку.
Ваш код
https://pastebin.com/2nCJMTQb
https://pastebin.com/puZC8xZd
Заполните поля:
Дополнительная информация
Значит проблема в библиотеке, потому что клавиатура составлена по инструкции, а судя по документации этот код должен работать с клавиатурой.
Пересоздал issue, так как в прошлом вы даже не пытались разобраться с проблемой.
Опишите баг
Chat action events don't process by AsyncHandleManager
Что должно было случится
N/A
Ваш код
N/A
Заполните поля:
Дополнительная информация
...
Опишите баг
AttributeError: module 'vkbottle.types.objects' has no attribute 'photos'
Что должно было случится
Ошибки быть не должно.
Ваш код
https://pastebin.com/nkGKATBs
Заполните поля:
Дополнительная информация
...
Опишите баг
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
Заполните поля:
Дополнительная информация
...
Опишите баг
Для прохождения капчи нужно в параметрах указать 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)
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'
Заполните поля:
Дополнительная информация
...
Почему bot.on.chat_message.regex
удалён из хэндлеров?
It's really bad way, in most parts of code it's unnecessary. I will create PR for fix that.
Опишите решение, которое вы бы хотели видеть
Хендлер, транслирующий код в 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)
Dear Arseny, please add the ability to specify the lower parameter to the VBMLUserRule
Запрос на возможность связан с проблемой? Если да, опишите
Добавление схожего с ботами API для User
класса. Иногда очень хочется быстро перенести систему хендлеров из бота в юзера и обратно, но к сожалению с текущим состоянием юзер лп это невозможно
Опишите решение, которое вы бы хотели видеть
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("Привет, расскажи как жизнь")
Опишите баг
Please check your internet connection
Что должно было случится
Пишу боту, но выходит такая ошибка
Ваш код
https://pastebin.com/B11cWBxh
Заполните поля:
Дополнительная информация
https://vk.com/photo589229003_457240189
[Дополнительно] Пример псевдокода
class MyManager(HandlerReturnManager):
@value_instance(str)
async def handle(value: str):
await bot.api.messages.send(peer_id=self.event.peer_id, message=value)
Опишите баг
pydantic.error_wrappers.ValidationError: 1 validation error for GetByIdModel
Что должно было случится
Ошибки быть не должно
Ваш код
https://pastebin.com/jUvzJipT
Заполните поля:
Дополнительная информация
N/A
Опишите баг
При использование 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": "Деанон бесплатно"}], # Это второй ряд
]
))
Заполните поля:
Дополнительная информация*
Если отправлять клавиатуру без поля text, то присвоится пустой label
I get an exception after concatenating Handler. Fix pls
"Bot Handler was concatenated with {handler}", handler=handler.__name__
AttributeError: 'Handler' object has no attribute '__name__'
Почему бы не добавить fsm как в aiogram
И сделать какую-то интеграцию с кнопками?
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.