diff --git a/src/modules/__init__.py b/src/modules/__init__.py index 45644611..0f34b603 100644 --- a/src/modules/__init__.py +++ b/src/modules/__init__.py @@ -9,10 +9,10 @@ active = [ '.ranks', '.reminders', '.shop', - '.tasklist', '.statistics', '.pomodoro', '.rooms', + '.tasklist', '.rolemenus', '.member_admin', '.moderation', diff --git a/src/modules/rooms/cog.py b/src/modules/rooms/cog.py index 0bf434d7..9adc4f91 100644 --- a/src/modules/rooms/cog.py +++ b/src/modules/rooms/cog.py @@ -57,6 +57,21 @@ class RoomCog(LionCog): for task in self._ticker_tasks.values(): task.cancel() + def get_rooms(self, guildid: int, userid: Optional[int] = None): + """ + Get the private rooms in the given guild, using cache. + + If `userid` is provided, filters by rooms which the given user is a member or owner of. + """ + guild_rooms = self._room_cache[guildid] + if userid: + rooms = { + cid: room for cid, room in guild_rooms.items() if userid in room.members or userid == room.data.ownerid + } + else: + rooms = guild_rooms + return rooms + async def _prepare_rooms(self, room_data: list[RoomData.Room]): """ Launch or destroy rooms from the provided room data. diff --git a/src/modules/tasklist/cog.py b/src/modules/tasklist/cog.py index 0dc9412c..d84decb5 100644 --- a/src/modules/tasklist/cog.py +++ b/src/modules/tasklist/cog.py @@ -173,7 +173,17 @@ class TasklistCog(LionCog): if not channel.guild: return True channels = (await self.settings.tasklist_channels.get(channel.guild.id)).value - return (channel in channels) or (channel.category in channels) + # Also allow private rooms + roomcog = self.bot.get_cog('RoomCog') + if roomcog: + private_rooms = roomcog.get_rooms(channel.guild.id) + private_channels = {room.data.channelid for room in private_rooms.values()} + else: + logger.warning( + "Fetching tasklist channels before private room cog is loaded!" + ) + private_channels = {} + return (channel in channels) or (channel.id in private_channels) or (channel.category in channels) async def call_tasklist(self, interaction: discord.Interaction): await interaction.response.defer(thinking=True, ephemeral=True)