Skip to content

Commit 7a2fde7

Browse files
committed
Added the use of config vars
Known issue: channel will still close when the bot is down
1 parent 7d25c41 commit 7a2fde7

File tree

3 files changed

+35
-2
lines changed

3 files changed

+35
-2
lines changed

bot.py

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -203,7 +203,21 @@ async def on_ready(self):
203203
else:
204204
await self.threads.populate_cache()
205205

206-
206+
closures = self.config.get('closures', {})
207+
for recipient_id, items in closures.items():
208+
after = (datetime.datetime.fromisoformat(items['time']) -
209+
datetime.datetime.utcnow()).total_seconds()
210+
if after < 0:
211+
after = 0
212+
thread = await self.threads.find(
213+
recipient=self.get_user(recipient_id))
214+
215+
# TODO: Retrieve messages/replies when bot is down, from history?
216+
await thread.close(closer=self.get_user(items['closer_id']),
217+
after=after,
218+
silent=items['silent'],
219+
delete_channel=items['delete_channel'],
220+
message=items['message'])
207221

208222
async def process_modmail(self, message):
209223
"""Processes messages sent to the bot."""

core/config.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,9 @@ class ConfigManager:
1414
}
1515

1616
internal_keys = {
17-
'snippets', 'aliases', 'blocked', 'notification_squad', 'subscriptions'
17+
'snippets', 'aliases', 'blocked',
18+
'notification_squad', 'subscriptions',
19+
'closures'
1820
}
1921

2022
protected_keys = {

core/thread.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,22 @@ async def close(self, *, closer, after=0, silent=False,
5555
self.close_task.cancel()
5656

5757
if after > 0:
58+
# TODO: Add somewhere to clean up broken closures
59+
# (when channel is already deleted)
60+
closures = self.bot.config.get('closures', {})
61+
now = datetime.datetime.utcnow()
62+
items = {
63+
# 'initiation_time': now.isoformat(),
64+
'time': (now + datetime.timedelta(seconds=after)).isoformat(),
65+
'closer_id': closer.id,
66+
'silent': silent,
67+
'delete_channel': delete_channel,
68+
'message': message
69+
}
70+
closures[self.id] = items
71+
self.bot.config['closure'] = closures
72+
await self.bot.config.update()
73+
5874
self.close_task = self.bot.loop.call_later(
5975
after, self._close_after, closer,
6076
silent, delete_channel, message)
@@ -326,6 +342,7 @@ async def find(self, *, recipient=None, channel=None):
326342
)
327343
if channel:
328344
self.cache[recipient.id] = thread = Thread(self, recipient)
345+
# TODO: Fix this:
329346
thread.channel = channel
330347
thread.ready = True
331348
finally:

0 commit comments

Comments
 (0)