2020-12-27 10:49:54 +00:00
|
|
|
# Copyright (C) 2020 by Animath
|
|
|
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
|
|
|
|
2021-04-04 14:02:37 +00:00
|
|
|
import asyncio
|
2020-12-27 10:49:54 +00:00
|
|
|
import os
|
|
|
|
|
|
|
|
from django.core.management import BaseCommand
|
2021-01-21 16:44:18 +00:00
|
|
|
from django.utils.http import urlencode
|
2021-01-20 22:34:33 +00:00
|
|
|
from django.utils.translation import activate
|
2021-01-18 01:07:31 +00:00
|
|
|
from participation.models import Team, Tournament
|
2023-02-19 23:23:18 +00:00
|
|
|
from registration.models import Registration, VolunteerRegistration
|
2020-12-28 18:19:01 +00:00
|
|
|
from tfjm.matrix import Matrix, RoomPreset, RoomVisibility
|
2020-12-27 10:49:54 +00:00
|
|
|
|
|
|
|
|
|
|
|
class Command(BaseCommand):
|
2021-01-18 01:07:31 +00:00
|
|
|
def handle(self, *args, **options): # noqa: C901
|
2021-01-20 22:34:33 +00:00
|
|
|
activate("fr")
|
2022-11-08 14:52:44 +00:00
|
|
|
|
2021-04-04 14:02:37 +00:00
|
|
|
async def main():
|
|
|
|
await Matrix.set_display_name("Bot du TFJM²")
|
2022-11-08 14:52:44 +00:00
|
|
|
|
2021-04-04 14:02:37 +00:00
|
|
|
if not os.getenv("SYNAPSE_PASSWORD"):
|
|
|
|
avatar_uri = "plop"
|
|
|
|
else: # pragma: no cover
|
|
|
|
if not os.path.isfile(".matrix_avatar"):
|
|
|
|
avatar_uri = await Matrix.get_avatar()
|
|
|
|
if isinstance(avatar_uri, str):
|
|
|
|
with open(".matrix_avatar", "w") as f:
|
|
|
|
f.write(avatar_uri)
|
|
|
|
else:
|
|
|
|
stat_file = os.stat("tfjm/static/logo.png")
|
|
|
|
with open("tfjm/static/logo.png", "rb") as f:
|
2021-04-04 14:06:16 +00:00
|
|
|
resp = (await Matrix.upload(f, filename="logo.png", content_type="image/png",
|
2022-11-08 14:52:44 +00:00
|
|
|
filesize=stat_file.st_size))[0][0]
|
2021-04-04 14:02:37 +00:00
|
|
|
avatar_uri = resp.content_uri
|
|
|
|
with open(".matrix_avatar", "w") as f:
|
|
|
|
f.write(avatar_uri)
|
|
|
|
await Matrix.set_avatar(avatar_uri)
|
2022-11-08 14:52:44 +00:00
|
|
|
|
2021-04-04 14:02:37 +00:00
|
|
|
with open(".matrix_avatar", "r") as f:
|
|
|
|
avatar_uri = f.read().rstrip(" \t\r\n")
|
2022-11-08 14:52:44 +00:00
|
|
|
|
2021-04-04 14:02:37 +00:00
|
|
|
# Create basic channels
|
|
|
|
if not await Matrix.resolve_room_alias("#aide-jurys-orgas:tfjm.org"):
|
|
|
|
await Matrix.create_room(
|
2021-01-18 01:07:31 +00:00
|
|
|
visibility=RoomVisibility.public,
|
2021-04-04 14:02:37 +00:00
|
|
|
alias="aide-jurys-orgas",
|
|
|
|
name="Aide jurys & orgas",
|
|
|
|
topic="Pour discuter de propblèmes d'organisation",
|
2021-01-18 01:07:31 +00:00
|
|
|
federate=False,
|
|
|
|
preset=RoomPreset.private_chat,
|
|
|
|
)
|
2022-11-08 14:52:44 +00:00
|
|
|
|
2021-04-04 14:37:02 +00:00
|
|
|
if not await Matrix.resolve_room_alias("#annonces:tfjm.org"):
|
2021-04-04 14:02:37 +00:00
|
|
|
await Matrix.create_room(
|
2021-01-18 01:07:31 +00:00
|
|
|
visibility=RoomVisibility.public,
|
2021-04-04 14:02:37 +00:00
|
|
|
alias="annonces",
|
|
|
|
name="Annonces",
|
|
|
|
topic="Informations importantes du TFJM²",
|
2021-01-18 01:07:31 +00:00
|
|
|
federate=False,
|
2021-04-04 14:02:37 +00:00
|
|
|
preset=RoomPreset.public_chat,
|
2021-01-18 01:07:31 +00:00
|
|
|
)
|
2022-11-08 14:52:44 +00:00
|
|
|
|
2021-04-04 14:37:02 +00:00
|
|
|
if not await Matrix.resolve_room_alias("#bienvenue:tfjm.org"):
|
2021-04-04 14:02:37 +00:00
|
|
|
await Matrix.create_room(
|
2021-01-18 01:07:31 +00:00
|
|
|
visibility=RoomVisibility.public,
|
2021-04-04 14:02:37 +00:00
|
|
|
alias="bienvenue",
|
|
|
|
name="Bienvenue",
|
2023-03-16 13:31:14 +00:00
|
|
|
topic="Bienvenue au TFJM² 2023 !",
|
2021-01-18 01:07:31 +00:00
|
|
|
federate=False,
|
2021-04-04 14:02:37 +00:00
|
|
|
preset=RoomPreset.public_chat,
|
2021-01-18 01:07:31 +00:00
|
|
|
)
|
2022-11-08 14:52:44 +00:00
|
|
|
|
2021-04-04 14:37:02 +00:00
|
|
|
if not await Matrix.resolve_room_alias("#bot:tfjm.org"):
|
2021-04-04 14:02:37 +00:00
|
|
|
await Matrix.create_room(
|
2021-01-18 01:07:31 +00:00
|
|
|
visibility=RoomVisibility.public,
|
2021-04-04 14:02:37 +00:00
|
|
|
alias="bot",
|
|
|
|
name="Bot",
|
|
|
|
topic="Vive les r0b0ts",
|
2021-01-18 01:07:31 +00:00
|
|
|
federate=False,
|
2021-04-04 14:02:37 +00:00
|
|
|
preset=RoomPreset.public_chat,
|
2021-01-18 01:07:31 +00:00
|
|
|
)
|
2022-11-08 14:52:44 +00:00
|
|
|
|
2021-04-04 14:37:02 +00:00
|
|
|
if not await Matrix.resolve_room_alias("#cno:tfjm.org"):
|
2021-04-04 14:02:37 +00:00
|
|
|
await Matrix.create_room(
|
2021-01-18 01:07:31 +00:00
|
|
|
visibility=RoomVisibility.public,
|
2021-04-04 14:02:37 +00:00
|
|
|
alias="cno",
|
|
|
|
name="CNO",
|
|
|
|
topic="Channel des dieux",
|
2021-01-18 01:07:31 +00:00
|
|
|
federate=False,
|
|
|
|
preset=RoomPreset.private_chat,
|
|
|
|
)
|
2022-11-08 14:52:44 +00:00
|
|
|
|
2021-04-04 14:37:02 +00:00
|
|
|
if not await Matrix.resolve_room_alias("#dev-bot:tfjm.org"):
|
2021-04-04 14:02:37 +00:00
|
|
|
await Matrix.create_room(
|
2021-01-19 10:32:28 +00:00
|
|
|
visibility=RoomVisibility.public,
|
2021-04-04 14:02:37 +00:00
|
|
|
alias="dev-bot",
|
|
|
|
name="Bot - développement",
|
|
|
|
topic="Vive le bot",
|
2021-01-19 10:32:28 +00:00
|
|
|
federate=False,
|
|
|
|
preset=RoomPreset.private_chat,
|
|
|
|
)
|
2022-11-08 14:52:44 +00:00
|
|
|
|
2021-04-04 14:37:02 +00:00
|
|
|
if not await Matrix.resolve_room_alias("#faq:tfjm.org"):
|
2021-04-04 14:02:37 +00:00
|
|
|
await Matrix.create_room(
|
|
|
|
visibility=RoomVisibility.public,
|
|
|
|
alias="faq",
|
|
|
|
name="FAQ",
|
|
|
|
topic="Posez toutes vos questions ici !",
|
|
|
|
federate=False,
|
|
|
|
preset=RoomPreset.public_chat,
|
|
|
|
)
|
2022-11-08 14:52:44 +00:00
|
|
|
|
2021-04-04 14:37:02 +00:00
|
|
|
if not await Matrix.resolve_room_alias("#flood:tfjm.org"):
|
2021-04-04 14:02:37 +00:00
|
|
|
await Matrix.create_room(
|
|
|
|
visibility=RoomVisibility.public,
|
|
|
|
alias="flood",
|
|
|
|
name="Flood",
|
|
|
|
topic="Discutez de tout et de rien !",
|
|
|
|
federate=False,
|
|
|
|
preset=RoomPreset.public_chat,
|
|
|
|
)
|
2022-11-08 14:52:44 +00:00
|
|
|
|
2021-04-04 14:37:02 +00:00
|
|
|
if not await Matrix.resolve_room_alias("#je-cherche-une-equipe:tfjm.org"):
|
2021-04-04 14:02:37 +00:00
|
|
|
await Matrix.create_room(
|
|
|
|
visibility=RoomVisibility.public,
|
|
|
|
alias="je-cherche-une-equipe",
|
|
|
|
name="Je cherche une équipe",
|
|
|
|
topic="Le Tinder du TFJM²",
|
|
|
|
federate=False,
|
|
|
|
preset=RoomPreset.public_chat,
|
|
|
|
)
|
2022-11-08 14:52:44 +00:00
|
|
|
|
2021-01-18 01:07:31 +00:00
|
|
|
# Setup avatars
|
2021-04-04 14:02:37 +00:00
|
|
|
await Matrix.set_room_avatar("#aide-jurys-orgas:tfjm.org", avatar_uri)
|
|
|
|
await Matrix.set_room_avatar("#annonces:tfjm.org", avatar_uri)
|
|
|
|
await Matrix.set_room_avatar("#bienvenue:tfjm.org", avatar_uri)
|
|
|
|
await Matrix.set_room_avatar("#bot:tfjm.org", avatar_uri)
|
|
|
|
await Matrix.set_room_avatar("#cno:tfjm.org", avatar_uri)
|
|
|
|
await Matrix.set_room_avatar("#dev-bot:tfjm.org", avatar_uri)
|
|
|
|
await Matrix.set_room_avatar("#faq:tfjm.org", avatar_uri)
|
|
|
|
await Matrix.set_room_avatar("#flood:tfjm.org", avatar_uri)
|
|
|
|
await Matrix.set_room_avatar("#je-cherche-une-equipe:tfjm.org", avatar_uri)
|
2022-11-08 14:52:44 +00:00
|
|
|
|
2021-04-04 14:02:37 +00:00
|
|
|
# Read-only channels
|
|
|
|
await Matrix.set_room_power_level_event("#annonces:tfjm.org", "events_default", 50)
|
|
|
|
await Matrix.set_room_power_level_event("#bienvenue:tfjm.org", "events_default", 50)
|
2022-11-08 14:52:44 +00:00
|
|
|
|
2021-04-04 14:02:37 +00:00
|
|
|
# Invite everyone to public channels
|
|
|
|
for r in Registration.objects.all():
|
|
|
|
await Matrix.invite("#annonces:tfjm.org", f"@{r.matrix_username}:tfjm.org")
|
|
|
|
await Matrix.invite("#bienvenue:tfjm.org", f"@{r.matrix_username}:tfjm.org")
|
|
|
|
await Matrix.invite("#bot:tfjm.org", f"@{r.matrix_username}:tfjm.org")
|
|
|
|
await Matrix.invite("#faq:tfjm.org", f"@{r.matrix_username}:tfjm.org")
|
|
|
|
await Matrix.invite("#flood:tfjm.org", f"@{r.matrix_username}:tfjm.org")
|
|
|
|
await Matrix.invite("#je-cherche-une-equipe:tfjm.org",
|
2022-11-08 14:52:44 +00:00
|
|
|
f"@{r.matrix_username}:tfjm.org")
|
2021-04-04 14:02:37 +00:00
|
|
|
self.stdout.write(f"Invite {r} in most common channels...")
|
2022-11-08 14:52:44 +00:00
|
|
|
|
2021-04-04 14:02:37 +00:00
|
|
|
# Volunteers have access to the help channel
|
|
|
|
for volunteer in VolunteerRegistration.objects.all():
|
|
|
|
await Matrix.invite("#aide-jurys-orgas:tfjm.org", f"@{volunteer.matrix_username}:tfjm.org")
|
|
|
|
self.stdout.write(f"Invite {volunteer} in #aide-jury-orgas...")
|
2022-11-08 14:52:44 +00:00
|
|
|
|
2021-04-04 14:02:37 +00:00
|
|
|
# Admins are admins
|
2023-02-19 23:23:18 +00:00
|
|
|
for admin in VolunteerRegistration.objects.filter(admin=True).all():
|
2021-04-04 14:02:37 +00:00
|
|
|
self.stdout.write(f"Invite {admin} in #cno and #dev-bot...")
|
|
|
|
await Matrix.invite("#cno:tfjm.org", f"@{admin.matrix_username}:tfjm.org")
|
|
|
|
await Matrix.invite("#dev-bot:tfjm.org", f"@{admin.matrix_username}:tfjm.org")
|
2022-11-08 14:52:44 +00:00
|
|
|
|
2021-04-04 14:02:37 +00:00
|
|
|
self.stdout.write(f"Give admin permissions for {admin}...")
|
2021-04-04 14:06:16 +00:00
|
|
|
await Matrix.set_room_power_level("#aide-jurys-orgas:tfjm.org",
|
|
|
|
f"@{admin.matrix_username}:tfjm.org", 95)
|
|
|
|
await Matrix.set_room_power_level("#annonces:tfjm.org",
|
|
|
|
f"@{admin.matrix_username}:tfjm.org", 95)
|
|
|
|
await Matrix.set_room_power_level("#bienvenue:tfjm.org",
|
|
|
|
f"@{admin.matrix_username}:tfjm.org", 95)
|
|
|
|
await Matrix.set_room_power_level("#bot:tfjm.org",
|
|
|
|
f"@{admin.matrix_username}:tfjm.org", 95)
|
|
|
|
await Matrix.set_room_power_level("#cno:tfjm.org",
|
|
|
|
f"@{admin.matrix_username}:tfjm.org", 95)
|
|
|
|
await Matrix.set_room_power_level("#dev-bot:tfjm.org",
|
|
|
|
f"@{admin.matrix_username}:tfjm.org", 95)
|
|
|
|
await Matrix.set_room_power_level("#faq:tfjm.org",
|
|
|
|
f"@{admin.matrix_username}:tfjm.org", 95)
|
|
|
|
await Matrix.set_room_power_level("#flood:tfjm.org",
|
|
|
|
f"@{admin.matrix_username}:tfjm.org", 95)
|
|
|
|
await Matrix.set_room_power_level("#je-cherche-une-equipe:tfjm.org",
|
|
|
|
f"@{admin.matrix_username}:tfjm.org", 95)
|
2022-11-08 14:52:44 +00:00
|
|
|
|
2021-04-04 14:02:37 +00:00
|
|
|
# Create tournament-specific channels
|
|
|
|
for tournament in Tournament.objects.all():
|
|
|
|
self.stdout.write(f"Managing tournament of {tournament.name}.")
|
2022-11-08 14:52:44 +00:00
|
|
|
|
2021-04-04 14:02:37 +00:00
|
|
|
name = tournament.name
|
|
|
|
slug = name.lower().replace(" ", "-")
|
2022-11-08 14:52:44 +00:00
|
|
|
|
2021-04-04 14:37:02 +00:00
|
|
|
if not await Matrix.resolve_room_alias(f"#annonces-{slug}:tfjm.org"):
|
2021-04-04 14:02:37 +00:00
|
|
|
await Matrix.create_room(
|
2021-01-18 01:07:31 +00:00
|
|
|
visibility=RoomVisibility.public,
|
2021-04-04 14:02:37 +00:00
|
|
|
alias=f"annonces-{slug}",
|
|
|
|
name=f"{name} - Annonces",
|
|
|
|
topic=f"Annonces du tournoi de {name}",
|
2021-01-18 01:07:31 +00:00
|
|
|
federate=False,
|
|
|
|
preset=RoomPreset.private_chat,
|
|
|
|
)
|
2022-11-08 14:52:44 +00:00
|
|
|
|
2021-04-04 14:37:02 +00:00
|
|
|
if not await Matrix.resolve_room_alias(f"#general-{slug}:tfjm.org"):
|
2021-04-04 14:02:37 +00:00
|
|
|
await Matrix.create_room(
|
2021-01-18 01:07:31 +00:00
|
|
|
visibility=RoomVisibility.public,
|
2021-04-04 14:02:37 +00:00
|
|
|
alias=f"general-{slug}",
|
|
|
|
name=f"{name} - Général",
|
|
|
|
topic=f"Accueil du tournoi de {name}",
|
2021-01-18 01:07:31 +00:00
|
|
|
federate=False,
|
|
|
|
preset=RoomPreset.private_chat,
|
|
|
|
)
|
2022-11-08 14:52:44 +00:00
|
|
|
|
2021-04-04 14:37:02 +00:00
|
|
|
if not await Matrix.resolve_room_alias(f"#flood-{slug}:tfjm.org"):
|
2021-04-04 14:02:37 +00:00
|
|
|
await Matrix.create_room(
|
|
|
|
visibility=RoomVisibility.public,
|
|
|
|
alias=f"flood-{slug}",
|
|
|
|
name=f"{name} - Flood",
|
|
|
|
topic=f"Discussion libre du tournoi de {name}",
|
|
|
|
federate=False,
|
|
|
|
preset=RoomPreset.private_chat,
|
|
|
|
)
|
2022-11-08 14:52:44 +00:00
|
|
|
|
2021-04-04 14:37:02 +00:00
|
|
|
if not await Matrix.resolve_room_alias(f"#jury-{slug}:tfjm.org"):
|
2021-04-04 14:02:37 +00:00
|
|
|
await Matrix.create_room(
|
|
|
|
visibility=RoomVisibility.public,
|
|
|
|
alias=f"jury-{slug}",
|
|
|
|
name=f"{name} - Jury",
|
|
|
|
topic=f"Discussion entre les orgas et jurys du tournoi de {name}",
|
|
|
|
federate=False,
|
|
|
|
preset=RoomPreset.private_chat,
|
|
|
|
)
|
2022-11-08 14:52:44 +00:00
|
|
|
|
2021-04-04 14:37:02 +00:00
|
|
|
if not await Matrix.resolve_room_alias(f"#orga-{slug}:tfjm.org"):
|
2021-04-04 14:02:37 +00:00
|
|
|
await Matrix.create_room(
|
|
|
|
visibility=RoomVisibility.public,
|
|
|
|
alias=f"orga-{slug}",
|
|
|
|
name=f"{name} - Organisateurs",
|
|
|
|
topic=f"Discussion entre les orgas du tournoi de {name}",
|
|
|
|
federate=False,
|
|
|
|
preset=RoomPreset.private_chat,
|
|
|
|
)
|
2022-11-08 14:52:44 +00:00
|
|
|
|
2021-04-04 14:37:02 +00:00
|
|
|
if not await Matrix.resolve_room_alias(f"#tirage-au-sort-{slug}:tfjm.org"):
|
2021-04-04 14:02:37 +00:00
|
|
|
await Matrix.create_room(
|
|
|
|
visibility=RoomVisibility.public,
|
|
|
|
alias=f"tirage-au-sort-{slug}",
|
|
|
|
name=f"{name} - Tirage au sort",
|
|
|
|
topic=f"Tirage au sort du tournoi de {name}",
|
|
|
|
federate=False,
|
|
|
|
preset=RoomPreset.private_chat,
|
|
|
|
)
|
2022-11-08 14:52:44 +00:00
|
|
|
|
2021-04-04 14:02:37 +00:00
|
|
|
# Setup avatars
|
|
|
|
await Matrix.set_room_avatar(f"#annonces-{slug}:tfjm.org", avatar_uri)
|
|
|
|
await Matrix.set_room_avatar(f"#flood-{slug}:tfjm.org", avatar_uri)
|
|
|
|
await Matrix.set_room_avatar(f"#general-{slug}:tfjm.org", avatar_uri)
|
|
|
|
await Matrix.set_room_avatar(f"#jury-{slug}:tfjm.org", avatar_uri)
|
|
|
|
await Matrix.set_room_avatar(f"#orga-{slug}:tfjm.org", avatar_uri)
|
|
|
|
await Matrix.set_room_avatar(f"#tirage-au-sort-{slug}:tfjm.org", avatar_uri)
|
2022-11-08 14:52:44 +00:00
|
|
|
|
2021-01-18 01:07:31 +00:00
|
|
|
# Invite admins and give permissions
|
2023-02-19 23:23:18 +00:00
|
|
|
for admin in VolunteerRegistration.objects.filter(admin=True).all():
|
2021-04-04 14:02:37 +00:00
|
|
|
self.stdout.write(f"Invite {admin} in all channels of the tournament {name}...")
|
|
|
|
await Matrix.invite(f"#annonces-{slug}:tfjm.org", f"@{admin.matrix_username}:tfjm.org")
|
|
|
|
await Matrix.invite(f"#flood-{slug}:tfjm.org", f"@{admin.matrix_username}:tfjm.org")
|
|
|
|
await Matrix.invite(f"#general-{slug}:tfjm.org", f"@{admin.matrix_username}:tfjm.org")
|
|
|
|
await Matrix.invite(f"#jury-{slug}:tfjm.org", f"@{admin.matrix_username}:tfjm.org")
|
|
|
|
await Matrix.invite(f"#orga-{slug}:tfjm.org", f"@{admin.matrix_username}:tfjm.org")
|
|
|
|
await Matrix.invite(f"#tirage-au-sort-{slug}:tfjm.org", f"@{admin.matrix_username}:tfjm.org")
|
2022-11-08 14:52:44 +00:00
|
|
|
|
2021-04-04 14:02:37 +00:00
|
|
|
self.stdout.write(f"Give permissions to {admin} in all channels of the tournament {name}...")
|
2021-04-04 14:06:16 +00:00
|
|
|
await Matrix.set_room_power_level(f"#annonces-{slug}:tfjm.org",
|
|
|
|
f"@{admin.matrix_username}:tfjm.org", 95)
|
|
|
|
await Matrix.set_room_power_level(f"#flood-{slug}:tfjm.org",
|
|
|
|
f"@{admin.matrix_username}:tfjm.org", 95)
|
|
|
|
await Matrix.set_room_power_level(f"#general-{slug}:tfjm.org",
|
|
|
|
f"@{admin.matrix_username}:tfjm.org", 95)
|
|
|
|
await Matrix.set_room_power_level(f"#jury-{slug}:tfjm.org",
|
|
|
|
f"@{admin.matrix_username}:tfjm.org", 95)
|
|
|
|
await Matrix.set_room_power_level(f"#orga-{slug}:tfjm.org",
|
|
|
|
f"@{admin.matrix_username}:tfjm.org", 95)
|
|
|
|
await Matrix.set_room_power_level(f"#tirage-au-sort-{slug}:tfjm.org",
|
|
|
|
f"@{admin.matrix_username}:tfjm.org", 95)
|
2022-11-08 14:52:44 +00:00
|
|
|
|
2021-01-18 01:07:31 +00:00
|
|
|
# Invite organizers and give permissions
|
2021-04-04 14:02:37 +00:00
|
|
|
for orga in tournament.organizers.all():
|
|
|
|
self.stdout.write(f"Invite organizer {orga} in all channels of the tournament {name}...")
|
|
|
|
await Matrix.invite(f"#annonces-{slug}:tfjm.org", f"@{orga.matrix_username}:tfjm.org")
|
|
|
|
await Matrix.invite(f"#flood-{slug}:tfjm.org", f"@{orga.matrix_username}:tfjm.org")
|
|
|
|
await Matrix.invite(f"#general-{slug}:tfjm.org", f"@{orga.matrix_username}:tfjm.org")
|
|
|
|
await Matrix.invite(f"#jury-{slug}:tfjm.org", f"@{orga.matrix_username}:tfjm.org")
|
|
|
|
await Matrix.invite(f"#orga-{slug}:tfjm.org", f"@{orga.matrix_username}:tfjm.org")
|
|
|
|
await Matrix.invite(f"#tirage-au-sort-{slug}:tfjm.org", f"@{orga.matrix_username}:tfjm.org")
|
2022-11-08 14:52:44 +00:00
|
|
|
|
2021-01-18 14:30:24 +00:00
|
|
|
if not orga.is_admin:
|
2021-04-04 14:06:16 +00:00
|
|
|
await Matrix.set_room_power_level(f"#annonces-{slug}:tfjm.org",
|
|
|
|
f"@{orga.matrix_username}:tfjm.org", 50)
|
|
|
|
await Matrix.set_room_power_level(f"#flood-{slug}:tfjm.org",
|
|
|
|
f"@{orga.matrix_username}:tfjm.org", 50)
|
|
|
|
await Matrix.set_room_power_level(f"#general-{slug}:tfjm.org",
|
|
|
|
f"@{orga.matrix_username}:tfjm.org", 50)
|
|
|
|
await Matrix.set_room_power_level(f"#jury-{slug}:tfjm.org",
|
|
|
|
f"@{orga.matrix_username}:tfjm.org", 50)
|
|
|
|
await Matrix.set_room_power_level(f"#orga-{slug}:tfjm.org",
|
|
|
|
f"@{orga.matrix_username}:tfjm.org", 50)
|
2021-04-04 14:02:37 +00:00
|
|
|
await Matrix.set_room_power_level(f"#tirage-au-sort-{slug}:tfjm.org",
|
2021-04-04 14:28:06 +00:00
|
|
|
f"@{orga.matrix_username}:tfjm.org", 50)
|
2022-11-08 14:52:44 +00:00
|
|
|
|
2021-04-04 14:02:37 +00:00
|
|
|
# Invite participants
|
|
|
|
for participation in tournament.participations.filter(valid=True).all():
|
2021-01-18 01:07:31 +00:00
|
|
|
for participant in participation.team.participants.all():
|
2021-04-04 14:02:37 +00:00
|
|
|
self.stdout.write(f"Invite {participant} in public channels of the tournament {name}...")
|
2021-04-04 14:06:16 +00:00
|
|
|
await Matrix.invite(f"#annonces-{slug}:tfjm.org",
|
|
|
|
f"@{participant.matrix_username}:tfjm.org")
|
|
|
|
await Matrix.invite(f"#flood-{slug}:tfjm.org",
|
|
|
|
f"@{participant.matrix_username}:tfjm.org")
|
|
|
|
await Matrix.invite(f"#general-{slug}:tfjm.org",
|
|
|
|
f"@{participant.matrix_username}:tfjm.org")
|
|
|
|
await Matrix.invite(f"#tirage-au-sort-{slug}:tfjm.org",
|
|
|
|
f"@{participant.matrix_username}:tfjm.org")
|
2022-11-08 14:52:44 +00:00
|
|
|
|
2021-04-04 14:02:37 +00:00
|
|
|
# Create pool-specific channels
|
|
|
|
for pool in tournament.pools.all():
|
|
|
|
self.stdout.write(f"Managing {pool}...")
|
2021-04-04 14:28:06 +00:00
|
|
|
five = pool.participations.count() >= 5
|
|
|
|
for i in range(2 if five else 1):
|
|
|
|
# Fix for five teams-pools
|
|
|
|
suffix = f"-{chr(ord('A') + i)}" if five else ""
|
2021-04-04 14:37:02 +00:00
|
|
|
if not await Matrix.resolve_room_alias(f"#poule-{slug}-{pool.id}{suffix}:tfjm.org"):
|
2021-04-04 14:28:06 +00:00
|
|
|
await Matrix.create_room(
|
|
|
|
visibility=RoomVisibility.public,
|
|
|
|
alias=f"poule-{slug}-{pool.id}{suffix}",
|
|
|
|
name=f"{name} - Jour {pool.round} - Poule " +
|
|
|
|
', '.join(participation.team.trigram
|
|
|
|
for participation in pool.participations.all()) + suffix,
|
|
|
|
topic=f"Discussion avec les équipes - {pool}{suffix}",
|
|
|
|
federate=False,
|
|
|
|
preset=RoomPreset.private_chat,
|
|
|
|
)
|
2021-04-04 14:37:02 +00:00
|
|
|
if not await Matrix.resolve_room_alias(f"#poule-{slug}-{pool.id}{suffix}-jurys:tfjm.org"):
|
2021-04-04 14:28:06 +00:00
|
|
|
await Matrix.create_room(
|
|
|
|
visibility=RoomVisibility.public,
|
|
|
|
alias=f"poule-{slug}-{pool.id}{suffix}-jurys",
|
|
|
|
name=f"{name} - Jour {pool.round}{suffix} - Jurys poule " +
|
|
|
|
', '.join(participation.team.trigram
|
|
|
|
for participation in pool.participations.all()) + suffix,
|
|
|
|
topic=f"Discussion avec les jurys - {pool}{suffix}",
|
|
|
|
federate=False,
|
|
|
|
preset=RoomPreset.private_chat,
|
|
|
|
)
|
|
|
|
|
|
|
|
await Matrix.set_room_avatar(f"#poule-{slug}-{pool.id}{suffix}:tfjm.org", avatar_uri)
|
|
|
|
await Matrix.set_room_avatar(f"#poule-{slug}-{pool.id}{suffix}-jurys:tfjm.org", avatar_uri)
|
|
|
|
|
2021-04-04 14:37:02 +00:00
|
|
|
bbb_url = pool.bbb_url.strip()
|
|
|
|
if five and ';' in bbb_url:
|
2021-04-04 14:28:06 +00:00
|
|
|
bbb_url = bbb_url.split(";")[i].strip()
|
|
|
|
url_params = urlencode(dict(url=bbb_url,
|
|
|
|
isAudioConf='false', displayName='$matrix_display_name',
|
|
|
|
avatarUrl='$matrix_avatar_url', userId='$matrix_user_id')) \
|
|
|
|
.replace("%24", "$")
|
|
|
|
await Matrix.add_integration(
|
|
|
|
f"#poule-{slug}-{pool.id}{suffix}:tfjm.org",
|
|
|
|
f"https://scalar.vector.im/api/widgets/bigbluebutton.html?{url_params}",
|
|
|
|
f"bbb-{slug}-{pool.id}{suffix}", "bigbluebutton", "BigBlueButton", str(pool))
|
|
|
|
await Matrix.add_integration(
|
|
|
|
f"#poule-{slug}-{pool.id}:tfjm.org",
|
|
|
|
f"https://board.tfjm.org/boards/{slug}-{pool.id}", f"board-{slug}-{pool.id}",
|
|
|
|
"customwidget", "Tableau", str(pool))
|
2022-11-08 14:52:44 +00:00
|
|
|
|
2021-04-04 14:28:06 +00:00
|
|
|
# Invite admins and give permissions
|
2023-02-19 23:23:18 +00:00
|
|
|
for admin in VolunteerRegistration.objects.filter(admin=True).all():
|
2021-04-04 14:28:06 +00:00
|
|
|
await Matrix.invite(f"#poule-{slug}-{pool.id}{suffix}:tfjm.org",
|
|
|
|
f"@{admin.matrix_username}:tfjm.org")
|
|
|
|
await Matrix.invite(f"#poule-{slug}-{pool.id}{suffix}-jurys:tfjm.org",
|
|
|
|
f"@{admin.matrix_username}:tfjm.org")
|
|
|
|
|
|
|
|
await Matrix.set_room_power_level(f"#poule-{slug}-{pool.id}{suffix}:tfjm.org",
|
|
|
|
f"@{admin.matrix_username}:tfjm.org", 95)
|
|
|
|
await Matrix.set_room_power_level(f"#poule-{slug}-{pool.id}{suffix}-jurys:tfjm.org",
|
|
|
|
f"@{admin.matrix_username}:tfjm.org", 95)
|
2022-11-08 14:52:44 +00:00
|
|
|
|
2021-04-04 14:28:06 +00:00
|
|
|
# Invite organizers and give permissions
|
2021-04-07 07:03:50 +00:00
|
|
|
for orga in tournament.organizers.all():
|
2021-04-04 14:28:06 +00:00
|
|
|
await Matrix.invite(f"#poule-{slug}-{pool.id}{suffix}:tfjm.org",
|
|
|
|
f"@{orga.matrix_username}:tfjm.org")
|
|
|
|
await Matrix.invite(f"#poule-{slug}-{pool.id}{suffix}-jurys:tfjm.org",
|
|
|
|
f"@{orga.matrix_username}:tfjm.org")
|
|
|
|
|
|
|
|
if not orga.is_admin:
|
|
|
|
await Matrix.set_room_power_level(f"#poule-{slug}-{pool.id}{suffix}:tfjm.org",
|
|
|
|
f"@{orga.matrix_username}:tfjm.org", 50)
|
|
|
|
await Matrix.set_room_power_level(f"#poule-{slug}-{pool.id}{suffix}-jurys:tfjm.org",
|
|
|
|
f"@{orga.matrix_username}:tfjm.org", 50)
|
|
|
|
|
|
|
|
# Invite the jury, give good permissions
|
|
|
|
for jury in pool.juries.all():
|
|
|
|
await Matrix.invite(f"#annonces-{slug}:tfjm.org", f"@{jury.matrix_username}:tfjm.org")
|
|
|
|
await Matrix.invite(f"#general-{slug}:tfjm.org", f"@{jury.matrix_username}:tfjm.org")
|
|
|
|
await Matrix.invite(f"#flood-{slug}:tfjm.org", f"@{jury.matrix_username}:tfjm.org")
|
|
|
|
await Matrix.invite(f"#jury-{slug}:tfjm.org", f"@{jury.matrix_username}:tfjm.org")
|
|
|
|
await Matrix.invite(f"#orga-{slug}:tfjm.org", f"@{jury.matrix_username}:tfjm.org")
|
|
|
|
await Matrix.invite(f"#poule-{slug}-{pool.id}{suffix}:tfjm.org",
|
|
|
|
f"@{jury.matrix_username}:tfjm.org")
|
|
|
|
await Matrix.invite(f"#poule-{slug}-{pool.id}{suffix}-jurys:tfjm.org",
|
|
|
|
f"@{jury.matrix_username}:tfjm.org")
|
|
|
|
await Matrix.invite(f"#tirage-au-sort-{slug}:tfjm.org",
|
|
|
|
f"@{jury.matrix_username}:tfjm.org")
|
|
|
|
|
|
|
|
if not jury.is_admin:
|
|
|
|
await Matrix.set_room_power_level(f"#jury-{slug}:tfjm.org",
|
|
|
|
f"@{jury.matrix_username}:tfjm.org", 50)
|
|
|
|
await Matrix.set_room_power_level(f"#poule-{slug}-{pool.id}{suffix}:tfjm.org",
|
|
|
|
f"@{jury.matrix_username}:tfjm.org", 50)
|
|
|
|
await Matrix.set_room_power_level(f"#poule-{slug}-{pool.id}{suffix}-jurys:tfjm.org",
|
|
|
|
f"@{jury.matrix_username}:tfjm.org", 50)
|
2022-11-08 14:52:44 +00:00
|
|
|
|
2021-04-04 14:28:06 +00:00
|
|
|
# Invite participants to the right pool
|
|
|
|
for participation in pool.participations.all():
|
|
|
|
for participant in participation.team.participants.all():
|
|
|
|
await Matrix.invite(f"#poule-{slug}-{pool.id}{suffix}:tfjm.org",
|
|
|
|
f"@{participant.matrix_username}:tfjm.org")
|
2022-11-08 14:52:44 +00:00
|
|
|
|
2021-04-04 14:02:37 +00:00
|
|
|
# Create private channels for teams
|
|
|
|
for team in Team.objects.all():
|
|
|
|
self.stdout.write(f"Create private channel for {team}...")
|
2021-04-04 14:37:02 +00:00
|
|
|
if not await Matrix.resolve_room_alias(f"#equipe-{team.trigram.lower()}:tfjm.org"):
|
2021-04-04 14:02:37 +00:00
|
|
|
await Matrix.create_room(
|
|
|
|
visibility=RoomVisibility.public,
|
|
|
|
alias=f"equipe-{team.trigram.lower()}",
|
|
|
|
name=f"Équipe {team.trigram}",
|
|
|
|
topic=f"Discussion interne de l'équipe {team.name}",
|
|
|
|
federate=False,
|
|
|
|
preset=RoomPreset.private_chat,
|
|
|
|
)
|
|
|
|
for participant in team.participants.all():
|
2021-04-04 14:06:16 +00:00
|
|
|
await Matrix.invite(f"#equipe-{team.trigram.lower}:tfjm.org",
|
|
|
|
f"@{participant.matrix_username}:tfjm.org")
|
2021-04-04 14:02:37 +00:00
|
|
|
await Matrix.set_room_power_level(f"#equipe-{team.trigram.lower()}:tfjm.org",
|
2021-04-04 14:28:06 +00:00
|
|
|
f"@{participant.matrix_username}:tfjm.org", 50)
|
2021-05-15 20:21:50 +00:00
|
|
|
|
2022-02-04 13:14:59 +00:00
|
|
|
"""
|
2021-05-15 20:21:50 +00:00
|
|
|
# Manage channels to discuss about problems
|
|
|
|
for i in range(9):
|
|
|
|
self.stdout.write(f"Create channel for problem {i}...")
|
|
|
|
if not await Matrix.resolve_room_alias(f"#mec-{i}:tfjm.org"):
|
|
|
|
await Matrix.create_room(
|
|
|
|
visibility=RoomVisibility.public,
|
|
|
|
alias=f"mec-{i}",
|
|
|
|
name=f"Mise en commun - {'Général' if i == 0 else f'Problème {i}'}",
|
|
|
|
topic=f"Discussion autour des problèmes",
|
|
|
|
federate=False,
|
|
|
|
preset=RoomPreset.public_chat,
|
|
|
|
invite=[f"@{registration.matrix_username}:tfjm.org"
|
|
|
|
for registration in Registration.objects.all()],
|
|
|
|
power_level_override={
|
|
|
|
f"@{registration.matrix_username}:tfjm.org": (95 if registration.is_admin else 50)
|
|
|
|
for registration in VolunteerRegistration.objects.all()
|
|
|
|
},
|
|
|
|
)
|
|
|
|
await Matrix.set_room_avatar(f"#mec-{i}:tfjm.org", avatar_uri)
|
|
|
|
|
|
|
|
for registration in Registration.objects.all():
|
|
|
|
await Matrix.invite(f"#mec-{i}:tfjm.org", registration.matrix_username)
|
|
|
|
|
|
|
|
for registration in VolunteerRegistration.objects.all():
|
|
|
|
await Matrix.set_room_power_level(f"#mec-{i}:tfjm.org",
|
|
|
|
f"@{registration.matrix_username}:tfjm.org",
|
|
|
|
95 if registration.is_admin else 50)
|
2022-02-04 13:14:59 +00:00
|
|
|
"""
|
2022-11-08 14:52:44 +00:00
|
|
|
|
2021-04-04 14:02:37 +00:00
|
|
|
asyncio.get_event_loop().run_until_complete(main())
|