<reponame>rusrushal13/zulip

from typing import Any, Iterable, Text, Tuple

from django.conf import settings
from django.core.management.base import BaseCommand

from zerver.lib.actions import create_users
from zerver.models import Realm, UserProfile

class Command(BaseCommand):
    help = "Create Realm internal bots. These bots provide various services like doing reminders."

    def handle(self, *args: Any, **options: Any) -> None:
        internal_bots = set([(bot['name'], bot['email_template'] % (settings.INTERNAL_BOT_DOMAIN,))
                            for bot in settings.REALM_INTERNAL_BOTS])

        existing_bots = list(UserProfile.objects.select_related(
            'realm').filter(email__in=[bot[1] for bot in internal_bots]))

        all_realms = list(Realm.objects.all())

        for realm in all_realms:
            this_realm_bots = set()
            for bot in existing_bots:
                if bot.realm.string_id == realm.string_id:
                    this_realm_bots.update([bot])
            bots_to_create = list(internal_bots - this_realm_bots)
            if bots_to_create:
                create_users(realm, bots_to_create, bot_type=UserProfile.DEFAULT_BOT)

        # Set the owners for these bots to the bots themselves
        bots = UserProfile.objects.filter(
            email__in=[bot_info[1] for bot_info in internal_bots],
            bot_owner__isnull=True
        )
        for bot in bots:
            bot.bot_owner = bot
            bot.save()

        self.stdout.write("Successfully created realm default bots.\n")

from typing import Any, Iterable, Text, Tuple

from django.conf import settings
from django.core.management.base import BaseCommand

from zerver.lib.actions import create_users
from zerver.models import Realm, UserProfile

class Command(BaseCommand):
    help = "Create Realm internal bots. These bots provide various services like doing reminders."

    def handle(self, *args: Any, **options: Any) -> None:
        internal_bots = set([(bot['name'], bot['email_template'] % (settings.INTERNAL_BOT_DOMAIN,))
                            for bot in settings.REALM_INTERNAL_BOTS])

        existing_bots = list(UserProfile.objects.select_related(
            'realm').filter(email__in=[bot[1] for bot in internal_bots]))

        all_realms = list(Realm.objects.all())

        for realm in all_realms:
            this_realm_bots = set()
            for bot in existing_bots:
                if bot.realm.string_id == realm.string_id:
                    this_realm_bots.update([bot])
            bots_to_create = list(internal_bots - this_realm_bots)
            if bots_to_create:
                create_users(realm, bots_to_create, bot_type=UserProfile.DEFAULT_BOT)

        # Set the owners for these bots to the bots themselves
        bots = UserProfile.objects.filter(
            email__in=[bot_info[1] for bot_info in internal_bots],
            bot_owner__isnull=True
        )
        for bot in bots:
            bot.bot_owner = bot
            bot.save()

        self.stdout.write("Successfully created realm default bots.\n")
# Set the owners for these bots to the bots themselves