Skip to content

Commit d7a2a1e

Browse files
authored
Merge pull request #11 from ae-utbm/new_role_ancien
New role ancien
2 parents 35bb984 + 7538437 commit d7a2a1e

2 files changed

Lines changed: 40 additions & 22 deletions

File tree

src/commands/club.py

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
from typing import TYPE_CHECKING
44

5-
from discord import Interaction, Member, app_commands
5+
from discord import Interaction, Member, app_commands, utils
66
from discord.app_commands import Choice, Transform, Transformer
77
from discord.ext import commands
88
from discord.ext.commands import BadArgument
@@ -64,6 +64,7 @@ async def remove_club_member(
6464
):
6565
await interaction.response.defer(thinking=True)
6666
discord_club = DiscordClub.load(club.id)
67+
role_membre = utils.get(member.guild.roles, id=discord_club.member_role_id)
6768
if not discord_club:
6869
await interaction.followup.send(f"Le club : {club.name} n'existe pas")
6970
return
@@ -75,7 +76,7 @@ async def remove_club_member(
7576
"Seul le président du club et les admins peuvent retirer un membre"
7677
)
7778
return
78-
if member.id not in discord_club.members:
79+
if role_membre not in member.roles:
7980
await interaction.followup.send("Cet utilisateur n'est pas dans le club")
8081
return
8182
await self.club_service.remove_member(discord_club, member)
@@ -93,6 +94,7 @@ async def add_club_member(
9394
):
9495
await interaction.response.defer(thinking=True)
9596
discord_club = DiscordClub.load(club.id)
97+
role_membre = utils.get(member.guild.roles, id=discord_club.member_role_id)
9698
if not discord_club:
9799
await interaction.followup.send(f"Le club : {club.name} n'existe pas")
98100
return
@@ -104,7 +106,7 @@ async def add_club_member(
104106
"Seul le président du club et les admins peuvent ajouter un membre"
105107
)
106108
return
107-
if member.id in discord_club.members:
109+
if role_membre in member.roles:
108110
await interaction.followup.send("Cet utilisateur est déjà dans le club")
109111
return
110112
await self.club_service.add_member(discord_club, member)
@@ -133,8 +135,8 @@ async def handover(
133135
self,
134136
interaction: Interaction,
135137
club: Transform[ClubSchema, ClubTransformer],
136-
new_pres: Member,
137-
new_treso: Member,
138+
new_president: Member,
139+
new_treasurer: Member,
138140
):
139141
await interaction.response.defer(thinking=True)
140142
discord_club = DiscordClub.load(club.id)
@@ -144,16 +146,16 @@ async def handover(
144146
await interaction.followup.send(f"Le club : {club.name} n'existe pas")
145147
return
146148

147-
await self.club_service.handover(club, new_pres, new_treso, guild)
149+
await self.club_service.handover(club, new_president, new_treasurer, guild)
148150
annonce = await self.club_service.get_channel(
149151
guild, discord_club.category_id, f"annonces {club.name}".lower()
150152
)
151153

152154
if annonce:
153155
await annonce.send(
154-
f"La passation est réussie !! {new_pres.mention} Vous êtes le nouveau "
155-
f"président du club {club.name}"
156-
f" et {new_treso.mention} le nouveau trésorier !!"
156+
f"La passation est réussie !! {new_president.mention} Vous êtes"
157+
f"le nouveau président du club {club.name}"
158+
f" et {new_treasurer.mention} le nouveau trésorier !!"
157159
)
158160

159161
else:

src/services/club.py

Lines changed: 29 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
from __future__ import annotations
22

33
import json
4-
from typing import TYPE_CHECKING, Annotated, Self
4+
from typing import TYPE_CHECKING, Self
55
from urllib.parse import urljoin
66

77
from discord import Embed, PermissionOverwrite, utils
8-
from pydantic import BaseModel, PlainSerializer
8+
from pydantic import BaseModel
99

1010
from src.settings import BASE_DIR, Settings
1111

@@ -31,7 +31,7 @@ class DiscordClub(BaseModel):
3131
treasurer_sith_id: int | None = None
3232
member_role_id: int
3333
member_sith_id: int | None = None
34-
members: Annotated[set[int], PlainSerializer(list)]
34+
former_member_role_id: int
3535

3636
@classmethod
3737
def load_all(cls) -> dict[str, dict]:
@@ -99,18 +99,23 @@ def embed(self, club: ClubSchema) -> Embed:
9999

100100
async def create_club(self, club: ClubSchema, guild: Guild):
101101
# create the role for member, presidence and treasurer
102-
president = await guild.create_role(name=f"Président {club.name}")
102+
president = await guild.create_role(name=f"Responsable {club.name}")
103103
treasurer = await guild.create_role(name=f"Trésorier {club.name}")
104104
member = await guild.create_role(name=f"Membre {club.name}", mentionable=True)
105+
former_member = await guild.create_role(
106+
name=f"Ancien membre {club.name}", mentionable=True
107+
)
105108

106109
# create the clubs category
107110
overwrites = {
108111
guild.default_role: PermissionOverwrite(read_messages=False),
109112
president: PermissionOverwrite(read_messages=True, manage_channels=True),
110113
member: PermissionOverwrite(read_messages=True),
111114
treasurer: PermissionOverwrite(read_messages=True),
115+
former_member: PermissionOverwrite(read_messages=True),
112116
}
113117
news_overwrite = {
118+
former_member: PermissionOverwrite(send_messages=False),
114119
member: PermissionOverwrite(send_messages=False),
115120
treasurer: PermissionOverwrite(send_messages=False),
116121
president: PermissionOverwrite(send_messages=True),
@@ -128,21 +133,26 @@ async def create_club(self, club: ClubSchema, guild: Guild):
128133
president_role_id=president.id,
129134
treasurer_role_id=treasurer.id,
130135
member_role_id=member.id,
136+
former_member_role_id=former_member.id,
131137
category_id=category.id,
132-
members=set(),
133138
)
134139
new_club.save()
135140

136141
async def add_member(self, club: DiscordClub, member: Member):
137142
role = utils.get(member.guild.roles, id=club.member_role_id)
143+
former = utils.get(member.guild.roles, id=club.former_member_role_id)
144+
if former in member.roles:
145+
await member.remove_roles(
146+
former, reason=f"{member.name} joined club {club.name}"
147+
)
138148
await member.add_roles(role, reason=f"{member.name} joined club {club.name}")
139-
club.members.add(member.id)
140149
club.save()
141150

142151
async def remove_member(self, club: DiscordClub, member: Member):
143152
role = utils.get(member.guild.roles, id=club.member_role_id)
153+
former = utils.get(member.guild.roles, id=club.former_member_role_id)
144154
await member.remove_roles(role, reason=f"{member.name} leaved club {club.name}")
145-
club.members.remove(member.id)
155+
await member.add_roles(former, reason=f"{member.name} leaved club {club.name}")
146156
club.save()
147157

148158
async def handover(
@@ -153,13 +163,19 @@ async def handover(
153163
# removing former presidence and treasurer
154164
role_pres = utils.get(guild.roles, id=club.president_role_id)
155165
role_treso = utils.get(guild.roles, id=club.treasurer_role_id)
156-
l_pres = role_pres.members
157-
l_treso = role_treso.members
158-
for e in l_treso:
159-
await e.remove_roles(role_treso, reason=f"Passation du club : {club.name}")
160-
for e in l_pres:
161-
await e.remove_roles(role_pres, reason=f"Passation du club : {club.name}")
166+
former = utils.get(guild.roles, id=club.former_member_role_id)
167+
old_board = {*role_pres.members, *role_treso.members}
168+
for member in old_board:
169+
await member.remove_roles(
170+
role_pres, role_treso, reason=f"Passation du club : {club.name}"
171+
)
172+
await member.add_roles(former, reason=f"Passation du club : {club.name}")
162173

163174
# add new presidence and treasurer
175+
for new_member in [new_pres, new_treso]:
176+
if former in new_member.roles:
177+
await new_member.remove_roles(
178+
former, reason=f"{new_pres.name} joined club {club.name}"
179+
)
164180
await new_pres.add_roles(role_pres, reason=f"Passation du club : {club.name}")
165181
await new_treso.add_roles(role_treso, reason=f"Passation du club : {club.name}")

0 commit comments

Comments
 (0)