33from typing import TYPE_CHECKING
44from urllib .parse import urljoin
55
6- from discord import Embed , PermissionOverwrite , utils
6+ from discord import CategoryChannel , Embed , PermissionOverwrite , utils
77
88from src .db .models import Club
99from 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