diff --git a/.github/ISSUE_TEMPLATE/bug-report-develop.md b/.github/ISSUE_TEMPLATE/bug-report-develop.md new file mode 100644 index 0000000000..2bcdda7d65 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug-report-develop.md @@ -0,0 +1,27 @@ +--- +name: Bug report (branch-develop) +about: Use this to report errors in the Evennia `develop` branch +title: "[BUG - Develop] (Enter a brief description here)" +labels: bug, branch-develop +assignees: '' + +--- + +#### Describe the bug + + +#### To Reproduce +Steps to reproduce the behavior: +1. +2. +3. +4. See error + +#### Expected behavior + + +#### Develop-branch commit + + +#### Additional context + diff --git a/.github/ISSUE_TEMPLATE/bug-report.md b/.github/ISSUE_TEMPLATE/bug-report.md index e7d0990a31..472cf50abb 100644 --- a/.github/ISSUE_TEMPLATE/bug-report.md +++ b/.github/ISSUE_TEMPLATE/bug-report.md @@ -8,7 +8,7 @@ assignees: '' --- #### Describe the bug -(Replace with a clear and concise description of what the bug is.) + #### To Reproduce Steps to reproduce the behavior: @@ -18,10 +18,10 @@ Steps to reproduce the behavior: 4. See error #### Expected behavior -(Replace with a clear and concise description of what you expected to happen.) + #### Environment, Evennia version, OS etc -(Replace with info. If unsure, run `evennia -v` or get the first few lines of the `about` command in-game.) + #### Additional context -(Replace with any other context about the problem, or ideas on how to solve.) + diff --git a/.github/ISSUE_TEMPLATE/documentation-issue.md b/.github/ISSUE_TEMPLATE/documentation-issue.md index f72656ca20..d03d696e9e 100644 --- a/.github/ISSUE_TEMPLATE/documentation-issue.md +++ b/.github/ISSUE_TEMPLATE/documentation-issue.md @@ -7,11 +7,11 @@ assignees: '' --- -#### Existing page / new -(Link to existing documentation page or proposed name of new page) +#### Documentation page name and link + -#### Documentation issue -(Replace with the description of what the issue is or motivate a changes/additions) +#### Reason for issue + #### Suggested change -(Enter the suggested change here) + diff --git a/.github/ISSUE_TEMPLATE/feature-request.md b/.github/ISSUE_TEMPLATE/feature-request.md index 7dc702cfad..fe1022e728 100644 --- a/.github/ISSUE_TEMPLATE/feature-request.md +++ b/.github/ISSUE_TEMPLATE/feature-request.md @@ -8,13 +8,13 @@ assignees: '' --- #### Is your feature request related to a problem? Please describe. -A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] + #### Describe the solution you'd like -A clear and concise description of what you want to happen. + -#### Describe alternatives you've considered -A clear and concise description of any alternative solutions or features you've considered. +#### Alternatives you've considered + #### Additional context -Add any other context or screenshots about the feature request here. + diff --git a/.github/workflows/github_action_test_suite.yml b/.github/workflows/github_action_test_suite.yml index 9bd8674744..6f39098866 100644 --- a/.github/workflows/github_action_test_suite.yml +++ b/.github/workflows/github_action_test_suite.yml @@ -18,7 +18,7 @@ jobs: strategy: fail-fast: false matrix: - python-version: [3.7, 3.8] + python-version: [3.7, 3.8, 3.9] TESTING_DB: ['sqlite3', 'postgresql', 'mysql'] steps: @@ -44,7 +44,7 @@ jobs: mysql user: 'evennia' mysql password: 'password' - # wait for db to activage, get logs from their start + # wait for db to activate, get logs from their start - name: Wait / sleep uses: jakejarvis/wait-action@v0.1.0 if: ${{ matrix.TESTING_DB == 'postgresql' || matrix.TESTING_DB == 'mysql' }} @@ -107,3 +107,36 @@ jobs: with: project-token: ${{ secrets.CODACY_PROJECT_TOKEN }} coverage-reports: ./testing_mygame/coverage.xml + + # docker setup and push + - + name: Set up QEMU + if: matrix.TESTING_DB == 'sqlite3' && matrix.python-version == 3.7 + uses: docker/setup-qemu-action@v1 + - + name: Set up Docker Buildx + if: matrix.TESTING_DB == 'sqlite3' && matrix.python-version == 3.7 + uses: docker/setup-buildx-action@v1 + - + name: Login to DockerHub + if: matrix.TESTING_DB == 'sqlite3' && matrix.python-version == 3.7 && (github.ref == 'refs/heads/master' || github.ref == 'refs/heads/develop') + uses: docker/login-action@v1 + with: + username: ${{ secrets.DOCKERHUB_USERNAME }} + password: ${{ secrets.DOCKERHUB_TOKEN }} + - + name: Build and push for master + if: matrix.TESTING_DB == 'sqlite3' && matrix.python-version == 3.7 && github.ref == 'refs/heads/master' + id: docker_build_master + uses: docker/build-push-action@v2 + with: + push: true + tags: evennia/evennia:latest + - + name: Build and push for develop + if: matrix.TESTING_DB == 'sqlite3' && matrix.python-version == 3.7 && github.ref == 'refs/heads/develop' + id: docker_build_develop + uses: docker/build-push-action@v2 + with: + push: true + tags: evennia/evennia:develop diff --git a/CODING_STYLE.md b/CODING_STYLE.md index 79b6a2c674..80e8ac595c 100644 --- a/CODING_STYLE.md +++ b/CODING_STYLE.md @@ -199,7 +199,7 @@ or in the chat. [pep8]: http://www.python.org/dev/peps/pep-0008 [pep8tool]: https://pypi.python.org/pypi/pep8 -[googlestyle]: http://www.sphinx-doc.org/en/stable/ext/example_google.html +[googlestyle]: https://www.sphinx-doc.org/en/master/usage/extensions/example_google.html [githubmarkdown]: https://help.github.com/articles/github-flavored-markdown/ [markdown-hilight]: https://help.github.com/articles/github-flavored-markdown/#syntax-highlighting [command-docstrings]: https://github.com/evennia/evennia/wiki/Using%20MUX%20As%20a%20Standard#documentation-policy diff --git a/README.md b/README.md index 73bb35181c..9b32773135 100644 --- a/README.md +++ b/README.md @@ -60,22 +60,22 @@ introduction][introduction] to read. To learn how to get your hands on the code base, the [Getting started][gettingstarted] page is the way to go. Otherwise you could -browse the [Documentation][wiki] or why not come join the [Evennia +browse the [Documentation][docs] or why not come join the [Evennia Community forum][group] or join us in our [development chat][chat]. Welcome! -[homepage]: http://www.evennia.com -[gettingstarted]: http://github.com/evennia/evennia/wiki/Getting-Started -[wiki]: https://github.com/evennia/evennia/wiki +[homepage]: https://www.evennia.com +[gettingstarted]: https://www.evennia.com/docs/latest/Getting-Started.html +[docs]: https://www.evennia.com/docs/latest [screenshot]: https://user-images.githubusercontent.com/294267/30773728-ea45afb6-a076-11e7-8820-49be2168a6b8.png [logo]: https://github.com/evennia/evennia/blob/master/evennia/web/website/static/website/images/evennia_logo.png [unittestciimg]: https://github.com/evennia/evennia/workflows/test-suite/badge.svg [unittestcilink]: https://github.com/evennia/evennia/actions?query=workflow%3Atest-suite [coverimg]: https://coveralls.io/repos/github/evennia/evennia/badge.svg?branch=master [coverlink]: https://coveralls.io/github/evennia/evennia?branch=master -[introduction]: https://github.com/evennia/evennia/wiki/Evennia-Introduction -[license]: https://github.com/evennia/evennia/wiki/Licensing -[group]: https://groups.google.com/forum/#!forum/evennia -[chat]: http://webchat.freenode.net/?channels=evennia&uio=MT1mYWxzZSY5PXRydWUmMTE9MTk1JjEyPXRydWUbb +[introduction]: https://www.evennia.com/docs/latest/Evennia-Introduction.html +[license]: https://www.evennia.com/docs/latest/Licensing.html +[group]: https://github.com/evennia/evennia/discussions +[chat]: https://discord.gg/AJJpcRUhtF [wikimudpage]: http://en.wikipedia.org/wiki/MUD diff --git a/docs/README.md b/docs/README.md index 2a9b3e6a01..bafd3def40 100644 --- a/docs/README.md +++ b/docs/README.md @@ -10,7 +10,7 @@ The live documentation is (will in the future be) available at `https://evennia. # Editing the docs The documentation source files are `*.md` (Markdown) files found in `evennia/docs/source/`. -Markdown files are simple text files that can be edited with a normal text editor. They primaroly use +Markdown files are simple text files that can be edited with a normal text editor. They primarily use the [Markdown][commonmark] syntax. See [the syntax section below](#Editing-syntax) for more help. Don't edit the files in `source/api/`. These are auto-generated and your changes @@ -18,7 +18,7 @@ will be lost. ## Contributing -Contributing to the docs is is like [contributing to the rest of Evennia][contributing]: +Contributing to the docs is like [contributing to the rest of Evennia][contributing]: Check out the branch of Evennia you want to edit the documentation for. Create your own work-branch, make your changes to files in `evennia/docs/source/` and make a PR for it! @@ -66,7 +66,7 @@ All is done in your terminal/console. The full documentation includes both the doc pages and the API documentation generated from the Evennia source. For this you must install Evennia and initialize a new game with a default database (you don't need to have it -running) +running). - Follow the normal [Evennia Getting-Started instructions][getting-started] to install Evennia. Use a virtualenv. @@ -79,7 +79,7 @@ repo with ``` - Then `cd` into it and create a new, empty database. You don't need to start the game - or do any further changes. + or make any further changes. ``` evennia migrate @@ -104,7 +104,7 @@ repo with pip install -r requirements.txt ``` -- Finally, build the full documentation, including the auto-docs: +- Finally, build the full documentation including the auto-docs: ``` make local @@ -274,7 +274,7 @@ The Evennia documentation supports some special reference shortcuts in links: This will generate a link to https://github.com/evennia/evennia/issues/new/choose. - > For some reason these particular shortcuts gives a warning during documentation compilation. This + > For some reason these particular shortcuts give a warning during documentation compilation. This warning > can be ignored. ## Verbatim text @@ -304,7 +304,7 @@ Everything within these backticks will be verbatim. ## Code blocks -A special case is code examples - we want them to get code-highlighting for readability. This is done by using +Code examples are a special case - we want them to get code-highlighting for readability. This is done by using the triple-backticks and specify which language we use: ```` @@ -318,10 +318,9 @@ def a_python_func(x): ## ReST blocks -Markdown is easy to read and use. But while it does most of what we need, there are some things it's -not quite as expressive as it needs to be. For this we need to fall back to the [ReST][ReST] markup -language which the documentation system uses under the hood. This is done by specifying `eval_rst` as -the name of the `language` of a literal block: +Markdown is easy to read and use, but it isn't as expressive as it needs to be for some things. For this we +need to fall back to the [ReST][ReST] markup language which the documentation system uses under the hood. This is +done by specifying `eval_rst` as the name of the `language` of a literal block: ```` ```eval_rst diff --git a/docs/requirements.txt b/docs/requirements.txt index cba2a17f50..683117213d 100644 --- a/docs/requirements.txt +++ b/docs/requirements.txt @@ -1,11 +1,11 @@ # requirements for building the docs sphinx==3.2.1 -sphinx-multiversion==0.2.4 -# lunr==0.5.8 +myst-parser==0.15.2 +myst-parser[linkify]==0.15.2 -# recommonmark custom branch with evennia-specific fixes -git+https://github.com/evennia/recommonmark.git@evennia-mods#egg=recommonmark +# sphinx-multiversion with evennia fixes +git+https://github.com/evennia/sphinx-multiversion.git@evennia-mods#egg=sphinx-multiversion # sphinxcontrib-lunrsearch custom branch with evennia-specific fixes -git+https://github.com/evennia/sphinxcontrib-lunrsearch.git@evennia-mods#egg=sphinxcontrib-lunrsearch +# git+https://github.com/evennia/sphinxcontrib-lunrsearch.git@evennia-mods#egg=sphinxcontrib-lunrsearch diff --git a/docs/source/Default-Commands.md b/docs/source/Default-Commands.md index 36d32e14d5..e24501aed2 100644 --- a/docs/source/Default-Commands.md +++ b/docs/source/Default-Commands.md @@ -14,27 +14,27 @@ with [EvEditor](./EvEditor.md), flipping pages in [EvMore](./EvMore.md) or using [Batch-Processor](./Batch-Processors.md)'s interactive mode. ``` -- [**__unloggedin_look_command** [l, look]](evennia.commands.default.unloggedin.CmdUnconnectedLook) (cmdset: [UnloggedinCmdSet](evennia.commands.default.cmdset_unloggedin.UnloggedinCmdSet), help-category: _General_) +- [**__unloggedin_look_command** [look, l]](evennia.commands.default.unloggedin.CmdUnconnectedLook) (cmdset: [UnloggedinCmdSet](evennia.commands.default.cmdset_unloggedin.UnloggedinCmdSet), help-category: _General_) - [**about** [version]](evennia.commands.default.system.CmdAbout) (cmdset: [CharacterCmdSet](evennia.commands.default.cmdset_character.CharacterCmdSet), help-category: _System_) -- [**access** [hierarchy, groups]](evennia.commands.default.general.CmdAccess) (cmdset: [CharacterCmdSet](evennia.commands.default.cmdset_character.CharacterCmdSet), help-category: _General_) -- [**accounts** [account, listaccounts]](evennia.commands.default.system.CmdAccounts) (cmdset: [CharacterCmdSet](evennia.commands.default.cmdset_character.CharacterCmdSet), help-category: _System_) +- [**access** [groups, hierarchy]](evennia.commands.default.general.CmdAccess) (cmdset: [CharacterCmdSet](evennia.commands.default.cmdset_character.CharacterCmdSet), help-category: _General_) +- [**accounts** [listaccounts, account]](evennia.commands.default.system.CmdAccounts) (cmdset: [CharacterCmdSet](evennia.commands.default.cmdset_character.CharacterCmdSet), help-category: _System_) - [**addcom** [chanalias, aliaschan]](evennia.commands.default.comms.CmdAddCom) (cmdset: [AccountCmdSet](evennia.commands.default.cmdset_account.AccountCmdSet), help-category: _Comms_) - [**alias** [setobjalias]](evennia.commands.default.building.CmdSetObjAlias) (cmdset: [CharacterCmdSet](evennia.commands.default.cmdset_character.CharacterCmdSet), help-category: _Building_) - [**allcom**](evennia.commands.default.comms.CmdAllCom) (cmdset: [AccountCmdSet](evennia.commands.default.cmdset_account.AccountCmdSet), help-category: _Comms_) - [**batchcode** [batchcodes]](evennia.commands.default.batchprocess.CmdBatchCode) (cmdset: [CharacterCmdSet](evennia.commands.default.cmdset_character.CharacterCmdSet), help-category: _Building_) -- [**batchcommands** [batchcmd, batchcommand]](evennia.commands.default.batchprocess.CmdBatchCommands) (cmdset: [CharacterCmdSet](evennia.commands.default.cmdset_character.CharacterCmdSet), help-category: _Building_) +- [**batchcommands** [batchcommand, batchcmd]](evennia.commands.default.batchprocess.CmdBatchCommands) (cmdset: [CharacterCmdSet](evennia.commands.default.cmdset_character.CharacterCmdSet), help-category: _Building_) - [**cboot**](evennia.commands.default.comms.CmdCBoot) (cmdset: [AccountCmdSet](evennia.commands.default.cmdset_account.AccountCmdSet), help-category: _Comms_) - [**ccreate** [channelcreate]](evennia.commands.default.comms.CmdChannelCreate) (cmdset: [AccountCmdSet](evennia.commands.default.cmdset_account.AccountCmdSet), help-category: _Comms_) - [**cdesc**](evennia.commands.default.comms.CmdCdesc) (cmdset: [AccountCmdSet](evennia.commands.default.cmdset_account.AccountCmdSet), help-category: _Comms_) - [**cdestroy**](evennia.commands.default.comms.CmdCdestroy) (cmdset: [AccountCmdSet](evennia.commands.default.cmdset_account.AccountCmdSet), help-category: _Comms_) - [**cemit** [cmsg]](evennia.commands.default.comms.CmdCemit) (cmdset: [AccountCmdSet](evennia.commands.default.cmdset_account.AccountCmdSet), help-category: _Comms_) -- [**channels** [clist, chanlist, all channels, channellist, comlist]](evennia.commands.default.comms.CmdChannels) (cmdset: [AccountCmdSet](evennia.commands.default.cmdset_account.AccountCmdSet), help-category: _Comms_) +- [**channels** [channellist, clist, comlist, all channels, chanlist]](evennia.commands.default.comms.CmdChannels) (cmdset: [AccountCmdSet](evennia.commands.default.cmdset_account.AccountCmdSet), help-category: _Comms_) - [**charcreate**](evennia.commands.default.account.CmdCharCreate) (cmdset: [AccountCmdSet](evennia.commands.default.cmdset_account.AccountCmdSet), help-category: _General_) - [**chardelete**](evennia.commands.default.account.CmdCharDelete) (cmdset: [AccountCmdSet](evennia.commands.default.cmdset_account.AccountCmdSet), help-category: _General_) - [**clock**](evennia.commands.default.comms.CmdClock) (cmdset: [AccountCmdSet](evennia.commands.default.cmdset_account.AccountCmdSet), help-category: _Comms_) - [**cmdsets** [listcmsets]](evennia.commands.default.building.CmdListCmdSets) (cmdset: [CharacterCmdSet](evennia.commands.default.cmdset_character.CharacterCmdSet), help-category: _Building_) - [**color**](evennia.commands.default.account.CmdColorTest) (cmdset: [AccountCmdSet](evennia.commands.default.cmdset_account.AccountCmdSet), help-category: _General_) -- [**connect** [conn, co, con]](evennia.commands.default.unloggedin.CmdUnconnectedConnect) (cmdset: [UnloggedinCmdSet](evennia.commands.default.cmdset_unloggedin.UnloggedinCmdSet), help-category: _General_) +- [**connect** [con, co, conn]](evennia.commands.default.unloggedin.CmdUnconnectedConnect) (cmdset: [UnloggedinCmdSet](evennia.commands.default.cmdset_unloggedin.UnloggedinCmdSet), help-category: _General_) - [**copy**](evennia.commands.default.building.CmdCopy) (cmdset: [CharacterCmdSet](evennia.commands.default.cmdset_character.CharacterCmdSet), help-category: _Building_) - [**cpattr**](evennia.commands.default.building.CmdCpAttr) (cmdset: [CharacterCmdSet](evennia.commands.default.cmdset_character.CharacterCmdSet), help-category: _Building_) - [**create**](evennia.commands.default.building.CmdCreate) (cmdset: [CharacterCmdSet](evennia.commands.default.cmdset_character.CharacterCmdSet), help-category: _Building_) @@ -42,17 +42,17 @@ with [EvEditor](./EvEditor.md), flipping pages in [EvMore](./EvMore.md) or using - [**cwho**](evennia.commands.default.comms.CmdCWho) (cmdset: [AccountCmdSet](evennia.commands.default.cmdset_account.AccountCmdSet), help-category: _Comms_) - [**delcom** [delchanalias, delaliaschan]](evennia.commands.default.comms.CmdDelCom) (cmdset: [AccountCmdSet](evennia.commands.default.cmdset_account.AccountCmdSet), help-category: _Comms_) - [**desc** [describe]](evennia.commands.default.building.CmdDesc) (cmdset: [CharacterCmdSet](evennia.commands.default.cmdset_character.CharacterCmdSet), help-category: _Building_) -- [**destroy** [delete, del]](evennia.commands.default.building.CmdDestroy) (cmdset: [CharacterCmdSet](evennia.commands.default.cmdset_character.CharacterCmdSet), help-category: _Building_) +- [**destroy** [del, delete]](evennia.commands.default.building.CmdDestroy) (cmdset: [CharacterCmdSet](evennia.commands.default.cmdset_character.CharacterCmdSet), help-category: _Building_) - [**dig**](evennia.commands.default.building.CmdDig) (cmdset: [CharacterCmdSet](evennia.commands.default.cmdset_character.CharacterCmdSet), help-category: _Building_) - [**drop**](evennia.commands.default.general.CmdDrop) (cmdset: [CharacterCmdSet](evennia.commands.default.cmdset_character.CharacterCmdSet), help-category: _General_) - [**encoding** [encode]](evennia.commands.default.unloggedin.CmdUnconnectedEncoding) (cmdset: [UnloggedinCmdSet](evennia.commands.default.cmdset_unloggedin.UnloggedinCmdSet), help-category: _General_) -- [**examine** [ex, exam]](evennia.commands.default.building.CmdExamine) (cmdset: [AccountCmdSet](evennia.commands.default.cmdset_account.AccountCmdSet), help-category: _Building_) +- [**examine** [exam, ex]](evennia.commands.default.building.CmdExamine) (cmdset: [AccountCmdSet](evennia.commands.default.cmdset_account.AccountCmdSet), help-category: _Building_) - [**find** [search, locate]](evennia.commands.default.building.CmdFind) (cmdset: [CharacterCmdSet](evennia.commands.default.cmdset_character.CharacterCmdSet), help-category: _Building_) - [**get** [grab]](evennia.commands.default.general.CmdGet) (cmdset: [CharacterCmdSet](evennia.commands.default.cmdset_character.CharacterCmdSet), help-category: _General_) - [**give**](evennia.commands.default.general.CmdGive) (cmdset: [CharacterCmdSet](evennia.commands.default.cmdset_character.CharacterCmdSet), help-category: _General_) - [**grapevine2chan**](evennia.commands.default.comms.CmdGrapevine2Chan) (cmdset: [AccountCmdSet](evennia.commands.default.cmdset_account.AccountCmdSet), help-category: _Comms_) - [**help** [?]](evennia.commands.default.help.CmdHelp) (cmdset: [AccountCmdSet](evennia.commands.default.cmdset_account.AccountCmdSet), help-category: _General_) -- [**help** [h, ?]](evennia.commands.default.unloggedin.CmdUnconnectedHelp) (cmdset: [UnloggedinCmdSet](evennia.commands.default.cmdset_unloggedin.UnloggedinCmdSet), help-category: _General_) +- [**help** [?, h]](evennia.commands.default.unloggedin.CmdUnconnectedHelp) (cmdset: [UnloggedinCmdSet](evennia.commands.default.cmdset_unloggedin.UnloggedinCmdSet), help-category: _General_) - [**home**](evennia.commands.default.general.CmdHome) (cmdset: [CharacterCmdSet](evennia.commands.default.cmdset_character.CharacterCmdSet), help-category: _General_) - [**ic** [puppet]](evennia.commands.default.account.CmdIC) (cmdset: [AccountCmdSet](evennia.commands.default.cmdset_account.AccountCmdSet), help-category: _General_) - [**info**](evennia.commands.default.unloggedin.CmdUnconnectedInfo) (cmdset: [UnloggedinCmdSet](evennia.commands.default.cmdset_unloggedin.UnloggedinCmdSet), help-category: _General_) @@ -61,18 +61,18 @@ with [EvEditor](./EvEditor.md), flipping pages in [EvMore](./EvMore.md) or using - [**ircstatus**](evennia.commands.default.comms.CmdIRCStatus) (cmdset: [AccountCmdSet](evennia.commands.default.cmdset_account.AccountCmdSet), help-category: _Comms_) - [**link**](evennia.commands.default.building.CmdLink) (cmdset: [CharacterCmdSet](evennia.commands.default.cmdset_character.CharacterCmdSet), help-category: _Building_) - [**lock** [locks]](evennia.commands.default.building.CmdLock) (cmdset: [CharacterCmdSet](evennia.commands.default.cmdset_character.CharacterCmdSet), help-category: _Building_) -- [**look** [l, ls]](evennia.commands.default.account.CmdOOCLook) (cmdset: [AccountCmdSet](evennia.commands.default.cmdset_account.AccountCmdSet), help-category: _General_) -- [**look** [l, ls]](evennia.commands.default.general.CmdLook) (cmdset: [CharacterCmdSet](evennia.commands.default.cmdset_character.CharacterCmdSet), help-category: _General_) +- [**look** [ls, l]](evennia.commands.default.account.CmdOOCLook) (cmdset: [AccountCmdSet](evennia.commands.default.cmdset_account.AccountCmdSet), help-category: _General_) +- [**look** [ls, l]](evennia.commands.default.general.CmdLook) (cmdset: [CharacterCmdSet](evennia.commands.default.cmdset_character.CharacterCmdSet), help-category: _General_) - [**mvattr**](evennia.commands.default.building.CmdMvAttr) (cmdset: [CharacterCmdSet](evennia.commands.default.cmdset_character.CharacterCmdSet), help-category: _Building_) - [**name** [rename]](evennia.commands.default.building.CmdName) (cmdset: [CharacterCmdSet](evennia.commands.default.cmdset_character.CharacterCmdSet), help-category: _Building_) -- [**nick** [nickname, nicks]](evennia.commands.default.general.CmdNick) (cmdset: [AccountCmdSet](evennia.commands.default.cmdset_account.AccountCmdSet), help-category: _General_) -- [**objects** [listobjects, db, listobjs, stats]](evennia.commands.default.system.CmdObjects) (cmdset: [CharacterCmdSet](evennia.commands.default.cmdset_character.CharacterCmdSet), help-category: _System_) +- [**nick** [nicks, nickname]](evennia.commands.default.general.CmdNick) (cmdset: [AccountCmdSet](evennia.commands.default.cmdset_account.AccountCmdSet), help-category: _General_) +- [**objects** [stats, db, listobjects, listobjs]](evennia.commands.default.system.CmdObjects) (cmdset: [CharacterCmdSet](evennia.commands.default.cmdset_character.CharacterCmdSet), help-category: _System_) - [**ooc** [unpuppet]](evennia.commands.default.account.CmdOOC) (cmdset: [AccountCmdSet](evennia.commands.default.cmdset_account.AccountCmdSet), help-category: _General_) - [**open**](evennia.commands.default.building.CmdOpen) (cmdset: [CharacterCmdSet](evennia.commands.default.cmdset_character.CharacterCmdSet), help-category: _Building_) - [**option** [options]](evennia.commands.default.account.CmdOption) (cmdset: [AccountCmdSet](evennia.commands.default.cmdset_account.AccountCmdSet), help-category: _General_) - [**page** [tell]](evennia.commands.default.comms.CmdPage) (cmdset: [AccountCmdSet](evennia.commands.default.cmdset_account.AccountCmdSet), help-category: _Comms_) - [**password**](evennia.commands.default.account.CmdPassword) (cmdset: [AccountCmdSet](evennia.commands.default.cmdset_account.AccountCmdSet), help-category: _General_) -- [**pose** [emote, :]](evennia.commands.default.general.CmdPose) (cmdset: [CharacterCmdSet](evennia.commands.default.cmdset_character.CharacterCmdSet), help-category: _General_) +- [**pose** [:, emote]](evennia.commands.default.general.CmdPose) (cmdset: [CharacterCmdSet](evennia.commands.default.cmdset_character.CharacterCmdSet), help-category: _General_) - [**py** [!]](evennia.commands.default.system.CmdPy) (cmdset: [AccountCmdSet](evennia.commands.default.cmdset_account.AccountCmdSet), help-category: _System_) - [**quell** [unquell]](evennia.commands.default.account.CmdQuell) (cmdset: [AccountCmdSet](evennia.commands.default.cmdset_account.AccountCmdSet), help-category: _General_) - [**quit**](evennia.commands.default.account.CmdQuit) (cmdset: [AccountCmdSet](evennia.commands.default.cmdset_account.AccountCmdSet), help-category: _General_) @@ -80,11 +80,11 @@ with [EvEditor](./EvEditor.md), flipping pages in [EvMore](./EvMore.md) or using - [**reload** [restart]](evennia.commands.default.system.CmdReload) (cmdset: [AccountCmdSet](evennia.commands.default.cmdset_account.AccountCmdSet), help-category: _System_) - [**reset** [reboot]](evennia.commands.default.system.CmdReset) (cmdset: [AccountCmdSet](evennia.commands.default.cmdset_account.AccountCmdSet), help-category: _System_) - [**rss2chan**](evennia.commands.default.comms.CmdRSS2Chan) (cmdset: [AccountCmdSet](evennia.commands.default.cmdset_account.AccountCmdSet), help-category: _Comms_) -- [**say** [', "]](evennia.commands.default.general.CmdSay) (cmdset: [CharacterCmdSet](evennia.commands.default.cmdset_character.CharacterCmdSet), help-category: _General_) +- [**say** [", ']](evennia.commands.default.general.CmdSay) (cmdset: [CharacterCmdSet](evennia.commands.default.cmdset_character.CharacterCmdSet), help-category: _General_) - [**screenreader**](evennia.commands.default.unloggedin.CmdUnconnectedScreenreader) (cmdset: [UnloggedinCmdSet](evennia.commands.default.cmdset_unloggedin.UnloggedinCmdSet), help-category: _General_) - [**script** [addscript]](evennia.commands.default.building.CmdScript) (cmdset: [CharacterCmdSet](evennia.commands.default.cmdset_character.CharacterCmdSet), help-category: _Building_) -- [**scripts** [listscripts, globalscript]](evennia.commands.default.system.CmdScripts) (cmdset: [CharacterCmdSet](evennia.commands.default.cmdset_character.CharacterCmdSet), help-category: _System_) -- [**server** [serverload, serverprocess]](evennia.commands.default.system.CmdServerLoad) (cmdset: [CharacterCmdSet](evennia.commands.default.cmdset_character.CharacterCmdSet), help-category: _System_) +- [**scripts** [globalscript, listscripts]](evennia.commands.default.system.CmdScripts) (cmdset: [CharacterCmdSet](evennia.commands.default.cmdset_character.CharacterCmdSet), help-category: _System_) +- [**server** [serverprocess, serverload]](evennia.commands.default.system.CmdServerLoad) (cmdset: [CharacterCmdSet](evennia.commands.default.cmdset_character.CharacterCmdSet), help-category: _System_) - [**service** [services]](evennia.commands.default.system.CmdService) (cmdset: [CharacterCmdSet](evennia.commands.default.cmdset_character.CharacterCmdSet), help-category: _System_) - [**sessions**](evennia.commands.default.account.CmdSessions) (cmdset: [SessionCmdSet](evennia.commands.default.cmdset_session.SessionCmdSet), help-category: _General_) - [**set**](evennia.commands.default.building.CmdSetAttribute) (cmdset: [CharacterCmdSet](evennia.commands.default.cmdset_character.CharacterCmdSet), help-category: _Building_) @@ -99,7 +99,7 @@ with [EvEditor](./EvEditor.md), flipping pages in [EvMore](./EvMore.md) or using - [**tickers**](evennia.commands.default.system.CmdTickers) (cmdset: [CharacterCmdSet](evennia.commands.default.cmdset_character.CharacterCmdSet), help-category: _System_) - [**time** [uptime]](evennia.commands.default.system.CmdTime) (cmdset: [CharacterCmdSet](evennia.commands.default.cmdset_character.CharacterCmdSet), help-category: _System_) - [**tunnel** [tun]](evennia.commands.default.building.CmdTunnel) (cmdset: [CharacterCmdSet](evennia.commands.default.cmdset_character.CharacterCmdSet), help-category: _Building_) -- [**typeclass** [swap, parent, update, type]](evennia.commands.default.building.CmdTypeclass) (cmdset: [CharacterCmdSet](evennia.commands.default.cmdset_character.CharacterCmdSet), help-category: _Building_) +- [**typeclass** [parent, update, type, swap]](evennia.commands.default.building.CmdTypeclass) (cmdset: [CharacterCmdSet](evennia.commands.default.cmdset_character.CharacterCmdSet), help-category: _Building_) - [**unlink**](evennia.commands.default.building.CmdUnLink) (cmdset: [CharacterCmdSet](evennia.commands.default.cmdset_character.CharacterCmdSet), help-category: _Building_) - [**whisper**](evennia.commands.default.general.CmdWhisper) (cmdset: [CharacterCmdSet](evennia.commands.default.cmdset_character.CharacterCmdSet), help-category: _General_) - [**who** [doing]](evennia.commands.default.account.CmdWho) (cmdset: [AccountCmdSet](evennia.commands.default.cmdset_account.AccountCmdSet), help-category: _General_) diff --git a/docs/source/Evennia-API.md b/docs/source/Evennia-API.md index cb5bcac883..b4bbf14866 100644 --- a/docs/source/Evennia-API.md +++ b/docs/source/Evennia-API.md @@ -1,6 +1,6 @@ # API Summary -[evennia](evennia) - library root +[evennia](api/evennia.md) - library root - [evennia.accounts](evennia.accounts) - the out-of-character entities representing players - [evennia.commands](evennia.commands) - handle all inputs. Also includes default commands - [evennia.comms](evennia.comms) - in-game channels and messaging diff --git a/docs/source/Links.md b/docs/source/Links.md index 21a73992ab..cbd29079bc 100644 --- a/docs/source/Links.md +++ b/docs/source/Links.md @@ -124,6 +124,8 @@ when designing a virtual multiplayer world (Raph is known for *Ultima Online* am - Richard Bartle *Designing Virtual Worlds* ([amazon page](http://www.amazon.com/Designing-Virtual-Worlds-Richard-Bartle/dp/0131018167)) - Essential reading for the design of any persistent game world, written by the co-creator of the original game *MUD*. Published in 2003 but it's still as relevant now as when it came out. Covers everything you need to know and then some. + + When the rights to Designing Virtual Worlds returned to him, Richard Bartle made the PDF of his Designing Virtual Worlds freely available through his own website ([Designing Virtual Worlds](https://mud.co.uk/dvw/)). A direct link to the PDF can be found [here](https://mud.co.uk/richard/DesigningVirtualWorlds.pdf). - Zed A. Shaw *Learn Python the Hard way* ([homepage](https://learnpythonthehardway.org/)) - Despite the imposing name this book is for the absolute Python/programming beginner. One learns the language by gradually creating a small text game! It has been used by multiple users before moving on to diff --git a/docs/source/Online-Setup.md b/docs/source/Online-Setup.md index 7d3951743a..9a27941eab 100644 --- a/docs/source/Online-Setup.md +++ b/docs/source/Online-Setup.md @@ -101,11 +101,11 @@ Read on for a description of the individual settings. ### Telnet ```python -# Required. Change to whichever outgoing Telnet port(s) +# Required. Change to whichever outgoing Telnet port(s) # you are allowed to use on your host. TELNET_PORTS = [4000] -# Optional for security. Restrict which telnet -# interfaces we should accept. Should be set to your +# Optional for security. Restrict which telnet +# interfaces we should accept. Should be set to your # outward-facing IP address(es). Default is ´0.0.0.0´ # which accepts all interfaces. TELNET_INTERFACES = ['0.0.0.0'] @@ -115,22 +115,22 @@ The `TELNET_*` settings are the most important ones for getting a traditional ba IP addresses you have available depends on your server hosting solution (see the next sections). Some hosts will restrict which ports you are allowed you use so make sure to check. -### Web server +### Web server ```python -# Required. This is a list of tuples +# Required. This is a list of tuples # (outgoing_port, internal_port). Only the outgoing -# port should be open to the world! +# port should be open to the world! # set outgoing port to 80 if you want to run Evennia # as the only web server on your machine (if available). WEBSERVER_PORTS = [(4001, 4005)] -# Optional for security. Change this to the IP your -# server can be reached at (normally the same +# Optional for security. Change this to the IP your +# server can be reached at (normally the same # as TELNET_INTERFACES) WEBSERVER_INTERFACES = ['0.0.0.0'] -# Optional for security. Protects against -# man-in-the-middle attacks. Change it to your server's -# IP address or URL when you run a production server. +# Optional for security. Protects against +# man-in-the-middle attacks. Change it to your server's +# IP address or URL when you run a production server. ALLOWED_HOSTS = ['*'] ``` @@ -147,14 +147,14 @@ change the outgoing port unless the default internal port is clashing with some ```python # Required. Change this to the main IP address of your server. WEBSOCKET_CLIENT_INTERFACE = '0.0.0.0' -# Optional and needed only if using a proxy or similar. Change -# to the IP or address where the client can reach +# Optional and needed only if using a proxy or similar. Change +# to the IP or address where the client can reach # your server. The ws:// part is then required. If not given, the client -# will use its host location. +# will use its host location. WEBSOCKET_CLIENT_URL = "" # Required. Change to a free port for the websocket client to reach -# the server on. This will be automatically appended -# to WEBSOCKET_CLIENT_URL by the web client. +# the server on. This will be automatically appended +# to WEBSOCKET_CLIENT_URL by the web client. WEBSOCKET_CLIENT_PORT = 4002 ``` @@ -171,15 +171,15 @@ SSL_PORTS = [4003] SSL_INTERFACES = ['0.0.0.0'] # Optional public facing. Only if you allow SSH connections (off by default). SSH_PORTS = [4004] -SSH_INTERFACES = ['0.0.0.0'] +SSH_INTERFACES = ['0.0.0.0'] # Required private. You should only change this if there is a clash -# with other services on your host. Should NOT be open to the -# outside world. +# with other services on your host. Should NOT be open to the +# outside world. AMP_PORT = 4006 ``` -The `AMP_PORT` is required to work, since this is the internal port linking Evennia's -[Server and Portal](../Components/Portal-And-Server.md) components together. The other ports are encrypted ports that may be +The `AMP_PORT` is required to work, since this is the internal port linking Evennia's +[Server and Portal](./Portal-And-Server.md) components together. The other ports are encrypted ports that may be useful for custom protocols but are otherwise not used. ### Lockdown mode @@ -198,9 +198,9 @@ drum up interest for your game and also shows people that Evennia is being used. even if you are just starting development - if you don't give any telnet/web address it will appear as _Not yet public_ and just be a teaser. If so, pick _pre-alpha_ as the development status. -To register, stand in your game dir, run +To register, stand in your game dir, run - evennia connections + evennia connections and follow the instructions. See the [Game index page](./Evennia-Game-Index.md) for more details. @@ -384,17 +384,19 @@ Evennia users: | Hosting name | Type | Lowest price | Comments | |---|---| ---| --- | -| [silvren.com][1] | Shell account | Free for MU* | Private hobby provider so don't assume backups or expect immediate support. To ask for an account,connect with a MUD client to iweb.localecho.net, port 4201 and ask for "Jarin". | +| [silvren.com][1] | Shell account | Free for MU* | Private hobby provider so don't assume backups or expect immediate support. To ask for an account,connect with a MUD client to rostdev.mushpark.com, port 4201 and ask for "Jarin". | | [Digital Ocean][2] | VPS | $5/month | You can get a $50 credit if you use the referral link https://m.do.co/c/8f64fec2670c - if you do, once you've had it long enough to have paid $25 we will get that as a referral bonus to help Evennia development.| | [Amazon Web services][3] | Cloud | ~$5/month / on-demand | Free Tier first 12 months. Regions available around the globe.| | [Amazon Lightsail][9] | Cloud | $5/month | Free first month. AWS's new "fixed cost" offering.| +| [Azure App Services][12] | Cloud | Free | Provides a free tier for hobbyist. Limited regions to be deployed to under the free tier| +| [Huawei Cloud][13] | Cloud | on demand | Similar to Amazon. Free Tier first 12 months. Limited regions to be deployed to| | [Genesis MUD hosting][4] | Shell account | $8/month | Dedicated MUD host with very limited memory offerings. As for 2017, runs a 13 years old Python version (2.4) so you'd need to either convince them to update or compile yourself. Note that Evennia needs *at least* the "Deluxe" package (50MB RAM) and probably *a lot* higher for a production game. This host is *not* recommended for Evennia.| | [Host1Plus][5] | VPS & Cloud | $4/month | $4-$8/month depending on length of sign-up period. | [Scaleway][6] | Cloud | €3/month / on-demand | EU based (Paris, Amsterdam). Smallest option provides 2GB RAM. | | [Prgmr][10] | VPS | $5/month | 1 month free with a year prepay. You likely want some experience with servers with this option as they don't have a lot of support.| | [Linode][11] | Cloud | $5/month / on-demand | Multiple regions. Smallest option provides 1GB RAM| -*Please help us expand this list.* +*Please help us expand this list.* [1]: https://silvren.com [2]: https://www.digitalocean.com/pricing @@ -407,6 +409,8 @@ Evennia users: [9]: https://amazonlightsail.com [10]: https://prgmr.com/ [11]: https://www.linode.com/ +[12]: https://azure.microsoft.com/en-us/pricing/details/app-service/windows/ +[13]: https://activity.huaweicloud.com/intl/en-us/free_packages/index.html ## Cloud9 diff --git a/evennia/accounts/accounts.py b/evennia/accounts/accounts.py index a6d9fbefd8..ae4839a792 100644 --- a/evennia/accounts/accounts.py +++ b/evennia/accounts/accounts.py @@ -660,7 +660,7 @@ class DefaultAccount(AccountDB, metaclass=TypeclassBase): typeclass (str, optional): Typeclass to use for this character. If not given, use settings.BASE_CHARACTER_TYPECLASS. permissions (list, optional): If not given, use the account's permissions. - ip (str, optiona): The client IP creating this character. Will fall back to the + ip (str, optional): The client IP creating this character. Will fall back to the one stored for the account if not given. kwargs (any): Other kwargs will be used in the create_call. Returns: @@ -927,7 +927,7 @@ class DefaultAccount(AccountDB, metaclass=TypeclassBase): kwargs (any): Other keyword arguments will be added to the found command object instance as variables before it executes. This is unused by default Evennia but may be - used to set flags and change operating paramaters for + used to set flags and change operating parameters for commands at run-time. """ @@ -1307,7 +1307,7 @@ class DefaultAccount(AccountDB, metaclass=TypeclassBase): self._send_to_connect_channel(_("|G{key} connected|n").format(key=self.key)) if _MULTISESSION_MODE == 0: # in this mode we should have only one character available. We - # try to auto-connect to our last conneted object, if any + # try to auto-connect to our last connected object, if any try: self.puppet_object(session, self.db._last_puppet) except RuntimeError: @@ -1334,7 +1334,7 @@ class DefaultAccount(AccountDB, metaclass=TypeclassBase): """ Called by the login process if a user account is targeted correctly but provided with an invalid password. By default it does nothing, - but exists to be overriden. + but exists to be overridden. Args: session (session): Session logging in. @@ -1574,7 +1574,7 @@ class DefaultGuest(DefaultAccount): Gets or creates a Guest account object. Keyword Args: - ip (str, optional): IP address of requestor; used for ban checking, + ip (str, optional): IP address of requester; used for ban checking, throttling and logging Returns: diff --git a/evennia/commands/default/building.py b/evennia/commands/default/building.py index 41ef42024d..52ea53e700 100644 --- a/evennia/commands/default/building.py +++ b/evennia/commands/default/building.py @@ -1061,7 +1061,7 @@ class CmdTunnel(COMMAND_DEFAULT_CLASS): exitname, backshort = self.directions[exitshort] backname = self.directions[backshort][0] - # if we recieved a typeclass for the exit, add it to the alias(short name) + # if we received a typeclass for the exit, add it to the alias(short name) if ":" in self.lhs: # limit to only the first : character exit_typeclass = ":" + self.lhs.split(":", 1)[-1] @@ -1647,7 +1647,7 @@ class CmdSetAttribute(ObjManipCommand): def split_nested_attr(self, attr): """ Yields tuples of (possible attr name, nested keys on that attr). - For performance, this is biased to the deepest match, but allows compatability + For performance, this is biased to the deepest match, but allows compatibility with older attrs that might have been named with `[]`'s. > list(split_nested_attr("nested['asdf'][0]")) @@ -3491,7 +3491,7 @@ class CmdSpawn(COMMAND_DEFAULT_CLASS): ) return try: - # we homogenize the protoype first, to be more lenient with free-form + # we homogenize the prototype first, to be more lenient with free-form protlib.validate_prototype(protlib.homogenize_prototype(prototype)) except RuntimeError as err: self.caller.msg(str(err)) diff --git a/evennia/commands/default/comms.py b/evennia/commands/default/comms.py index e6057cdc4b..4d6c53837a 100644 --- a/evennia/commands/default/comms.py +++ b/evennia/commands/default/comms.py @@ -1261,7 +1261,7 @@ class CmdRSS2Chan(COMMAND_DEFAULT_CLASS): class CmdGrapevine2Chan(COMMAND_DEFAULT_CLASS): """ - Link an Evennia channel to an exteral Grapevine channel + Link an Evennia channel to an external Grapevine channel Usage: grapevine2chan[/switches] = diff --git a/evennia/commands/default/help.py b/evennia/commands/default/help.py index 0cd74428c3..0d5b4eee5f 100644 --- a/evennia/commands/default/help.py +++ b/evennia/commands/default/help.py @@ -85,7 +85,7 @@ class CmdHelp(COMMAND_DEFAULT_CLASS): def format_help_entry(title, help_text, aliases=None, suggested=None): """ This visually formats the help entry. - This method can be overriden to customize the way a help + This method can be overridden to customize the way a help entry is displayed. Args: diff --git a/evennia/commands/default/tests.py b/evennia/commands/default/tests.py index c7a57c6ba9..b6e18353a2 100644 --- a/evennia/commands/default/tests.py +++ b/evennia/commands/default/tests.py @@ -181,9 +181,24 @@ class TestGeneral(CommandTest): rid = self.room1.id self.call(general.CmdLook(), "here", "Room(#{})\nroom_desc".format(rid)) + def test_look_no_location(self): + self.char1.location = None + self.call(general.CmdLook(), "", "You have no location to look at!") + + def test_look_nonexisting(self): + self.call(general.CmdLook(), "yellow sign", "Could not find 'yellow sign'.") + def test_home(self): self.call(general.CmdHome(), "", "You are already home") + def test_go_home(self): + self.call(building.CmdTeleport(), "/quiet Room2") + self.call(general.CmdHome(), "", "There's no place like home") + + def test_no_home(self): + self.char1.home = None + self.call(general.CmdHome(), "", "You have no home") + def test_inventory(self): self.call(general.CmdInventory(), "", "You are not carrying anything.") @@ -213,6 +228,12 @@ class TestGeneral(CommandTest): self.assertEqual(None, self.char1.account.nicks.get("testalias", category="account")) self.assertEqual("testaliasedstring3", self.char1.nicks.get("testalias", category="object")) + def test_nick_list(self): + self.call(general.CmdNick(), "/list", "No nicks defined.") + self.call(general.CmdNick(), "test1 = Hello", + "Inputline-nick 'test1' mapped to 'Hello'.") + self.call(general.CmdNick(), "/list", "Defined Nicks:") + def test_get_and_drop(self): self.call(general.CmdGet(), "Obj", "You pick up Obj.") self.call(general.CmdDrop(), "Obj", "You drop Obj.") diff --git a/evennia/game_template/world/README.md b/evennia/game_template/world/README.md index 0f3862dad4..0e4a2fe18f 100644 --- a/evennia/game_template/world/README.md +++ b/evennia/game_template/world/README.md @@ -1,6 +1,6 @@ # world/ -This folder is meant as a miscellanous folder for all that other stuff +This folder is meant as a miscellaneous folder for all that other stuff related to the game. Code which are not commands or typeclasses go here, like custom economy systems, combat code, batch-files etc. diff --git a/evennia/game_template/world/prototypes.py b/evennia/game_template/world/prototypes.py index 04aba091f3..8a05ed5f6c 100644 --- a/evennia/game_template/world/prototypes.py +++ b/evennia/game_template/world/prototypes.py @@ -28,7 +28,7 @@ Possible keywords are: - `prototype_key` - the name of the prototype. This is required for db-prototypes, for module-prototypes, the global variable name of the dict is used instead - `prototype_parent` - string pointing to parent prototype if any. Prototype inherits - in a similar way as classes, with children overriding values in their partents. + in a similar way as classes, with children overriding values in their parents. - `key` - string, the main object identifier. - `typeclass` - string, if not set, will use `settings.BASE_OBJECT_TYPECLASS`. - `location` - this should be a valid object or #dbref. @@ -42,7 +42,7 @@ Possible keywords are: of the shorter forms, defaults are used for the rest. - `tags` - Tags, as a list of tuples `(tag,)`, `(tag, category)` or `(tag, category, data)`. - Any other keywords are interpreted as Attributes with no category or lock. - These will internally be added to `attrs` (eqivalent to `(attrname, value)`. + These will internally be added to `attrs` (equivalent to `(attrname, value)`. See the `spawn` command and `evennia.prototypes.spawner.spawn` for more info. diff --git a/evennia/prototypes/tests.py b/evennia/prototypes/tests.py index 026786d547..145729c950 100644 --- a/evennia/prototypes/tests.py +++ b/evennia/prototypes/tests.py @@ -7,7 +7,7 @@ from random import randint, sample import mock import uuid from time import time -from anything import Something +from anything import Something, Anything from django.test.utils import override_settings from evennia.utils.test_resources import EvenniaTest from evennia.utils.tests.test_evmenu import TestEvMenu @@ -363,7 +363,7 @@ class TestProtFuncs(EvenniaTest): ) self.assertEqual( protlib.protfunc_parser("$right_justify( foo )", testing=True), - ("unexpected indent (, line 1)", " foo"), + (Anything, " foo"), ) test_prot = {"key1": "value1", "key2": 2} diff --git a/evennia/server/sessionhandler.py b/evennia/server/sessionhandler.py index 9b78fc3378..5e407f65ca 100644 --- a/evennia/server/sessionhandler.py +++ b/evennia/server/sessionhandler.py @@ -58,7 +58,7 @@ SSHUTD = chr(7) # server shutdown SSYNC = chr(8) # server session sync SCONN = chr(11) # server portal connection (for bots) PCONNSYNC = chr(12) # portal post-syncing session -PDISCONNALL = chr(13) # portal session discnnect all +PDISCONNALL = chr(13) # portal session disconnect all SRELOAD = chr(14) # server reloading (have portal start a new server) SSTART = chr(15) # server start (portal must already be running anyway) PSHUTD = chr(16) # portal (+server) shutdown @@ -679,7 +679,7 @@ class ServerSessionHandler(SessionHandler): Get a unique list of connected and logged-in Accounts. Returns: - accounts (list): All conected Accounts (which may be fewer than the + accounts (list): All connected Accounts (which may be fewer than the amount of Sessions due to multi-playing). """ diff --git a/evennia/server/signals.py b/evennia/server/signals.py index 5527fe425d..2e0e314d45 100644 --- a/evennia/server/signals.py +++ b/evennia/server/signals.py @@ -27,45 +27,45 @@ from django.dispatch import Signal # Account.create() after the Account is created. Note that this will *not* fire # if calling create.create_account alone, since going through the Account.create() # is the most expected route. -SIGNAL_ACCOUNT_POST_CREATE = Signal(providing_args=["ip"]) +SIGNAL_ACCOUNT_POST_CREATE = Signal() # The Sender is the renamed Account. This is triggered by the username setter in AccountDB. -SIGNAL_ACCOUNT_POST_RENAME = Signal(providing_args=["old_name", "new_name"]) +SIGNAL_ACCOUNT_POST_RENAME = Signal() # The Sender is the connecting Account. This is triggered when an Account connects cold; # that is, it had no other sessions connected. -SIGNAL_ACCOUNT_POST_FIRST_LOGIN = Signal(providing_args=["session"]) +SIGNAL_ACCOUNT_POST_FIRST_LOGIN = Signal() # The sender is the connecting Account. This is triggered whenever a session authenticates # to an Account regardless of existing sessions. It then firest after FIRST_LOGIN signal -SIGNAL_ACCOUNT_POST_LOGIN = Signal(providing_args=["session"]) +SIGNAL_ACCOUNT_POST_LOGIN = Signal() # The Sender is the Account attempting to authenticate. This is triggered whenever a # session tries to login to an Account but fails. -SIGNAL_ACCOUNT_POST_LOGIN_FAIL = Signal(providing_args=["session"]) +SIGNAL_ACCOUNT_POST_LOGIN_FAIL = Signal() # The sender is the disconnecting Account. This is triggered whenever a session disconnects # from the account, regardless of how many it started with or remain. -SIGNAL_ACCOUNT_POST_LOGOUT = Signal(providing_args=["session"]) +SIGNAL_ACCOUNT_POST_LOGOUT = Signal() # The sender is the Account. This is triggered when an Account's final session disconnects. -SIGNAL_ACCOUNT_POST_LAST_LOGOUT = Signal(providing_args=["session"]) +SIGNAL_ACCOUNT_POST_LAST_LOGOUT = Signal() # The sender is an Object. This is triggered when Object has been created, after all hooks. SIGNAL_OBJECT_POST_CREATE = Signal() # The sender is the Object being puppeted. This is triggered after all puppeting hooks have # been called. The Object has already been puppeted by this point. -SIGNAL_OBJECT_POST_PUPPET = Signal(providing_args=["session", "account"]) +SIGNAL_OBJECT_POST_PUPPET = Signal() # The sender is the Object being released. This is triggered after all hooks are called. # The Object is no longer puppeted by this point. -SIGNAL_OBJECT_POST_UNPUPPET = Signal(providing_args=["session", "account"]) +SIGNAL_OBJECT_POST_UNPUPPET = Signal() # The sender is the Typed Object being renamed. This isn't necessarily an Object; # it could be a script. It fires whenever the value of the Typed object's 'key' # changes. Will need to use isinstance() or other filtering on things that use this. -SIGNAL_TYPED_OBJECT_POST_RENAME = Signal(providing_args=["old_key", "new_key"]) +SIGNAL_TYPED_OBJECT_POST_RENAME = Signal() # The sender is the created Script. This is called after the Script was first created, # after all hooks. diff --git a/evennia/utils/dbserialize.py b/evennia/utils/dbserialize.py index 1e12f865fb..be5fcbdde5 100644 --- a/evennia/utils/dbserialize.py +++ b/evennia/utils/dbserialize.py @@ -19,8 +19,8 @@ be out of sync with the database. """ from functools import update_wrapper -from collections import defaultdict, MutableSequence, MutableSet, MutableMapping -from collections import OrderedDict, deque +from collections import deque, OrderedDict, defaultdict +from collections.abc import MutableSequence, MutableSet, MutableMapping try: from pickle import dumps, loads @@ -391,7 +391,7 @@ class _SaverDeque(_SaverMutable): @_save def rotate(self, *args): self._data.rotate(*args) - + @_save def remove(self, *args): self._data.remove(*args) diff --git a/evennia/utils/evmore.py b/evennia/utils/evmore.py index 94b9689688..fc31555a20 100644 --- a/evennia/utils/evmore.py +++ b/evennia/utils/evmore.py @@ -173,7 +173,7 @@ class EvMore: justify (bool, optional): If set, auto-justify long lines. This must be turned off for fixed-width or formatted output, like tables. It's force-disabled if `inp` is an EvTable. - justify_kwargs (dict, optional): Keywords for the justifiy function. Used only + justify_kwargs (dict, optional): Keywords for the justify function. Used only if `justify` is True. If this is not set, default arguments will be used. exit_on_lastpage (bool, optional): If reaching the last page without the page being completely filled, exit pager immediately. If unset, @@ -518,7 +518,7 @@ class EvMore: def page_formatter(self, page): """ Page formatter. Every page passes through this method. Override - it to customize behvaior per-page. A common use is to generate a new + it to customize behavior per-page. A common use is to generate a new EvTable for every page (this is more efficient than to generate one huge EvTable across many pages and feed it into EvMore all at once). diff --git a/evennia/utils/utils.py b/evennia/utils/utils.py index 4aadc02768..7c2f2210e6 100644 --- a/evennia/utils/utils.py +++ b/evennia/utils/utils.py @@ -785,7 +785,7 @@ def latinify(string, default="?", pure_ascii=False): This is used as a last resort when normal encoding does not work. Arguments: - string (str): A string to convert to 'safe characters' convertable + string (str): A string to convert to 'safe characters' convertible to an latin-1 bytestring later. default (str, optional): Characters resisting mapping will be replaced with this character or string. The intent is to apply an encode operation @@ -1050,7 +1050,7 @@ def delay(timedelay, callback, *args, **kwargs): Keep in mind that persistent tasks arguments and callback should not use memory references. If persistent is set to True the delay function will return an int - which is the task's id itended for use with TASK_HANDLER's do_task + which is the task's id intended for use with TASK_HANDLER's do_task and remove methods. All persistent tasks whose time delays have passed will be called on server startup. @@ -1430,12 +1430,12 @@ def class_from_module(path, defaultpaths=None, fallback=None): defaultpaths (iterable, optional): If a direct import from `path` fails, try subsequent imports by prepending those paths to `path`. fallback (str): If all other attempts fail, use this path as a fallback. - This is intended as a last-resport. In the example of Evennia + This is intended as a last-resort. In the example of Evennia loading, this would be a path to a default parent class in the evennia repo itself. Returns: - class (Class): An uninstatiated class recovered from path. + class (Class): An uninstantiated class recovered from path. Raises: ImportError: If all loading failed. @@ -1574,7 +1574,7 @@ def string_partial_matching(alternatives, inp, ret_index=True): Matching is made from the start of each subword in each alternative. Case is not important. So e.g. "bi sh sw" or just "big" or "shiny" or "sw" will match "Big shiny sword". Scoring is - done to allow to separate by most common demoninator. You will get + done to allow to separate by most common denominator. You will get multiple matches returned if appropriate. Args: @@ -1647,7 +1647,7 @@ def format_table(table, extra_space=1): :: ftable = format_table([[...], [...], ...]) - for ir, row in enumarate(ftable): + for ir, row in enumerate(ftable): if ir == 0: # make first row white string += "\\\\n|w" + ""join(row) + "|n" @@ -2045,7 +2045,7 @@ def get_all_typeclasses(parent=None): typeclasses (dict): On the form {"typeclass.path": typeclass, ...} Notes: - This will dynamicall retrieve all abstract django models inheriting at any distance + This will dynamically retrieve all abstract django models inheriting at any distance from the TypedObject base (aka a Typeclass) so it will work fine with any custom classes being added.