64 lines
2.5 KiB
Python
64 lines
2.5 KiB
Python
import time
|
||
import html
|
||
from datetime import datetime
|
||
|
||
from helper_bot.utils.base_dependency_factory import get_global_instance
|
||
|
||
bdf = get_global_instance()
|
||
|
||
BotDB = bdf.get_db()
|
||
|
||
|
||
def last_message():
|
||
# функция с отображением сообщения "Последнее сообщение было записано"
|
||
date_from_db = BotDB.last_date_audio()
|
||
if date_from_db is None:
|
||
return None
|
||
|
||
parse_date = datetime.strptime(date_from_db, "%Y-%m-%d %H:%M:%S")
|
||
last_voice_time_timestamp = time.mktime(parse_date.timetuple())
|
||
time_now_timestamp = time.time()
|
||
date_difference = time_now_timestamp - last_voice_time_timestamp
|
||
# считаем минуты, часы, дни
|
||
much_minutes_ago = round(date_difference / 60, 0)
|
||
much_hour_ago = round(date_difference / 3600, 0)
|
||
much_days_ago = int(round(much_hour_ago / 24, 0))
|
||
message_with_date = ''
|
||
if much_minutes_ago <= 60:
|
||
word_minute = plural_time(1, much_minutes_ago)
|
||
# Экранируем потенциально проблемные символы
|
||
word_minute_escaped = html.escape(word_minute)
|
||
message_with_date = f'<b>Последнее сообщение было записано {word_minute_escaped} назад</b>'
|
||
elif much_minutes_ago > 60 and much_hour_ago <= 24:
|
||
word_hour = plural_time(2, much_hour_ago)
|
||
# Экранируем потенциально проблемные символы
|
||
word_hour_escaped = html.escape(word_hour)
|
||
message_with_date = f'<b>Последнее сообщение было записано {word_hour_escaped} назад</b>'
|
||
elif much_hour_ago > 24:
|
||
word_day = plural_time(3, much_days_ago)
|
||
# Экранируем потенциально проблемные символы
|
||
word_day_escaped = html.escape(word_day)
|
||
message_with_date = f'<b>Последнее сообщение было записано {word_day_escaped} назад</b>'
|
||
return message_with_date
|
||
|
||
|
||
def plural_time(type, n):
|
||
word = []
|
||
if type == 1:
|
||
word = ['минуту', 'минуты', 'минут']
|
||
elif type == 2:
|
||
word = ['час', 'часа', 'часов']
|
||
elif type == 3:
|
||
word = ['день', 'дня', 'дней']
|
||
else:
|
||
pass
|
||
|
||
if n % 10 == 1 and n % 100 != 11:
|
||
p = 0
|
||
elif 2 <= n % 10 <= 4 and (n % 100 < 10 or n % 100 >= 20):
|
||
p = 1
|
||
else:
|
||
p = 2
|
||
new_number = int(n)
|
||
return str(new_number) + ' ' + word[p]
|