diff --git a/evennia/comms/channelhandler.py b/evennia/comms/channelhandler.py index da72bba5e..520b0934d 100644 --- a/evennia/comms/channelhandler.py +++ b/evennia/comms/channelhandler.py @@ -188,8 +188,8 @@ class ChannelHandler(object): def add(self, channel): """ - Add an individual channel to the handler. This should be - called whenever a new channel is created. + Add an individual channel to the handler. This is called + whenever a new channel is created. Args: channel (Channel): The channel to add. @@ -223,6 +223,18 @@ class ChannelHandler(object): self.cached_cmdsets = {} add_channel = add # legacy alias + def remove(self, channel): + """ + Remove channel from channelhandler. This will also delete it. + + Args: + channel (Channel): Channel to remove/delete. + + """ + if channel.pk: + channel.delete() + self.update() + def update(self): """ Updates the handler completely, including removing old removed diff --git a/evennia/comms/comms.py b/evennia/comms/comms.py index 709e87d76..86bbaa618 100644 --- a/evennia/comms/comms.py +++ b/evennia/comms/comms.py @@ -9,6 +9,7 @@ from evennia.comms.managers import ChannelManager from evennia.utils import logger from evennia.utils.utils import make_iter from future.utils import with_metaclass +_CHANNEL_HANDLER = None class DefaultChannel(with_metaclass(TypeclassBase, ChannelDB)): @@ -51,7 +52,12 @@ class DefaultChannel(with_metaclass(TypeclassBase, ChannelDB)): Called once, when the channel is first created. """ - pass + # delayed import of the channelhandler + global _CHANNEL_HANDLER + if not _CHANNEL_HANDLER: + from comms.channelhandler import CHANNEL_HANDLER as _CHANNEL_HANDLER + # register ourselves with the channelhandler. + _CHANNEL_HANDLER.add(self) # helper methods, for easy overloading