This module gathers all the essential database-creation functions for the game engine’s various object types.

Only objects created ‘stand-alone’ are in here, e.g. object Attributes are always created directly through their respective objects.

Each creation_* function also has an alias named for the entity being created, such as create_object() and object(). This is for consistency with the utils.search module and allows you to do the shorter “create.object()”.

The respective object managers hold more methods for manipulating and searching objects already existing in the database.

Models covered:

Objects Scripts Help Message Channel Accounts

evennia.utils.create.create_object(typeclass=None, key=None, location=None, home=None, permissions=None, locks=None, aliases=None, tags=None, destination=None, report_to=None, nohome=False, attributes=None, nattributes=None)[source]

Create a new in-game object.

Keyword Arguments
  • typeclass (class or str) – Class or python path to a typeclass.

  • key (str) – Name of the new object. If not set, a name of #dbref will be set.

  • home (Object or str) – Obj or #dbref to use as the object’s home location.

  • permissions (list) – A list of permission strings or tuples (permstring, category).

  • locks (str) – one or more lockstrings, separated by semicolons.

  • aliases (list) – A list of alternative keys or tuples (aliasstring, category).

  • tags (list) – List of tag keys or tuples (tagkey, category) or (tagkey, category, data).

  • destination (Object or str) – Obj or #dbref to use as an Exit’s target.

  • report_to (Object) – The object to return error messages to.

  • nohome (bool) – This allows the creation of objects without a default home location; only used when creating the default location itself or during unittests.

  • attributes (list) – Tuples on the form (key, value) or (key, value, category), (key, value, lockstring) or (key, value, lockstring, default_access). to set as Attributes on the new object.

  • nattributes (list) – Non-persistent tuples on the form (key, value). Note that adding this rarely makes sense since this data will not survive a reload.


object (Object) – A newly created object of the given typeclass.

evennia.utils.create.create_script(typeclass=None, key=None, obj=None, account=None, locks=None, interval=None, start_delay=None, repeats=None, persistent=None, autostart=True, report_to=None, desc=None, tags=None, attributes=None)[source]

Create a new script. All scripts are a combination of a database object that communicates with the database, and an typeclass that ‘decorates’ the database object into being different types of scripts. It’s behaviour is similar to the game objects except scripts has a time component and are more limited in scope.

Keyword Arguments
  • typeclass (class or str) – Class or python path to a typeclass.

  • key (str) – Name of the new object. If not set, a name of #dbref will be set.

  • obj (Object) – The entity on which this Script sits. If this is None, we are creating a “global” script.

  • account (Account) – The account on which this Script sits. It is exclusiv to obj.

  • locks (str) – one or more lockstrings, separated by semicolons.

  • interval (int) – The triggering interval for this Script, in seconds. If unset, the Script will not have a timing component.

  • start_delay (bool) – If True, will wait interval seconds before triggering the first time.

  • repeats (int) – The number of times to trigger before stopping. If unset, will repeat indefinitely.

  • persistent (bool) – If this Script survives a server shutdown or not (all Scripts will survive a reload).

  • autostart (bool) – If this Script will start immediately when created or if the start method must be called explicitly.

  • report_to (Object) – The object to return error messages to.

  • desc (str) – Optional description of script

  • tags (list) – List of tags or tuples (tag, category).

  • attributes (list) – List of tuples (key, value), (key, value, category), (key, value, category, lockstring) or (key, value, category, lockstring, default_access).


script (obj) – An instance of the script created

See evennia.scripts.manager for methods to manipulate existing scripts in the database.

evennia.utils.create.create_help_entry(key, entrytext, category='General', locks=None, aliases=None, tags=None)[source]

Create a static help entry in the help database. Note that Command help entries are dynamic and directly taken from the __doc__ entries of the command. The database-stored help entries are intended for more general help on the game, more extensive info, in-game setting information and so on.

  • key (str) – The name of the help entry.

  • entrytext (str) – The body of te help entry

  • category (str, optional) – The help category of the entry.

  • locks (str, optional) – A lockstring to restrict access.

  • aliases (list of str, optional) – List of alternative (likely shorter) keynames.

  • tags (lst, optional) – List of tags or tuples (tag, category).


help (HelpEntry) – A newly created help entry.

evennia.utils.create.create_message(senderobj, message, channels=None, receivers=None, locks=None, tags=None, header=None)[source]

Create a new communication Msg. Msgs represent a unit of database-persistent communication between entites.

  • senderobj (Object or Account) – The entity sending the Msg.

  • message (str) – Text with the message. Eventual headers, titles etc should all be included in this text string. Formatting will be retained.

  • channels (Channel, key or list) – A channel or a list of channels to send to. The channels may be actual channel objects or their unique key strings.

  • receivers (Object, Account, str or list) – An Account/Object to send to, or a list of them. May be Account objects or accountnames.

  • locks (str) – Lock definition string.

  • tags (list) – A list of tags or tuples (tag, category).

  • header (str) – Mime-type or other optional information for the message


The Comm system is created very open-ended, so it’s fully possible to let a message both go to several channels and to several receivers at the same time, it’s up to the command definitions to limit this as desired.

evennia.utils.create.create_channel(key, aliases=None, desc=None, locks=None, keep_log=True, typeclass=None, tags=None)[source]

Create A communication Channel. A Channel serves as a central hub for distributing Msgs to groups of people without specifying the receivers explicitly. Instead accounts may ‘connect’ to the channel and follow the flow of messages. By default the channel allows access to all old messages, but this can be turned off with the keep_log switch.


key (str) – This must be unique.

Keyword Arguments
  • aliases (list of str) – List of alternative (likely shorter) keynames.

  • desc (str) – A description of the channel, for use in listings.

  • locks (str) – Lockstring.

  • keep_log (bool) – Log channel throughput.

  • typeclass (str or class) – The typeclass of the Channel (not often used).

  • tags (list) – A list of tags or tuples (tag, category).


channel (Channel) – A newly created channel.

evennia.utils.create.create_account(key, email, password, typeclass=None, is_superuser=False, locks=None, permissions=None, tags=None, attributes=None, report_to=None)[source]

This creates a new account.

  • key (str) – The account’s name. This should be unique.

  • email (str or None) – Email on valid addr@addr.domain form. If the empty string, will be set to None.

  • password (str) – Password in cleartext.

Keyword Arguments
  • typeclass (str) – The typeclass to use for the account.

  • is_superuser (bool) – Wether or not this account is to be a superuser

  • locks (str) – Lockstring.

  • permission (list) – List of permission strings.

  • tags (list) – List of Tags on form (key, category[, data])

  • attributes (list) – List of Attributes on form (key, value [, category, [,lockstring [, default_pass]]])

  • report_to (Object) – An object with a msg() method to report errors to. If not given, errors will be logged.


Account – The newly created Account.


ValueError – If key already exists in database.


Usually only the server admin should need to be superuser, all other access levels can be handled with more fine-grained permissions or groups. A superuser bypasses all lock checking operations and is thus not suitable for play-testing the game.