Skip to content

Commit 6a6d27f

Browse files
committed
Add thread notification getter
1 parent b4d2ef4 commit 6a6d27f

File tree

1 file changed

+35
-8
lines changed

1 file changed

+35
-8
lines changed

core/thread.py

Lines changed: 35 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -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

214241
class ThreadManager:

0 commit comments

Comments
 (0)