diff --git a/Dockerfiles/test.Dockerfile b/Dockerfiles/test.Dockerfile index 0374574f87ec2a85ddc24b8d1fe7477f711bcc92..6536daaeb868970cc3e0e1273804e69ad7eacee7 100644 --- a/Dockerfiles/test.Dockerfile +++ b/Dockerfiles/test.Dockerfile @@ -13,7 +13,7 @@ COPY --from=docker_linter /bin/hadolint /bin/ RUN hadolint -v # Installing requirements COPY requirements/ /reqs -RUN pip install -r /reqs/requirements.test.txt +RUN pip install -r /reqs/requirements.dev.txt # Copying actuall application COPY . /app diff --git a/requirements/requirements.test.txt b/requirements/requirements.dev.txt similarity index 100% rename from requirements/requirements.test.txt rename to requirements/requirements.dev.txt diff --git a/src/actions/__init__.py b/src/actions/__init__.py index 147caf4fe4229ba8180a17528bd38c10bd994bb3..5d8aab99aa912cf676eefd333b31b10cad57319d 100644 --- a/src/actions/__init__.py +++ b/src/actions/__init__.py @@ -8,4 +8,5 @@ def finish(): importlib.import_module("src.actions.replies") importlib.import_module("src.actions.package_indexes") importlib.import_module("src.actions.search_engines") + importlib.import_module("src.actions.reminder") logging.info("All actions loaded") diff --git a/src/actions/fun.py b/src/actions/fun.py index 8becf3ab1c1e4a458fffebab48158355f4f6d2bd..2058a5983a71ae4ce63679910cae24a8c051ff31 100644 --- a/src/actions/fun.py +++ b/src/actions/fun.py @@ -37,8 +37,9 @@ async def blyaficate(event: events.NewMessage.Event): ", ебать,", ", нахуй,", ", еб твою мать,", - ", разрази Ð¼ÐµÐ½Ñ Ð³Ñ€Ð¾Ð¼,", + ", укуÑи Ð¼ÐµÐ½Ñ Ð¿Ñ‡ÐµÐ»Ð°,", ", пиздец,", + ", блÑть,", ] ) else: @@ -88,18 +89,18 @@ async def lenochka_reply(event: events.NewMessage.Event): "Тебе норм вообще, Леночка?", "Рчто-нибудь поинтереÑнее не могла?", "ЗавалиÑÑŒ, Леночка.", - "Ð’ точку, подружка.", + "Паучье чутьё подÑказывает мне, что Ñто Ð¿Ð»Ð¾Ñ…Ð°Ñ ÑˆÑƒÑ‚ÐºÐ°.", "За такое поведение отправлÑÑŽÑ‚ в EPAM поломойкой.", "Ðккуратнее будь.", "ÐÐµÐ¾Ð±ÑƒÑ‡Ð°ÐµÐ¼Ð°Ñ Ð´ÑƒÑ€Ð¾Ñ‡ÐºÐ°.", - "Вот Ñти твои приколы уже доÑтали", + "Вот Ñти твои приколы уже доÑтали.", "Другого от Ñ‚ÐµÐ±Ñ Ð¸ не ожидал.", "У Ð¼ÐµÐ½Ñ ÑкладываетÑÑ Ð¾Ñ‰ÑƒÑ‰ÐµÐ½Ð¸Ðµ, что ты бот.", "Пока ребÑта не видÑÑ‚, может Ñходим ко мне на Ñервер?", "ÐšÐ°ÐºÐ°Ñ Ð¶Ðµ ты ÑмешнаÑ.", "Думай прежде чем говорить такое.", - "Рчто еÑли бы ты задела чьи-нибудь чувÑтва?", - "Рвот Ñто неожиданно было.", + "Ð’Ñпоминай вÑех богов, что тебе извеÑтны и начинай молитьÑÑ.", + "Знаешь, что говорит один бот другому боту? Ð’ÑтретимÑÑ Ð² /tmp.", ] ) ) diff --git a/src/actions/reminder.py b/src/actions/reminder.py new file mode 100644 index 0000000000000000000000000000000000000000..58869657b641ed47f8d888710d8c00d39743a0d7 --- /dev/null +++ b/src/actions/reminder.py @@ -0,0 +1,79 @@ +import datetime +import logging + +from src.config import config +from telethon import events + +logger = logging.getLogger(__name__) + +FINAL_CAPTION = "\n\n`Ðапоминание Ñделано автоматичеÑки, но Ñ Ð»ÑŽÐ±Ð¾Ð²ÑŒÑŽ.`" + +date_translation = { + "завтра": datetime.timedelta(days=1), + "поÑлезавтра": datetime.timedelta(days=2), + "": datetime.timedelta(), +} + + +@config.telegram_client.on(events.NewMessage(pattern=".rh")) +async def reminder_help(event): + with open("./static_messages/reminder_help.txt") as f: + contents = f.read() + await event.respond(contents) + + +@config.telegram_client.on( + events.NewMessage( + pattern=r"[Ð|н]апомни(\s+мне)?\s*(?P<date>\s+завтра|\s+поÑлезавтра|\d{4})?" + r"\s+в\s+(?P<time>\d{2}(:\d{2})?([+|-]\d\d?)?)\s+(?P<action>.+)", + forwards=False, + ) +) +async def set_reminder(event: events.NewMessage.Event): + groups = event.pattern_match.groupdict() + target_time = datetime.datetime.now() + action = groups["action"] + date = groups["date"] or "" + target_time += date_translation[date.strip()] + time_with_zone = groups.get("time") + time = time_with_zone + time_offset = None + if "+" in time: + time, offset = time.split("+") + time_offset = datetime.timedelta(hours=-int(offset)) + if "-" in time: + time, offset = time.split("-") + time_offset = datetime.timedelta(hours=int(offset)) + if ":" in time: + hour, minute = time.split(":") + target_time = target_time.replace(hour=int(hour), minute=int(minute)) + else: + target_time = target_time.replace(hour=int(time), minute=0) + target_time = target_time.replace(second=0, microsecond=0) + if time_offset: + target_time_delta = ( + target_time.replace() + time_offset + ) - datetime.datetime.utcnow() + else: + target_time_delta = target_time.replace() - datetime.datetime.now() + chat = await event.get_chat() + message = event.message + username = "" + if event.is_group: + sender = await message.get_sender() + if sender.username: + username = f" @{sender.username}," + else: + username = ( + f" [{sender.first_name} {sender.last_name}](tg://user?id={sender.id})," + ) + logger.debug(target_time_delta) + if target_time_delta >= datetime.timedelta(0): + await event.client.send_message( + chat, + f"Привет,{username} напоминаю тебе, что ты хотел {action}{FINAL_CAPTION}", + schedule=target_time_delta, + ) + await event.reply("Ðапоминание оÑтавлено!") + else: + await event.reply("Упущенного не вернуть!") diff --git a/static_messages/help.txt b/static_messages/help.txt index 35c29fd472f1e400741546dd32db3f55e78087a3..80783b13f99b83a2763806922297234cd2e6b7fc 100644 --- a/static_messages/help.txt +++ b/static_messages/help.txt @@ -12,10 +12,9 @@ * `.aur` -- Ð´Ð»Ñ Arch Linux * `.brew` -- Ð´Ð»Ñ MacOs -Также можно быÑтро поиÑкать картиночки в интенетиках. -`.i <запроÑ>` вернет пачку картинок Ñ Ð¸Ð½Ñ‚ÐµÑ€Ð½ÐµÑ‚Ð¸ÐºÐ¾Ð². - Также умею ещё пару забавных штук. +`.rh` покажет как уÑтанавливать напоминаниÑ. +`.i <запроÑ>` вернет пачку картинок Ñ Ð¸Ð½Ñ‚ÐµÑ€Ð½ÐµÑ‚Ð¸ÐºÐ¾Ð². * `.bl` <любой текÑÑ‚> - заменит вÑе запÑтые на вÑÑкие гадоÑти. * `.t` - показать текущее Ð²Ñ€ÐµÐ¼Ñ * `@all` -- упомÑнуть вÑех в беÑеде diff --git a/static_messages/reminder_help.txt b/static_messages/reminder_help.txt new file mode 100644 index 0000000000000000000000000000000000000000..f8954a3a830ca9b20d26727b420a08bb75067fc5 --- /dev/null +++ b/static_messages/reminder_help.txt @@ -0,0 +1,13 @@ +** ÐÐµÐ±Ð¾Ð»ÑŒÑˆÐ°Ñ Ñправка, как управлÑть напоминаниÑми ** + +УÑтанавливаютÑÑ Ð½Ð°Ð¿Ð¾Ð¼Ð¸Ð½Ð°Ð½Ñ Ð¿Ñ€Ð¾Ñто и на еÑтеÑтвенном Ñзыке. + +Вот неÑколько примеров как уÑтановить напоминаниÑ: + +* `Ðапомни в 10:00+04 заварить чай.` +* `Ðапомни мне в 10:00+04 заварить чай.` +* `Ðапомни завтра в 10:00+04 заварить чай.` +* `Ðапомни поÑлезавтра в 10:00+04 заварить чай.` + +Ð’ приведенных примерах бот напишет вам Ñообщение в 10 чаÑов утра по СамарÑкому времени. +`+04` в Ñтом Ñлучае означает Ñмещение по `UTC`.