from django.db import transaction from pyrogram import Error from .client import get_client from .models import Chat, AggregationSource from .tasks import collect_new_messages def aggregation_source_deleted(sender, instance: AggregationSource, **kwargs): if not AggregationSource.objects.filter(chat_id=instance.chat_id): Chat.objects.filter(chat_id=instance.chat_id).delete() def chat_created(sender, instance: Chat, created, **kwargs): if created: transaction.on_commit(lambda: collect_new_messages.delay(instance.pk)) def chat_deleted(sender, instance: Chat, **kwargs): with get_client() as client: try: client.leave_chat(instance.chat_id) except Error: pass