From 02bd67e34a5fa7fb27cb4c1274459877d3948298 Mon Sep 17 00:00:00 2001 From: Sergey Elpashev Date: Tue, 13 Feb 2024 16:04:47 +0300 Subject: [PATCH] Async problems... --- handlers/filters/new_post.py | 17 ++++++++------- handlers/message_handlers/newpost_command.py | 8 +++---- handlers/message_handlers/post_command.py | 1 + main.py | 5 +++-- neuroapi/_methods/image.py | 22 +++++++++++++++++--- neuroapi/types/_post.py | 1 + 6 files changed, 37 insertions(+), 17 deletions(-) diff --git a/handlers/filters/new_post.py b/handlers/filters/new_post.py index faf017f..585a85a 100644 --- a/handlers/filters/new_post.py +++ b/handlers/filters/new_post.py @@ -8,14 +8,15 @@ class NewPostFilter(Filter): async def __call__(self, message: types.Message) -> bool: if message.media_group_id is None or message.content_type != 'photo': return False - try: - await neuroapi.post.get_by_media_group_id(message.media_group_id) - except: - if not (message.caption.startswith('/newpost ') if message.caption else False): - return False - await neuroapi.post.new(message.caption.replace( - '/newpost ', ''), str(message.from_user.id), str(message.media_group_id), message.caption_entities) - await message.answer('Пост успешно добавлен!') + # if (message.caption and message.caption.startswith('/newpost ')) + # try: + # await neuroapi.post.get_by_media_group_id(message.media_group_id) + # except: + # if not (message.caption.startswith('/newpost ') if message.caption else False): + # return False + # await neuroapi.post.new(message.caption.replace( + # '/newpost ', ''), str(message.from_user.id), str(message.media_group_id), message.caption_entities) + # await message.answer('Пост успешно добавлен!') return True diff --git a/handlers/message_handlers/newpost_command.py b/handlers/message_handlers/newpost_command.py index f5d06c1..051e29f 100644 --- a/handlers/message_handlers/newpost_command.py +++ b/handlers/message_handlers/newpost_command.py @@ -10,12 +10,12 @@ from .handler import MessageHandlerABC class NewPostCommand(MessageHandlerABC): filter = NewPostFilter() async def _command(self, message: types.Message): - post: neuroTypes.Post = await neuroapi.post.get_by_media_group_id(message.media_group_id) - await neuroapi.image.add(str(post.uuid), message.photo[-1].file_id, message.has_media_spoiler, message.message_id) + created = await neuroapi.image.add(str(message.from_user.id), message.photo[-1].file_id, message.has_media_spoiler, message.message_id, message.caption if message.caption else '', message.media_group_id, message.caption_entities, message) + if created: await message.answer('Пост успешно добавлен!') class NewPostSoloCommand(MessageHandlerABC): filter = NewSoloPostFilter() async def _command(self, message: types.Message): - post: neuroTypes.Post = await neuroapi.post.new(message.caption.replace('/newpost ', ''), message.from_user.id, message_entities=message.caption_entities) - await neuroapi.image.add(str(post.uuid), message.photo[-1].file_id, message.has_media_spoiler, message.message_id) + #FIXME: Починить добавление постов с одной картинкой, выводит ошибку на /info + await neuroapi.image.add(str(message.from_user.id), message.photo[-1].file_id, message.has_media_spoiler, message.message_id, message.caption, None, message.caption_entities) await message.answer('Пост успешно добавлен!') \ No newline at end of file diff --git a/handlers/message_handlers/post_command.py b/handlers/message_handlers/post_command.py index 7caa5f5..ea803ea 100644 --- a/handlers/message_handlers/post_command.py +++ b/handlers/message_handlers/post_command.py @@ -14,6 +14,7 @@ class PostCommand(MessageHandlerABC): settings = neuroTypes.BotSettings.get_instance() try: post = await neuroapi.post.get_post_to_post() + print(post) if (post): images = MediaGroupBuilder( caption=post.text + '\n\nПредложка: @neur0w0men_reply_bot', caption_entities=post.message_entities) diff --git a/main.py b/main.py index d215c07..05bafda 100644 --- a/main.py +++ b/main.py @@ -16,7 +16,8 @@ from neuroapi.types import NeuroApiBot async def delay_bot()->None: config = Config() - if config.token is None: + print(config) + if config.token is None or config.token == '': logging.warning('Delay bot needs token in environment') return bot = NeuroApiBot(config.token, storage=RedisStorage(redis.from_url(config.redis_url))) @@ -25,7 +26,7 @@ async def delay_bot()->None: async def proxy_bot()->None: config = Config() - if config.proxy_token is None: + if config.proxy_token is None or config.proxy_token == '': logging.warning('Proxy bot needs token in environment') return bot = NeuroApiBot(config.proxy_token) diff --git a/neuroapi/_methods/image.py b/neuroapi/_methods/image.py index e1dc946..36c0ec1 100644 --- a/neuroapi/_methods/image.py +++ b/neuroapi/_methods/image.py @@ -1,14 +1,29 @@ import json +from typing import List, Optional +from aiogram import types +from aiogram.types import MessageEntity from aiohttp import ClientSession from .api_method import ApiMethod class Image(ApiMethod): - async def add(self, post_id: str, file_id: str, has_spoiler: bool | None, message_id: int): - payload = {'post_id': post_id, 'file_id': file_id, - 'has_spoiler': has_spoiler, 'message_id': message_id} + async def add(self, from_id: str, file_id: str, has_spoiler: bool | None, message_id: int, text: str, media_group_id: str | None, message_entities: Optional[List[MessageEntity]], message: types.Message): + payload = {'from_user_id': from_id, 'file_id': file_id, + 'has_spoiler': has_spoiler, 'message_id': message_id } + if text != '': + payload['post_text'] = text.replace('/newpost ', '') + if media_group_id != 'None' and media_group_id is not None: + payload['media_group_id'] = media_group_id + if message_entities is not None: + mes_ent = list(map(lambda x: x.model_dump(), message_entities)) + arr =[] + for item in mes_ent: + if item['type'] == 'bot_command': continue + item['offset'] -= 9 + arr.append(item) + payload['message_entities'] = json.dumps(arr) if has_spoiler is None: payload.pop('has_spoiler') payload = json.dumps(payload) @@ -18,3 +33,4 @@ class Image(ApiMethod): data = await response.json() if 'statusCode' in data: raise Exception(data['message']) + return data['created'] diff --git a/neuroapi/types/_post.py b/neuroapi/types/_post.py index 4029030..7bf9a8b 100644 --- a/neuroapi/types/_post.py +++ b/neuroapi/types/_post.py @@ -34,4 +34,5 @@ class Post(ApiModel): obj = super().to_dict() obj['message_entities'] = json.dumps(obj['message_entities']) obj['media_group_id'] = str(obj['media_group_id']) + print(obj) return obj \ No newline at end of file