mirror of
https://github.com/MrSedan/neuro-reply-bot-reworked.git
synced 2026-01-14 13:39:42 +03:00
Added message entities to posts and info
This commit is contained in:
@@ -51,6 +51,7 @@ class AdminCommands(Handler):
|
|||||||
post_c[post.from_user_id] += 1
|
post_c[post.from_user_id] += 1
|
||||||
res = "Количество постов от админов:\n"
|
res = "Количество постов от админов:\n"
|
||||||
res2 = "\nПосты:\n"
|
res2 = "\nПосты:\n"
|
||||||
|
posts_entities: List[types.MessageEntity] = []
|
||||||
for admin in admins:
|
for admin in admins:
|
||||||
if admin.user_id in post_c:
|
if admin.user_id in post_c:
|
||||||
res += f'[{admin.user_name}](tg://user?id={admin.user_id}): {post_c[admin.user_id]}\n'
|
res += f'[{admin.user_name}](tg://user?id={admin.user_id}): {post_c[admin.user_id]}\n'
|
||||||
@@ -61,11 +62,16 @@ class AdminCommands(Handler):
|
|||||||
res2 += f'Посты от {admin.user_name}:\n'
|
res2 += f'Посты от {admin.user_name}:\n'
|
||||||
if len(admin_posts):
|
if len(admin_posts):
|
||||||
for i, post in enumerate(admin_posts):
|
for i, post in enumerate(admin_posts):
|
||||||
#TODO: Если возможно, сделать чтоб было ссылкой на сообщений с /newpost
|
# TODO: Если возможно, сделать чтоб было ссылкой на сообщений с /newpost
|
||||||
res2 += f'{i+1}. {post.text}\n'
|
s = f'{i+1}. {post.text}\n'
|
||||||
|
res2 += s
|
||||||
|
for entity in post.message_entities:
|
||||||
|
entity.offset += 3+res2.index(s)
|
||||||
|
posts_entities.append(entity)
|
||||||
else:
|
else:
|
||||||
res2 += 'Их нет\)\n'
|
res2 += 'Их нет\)\n'
|
||||||
await message.answer((res+res2).replace('#', '\#').replace("_", "\_").replace('.', '\.').replace(',', '\,').replace('!', '\!'), parse_mode='markdownv2')
|
await message.answer(res, parse_mode='markdownv2')
|
||||||
|
await message.answer(res2, entities=posts_entities)
|
||||||
|
|
||||||
"""
|
"""
|
||||||
TODO: Изменение постов сделать нормально, не через редактирование сообщений
|
TODO: Изменение постов сделать нормально, не через редактирование сообщений
|
||||||
@@ -207,7 +213,7 @@ class AdminCommands(Handler):
|
|||||||
post = await neuroapi.post.get_post_to_post()
|
post = await neuroapi.post.get_post_to_post()
|
||||||
if (post):
|
if (post):
|
||||||
images = MediaGroupBuilder(
|
images = MediaGroupBuilder(
|
||||||
caption=post.text + '\n\nПредложка: @neur0w0men_reply_bot')
|
caption=post.text + '\n\nПредложка: @neur0w0men_reply_bot', caption_entities=post.message_entities)
|
||||||
image: neuroTypes.Image
|
image: neuroTypes.Image
|
||||||
for image in sorted(post.images, key=lambda x: x.message_id):
|
for image in sorted(post.images, key=lambda x: x.message_id):
|
||||||
images.add_photo(image.file_id,
|
images.add_photo(image.file_id,
|
||||||
@@ -223,7 +229,7 @@ class AdminCommands(Handler):
|
|||||||
|
|
||||||
@self.router.message(NewSoloPostFilter())
|
@self.router.message(NewSoloPostFilter())
|
||||||
async def post_solo(message: types.Message):
|
async def post_solo(message: types.Message):
|
||||||
post: neuroTypes.Post = await neuroapi.post.new(message.caption.replace('/newpost ', ''), message.from_user.id)
|
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)
|
await neuroapi.image.add(str(post.uuid), message.photo[-1].file_id, message.has_media_spoiler, message.message_id)
|
||||||
await message.answer('Пост успешно добавлен!')
|
await message.answer('Пост успешно добавлен!')
|
||||||
|
|
||||||
@@ -233,7 +239,7 @@ class AdminCommands(Handler):
|
|||||||
await message.reply('Пользователь стесняшка и не разрешает отвечать на его сообщения...')
|
await message.reply('Пользователь стесняшка и не разрешает отвечать на его сообщения...')
|
||||||
else:
|
else:
|
||||||
try:
|
try:
|
||||||
await bot.send_message(message.reply_to_message.forward_from.id, f'Вам ответил админ:\n{message.text}')
|
await bot.send_message(message.reply_to_message.forward_from.id, f'Вам ответил админ:\n{message.text}', entities=message.entities)
|
||||||
await message.reply('Ваше сообщение было отправлено!')
|
await message.reply('Ваше сообщение было отправлено!')
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
print(e)
|
print(e)
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ class NewPostFilter(Filter):
|
|||||||
if not (message.caption.startswith('/newpost ') if message.caption else False):
|
if not (message.caption.startswith('/newpost ') if message.caption else False):
|
||||||
return False
|
return False
|
||||||
await neuroapi.post.new(message.caption.replace(
|
await neuroapi.post.new(message.caption.replace(
|
||||||
'/newpost ', ''), str(message.from_user.id), str(message.media_group_id))
|
'/newpost ', ''), str(message.from_user.id), str(message.media_group_id), message.caption_entities)
|
||||||
await message.answer('Пост успешно добавлен!')
|
await message.answer('Пост успешно добавлен!')
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,8 @@
|
|||||||
|
import json
|
||||||
|
from typing import List, Optional
|
||||||
|
|
||||||
import requests
|
import requests
|
||||||
|
from aiogram.types import MessageEntity
|
||||||
from aiohttp import ClientSession
|
from aiohttp import ClientSession
|
||||||
|
|
||||||
import neuroapi.types as neuroTypes
|
import neuroapi.types as neuroTypes
|
||||||
@@ -9,10 +13,18 @@ from .enums import EGetAll
|
|||||||
|
|
||||||
class Post(ApiMethod):
|
class Post(ApiMethod):
|
||||||
|
|
||||||
async def new(self, text: str, from_user_id: str, media_group_id: str = "None"):
|
async def new(self, text: str, from_user_id: str, media_group_id: str = "None", message_entities: Optional[List[MessageEntity]] = None):
|
||||||
payload = {'text': text, 'from_user_id': from_user_id}
|
payload = {'text': text, 'from_user_id': from_user_id}
|
||||||
if media_group_id != 'None':
|
if media_group_id != 'None':
|
||||||
payload['media_group_id'] = media_group_id
|
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)
|
||||||
response = requests.post(self.api_url+'/post/new', data=payload)
|
response = requests.post(self.api_url+'/post/new', data=payload)
|
||||||
data = response.json()
|
data = response.json()
|
||||||
if 'statusCode' in data:
|
if 'statusCode' in data:
|
||||||
|
|||||||
@@ -1,9 +1,18 @@
|
|||||||
|
import json
|
||||||
from dataclasses import dataclass
|
from dataclasses import dataclass
|
||||||
from uuid import UUID
|
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
from typing import Any, List, Optional
|
from typing import Any, List, Optional
|
||||||
from ._image import Image
|
from uuid import UUID
|
||||||
|
|
||||||
|
from aiogram.types import MessageEntity
|
||||||
|
|
||||||
from ._helpers import *
|
from ._helpers import *
|
||||||
|
from ._image import Image
|
||||||
|
|
||||||
|
|
||||||
|
def to_message_dict_class(x: Any) -> dict:
|
||||||
|
assert isinstance(x, MessageEntity)
|
||||||
|
return cast(MessageEntity, x).model_dump()
|
||||||
|
|
||||||
|
|
||||||
@dataclass
|
@dataclass
|
||||||
@@ -15,6 +24,7 @@ class Post:
|
|||||||
timestamp: datetime
|
timestamp: datetime
|
||||||
from_user_id: int
|
from_user_id: int
|
||||||
images: Optional[List[Image]] = None
|
images: Optional[List[Image]] = None
|
||||||
|
message_entities: Optional[List[MessageEntity]] = None
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def from_dict(obj: Any) -> 'Post':
|
def from_dict(obj: Any) -> 'Post':
|
||||||
@@ -28,7 +38,9 @@ class Post:
|
|||||||
from_user_id = int(from_str(obj.get("from_user_id")))
|
from_user_id = int(from_str(obj.get("from_user_id")))
|
||||||
images = from_union([lambda x: from_list(
|
images = from_union([lambda x: from_list(
|
||||||
Image.from_dict, x), from_none], obj.get("images"))
|
Image.from_dict, x), from_none], obj.get("images"))
|
||||||
return Post(uuid, posted, text, media_group_id, timestamp, from_user_id, images)
|
mes_ent = json.loads(obj.get('message_entities','[]'))
|
||||||
|
message_entities = from_list(MessageEntity.model_validate, mes_ent)
|
||||||
|
return Post(uuid, posted, text, media_group_id, timestamp, from_user_id, images, message_entities)
|
||||||
|
|
||||||
def to_dict(self) -> dict:
|
def to_dict(self) -> dict:
|
||||||
result: dict = {}
|
result: dict = {}
|
||||||
@@ -41,4 +53,7 @@ class Post:
|
|||||||
if self.images is not None:
|
if self.images is not None:
|
||||||
result["images"] = from_union([lambda x: from_list(
|
result["images"] = from_union([lambda x: from_list(
|
||||||
lambda x: to_class(Image, x), x), from_none], self.images)
|
lambda x: to_class(Image, x), x), from_none], self.images)
|
||||||
|
if self.message_entities is not None:
|
||||||
|
result['message_entities'] = from_union([lambda x: from_list(
|
||||||
|
lambda x: to_message_dict_class(x), x), from_none], self.message_entities)
|
||||||
return result
|
return result
|
||||||
|
|||||||
Reference in New Issue
Block a user