Skip to content

Commit cd4a80e

Browse files
authored
Merge pull request #19 from ae-utbm/fix-channel-order
fix: category ordering on club stop/reactivation
2 parents bafdd2a + e0295fa commit cd4a80e

1 file changed

Lines changed: 22 additions & 11 deletions

File tree

src/services/club.py

Lines changed: 22 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
from typing import TYPE_CHECKING
44
from urllib.parse import urljoin
55

6-
from discord import Embed, PermissionOverwrite, utils
6+
from discord import CategoryChannel, Embed, PermissionOverwrite, utils
77

88
from src.db.models import Club
99
from src.settings import Settings
@@ -106,6 +106,7 @@ async def create_club(self, club: ClubSchema, guild: Guild, mess: Message):
106106
}
107107

108108
category = await guild.create_category(club.name, overwrites=overwrites)
109+
await self.move_to_bottom(category)
109110
await category.create_text_channel(
110111
f"Annonces-{club.name}", overwrites=news_overwrite, news=True, position=0
111112
)
@@ -147,7 +148,7 @@ async def handover(
147148
):
148149
club = Club.get_or_none(Club.sith_id == club.id)
149150

150-
# removing former presidence and treasurer
151+
# removing former president and treasurer
151152
role_pres = utils.get(guild.roles, id=club.president_role_id)
152153
role_treso = utils.get(guild.roles, id=club.treasurer_role_id)
153154
former = utils.get(guild.roles, id=club.former_member_role_id)
@@ -158,7 +159,7 @@ async def handover(
158159
)
159160
await member.add_roles(former, reason=f"Passation du club : {club.name}")
160161

161-
# add new presidence and treasurer
162+
# add new president and treasurer
162163
for new_member in [new_pres, new_treso]:
163164
if former in new_member.roles:
164165
await new_member.remove_roles(
@@ -169,22 +170,18 @@ async def handover(
169170
category = utils.get(guild.categories, id=club.category_id)
170171
if category.name.endswith("[inactif]"):
171172
await category.edit(name=club.name)
172-
highest_inactive = utils.find(
173-
lambda c: c.name.endswith("[inactif]"),
174-
sorted(guild.categories, key=lambda c: c.position),
175-
)
176-
if highest_inactive:
177-
await category.move(before=highest_inactive)
173+
await self.move_to_bottom(category)
178174

179175
async def stop_club(self, club: Club, guild: Guild):
180176
role_pres = utils.get(guild.roles, id=club.president_role_id)
181177
role_treso = utils.get(guild.roles, id=club.treasurer_role_id)
182178
role_member = utils.get(guild.roles, id=club.member_role_id)
183179
role_former = utils.get(guild.roles, id=club.former_member_role_id)
184180
old_member = {*role_pres.members, *role_treso.members, *role_member.members}
185-
total_channels = len(guild.channels)
186181
category = utils.get(guild.categories, id=club.category_id)
187-
await category.edit(position=total_channels - 1, name=club.name + " [inactif]")
182+
await self.move_to_bottom(category)
183+
await category.edit(name=club.name + " [inactif]")
184+
await self.move_to_bottom(category)
188185

189186
for e in old_member:
190187
await e.remove_roles(
@@ -194,3 +191,17 @@ async def stop_club(self, club: Club, guild: Guild):
194191
reason=f"Arrêt du club : {club.name}",
195192
)
196193
await e.add_roles(role_former, reason=f"Arrêt du club : {club.name}")
194+
195+
@staticmethod
196+
async def move_to_bottom(category: CategoryChannel):
197+
"""Move this category after the last category belong to an active club."""
198+
guild = category.guild
199+
inactives = [c for c in guild.categories if c.name.endswith("[inactif]")]
200+
if not inactives:
201+
await category.move(end=True)
202+
return
203+
other = min(inactives, key=lambda c: c.position)
204+
if (category.position - other.position) <= 1:
205+
# the category is already at the bottom of the list, there is nothing to do
206+
return
207+
await category.move(before=other)

0 commit comments

Comments
 (0)