More work to add standard channel command

This commit is contained in:
Griatch 2021-04-16 00:38:54 +02:00
parent 6d973f3617
commit 92a0e79b08

View file

@ -7,18 +7,17 @@ make sure to homogenize self.caller to always be the account object
for easy handling. for easy handling.
""" """
import hashlib
import time
from django.conf import settings from django.conf import settings
from evennia.comms.models import ChannelDB, Msg from evennia.comms.models import Msg
from evennia.accounts.models import AccountDB from evennia.accounts.models import AccountDB
from evennia.accounts import bots from evennia.accounts import bots
from evennia.comms.channelhandler import CHANNELHANDLER from evennia.comms.channelhandler import CHANNELHANDLER
from evennia.locks.lockhandler import LockException from evennia.locks.lockhandler import LockException
from evennia.utils import create, logger, utils, evtable from evennia.utils import create, logger, utils
from evennia.utils.logger import tail_log_file from evennia.utils.logger import tail_log_file
from evennia.utils.utils import make_iter, class_from_module from evennia.utils.utils import make_iter, class_from_module
from evennia.utils import evmore from evennia.utils import evmore
from evennia.utils.evmenu import ask_yes_no
COMMAND_DEFAULT_CLASS = class_from_module(settings.COMMAND_DEFAULT_CLASS) COMMAND_DEFAULT_CLASS = class_from_module(settings.COMMAND_DEFAULT_CLASS)
CHANNEL_DEFAULT_TYPECLASS = class_from_module( CHANNEL_DEFAULT_TYPECLASS = class_from_module(
@ -68,7 +67,7 @@ class CmdChannel(COMMAND_DEFAULT_CLASS):
channel/mute channelname[,channelname,...] channel/mute channelname[,channelname,...]
channel/unmute channelname[,channelname,...] channel/unmute channelname[,channelname,...]
channel/create channelname;alias;alias:typeclass [= description] channel/create channelname;alias;alias:typeclass [= description]
channel/destroy channelname [: reason] channel/destroy channelname [= reason]
channel/lock channelname = lockstring channel/lock channelname = lockstring
channel/desc channelname = description channel/desc channelname = description
channel/boot[/quiet] channelname = subscribername [: reason] channel/boot[/quiet] channelname = subscribername [: reason]
@ -291,13 +290,19 @@ class CmdChannel(COMMAND_DEFAULT_CLASS):
""" """
caller = self.caller caller = self.caller
if typeclass: if typeclass:
pass typeclass = class_from_module(typeclass)
else:
typeclass = CHANNEL_DEFAULT_TYPECLASS
if CHANNEL_DEFAULT_TYPECLASS.objects.channel_search(name, exact=True): if typeclass.objects.channel_search(name, exact=True):
return False, f"Channel {name} already exists." return False, f"Channel {name} already exists."
# set up the new channel # set up the new channel
lockstring = "send:all();listen:all();control:id(%s)" % caller.id lockstring = "send:all();listen:all();control:id(%s)" % caller.id
new_chan = create.create_channel(name, aliases=aliases,desc=description, locks=lockstring)
new_chan = create.create_channel(
name, aliases=aliases,desc=description, locks=lockstring,
typeclass=typeclass)
new_chan.connect(caller) new_chan.connect(caller)
return new_chan, "" return new_chan, ""
@ -318,9 +323,6 @@ class CmdChannel(COMMAND_DEFAULT_CLASS):
""" """
caller = self.caller caller = self.caller
# set up the new channel
lockstring = "send:all();listen:all();control:id(%s)" % caller.id
channel_key = channel.key channel_key = channel.key
if message is None: if message is None:
message = (f"|rChannel {channel_key} is being destroyed. " message = (f"|rChannel {channel_key} is being destroyed. "
@ -615,8 +617,12 @@ class CmdChannel(COMMAND_DEFAULT_CLASS):
typeclass = typeclass[0] if typeclass else None typeclass = typeclass[0] if typeclass else None
name, *aliases = name.rsplit(";") name, *aliases = name.rsplit(";")
description = self.rhs or "" description = self.rhs or ""
self.create_channel(name, description, typeclass=typeclass, aliases=aliases) chan, err = self.create_channel(name, description, typeclass=typeclass, aliases=aliases)
if chan:
self.msg(f"Created (and joined) new channel '{chan.key}'.")
else:
self.msg(err)
return
channels = [] channels = []
for channel_name in channel_names: for channel_name in channel_names:
@ -720,9 +726,16 @@ class CmdChannel(COMMAND_DEFAULT_CLASS):
self.msg(err) self.msg(err)
return return
if 'destroy' in switches or 'delete' in switches:
# destroy a channel we control
reason = self.rhs or None
new_chan, err = self.create_channel() if not channel.access(caller, "control"):
self.msg("You can only delete channels you control.")
return
def _perform_delete(caller, prompt, result):
self.destroy_channel(channel, message=reason)
class CmdAddCom(COMMAND_DEFAULT_CLASS): class CmdAddCom(COMMAND_DEFAULT_CLASS):