Skip to content

Commit 1d80fe9

Browse files
mikeshardmindJackenmenDrapersniper
authored
Create cog disabling API (Cog-Creators#4043)
* create cog disbale base * Because defaults... * lol * announcer needs to respect this * defaultdict mishap * Allow None as guild - Mostly for interop with with ctx.guild * a whitespace issue * Apparently, I broke this too * Apply suggestions from code review Co-authored-by: jack1142 <6032823+jack1142@users.noreply.github.com> * This can probably be more optimized later, but since this is a cached value, it's not a large issue * Report tunnel closing * mod too * whitespace issue * Fix Artifact of prior method naming * these 3 places should have the check if i understood it correctly * Announce the closed tunnels * tunnel oversight * Make the player stop at next track * added where draper said to put it * Apply suggestions from code review Co-authored-by: jack1142 <6032823+jack1142@users.noreply.github.com> Co-authored-by: jack1142 <6032823+jack1142@users.noreply.github.com> Co-authored-by: Drapersniper <27962761+drapersniper@users.noreply.github.com>
1 parent 97379af commit 1d80fe9

18 files changed

Lines changed: 329 additions & 5 deletions

File tree

docs/guide_cog_creation.rst

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -229,3 +229,12 @@ Not all of these are strict requirements (some are) but are all generally advisa
229229

230230
- We announce this in advance.
231231
- If you need help, ask.
232+
233+
14. Check events against ``bot.cog_disabled_in_guild``
234+
235+
- Not all events need to be checked, only those that interact with a guild.
236+
- Some discretion may apply, for example,
237+
a cog which logs command invocation errors could choose to ignore this
238+
but a cog which takes actions based on messages should not.
239+
240+
15. Respect settings when treating non command messages as commands.

redbot/cogs/admin/announcer.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,8 @@ def cancel(self):
4040
self.active = False
4141

4242
async def _get_announce_channel(self, guild: discord.Guild) -> Optional[discord.TextChannel]:
43+
if await self.ctx.bot.cog_disabled_in_guild_raw("Admin", guild.id):
44+
return
4345
channel_id = await self.config.guild(guild).announce_channel()
4446
return guild.get_channel(channel_id)
4547

redbot/cogs/alias/alias.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -326,6 +326,11 @@ async def _list_global_alias(self, ctx: commands.Context):
326326

327327
@commands.Cog.listener()
328328
async def on_message_without_command(self, message: discord.Message):
329+
330+
if message.guild is not None:
331+
if await self.bot.cog_disabled_in_guild(self, message.guild):
332+
return
333+
329334
try:
330335
prefix = await self.get_prefix(message)
331336
except ValueError:

redbot/cogs/audio/core/events/cog.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,13 @@ async def on_red_audio_track_start(
2525
):
2626
if not (track and guild):
2727
return
28+
29+
if await self.bot.cog_disabled_in_guild(self, guild):
30+
player = lavalink.get_player(guild.id)
31+
await player.stop()
32+
await player.disconnect()
33+
return
34+
2835
track_identifier = track.track_identifier
2936
if self.playlist_api is not None:
3037
daily_cache = self._daily_playlist_cache.setdefault(

redbot/cogs/audio/core/events/dpy.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -178,6 +178,8 @@ def cog_unload(self) -> None:
178178
async def on_voice_state_update(
179179
self, member: discord.Member, before: discord.VoiceState, after: discord.VoiceState
180180
) -> None:
181+
if await self.bot.cog_disabled_in_guild(self, member.guild):
182+
return
181183
await self.cog_ready_event.wait()
182184
if after.channel != before.channel:
183185
try:

redbot/cogs/audio/core/events/lavalink.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,13 @@ async def lavalink_event_handler(
1919
current_track = player.current
2020
current_channel = player.channel
2121
guild = self.rgetattr(current_channel, "guild", None)
22+
if await self.bot.cog_disabled_in_guild(self, guild):
23+
await player.stop()
24+
await player.disconnect()
25+
return
2226
guild_id = self.rgetattr(guild, "id", None)
27+
if not guild:
28+
return
2329
current_requester = self.rgetattr(current_track, "requester", None)
2430
current_stream = self.rgetattr(current_track, "is_stream", None)
2531
current_length = self.rgetattr(current_track, "length", None)

redbot/cogs/audio/core/tasks/player.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@ async def player_automated_timer(self) -> None:
2020
while True:
2121
async for p in AsyncIter(lavalink.all_players()):
2222
server = p.channel.guild
23+
if await self.bot.cog_disabled_in_guild(self, server):
24+
continue
2325

2426
if [self.bot.user] == p.channel.members:
2527
stop_times.setdefault(server.id, time.time())

redbot/cogs/customcom/customcom.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -516,6 +516,9 @@ async def on_message_without_command(self, message):
516516
if len(message.content) < 2 or is_private or not user_allowed or message.author.bot:
517517
return
518518

519+
if await self.bot.cog_disabled_in_guild(self, message.guild):
520+
return
521+
519522
ctx = await self.bot.get_context(message)
520523

521524
if ctx.prefix is None:

redbot/cogs/filter/filter.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -369,6 +369,10 @@ async def check_filter(self, message: discord.Message):
369369
async def on_message(self, message: discord.Message):
370370
if isinstance(message.channel, discord.abc.PrivateChannel):
371371
return
372+
373+
if await self.bot.cog_disabled_in_guild(self, message.guild):
374+
return
375+
372376
author = message.author
373377
valid_user = isinstance(author, discord.Member) and not author.bot
374378
if not valid_user:
@@ -395,6 +399,11 @@ async def on_member_join(self, member: discord.Member):
395399
await self.maybe_filter_name(member)
396400

397401
async def maybe_filter_name(self, member: discord.Member):
402+
403+
guild = member.guild
404+
if (not guild) or await self.bot.cog_disabled_in_guild(self, guild):
405+
return
406+
398407
if not member.guild.me.guild_permissions.manage_nicknames:
399408
return # No permissions to manage nicknames, so can't do anything
400409
if member.top_role >= member.guild.me.top_role:

redbot/cogs/mod/events.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,10 @@ async def on_message(self, message):
7979
author = message.author
8080
if message.guild is None or self.bot.user == author:
8181
return
82+
83+
if await self.bot.cog_disabled_in_guild(self, message.guild):
84+
return
85+
8286
valid_user = isinstance(author, discord.Member) and not author.bot
8387
if not valid_user:
8488
return
@@ -110,6 +114,9 @@ async def on_user_update(self, before: discord.User, after: discord.User):
110114
@commands.Cog.listener()
111115
async def on_member_update(self, before: discord.Member, after: discord.Member):
112116
if before.nick != after.nick and after.nick is not None:
117+
guild = after.guild
118+
if (not guild) or await self.bot.cog_disabled_in_guild(self, guild):
119+
return
113120
async with self.config.member(before).past_nicks() as nick_list:
114121
while None in nick_list: # clean out null entries from a bug
115122
nick_list.remove(None)

0 commit comments

Comments
 (0)