2022-08-31 23:06:06 +00:00
|
|
|
|
from src.fedi_api import get_notifications, mark_as_read_notification, post_status, upload_attachment
|
2022-09-01 19:01:24 +00:00
|
|
|
|
from src.fmn_states_db import add_state, get_state
|
2022-09-02 12:39:46 +00:00
|
|
|
|
from config import admins_bot, limit_movies_per_user, limit_all_movies_poll, hour_poll_posting, fmn_next_watching_hour
|
2022-08-31 19:32:16 +00:00
|
|
|
|
|
2022-08-31 10:20:49 +00:00
|
|
|
|
import threading, time
|
2022-08-31 19:32:16 +00:00
|
|
|
|
from datetime import datetime
|
|
|
|
|
from dateutil.parser import parse as dateutilparse
|
|
|
|
|
from dateutil.relativedelta import relativedelta, TU, SU
|
2022-08-31 10:20:49 +00:00
|
|
|
|
|
|
|
|
|
|
2022-09-01 19:01:24 +00:00
|
|
|
|
def get_control_mention():
|
2022-08-31 10:20:49 +00:00
|
|
|
|
while True:
|
2022-09-01 15:44:55 +00:00
|
|
|
|
now_week = datetime.now().weekday()
|
|
|
|
|
if now_week not in (0, 6):
|
|
|
|
|
time.sleep(30)
|
|
|
|
|
continue
|
2022-09-01 19:01:24 +00:00
|
|
|
|
if get_state('last_thread_id'):
|
|
|
|
|
time.sleep(30)
|
|
|
|
|
continue
|
|
|
|
|
|
2022-08-31 10:20:49 +00:00
|
|
|
|
notif = get_notifications()
|
|
|
|
|
for i in notif:
|
2022-09-04 22:19:46 +00:00
|
|
|
|
if i['type'] != "mention":
|
|
|
|
|
continue
|
2022-09-01 15:44:55 +00:00
|
|
|
|
seen = i['pleroma']['is_seen']
|
|
|
|
|
acct_mention = i['account']['acct']
|
|
|
|
|
reply_to_id = i['status']['in_reply_to_id']
|
2022-09-01 19:01:24 +00:00
|
|
|
|
if acct_mention in admins_bot and seen == False and reply_to_id == None and now_week in (0, 6):
|
2022-09-04 23:45:18 +00:00
|
|
|
|
time_now = datetime.now()
|
2022-08-31 10:20:49 +00:00
|
|
|
|
st_id = i['status']['id']
|
2022-08-31 19:32:16 +00:00
|
|
|
|
st_date = i['status']['created_at']
|
|
|
|
|
thread_created_at = dateutilparse(st_date)
|
|
|
|
|
delta = relativedelta(hour=hour_poll_posting, minute=0, second=0, weekday=TU(1))
|
2022-09-02 12:39:46 +00:00
|
|
|
|
next_movie_watching_delta = relativedelta(hour=fmn_next_watching_hour, minute=0, second=0, weekday=SU(1))
|
2022-08-31 19:32:16 +00:00
|
|
|
|
stop_thread_scan = thread_created_at + delta
|
2022-09-04 23:45:18 +00:00
|
|
|
|
next_movie_watching = time_now + next_movie_watching_delta
|
2022-09-02 12:39:46 +00:00
|
|
|
|
max_mute_time = time.mktime(time.struct_time(next_movie_watching.timetuple()))
|
2022-08-31 19:32:16 +00:00
|
|
|
|
next_movie_watching = next_movie_watching.strftime('%d.%m.%Y')
|
|
|
|
|
movies_accept_time = stop_thread_scan.strftime('%H:%M %d.%m.%Y MSK')
|
|
|
|
|
stop_thread_scan = time.mktime(time.struct_time(stop_thread_scan.timetuple()))
|
|
|
|
|
|
2022-08-31 23:06:06 +00:00
|
|
|
|
post_status(start_collect_movies_text(movies_accept_time, next_movie_watching), st_id, attachments=[upload_attachment('src/FMN.png')])
|
2022-08-31 10:20:49 +00:00
|
|
|
|
time.sleep(0.2)
|
|
|
|
|
mark_as_read_notification(i['id'])
|
2022-09-02 12:39:46 +00:00
|
|
|
|
add_state('max_mute_time', int(max_mute_time))
|
2022-08-31 19:32:16 +00:00
|
|
|
|
add_state('stop_thread_scan', int(stop_thread_scan))
|
2022-08-31 15:35:38 +00:00
|
|
|
|
add_state('last_thread_id', st_id)
|
2022-08-31 19:32:16 +00:00
|
|
|
|
break
|
2022-08-31 10:20:49 +00:00
|
|
|
|
time.sleep(30)
|
|
|
|
|
|
|
|
|
|
|
2022-08-31 19:32:16 +00:00
|
|
|
|
def start_collect_movies_text(movies_accept_time=str, next_movie_watching=str):
|
2022-08-31 10:20:49 +00:00
|
|
|
|
text = f'''
|
2022-08-31 19:32:16 +00:00
|
|
|
|
Начинаем прием заявок на следующий вечерний киносеанс, запланированный на {next_movie_watching} в 21:00 по Москве.
|
2022-08-31 10:20:49 +00:00
|
|
|
|
|
|
|
|
|
Напоминаем правила:
|
|
|
|
|
- Мы принимаем на просмотр полнометражные художественные фильмы;
|
|
|
|
|
- Прием варианта осуществляется путем публикации ссылки на этот фильм на IMDB или Кинопоиске в этом треде;
|
|
|
|
|
- Нам не подходят: сериалы, короткометражные и документальные фильмы;
|
2022-08-31 15:35:38 +00:00
|
|
|
|
- Максимальное количество вариантов, предложенных одним человеком не должно превышать {limit_movies_per_user};
|
|
|
|
|
- Всего может быть собрано до {limit_all_movies_poll} фильмов;
|
2022-08-31 10:20:49 +00:00
|
|
|
|
- Заявки принимаются до крайнего срока, после чего будет объявлено голосование по собранным вариантам.
|
|
|
|
|
|
2022-08-31 19:32:16 +00:00
|
|
|
|
Крайний срок подачи заявки - {movies_accept_time}.
|
2022-08-31 10:20:49 +00:00
|
|
|
|
|
|
|
|
|
Желаем удачи.
|
|
|
|
|
'''.replace('\t', '')
|
|
|
|
|
return text
|
|
|
|
|
|
|
|
|
|
def run_scan_notif():
|
2022-09-01 19:01:24 +00:00
|
|
|
|
scan_notif = threading.Thread(target=get_control_mention, daemon=True)
|
2022-08-31 10:20:49 +00:00
|
|
|
|
scan_notif.start()
|
|
|
|
|
|