aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRapptz <[email protected]>2016-12-17 14:13:05 -0500
committerRapptz <[email protected]>2016-12-17 14:15:11 -0500
commit6d88024f0f7bb8e0f4d0549ed312676f575629b0 (patch)
treee62aa88baee23e3ce07d3eb5340ed639d212a016
parent[commands] Unload all extensions when gracefully closing bot. (diff)
downloaddiscord.py-6d88024f0f7bb8e0f4d0549ed312676f575629b0.tar.xz
discord.py-6d88024f0f7bb8e0f4d0549ed312676f575629b0.zip
[commands] Add special extension function 'teardown' for clean-up.
This is to support people who want to clean up some external resource that the extension is maintaining outside of a cog, where __unload should be used instead. The callable is the antipode of 'setup' and takes the same sole parameter, the bot, after all commands, events, and cogs have been unloaded. Fixes #405.
-rw-r--r--discord/ext/commands/bot.py18
1 files changed, 14 insertions, 4 deletions
diff --git a/discord/ext/commands/bot.py b/discord/ext/commands/bot.py
index 9025493d..1aa4133d 100644
--- a/discord/ext/commands/bot.py
+++ b/discord/ext/commands/bot.py
@@ -764,10 +764,20 @@ class Bot(GroupMixin, discord.Client):
for index in reversed(remove):
del event_list[index]
- # finally remove the import..
- del lib
- del self.extensions[name]
- del sys.modules[name]
+ try:
+ func = getattr(lib, 'teardown')
+ except AttributeError:
+ pass
+ else:
+ try:
+ func(bot)
+ except:
+ pass
+ finally:
+ # finally remove the import..
+ del lib
+ del self.extensions[name]
+ del sys.modules[name]
# command processing