77import yaml
88import discord
99import jsonschema
10- from discord import Guild , app_commands
10+ from discord import Guild , app_commands , CategoryChannel
1111from discord .ext import tasks
1212
1313from sr .discord_bot .rss import check_posts
@@ -160,8 +160,12 @@ async def setup_bot(self) -> None:
160160 await check_bot_messages (self , self .guild )
161161 self .teams_data .gen_team_memberships (self .guild , self .supervisor_role )
162162 await self .update_subscribed_messages ()
163+ await self ._create_missing_welcome_channels ()
163164
164165 async def on_member_join (self , member : discord .Member ) -> None :
166+ if self .mode != 'run' :
167+ return
168+
165169 name = member .display_name
166170 self .logger .info (f"Member { name } ({ member .id } ) joined" )
167171 guild : discord .Guild = member .guild
@@ -188,6 +192,9 @@ async def on_member_join(self, member: discord.Member) -> None:
188192 self .logger .info (f"Created welcome channel for '{ name } '" )
189193
190194 async def on_member_remove (self , member : discord .Member ) -> None :
195+ if self .mode != 'run' :
196+ return
197+
191198 name = member .display_name
192199 self .logger .info (f"Member '{ name } ' left" )
193200
@@ -202,10 +209,15 @@ async def on_member_remove(self, member: discord.Member) -> None:
202209
203210 async def on_member_update (self , before : discord .Member , after : discord .Member ) -> None :
204211 """Update subscribed messages when a member's roles change."""
205- if isinstance (self .guild , discord .Guild ):
212+ if self .mode != 'run' :
213+ return
214+
215+ if hasattr (self , 'guild' ) and isinstance (self .guild , Guild ) and hasattr (self , 'supervisor_role' ):
206216 self .teams_data .gen_team_memberships (self .guild , self .supervisor_role )
207217
208218 await self .update_subscribed_messages ()
219+ else :
220+ self .logger .debug ('Not initialized yet, ignoring on_member_update...' )
209221
210222 async def on_raw_reaction_add (self , event : discord .RawReactionActionEvent ) -> None :
211223 """Handle message reactions."""
@@ -390,3 +402,23 @@ async def apply_changes(self) -> None:
390402 self .logger .info ("Ensuring channels are in order... (This might take a minute)" )
391403 await stored_set .sort_channels (guild )
392404 self .logger .info ("Done!" )
405+
406+ async def _create_missing_welcome_channels (self ) -> None :
407+ if not isinstance (self .guild , Guild ):
408+ return
409+
410+ async for guild_member in self .guild .fetch_members ():
411+ if len (guild_member .roles ) == 0 :
412+ welcome_channel_found = False
413+
414+ for welcome_channel in self .welcome_category .channels :
415+ if isinstance (welcome_channel , CategoryChannel ):
416+ # Categories can't contain categories so this shouldn't happen
417+ # However channels is a list of GuildChannel so we need to handle it
418+ continue
419+
420+ if guild_member in welcome_channel .members :
421+ welcome_channel_found = True
422+
423+ if not welcome_channel_found :
424+ await self .on_member_join (guild_member )
0 commit comments