17
17
18
18
log = getLogger (__name__ )
19
19
20
+
20
21
class BanAppeals (commands .Cog ):
22
+ """A plugin to manage threads from a separate ban appeal server."""
23
+
21
24
def __init__ (self , bot : ModmailBot ):
22
25
self .bot = bot
23
26
@@ -30,8 +33,8 @@ def __init__(self, bot: ModmailBot):
30
33
31
34
self .appeals_category : t .Optional [discord .CategoryChannel ] = None
32
35
33
- self .init_task = asyncio .create_task (self .ensure_plugin_init ())
34
-
36
+ self .init_task = asyncio .create_task (self .init_plugin ())
37
+
35
38
@staticmethod
36
39
async def get_or_fetch_member (guild : discord .Guild , member_id : int ) -> t .Optional [discord .Member ]:
37
40
"""
@@ -49,7 +52,7 @@ async def get_or_fetch_member(guild: discord.Guild, member_id: int) -> t.Optiona
49
52
return None
50
53
log .debug ("%s (%d) fetched from API." , member , member .id )
51
54
return member
52
-
55
+
53
56
@staticmethod
54
57
async def get_or_fetch_channel (guild : discord .Guild , channel_id : int ) -> t .Optional [discord .ChannelType ]:
55
58
"""
@@ -69,15 +72,16 @@ async def get_or_fetch_channel(guild: discord.Guild, channel_id: int) -> t.Optio
69
72
70
73
return channel
71
74
72
- async def ensure_plugin_init (self ) -> None :
75
+ async def init_plugin (self ) -> None :
76
+ """Initialise the plugin's configuration."""
73
77
self .pydis_guild = self .bot .guild
74
78
self .appeals_guild = self .bot .get_guild (self ._appeals_guild_id )
75
79
self .appeals_category = await self .get_or_fetch_channel (self .pydis_guild , self ._pydis_appeals_category_id )
76
80
self .logs_channel = discord .utils .get (self .appeals_guild .channels , name = "logs" )
77
81
78
82
log .info ("Plugin loaded, checking if there are people to kick." )
79
83
await self ._sync_kicks ()
80
-
84
+
81
85
async def _sync_kicks (self ) -> None :
82
86
"""Iter through all members in appeals guild, kick them if they meet criteria."""
83
87
for member in self .appeals_guild .members :
@@ -102,7 +106,7 @@ async def _maybe_kick_user(self, member: discord.Member) -> None:
102
106
log .error ("Failed to kick %s (%d)due to insufficient permissions." , member , member .id )
103
107
await self .logs_channel .send (f"Kicked { member } ({ member .id } ) on join as they're not banned in main server." )
104
108
log .info ("Kicked %s (%d)." , member , member .id )
105
-
109
+
106
110
async def _is_banned_pydis (self , member : discord .Member ) -> bool :
107
111
"""See if the given member is banned in PyDis."""
108
112
try :
@@ -128,7 +132,7 @@ async def on_member_join(self, member: discord.Member) -> None:
128
132
# Join event from the appeals server
129
133
# Kick them if they are not banned and not part of the bypass list
130
134
await self ._maybe_kick_user (member )
131
-
135
+
132
136
@commands .Cog .listener ()
133
137
async def on_thread_ready (self , thread : Thread , * args ) -> None :
134
138
"""If the new thread is for an appeal, move it to the appeals category."""
@@ -138,5 +142,6 @@ async def on_thread_ready(self, thread: Thread, *args) -> None:
138
142
await thread .channel .edit (category = self .appeals_category , sync_permissions = True )
139
143
140
144
141
- def setup (bot : ModmailBot ):
145
+ def setup (bot : ModmailBot ) -> None :
146
+ """Add the BanAppeals cog."""
142
147
bot .add_cog (BanAppeals (bot ))
0 commit comments