beta 2.0
This commit is contained in:
+71
-19
@@ -1,13 +1,13 @@
|
||||
from datetime import datetime
|
||||
from datetime import datetime, date
|
||||
import vk_api
|
||||
from db import VkAPI, db
|
||||
from db import UsersBirthdate, VkAPI, db
|
||||
from medods_handler import setDynamicText
|
||||
|
||||
|
||||
def handle_vk_post():
|
||||
from app import logger
|
||||
|
||||
logger.info("Обновление поста")
|
||||
logger.info("Публикация поста")
|
||||
|
||||
vkApi = VkAPI.query.first()
|
||||
if not vkApi:
|
||||
@@ -20,33 +20,85 @@ def handle_vk_post():
|
||||
return
|
||||
|
||||
if not vkPost.dynamic_text:
|
||||
# if not vkPost.dynamic_text and not vkPost.post_id:
|
||||
logger.info("Не требуется публикация поста")
|
||||
return
|
||||
|
||||
vk_session = vk_api.VkApi(token=vkApi.access_token)
|
||||
vk = vk_session.get_api()
|
||||
|
||||
new_post = {}
|
||||
new_post = vk.wall.post(
|
||||
owner_id=-vkApi.group_id,
|
||||
from_group=1,
|
||||
message=f"{vkPost.dynamic_text}\n{vkPost.static_text}".strip(),
|
||||
attachments=f"photo-{vkApi.group_id}_{vkApi.base_photo_url}",
|
||||
)
|
||||
logger.info(f"Пост #{new_post.get('post_id')} создан")
|
||||
|
||||
if vkPost.dynamic_text:
|
||||
vkPost.dynamic_text = None
|
||||
vkPost.post_id = new_post.get("post_id")
|
||||
vkPost.publish_at = datetime.now()
|
||||
|
||||
db.session.commit()
|
||||
|
||||
|
||||
def handle_vk_birthdate():
|
||||
from app import logger
|
||||
from sqlalchemy import func, or_, and_
|
||||
|
||||
logger.info("Публикация поста с днем рождения")
|
||||
|
||||
today = date.today()
|
||||
day = f"{today.day:02d}"
|
||||
month = f"{today.month:02d}"
|
||||
|
||||
def is_leap_year(year: int) -> bool:
|
||||
return year % 4 == 0 and (year % 100 != 0 or year % 400 == 0)
|
||||
|
||||
# Основное условие: совпадение дня и месяца
|
||||
conditions = [
|
||||
and_(
|
||||
func.strftime("%d", UsersBirthdate.birthdate) == day,
|
||||
func.strftime("%m", UsersBirthdate.birthdate) == month,
|
||||
)
|
||||
]
|
||||
|
||||
# Если 28 февраля и год НЕ високосный — добавляем родившихся 29.02
|
||||
if today.month == 2 and today.day == 28 and not is_leap_year(today.year):
|
||||
conditions.append(
|
||||
and_(
|
||||
func.strftime("%d", UsersBirthdate.birthdate) == "29",
|
||||
func.strftime("%m", UsersBirthdate.birthdate) == "02",
|
||||
)
|
||||
)
|
||||
conditions.append(UsersBirthdate.enabled == True)
|
||||
|
||||
birthdayUsers = UsersBirthdate.query.filter(or_(*conditions)).all()
|
||||
|
||||
if not birthdayUsers:
|
||||
logger.info("Нет пользователей с днем рождения")
|
||||
return
|
||||
|
||||
vkApi = VkAPI.query.first()
|
||||
if not vkApi:
|
||||
logger.error("Информация для работы не найдена")
|
||||
return
|
||||
|
||||
vk_session = vk_api.VkApi(token=vkApi.access_token)
|
||||
vk = vk_session.get_api()
|
||||
|
||||
for user in birthdayUsers:
|
||||
new_post = vk.wall.post(
|
||||
owner_id=-vkApi.group_id,
|
||||
from_group=1,
|
||||
message=f"{vkPost.dynamic_text}\n{vkPost.static_text}".strip(),
|
||||
attachments=f"photo-{vkApi.group_id}_{vkApi.base_photo_url}",
|
||||
message=user.congratulations.strip(),
|
||||
attachments=user.photo_link,
|
||||
)
|
||||
|
||||
logger.info(f"Пост #{new_post.get('post_id')} создан")
|
||||
|
||||
# if vkPost.post_id:
|
||||
# logger.info(f"Удаление поста #{vkPost.post_id}")
|
||||
# vk.wall.delete(owner_id=-vkApi.group_id, post_id=vkPost.post_id)
|
||||
# vkPost.post_id = None
|
||||
# vkPost.publish_at = None
|
||||
user.post_link = (
|
||||
f"https://vk.com/wall-{vkApi.group_id}_{new_post.get('post_id')}"
|
||||
)
|
||||
user.publish_at = datetime.now()
|
||||
|
||||
if vkPost.dynamic_text:
|
||||
vkPost.dynamic_text = None
|
||||
vkPost.post_id = new_post.get("post_id")
|
||||
vkPost.publish_at = datetime.now()
|
||||
|
||||
db.session.commit()
|
||||
db.session.commit()
|
||||
|
||||
Reference in New Issue
Block a user