Started migrating to backend work

This commit is contained in:
2023-11-22 20:12:58 +03:00
parent ce940f7646
commit ccceb16196
4 changed files with 40 additions and 71 deletions

View File

@@ -14,6 +14,7 @@ from handlers.filters.new_post import (ChangePosts, NewPostFilter,
from handlers.filters.reply_to_user import ReplyToUser from handlers.filters.reply_to_user import ReplyToUser
from handlers.middlewares.user import AdminMiddleware from handlers.middlewares.user import AdminMiddleware
from handlers.states.change_post import ChangePost from handlers.states.change_post import ChangePost
from neuroapi import neuroapi
def get_post_info(post: Post, post_id: int) -> str: def get_post_info(post: Post, post_id: int) -> str:
@@ -34,37 +35,24 @@ class Admin_commands:
self.router = Router() self.router = Router()
self.router.message.middleware(AdminMiddleware()) self.router.message.middleware(AdminMiddleware())
@self.router.message(Command('test'))
async def test_command(message: types.Message):
with Session(engine) as session:
user = session.get(User, message.from_user.id)
await message.answer(str(user))
@self.router.message(NewPostFilter()) @self.router.message(NewPostFilter())
async def new_post(message: types.Message): async def new_post(message: types.Message):
with Session(engine) as session: post = await neuroapi.post.get_by_media_group_id(message.media_group_id)
post = session.query(Post).filter( await neuroapi.image.add(post['uuid'], message.photo[-1].file_id, message.has_media_spoiler, message.message_id)
Post.media_group_id == message.media_group_id).first()
if post:
photo = Image(message_id=message.message_id,
post=post, file_id=message.photo[-1].file_id, has_spoiler=bool(message.has_media_spoiler))
session.add(photo)
session.commit()
else:
print('No posts anymore ;-(')
@self.router.message(Command('info')) @self.router.message(Command('info'))
async def info_command(message: types.Message): async def info_command(message: types.Message):
with Session(engine) as session: posts = await neuroapi.post.get_will_post()
posts = session.query(Post).filter(Post.posted == False).all() post_c = {}
admins = session.query(Admin).all() for post in posts:
post_c = {} if post['from_user_id'] not in post_c:
for admin in admins: post_c[post['from_user_id']] = 1
post_c[str(admin.user_id)] = 0 else:
for post in posts: post_c[post['from_user_id']] += 1
post_c[str(post.from_user_id)] += 1
await message.answer(str(post_c)) await message.answer(str(post_c))
#TODO: Post changing with backend
######################################3
@self.router.message(ChangePosts()) @self.router.message(ChangePosts())
async def change_post(message: types.Message, state: FSMContext): async def change_post(message: types.Message, state: FSMContext):
with Session(engine) as session: with Session(engine) as session:
@@ -194,37 +182,27 @@ class Admin_commands:
data = await state.get_data() data = await state.get_data()
if 'edit_msg' in data: if 'edit_msg' in data:
await bot.delete_message(message_id=data['edit_msg'], chat_id=callback.message.chat.id) await bot.delete_message(message_id=data['edit_msg'], chat_id=callback.message.chat.id)
##########################################################
@self.router.message(Command('post')) @self.router.message(Command('post'))
async def post(message: types.Message): async def post(message: types.Message):
with Session(engine) as session: posts = await neuroapi.post.get_will_post()
post = session.query(Post).filter( if (posts):
Post.posted == False).order_by(Post.timestamp.asc()).first() post = await neuroapi.post.get(posts[0]['uuid'])
if post: images = MediaGroupBuilder(caption=post['text'])
images = MediaGroupBuilder(caption=post.text) for image in sorted(post['images'], key=lambda x: x['message_id']):
for image in post.images[::-1]: images.add_photo(image['file_id'], has_spoiler=image['has_spoiler'])
images.add_photo( await message.answer_media_group(images.build())
image.file_id, has_spoiler=image.has_spoiler) else:
await message.answer_media_group(images.build()) await message.answer('Нет постов')
post.posted = True
session.commit()
else:
await message.answer('Постов немаэ')
@self.router.message(NewSoloPostFilter()) @self.router.message(NewSoloPostFilter())
async def post_solo(message: types.Message): async def post_solo(message: types.Message):
with Session(engine) as session: post = await neuroapi.post.new(message.caption.replace('/newpost ', ''), message.from_user.id)
post = Post(uuid=uuid4(), text=message.caption.replace( await neuroapi.image.add(post['uuid'], message.photo[-1].file_id, message.has_media_spoiler, message.message_id)
'/newpost ', ''), media_group_id='') await message.answer('Пост успешно добавлен!')
post_user = session.get(Admin, message.from_user.id)
post.user = post_user
photo = Image(message_id=message.message_id,
post=post, file_id=message.photo[-1].file_id, has_spoiler=bool(message.has_media_spoiler))
session.add(photo)
session.add(post)
session.commit()
await message.answer('Пост успешно добавлен!')
@self.router.message(ReplyToUser()) @self.router.message(ReplyToUser())
async def reply_user(message: types.Message): async def reply_user(message: types.Message):
if message.reply_to_message.forward_from is None: if message.reply_to_message.forward_from is None:

View File

@@ -8,26 +8,21 @@ from aiogram.filters import Filter
from sqlalchemy.orm import Session from sqlalchemy.orm import Session
from db.data import Admin, Image, Post, User, engine from db.data import Admin, Image, Post, User, engine
from neuroapi import neuroapi
class NewPostFilter(Filter): class NewPostFilter(Filter):
async def __call__(self, message: types.Message) -> bool: async def __call__(self, message: types.Message) -> bool:
if message.media_group_id is None or message.content_type != 'photo': if message.media_group_id is None or message.content_type != 'photo':
return False return False
with Session(engine) as session: try:
post = session.query(Post).filter( await neuroapi.post.get_by_media_group_id(message.media_group_id)
Post.media_group_id == message.media_group_id).first() except:
if post is None: 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
new_post = Post(uuid=uuid4(), text=message.caption.replace( await neuroapi.post.new(message.caption.replace(
'/newpost ', ''), media_group_id=message.media_group_id) '/newpost ', ''), str(message.from_user.id), str(message.media_group_id))
post_user = session.get(Admin, message.from_user.id) await message.answer('Пост успешно добавлен!')
new_post.user = post_user
session.add(new_post)
session.commit()
await message.answer('Пост успешно добавлен!')
return True return True

View File

@@ -2,9 +2,8 @@ from typing import Any, Awaitable, Callable, Dict
from aiogram import BaseMiddleware from aiogram import BaseMiddleware
from aiogram.types import Message from aiogram.types import Message
from sqlalchemy.orm import Session
from db.data import Admin, User, engine from neuroapi import neuroapi
class AdminMiddleware(BaseMiddleware): class AdminMiddleware(BaseMiddleware):
@@ -12,12 +11,8 @@ class AdminMiddleware(BaseMiddleware):
pass pass
async def __call__(self, handler: Callable[[Message, Dict[str, Any]], Awaitable[Any]], event: Message, data: Dict[str, Any]) -> Any: async def __call__(self, handler: Callable[[Message, Dict[str, Any]], Awaitable[Any]], event: Message, data: Dict[str, Any]) -> Any:
with Session(engine) as session: await neuroapi.user.get(str(event.from_user.id), event.from_user.username)
if not session.get(User, event.from_user.id): isAdmin = await neuroapi.admin.is_admin(str(event.from_user.id))
user = User(id=event.from_user.id, user_name=event.from_user.username)
session.add(user)
session.commit()
isAdmin = session.get(Admin, event.from_user.id)
if not isAdmin: if not isAdmin:
await event.answer('Команда только для админов!') await event.answer('Команда только для админов!')
return None return None

View File

@@ -1,4 +1,5 @@
from aiohttp import ClientSession from aiohttp import ClientSession
from .api_method import ApiMethod from .api_method import ApiMethod
@@ -11,7 +12,7 @@ class Admin(ApiMethod):
async def is_admin(self, id: str): async def is_admin(self, id: str):
async with ClientSession() as session: async with ClientSession() as session:
response = await session.get(self.api_url+f'admin/is-admin/{id}') response = await session.get(self.api_url+f'/admin/is-admin/{id}')
if await response.text() == 'false': if await response.text() == 'false':
return False return False
return True return True