@@ -44,17 +44,19 @@ def ready(self, flag):
4444
4545 async def _close_after (self , after , ** kwargs ):
4646 await asyncio .sleep (after )
47+ kwargs ['scheduled' ] = True
4748 await self .close (** kwargs )
4849
49- async def close (self , * , closer , after = 0 , silent = False , delete_channel = True , message = None ):
50+ async def close (self , * , closer , after = 0 , silent = False , delete_channel = True , message = None , scheduled = False ):
5051 '''Close a thread now or after a set time in seconds'''
51- if after > 0 :
52- if self . close_task is not None and not self . close_task . cancelled () :
52+ if self . close_task is not None and not self . close_task . cancelled () :
53+ if not scheduled or after > 0 :
5354 self .close_task .cancel ()
55+
56+ if after > 0 :
5457 self .close_task = asyncio .create_task (self ._close_after (after , closer = closer , silent = silent , message = message ))
5558 return
5659
57-
5860 del self .manager .cache [self .id ]
5961
6062 # Logging
@@ -83,11 +85,16 @@ async def close(self, *, closer, after=0, silent=False, delete_channel=True, mes
8385 desc = f"[`{ log_data ['key' ]} `]({ log_url } ) { user } : { sneak_peak } "
8486
8587 em = discord .Embed (description = desc , color = discord .Color .red ())
86- em .set_author (name = 'Thread closed' , url = log_url )
88+
89+ event = 'Scheduled thread close' if scheduled else 'Thread close'
90+ em .set_author (name = f'Event: { event } ' , url = log_url )
8791 em .set_footer (text = f'Closed by: { closer } ({ closer .id } )' )
92+ em .timestamp = datetime .datetime .utcnow ()
8893
8994 tasks = [self .bot .log_channel .send (embed = em )]
9095
96+ # Thread closed message
97+
9198 em = discord .Embed (title = 'Thread Closed' )
9299 em .description = message or f'{ closer .mention } has closed this modmail thread.'
93100 em .color = discord .Color .red ()
@@ -122,8 +129,8 @@ def edit_message(self, message_id, message):
122129 async def reply (self , message ):
123130 if not message .content and not message .attachments :
124131 raise commands .UserInputError
125- if self .recipient not in self .bot .guild . members :
126- return await message .channel .send ('This user is no longer in the server and is thus unreachable.' )
132+ if all ( not g . get_member ( self .id ) for g in self .bot .guilds ) :
133+ return await message .channel .send (embed = discord . Embed ( color = discord . Color . red (), description = 'This user shares no servers with me and is thus unreachable.' ) )
127134
128135 tasks = [
129136 self .send (message , self .channel , from_mod = True ), # in thread channel
@@ -202,13 +209,33 @@ async def send(self, message, destination=None, from_mod=False, delete_message=T
202209 em .set_footer (text = f'User' )
203210
204211 await destination .trigger_typing ()
205- await destination .send (embed = em )
212+
213+ if not from_mod :
214+ mentions = self .get_notifications ()
215+ else :
216+ mentions = None
217+
218+ await destination .send (mentions , embed = em )
206219
207220 if delete_message :
208221 try :
209222 await message .delete ()
210223 except :
211224 pass
225+
226+ def get_notifications (self ):
227+ config = self .bot .config
228+ key = str (self .id )
229+
230+ mentions = []
231+ mentions .extend (config ['subscriptions' ].get (key , []))
232+
233+ if key in config ['notification_squad' ]:
234+ mentions .extend (config ['notification_squad' ][key ])
235+ del config ['notification_squad' ][key ]
236+ asyncio .create_task (config .update ())
237+
238+ return ' ' .join (mentions )
212239
213240
214241class ThreadManager :
0 commit comments