Skip to content

Commit 6f6f6a0

Browse files
committed
Move thread close logging within thread class
1 parent 6aa53e3 commit 6f6f6a0

File tree

3 files changed

+62
-82
lines changed

3 files changed

+62
-82
lines changed

bot.py

Lines changed: 13 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -264,46 +264,20 @@ async def on_message(self, message):
264264
async def on_guild_channel_delete(self, channel):
265265
if channel.guild != self.modmail_guild:
266266
return
267+
267268
thread = await self.threads.find(channel=channel)
268-
if thread:
269-
del self.threads.cache[thread.id]
270-
271-
mod = None
272-
273-
audit_logs = self.modmail_guild.audit_logs()
274-
entry = await audit_logs.find(lambda e: e.target.id == channel.id)
275-
mod = entry.user
276-
if mod.bot:
277-
return
278-
279-
log_data = await self.modmail_api.post_log(channel.id, {
280-
'open': False,
281-
'closed_at': str(datetime.datetime.utcnow()),
282-
'closer': {
283-
'id': str(mod.id),
284-
'name': mod.name,
285-
'discriminator': mod.discriminator,
286-
'avatar_url': mod.avatar_url,
287-
'mod': True
288-
}})
289-
290-
em = discord.Embed(title='Thread Closed')
291-
em.description = f'{mod.mention} has closed this modmail thread.'
292-
em.color = discord.Color.red()
293-
294-
try:
295-
await thread.recipient.send(embed=em)
296-
except:
297-
pass
298-
299-
log_url = f"https://logs.modmail.tk/{log_data['user_id']}/{log_data['key']}"
300-
301-
user = thread.recipient.mention if thread.recipient else f'`{thread.id}`'
302-
303-
desc = f"[`{log_data['key']}`]({log_url}) {mod.mention} closed a thread with {user}"
304-
em = discord.Embed(description=desc, color=em.color)
305-
em.set_author(name='Thread closed', url=log_url)
306-
await self.log_channel.send(embed=em)
269+
if not thread:
270+
return
271+
272+
mod = None
273+
audit_logs = self.modmail_guild.audit_logs()
274+
entry = await audit_logs.find(lambda e: e.target.id == channel.id)
275+
mod = entry.user
276+
277+
if mod.bot:
278+
return
279+
280+
await thread.close(closer=mod, silent=True)
307281

308282
async def on_message_delete(self, message):
309283
"""Support for deleting linked messages"""

cogs/modmail.py

Lines changed: 2 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -116,48 +116,14 @@ async def move(self, ctx, *, category: discord.CategoryChannel):
116116

117117
@commands.command(name='close')
118118
@commands.has_permissions(manage_channels=True)
119-
async def _close(self, ctx):
119+
async def _close(self, ctx, after: int=0):
120120
"""Close the current thread."""
121121

122122
thread = await self.bot.threads.find(channel=ctx.channel)
123123
if not thread:
124124
return await ctx.send('This is not a modmail thread.')
125125

126-
await thread.close()
127-
128-
em = discord.Embed(title='Thread Closed')
129-
em.description = f'{ctx.author.mention} has closed this modmail thread.'
130-
em.color = discord.Color.red()
131-
132-
try:
133-
await thread.recipient.send(embed=em)
134-
except:
135-
pass
136-
137-
# Logging
138-
log_channel = self.bot.log_channel
139-
140-
log_data = await self.bot.modmail_api.post_log(ctx.channel.id, {
141-
'open': False, 'closed_at': str(datetime.datetime.utcnow()), 'closer': {
142-
'id': str(ctx.author.id),
143-
'name': ctx.author.name,
144-
'discriminator': ctx.author.discriminator,
145-
'avatar_url': ctx.author.avatar_url,
146-
'mod': True
147-
}
148-
})
149-
150-
if isinstance(log_data, str):
151-
print(log_data) # error
152-
153-
log_url = f"https://logs.modmail.tk/{log_data['user_id']}/{log_data['key']}"
154-
155-
user = thread.recipient.mention if thread.recipient else f'`{thread.id}`'
156-
157-
desc = f"[`{log_data['key']}`]({log_url}) {ctx.author.mention} closed a thread with {user}"
158-
em = discord.Embed(description=desc, color=em.color)
159-
em.set_author(name='Thread closed', url=log_url)
160-
await log_channel.send(embed=em)
126+
await thread.close(closer=ctx.author, after=after)
161127

162128
@commands.command()
163129
async def nsfw(self, ctx):

core/thread.py

Lines changed: 47 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -41,19 +41,59 @@ def ready(self, flag):
4141
if flag is True:
4242
self.ready_event.set()
4343

44-
async def _close_after(self, after):
44+
async def _close_after(self, after, **kwargs):
4545
await asyncio.sleep(after)
46-
await self.close()
46+
await self.close(**kwargs)
4747

48-
async def close(self, *, after=0):
48+
async def close(self, *, closer, after=0, silent=False):
4949
'''Close a thread now or after a set time in seconds'''
5050
if after > 0:
5151
if self.close_task is not None and not self.close_task.cancelled():
5252
self.close_task.cancel()
53-
self.close_task = asyncio.create_task(self._close_after(after))
54-
else:
55-
del self.manager.cache[self.id]
56-
await self.channel.delete()
53+
self.close_task = asyncio.create_task(self._close_after(after, closer=closer, silent=silent))
54+
return
55+
56+
print(self.manager.cache)
57+
print(self.id)
58+
print(self.id in self.manager.cache)
59+
del self.manager.cache[self.id]
60+
print(self.manager.cache)
61+
62+
await self.channel.delete()
63+
64+
# Logging
65+
log_data = await self.bot.modmail_api.post_log(self.channel.id, {
66+
'open': False, 'closed_at': str(datetime.datetime.utcnow()), 'closer': {
67+
'id': str(closer.id),
68+
'name': closer.name,
69+
'discriminator': closer.discriminator,
70+
'avatar_url': closer.avatar_url,
71+
'mod': True
72+
}
73+
})
74+
75+
if isinstance(log_data, str):
76+
print(log_data) # error
77+
78+
log_url = f"https://logs.modmail.tk/{log_data['user_id']}/{log_data['key']}"
79+
80+
user = self.recipient.mention if self.recipient else f'`{self.id}`'
81+
82+
desc = f"[`{log_data['key']}`]({log_url}) {closer.mention} closed a thread with {user}"
83+
84+
em = discord.Embed(description=desc, color=discord.Color.red())
85+
em.set_author(name='Thread closed', url=log_url)
86+
87+
tasks = [self.bot.log_channel.send(embed=em)]
88+
89+
em = discord.Embed(title='Thread Closed')
90+
em.description = f'{closer.mention} has closed this modmail thread.'
91+
em.color = discord.Color.red()
92+
93+
if not silent:
94+
tasks.append(self.recipient.send(embed=em))
95+
96+
await asyncio.gather(*tasks)
5797

5898
async def _edit_thread_message(self, channel, message_id, message):
5999
async for msg in channel.history():

0 commit comments

Comments
 (0)