diff --git a/Dockerfiles/Dockerfile b/Dockerfiles/Dockerfile index e3ab4905c3200c75bc95a471356dae86ca6060f5..a25926ccd8ccfbf38123bd0850ece4c49b94c888 100644 --- a/Dockerfiles/Dockerfile +++ b/Dockerfiles/Dockerfile @@ -2,7 +2,7 @@ FROM python:3.8 # Installing requirements COPY requirements/requirements.base.txt /tmp/ -RUN pip install -r /tmp/requirements.base.txt +RUN pip install --no-cache-dir -r /tmp/requirements.base.txt # Copying actuall application COPY src/ /app/src diff --git a/Dockerfiles/test.Dockerfile b/Dockerfiles/test.Dockerfile index 6536daaeb868970cc3e0e1273804e69ad7eacee7..e7c28c343b31fd3ad5697a81741de8b6d58c915a 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.dev.txt +RUN pip install --no-cache-dir -r /reqs/requirements.dev.txt # Copying actuall application COPY . /app diff --git a/deploy.sh b/deploy.sh index 02d222796ad6efed132864f531336d9555b94673..30e5461a145d35b7245074d388b93fb6c801c879 100644 --- a/deploy.sh +++ b/deploy.sh @@ -5,6 +5,7 @@ TELEGRAM_APP_ID="${TELEGRM_APP_ID_MASKED//a/}" echo "TELEGRAM_API_HASH=${TELEGRAM_API_HASH}" echo "TELEGRAM_ACCOUNT_PHONE=${TELEGRAM_ACCOUNT_PHONE}" echo "LIBRARIES_IO_API_TOKEN=${LIBRARIES_IO_API_TOKEN}" + echo "EXCLUDED_CHATS=${EXCLUDED_CHATS}" } >>.env # Store some info in app.info file diff --git a/src/actions/basic.py b/src/actions/basic.py index ddad473c725aa457eee4e081802db06747531db2..c3889ce14cba2bfb1cbe3c4bd265787e0064e7ab 100644 --- a/src/actions/basic.py +++ b/src/actions/basic.py @@ -25,6 +25,12 @@ async def ci(event): await event.respond(contents) +@config.telegram_client.on(events.NewMessage(pattern=r"^\.cid$")) +@mark_unread +async def get_chat_id(event): + await event.respond(str(event.chat.id)) + + @config.telegram_client.on(events.NewMessage(pattern=r"^\.t$")) @mark_unread async def show_time(event): diff --git a/src/actions/fun.py b/src/actions/fun.py index 76ad074f1e4280753e2faf4678a0871ccab4d316..921ef6688820d4e7a0b433e94ab67c4d9faf4462 100644 --- a/src/actions/fun.py +++ b/src/actions/fun.py @@ -5,7 +5,7 @@ import re from datetime import datetime from src.config import config -from src.utils.responses import mark_unread +from src.utils.responses import danger_message, mark_unread from src.utils.str_helpers import Rotor from telethon import events @@ -28,6 +28,7 @@ swearing = [ @config.telegram_client.on(events.NewMessage(pattern=r"^\.bl (.*)", forwards=False)) +@danger_message @mark_unread async def blyaficate(event: events.NewMessage.Event): message = event.message.message.lstrip(".bl ").strip() @@ -67,6 +68,7 @@ async def blyaficate(event: events.NewMessage.Event): outgoing=False, ) ) +@danger_message @mark_unread async def swearing_reply(event): await event.reply( diff --git a/src/actions/replies.py b/src/actions/replies.py index d682744481ce486fd9d9ac58088fab6a768ffe2d..a834cf1b61f358f8e4cfc65b0bbade97a7301191 100644 --- a/src/actions/replies.py +++ b/src/actions/replies.py @@ -3,17 +3,16 @@ import random import re from src.config import config -from src.utils.responses import check_if_only_smiles, mark_unread +from src.utils.responses import check_if_only_smiles, danger_message, mark_unread from telethon import events logger = logging.getLogger(__name__) @config.telegram_client.on(events.ChatAction()) +@danger_message @mark_unread async def welcome(event: events.ChatAction.Event): - if str(event.chat.id) in ["-414207303", "-1001151788445"]: - return if event.user_joined: await event.respond( random.choice( @@ -33,16 +32,18 @@ async def welcome(event: events.ChatAction.Event): outgoing=False, ) ) +@danger_message @mark_unread -async def hello(event): +async def hello(event: events.ChatAction.Event): await event.respond( - random.choice(["ЗдравÑтвуйте!", "Добрый день!", "ПриветÑтвую."]) + random.choice(["ЗдравÑтвуйте!", "Добрый день!", "ПриветÑтвую.", "Привет!"]) ) @config.telegram_client.on( events.NewMessage(pattern=check_if_only_smiles, outgoing=False) ) +@danger_message @mark_unread async def smile(event: events.NewMessage.Event): await event.respond(event.message.message) @@ -55,6 +56,7 @@ async def smile(event: events.NewMessage.Event): forwards=False, ) ) +@danger_message @mark_unread async def hello_fucker(event: events.NewMessage.Event): await event.respond( diff --git a/src/config.py b/src/config.py index 3ed8fd8f29f0a4ff1443e4c4add5fc9439c5a62e..938d672357ea1720bcb938cd1c198805ad7d20ca 100644 --- a/src/config.py +++ b/src/config.py @@ -1,3 +1,5 @@ +from typing import List + from pydantic import BaseSettings from pydantic.fields import Field from telethon import TelegramClient @@ -22,6 +24,8 @@ class Config(BaseSettings): flask_port: str = Field(name="flask_port", default="8080", env="FLASK_PORT") + excluded_chats: List[str] = Field([], env="EXCLUDED_CHATS") + telegram_client: TelegramClient = None diff --git a/src/utils/responses.py b/src/utils/responses.py index 8da577252956fdf3f59fad01967fa9ca33da76ae..160fa50dc1c678ff2059c3dadbfa45a845c47e00 100644 --- a/src/utils/responses.py +++ b/src/utils/responses.py @@ -3,6 +3,7 @@ import functools import logging import random +from src.config import config from telethon import events, functions logger = logging.getLogger(__name__) @@ -74,5 +75,16 @@ def mark_unread(f): return wrapper +def danger_message(f): + @functools.wraps(f) + async def wrapper(event: events.NewMessage.Event): + if str(event.chat.id) in set(config.excluded_chats): + logger.debug("Skipping sending message") + return + await f(event) + + return wrapper + + def check_if_only_smiles(message: str): return all([x in ")0." for x in message]) diff --git a/static_messages/help.txt b/static_messages/help.txt index 1f6d00859042aef60ef0ba1ddd05fe210b8552b9..8f01655b28c2a7951f4991d7c01adb4da0859db5 100644 --- a/static_messages/help.txt +++ b/static_messages/help.txt @@ -14,6 +14,7 @@ Также умею ещё пару забавных штук. `.sc` поÑмотреть поддерживаемые курÑÑ‹ валют Ð´Ð»Ñ Ð°Ð²Ñ‚Ð¾Ð¼Ð°Ñ‚Ð¸Ñ‡ÐµÑкой конвертации. +`.cid` Вернуть id текущего чата. `.scc` ПоÑмотреть курÑÑ‹ криптовалют. `.rl` Создать бегущую Ñтроку из ÑообщениÑ. `.i <запроÑ>` вернет пачку картинок Ñ Ð¸Ð½Ñ‚ÐµÑ€Ð½ÐµÑ‚Ð¸ÐºÐ¾Ð². diff --git a/tests/conftest.py b/tests/conftest.py index 9b5fda3e766f6d7fd5694ae04b4beb04809b5ca5..4ce8a6bbc2b6d85a30ef3f4500032b27d006ac8d 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -31,6 +31,12 @@ class NewMessageTestEvent(object): message.message = self._msg return message + @property + def chat(self): + chat = MagicMock() + chat.id = "123123123" + return chat + async def get_chat(self): return MagicMock()