Skip to content

Commit a146270

Browse files
authored
Merge pull request #58 from srobo/2026-fixes
2 parents ea2f04a + aac2e1f commit a146270

File tree

4 files changed

+39
-7
lines changed

4 files changed

+39
-7
lines changed

channels.yml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
read_messages: true
1010
send_messages: false
1111
- name: announcements
12-
use_case: announce
12+
channel_type: news
1313
permissions:
1414
everyone:
1515
send_messages: false
@@ -75,6 +75,7 @@
7575
- name: general
7676
topic: "General discussion about Student Robotics. Use #support for support queries and #off-topic for other things."
7777
- name: say-hello
78+
use_case: announce
7879
topic: Hello there!
7980
- name: off-topic
8081
topic: Off-topic tech chat

pyproject.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,13 @@ readme = "README.md"
99
requires-python = ">=3.10"
1010
dependencies = [
1111
"python-dotenv==1.0.1",
12-
"discord.py==2.6.3",
12+
"discord.py==2.6.4",
1313
"feedparser==6.0.11",
1414
"beautifulsoup4==4.12.3",
1515
"pytest==8.4.1",
1616
"pyyaml==6.0.2",
1717
"jsonschema==4.25.1",
18-
"sentry-sdk==2.41.0",
18+
"sentry-sdk==2.42.1",
1919
"backports.strenum==1.3.1 ; python_version < '3.11'",
2020
]
2121
classifiers = [

src/sr/discord_bot/bot.py

Lines changed: 34 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
import yaml
88
import discord
99
import jsonschema
10-
from discord import Guild, app_commands
10+
from discord import Guild, app_commands, CategoryChannel
1111
from discord.ext import tasks
1212

1313
from 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)

src/sr/discord_bot/constants.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
# name of the category for new welcome channels to go.
21
from discord import Permissions
32

3+
# name of the category for new welcome channels to go.
44
WELCOME_CATEGORY_NAME = "Welcome"
55

66
# prefix used to identify the channels to listen to passwords in.
@@ -28,7 +28,6 @@
2828
FEED_CHECK_INTERVAL = 60 * 3 # in seconds
2929

3030
VERIFIED_PERMISSION_MASK = \
31-
Permissions.read_messages.flag | \
3231
Permissions.send_messages.flag | \
3332
Permissions.send_messages_in_threads.flag | \
3433
Permissions.create_public_threads.flag | \

0 commit comments

Comments
 (0)