prostomarkeloff / vkwave Goto Github PK
View Code? Open in Web Editor NEWAsynchronous framework for building high-performanced & easy to scale projects interacting with VK's API.
License: MIT License
Asynchronous framework for building high-performanced & easy to scale projects interacting with VK's API.
License: MIT License
Я убедился, что похожая проблема еще не была описана
VKWave установлен из (выберите один вариант)
Когда пытаюсь просто импортнуть обычного бота(SimpleLongPollBot) выскакивает ошибка(установлено через poetry)
Тестировал как через PyPi, так и через GitHub, ошибка одна и та же.
Traceback (most recent call last):
File "C:\Users\Bit\PycharmProjects\test_timetable\main.py", line 1, in <module>
from vkwave.bots import SimpleLongPollBot
File "C:\Users\Bit\AppData\Local\pypoetry\Cache\virtualenvs\test-timetable-9v-t2yrb-py3.11\Lib\site-packages\vkwave\bots\__init__.py", line 1, in <module>
from .core.dispatching.dp.dp import Dispatcher
File "C:\Users\Bit\AppData\Local\pypoetry\Cache\virtualenvs\test-timetable-9v-t2yrb-py3.11\Lib\site-packages\vkwave\bots\core\__init__.py", line 1, in <module>
from .dispatching.dp.dp import Dispatcher # noqa: F401
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\Bit\AppData\Local\pypoetry\Cache\virtualenvs\test-timetable-9v-t2yrb-py3.11\Lib\site-packages\vkwave\bots\core\dispatching\dp\__init__.py", line 1, in <module>
from .result_caster import BaseResultCaster, ResultCaster
File "C:\Users\Bit\AppData\Local\pypoetry\Cache\virtualenvs\test-timetable-9v-t2yrb-py3.11\Lib\site-packages\vkwave\bots\core\dispatching\dp\result_caster.py", line 6, in <module>
from vkwave.bots.core.dispatching.events.base import BaseEvent
File "C:\Users\Bit\AppData\Local\pypoetry\Cache\virtualenvs\test-timetable-9v-t2yrb-py3.11\Lib\site-packages\vkwave\bots\core\dispatching\events\base.py", line 7, in <module>
from vkwave.types.user_events import BaseUserEvent
File "C:\Users\Bit\AppData\Local\pypoetry\Cache\virtualenvs\test-timetable-9v-t2yrb-py3.11\Lib\site-packages\vkwave\types\user_events.py", line 39, in <module>
class MessageData(pydantic.BaseModel):
File "C:\Users\Bit\AppData\Local\pypoetry\Cache\virtualenvs\test-timetable-9v-t2yrb-py3.11\Lib\site-packages\pydantic\main.py", line 292, in __new__
cls.__signature__ = ClassAttribute('__signature__', generate_model_signature(cls.__init__, fields, config))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\Bit\AppData\Local\pypoetry\Cache\virtualenvs\test-timetable-9v-t2yrb-py3.11\Lib\site-packages\pydantic\utils.py", line 258, in generate_model_signature
merged_params[param_name] = Parameter(
^^^^^^^^^^
File "C:\Python311\Lib\inspect.py", line 2715, in __init__
raise ValueError('{!r} is not a valid parameter name'.format(name))
from vkwave.bots import SimpleLongPollBot
Импорт библиотеки для дальнейшего использования
Делал бота на основе примера https://github.com/kesha1225/VkWaveBotExample
Сам бот работает, но в консоле все равно появляется куча ошибок, на которые не очень приятно смотреть.
Task exception was never retrieved
future: <Task finished name='Task-54' coro=<Dispatcher.process_event() done, defined at /Users/imac/Desktop/vkbot/botenv/lib/python3.9/site-packages/vkwave/bots/core/dispatching/dp/dp.py:41> exception=AttributeError("'MessagesMessage' object has no attribute 'message'")>
Traceback (most recent call last):
File "/Users/imac/Desktop/vkbot/botenv/lib/python3.9/site-packages/vkwave/bots/core/dispatching/dp/dp.py", line 66, in process_event
if not await self.middleware_manager.execute_pre_process_event(event):
File "/Users/imac/Desktop/vkbot/botenv/lib/python3.9/site-packages/vkwave/bots/core/dispatching/dp/middleware/middleware.py", line 27, in execute_pre_process_event
m_res = await middleware.pre_process_event(event)
File "/Users/imac/Desktop/vkbot/middlewares/user_data_middleware.py", line 10, in pre_process_event
user_id = event.object.object.message.from_id
AttributeError: 'MessagesMessage' object has no attribute 'message'
Task exception was never retrieved
future: <Task finished name='Task-59' coro=<Dispatcher.process_event() done, defined at /Users/imac/Desktop/vkbot/botenv/lib/python3.9/site-packages/vkwave/bots/core/dispatching/dp/dp.py:41> exception=AttributeError("'MessagesMessage' object has no attribute 'message'")>
Traceback (most recent call last):
File "/Users/imac/Desktop/vkbot/botenv/lib/python3.9/site-packages/vkwave/bots/core/dispatching/dp/dp.py", line 66, in process_event
if not await self.middleware_manager.execute_pre_process_event(event):
File "/Users/imac/Desktop/vkbot/botenv/lib/python3.9/site-packages/vkwave/bots/core/dispatching/dp/middleware/middleware.py", line 27, in execute_pre_process_event
m_res = await middleware.pre_process_event(event)
File "/Users/imac/Desktop/vkbot/middlewares/user_data_middleware.py", line 10, in pre_process_event
user_id = event.object.object.message.from_id
AttributeError: 'MessagesMessage' object has no attribute 'message'
При этом бот отвечает на сообщения, но при каждом новом сообщении выходит это.
Now all uploaders' methods get_attachment_from_link in vkwave-bots-utils saves files to disk, but we need to store temporary photo's data in memory, (io.BytesIO maybe...)
Ауф
It deletes key without checking on existence.
Я убедился, что похожая проблема еще не была описана
VKWave установлен из (выберите один вариант)
При попытке загрузки изображения в группу где нет главного админа (ливнул, забанен), или главный админ - сообщество, выбрасывается эта ошибка. В других группах все нормально.
Task exception was never retrieved
future: <Task finished name='Task-42' coro=<Dispatcher.process_event() done, defined at C:\Users\hex\Desktop\Python\Python\deck_view\venv\lib\site-packages\vkwave\bots\core\dispatching\dp\dp.py:43> exception=APIError('[1] Unknown error occurred')>
Traceback (most recent call last):
File "C:\Users\hex\Desktop\Python\Python\deck_view\venv\lib\site-packages\vkwave\bots\core\dispatching\dp\dp.py", line 72, in process_event
result = await router.process_event(event)
File "C:\Users\hex\Desktop\Python\Python\deck_view\venv\lib\site-packages\vkwave\bots\core\dispatching\router\router.py", line 48, in process_event
h_res = await handler.process_event(event)
File "C:\Users\hex\Desktop\Python\Python\deck_view\venv\lib\site-packages\vkwave\bots\core\dispatching\handler\base.py", line 40, in process_event
c_result = await self.callback.execute(event)
File "C:\Users\hex\Desktop\Python\Python\deck_view\venv\lib\site-packages\vkwave\bots\addons\easy\easy_handlers.py", line 771, in execute
return await self.func.execute(new_event)
File "C:\Users\hex\Desktop\Python\Python\deck_view\venv\lib\site-packages\vkwave\bots\core\dispatching\handler\callback.py", line 18, in execute
return await self.func(event)
File "C:\Users\hex\Desktop\Python\Python\deck_view\hearthstone_deckview\main.py", line 152, in main
resp = await photo_uploader.get_attachment_from_path(
File "C:\Users\hex\Desktop\Python\Python\deck_view\venv\lib\site-packages\vkwave\bots\utils\uploaders\uploader.py", line 69, in get_attachment_from_path
return await self.get_attachment_from_io(peer_id, file_data, file_name=file_name)
File "C:\Users\hex\Desktop\Python\Python\deck_view\venv\lib\site-packages\vkwave\bots\utils\uploaders\uploader.py", line 58, in get_attachment_from_io
await self.upload(upload_url, f, file_extension=file_extension, file_name=file_name)
File "C:\Users\hex\Desktop\Python\Python\deck_view\venv\lib\site-packages\vkwave\bots\utils\uploaders\photo_uploader.py", line 40, in upload
await self.api_context.photos.save_messages_photo(
File "C:\Users\hex\Desktop\Python\Python\deck_view\venv\lib\site-packages\vkwave\api\methods\photos.py", line 1132, in save_messages_photo
raw_result = await self.api_request("saveMessagesPhoto", params)
File "C:\Users\hex\Desktop\Python\Python\deck_view\venv\lib\site-packages\vkwave\api\methods\_category.py", line 22, in api_request
return await self.__api.api_request(self.make_method_name(method_name), params)
File "C:\Users\hex\Desktop\Python\Python\deck_view\venv\lib\site-packages\vkwave\api\methods\_abc.py", line 195, in api_request
err_handler_result = await self.handle_error(Error(result))
File "C:\Users\hex\Desktop\Python\Python\deck_view\venv\lib\site-packages\vkwave\api\methods\_abc.py", line 151, in handle_error
return await dispatcher.process_error(error, self)
File "C:\Users\hex\Desktop\Python\Python\deck_view\venv\lib\site-packages\vkwave\api\methods\_error.py", line 98, in process_error
raise APIError(code, err["error_msg"], err["request_params"])
vkwave.api.methods._error.APIError: [1] Unknown error occurred
photo_uploader = PhotoUploader(api_context=bot.api_context)
resp = await photo_uploader.get_attachment_from_path(peer_id=event.peer_id, file_path="pic.png", file_extension="png")
Хочу уточнить, что возможно этот баг - не ваш, а всего апи, пытался сделать это и на голом vk_api, все равно ошибка:
import random
import requests
import vk_api
from tokens import TOKEN
vk = vk_api.VkApi(token=TOKEN)
api = vk.get_api()
m = api.photos.getMessagesUploadServer(peer_id=2000000017)
url = m['upload_url']
resp = requests.post(url, files={"file1": open("pic.png", "rb")}).json()
ph = api.photos.saveMessagesPhoto(photo=resp['photo'],
server=resp['server'],
hash=resp['hash'])
api.messages.send(
random_id=random.getrandbits(32),
text="test",
attachments=f'photo{ph["owner_id"]}_{ph["id"]}'
)
Traceback (most recent call last):
File "C:\Users\hex\Desktop\Python\Python\deck_view\hearthstone_deckview\test\main.py", line 16, in <module>
ph = api.photos.saveMessagesPhoto(photo=resp['photo'],
File "C:\Users\hex\Desktop\Python\Python\deck_view\venv\lib\site-packages\vk_api\vk_api.py", line 737, in __call__
return self._vk.method(self._method, kwargs)
File "C:\Users\hex\Desktop\Python\Python\deck_view\venv\lib\site-packages\vk_api\vk_api.py", line 697, in method
raise error
vk_api.exceptions.ApiError: [1] Unknown error occurred
в логи добавить название хендлера, которым пойман евент
To reduce boilerplate code!
Крутой проект, обязательно попробую.
Респект за pydantic очень его люблю и смотрю что написали очень много классов. Что очень удобно.
А не думали Fastapi в качестве сервера? он тоже из коробки идет с pydantic
TL;DR
Если попытаться загрузить документ по урлу, кидается исключение
vkwave.bots.utils.uploaders.uploader.UploadException: bad_image
Полный трейсбек: uni-jacob/jacob#61
Now it casts any result with any event type. It should cast knowing event type.
handlers: Dict[Tuple[EventType, ResultType], Callable[[EventType, ResultType], Awaitable[None]]
Скопировал пример из https://github.com/fscdev/vkwave/blob/master/examples/bots/simple_cb_api.py
More builtin filters, for fwd messages/messages with args/regex
We need to implement user polling in vkwave-longpoll
. Also it needs extension for bots (vkwave-bots
)
Suspicios behavior for wall.get
using vk API above 5.84
Poll attachement has anonymous
field that has values 0 or 1
for VK api versions <=5.84
For some reason versions above do report that field but not it's value, it just returned as null
It must be VK api bug, though official VK page does report correct values for anonymous
Original post that have such issue
В данный момент в актуальном api вк нет методов для получения некоторой части закладок (лайкнутых пользоваталем объектов)
Метод fave.get
не возвращает лайкнутые видео и посты (возвращает тоолько пост о том, что закладки переехали)
Для фото же, если судить по возможным значениям параметра item_type
, этот метод вообще не применим
Есть deprecated методы fave.getPosts
fave.getPhotos
fave.getVideos
Они на данные момент поддерживаются, и позволяют получить соответственно посты, фото и видео, лайкнутые пользователем.
Так как в актуальном api нет методов позволяющих работать с этим функционалом,
предлагаю использовать рабочие, хоть и устаревшие методы перечисленные выше,
добавив в их docstring информацию о том что они помечены как устаревшие.
Redis storage for vkwave-bots-storage
.
VKWave Bots framework needs documentation. Currently small part is written.
Can copy-paste from aiogram/aiogram#281
Бот проверяет ид юзера и пр. И если это совпадает с данными об админе - предоставляет ему доступ к панели админа.
Панель админа будет реализована паттерном MVC, что даст более гибкую структуру панели.
Сама панель будет состоять из кнопок или чего-то другого.
Getting cast by type(value)
looks bad.
It should have list of handlers that will inspect object each by each and if handlers don't return any cast, caster will run default implementation.
def cast(self, obj: typing.Any):
result = self.from_handlers(obj) or self.default(obj)
return result
То есть бот проверяет ид юзера и пр. И если это совпадает с данными об админе - предоставляет ему что-либо(например кнопки для просмотра логов/дебага/спец возможностей)
Когда я пытаюсь запустить скрипт, где используются юзерботы, происходит ошибка
Код:
from vkwave.bots import SimpleLongPollUserBot, TaskManager, ClonesBot
bot = SimpleLongPollUserBot("first token")
bot_2 = SimpleLongPollUserBot("second token")
@bot.message_handler(bot.command_filter(commands=["ping"]), bot.from_me_filter(False))
async def start(event: bot.SimpleBotEvent):
await event.answer("pong")
clones = ClonesBot(bot, bot_2)
clones.run_all_bots()
Ошибка:
Task exception was never retrieved
future: <Task finished name='Task-1' coro=<BaseSimpleLongPollBot.run() done, defined at /data/user/0/ru.iiec.pydroid3/files/aarch64-linux-android/lib/python3.8/site-packages/vkwave/bots/addons/easy/base_easy_bot.py:300> exception=TypeError('start() takes 1 positional argument but 2 were given')>
Traceback (most recent call last):
File "/data/user/0/ru.iiec.pydroid3/files/aarch64-linux-android/lib/python3.8/site-packages/vkwave/bots/addons/easy/base_easy_bot.py", line 303, in run
await self._lp.start(ignore_errors)
TypeError: start() takes 1 positional argument but 2 were given
Task exception was never retrieved
future: <Task finished name='Task-2' coro=<BaseSimpleLongPollBot.run() done, defined at /data/user/0/ru.iiec.pydroid3/files/aarch64-linux-android/lib/python3.8/site-packages/vkwave/bots/addons/easy/base_easy_bot.py:300> exception=TypeError('start() takes 1 positional argument but 2 were given')>
Traceback (most recent call last):
File "/data/user/0/ru.iiec.pydroid3/files/aarch64-linux-android/lib/python3.8/site-packages/vkwave/bots/addons/easy/base_easy_bot.py", line 303, in run
await self._lp.start(ignore_errors)
TypeError: start() takes 1 positional argument but 2 were given
Как реализовать лонгполл на много аккаунтов?
Мне нужно чтобы одновременно работало несколько ботов
Я убедился, что похожая проблема еще не была описана
VKWave установлен из (выберите один вариант)
Получение всех альбомов включая системные (при использовании need_system=True
) выбрасывает исключение парсинга модели PhotosGetAlbumsResponse
.
Конкретно не могут быть распаршены поля в PhotosPhotoAlbumFull
.
Exception has occurred: ValidationError
6 validation errors for PhotosGetAlbumsResponse
response -> items -> 0 -> created
field required (type=value_error.missing)
response -> items -> 0 -> updated
field required (type=value_error.missing)
response -> items -> 1 -> created
field required (type=value_error.missing)
response -> items -> 1 -> updated
field required (type=value_error.missing)
response -> items -> 2 -> created
field required (type=value_error.missing)
response -> items -> 2 -> updated
field required (type=value_error.missing)
token = UserSyncSingleToken(Token(text_token))
async with API(tokens=token) as api:
api_ctx = api.get_context()
test = await api_ctx.photos.get_albums(need_system=True)
print(test)
Модель должна парсится без проблем
Системные альбомы не имеют полей created
и updated
, поэтому эти поля нужно сделать опциональными в PhotosPhotoAlbumFull
P.S: прошу, покройте код юнит-тестами 🧪
We need to do more exxamples with bots-fsm/bots-utils etc.
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.