From 867b8c68cf0976b195f1fd510da13a1c2cc61e7d Mon Sep 17 00:00:00 2001 From: Griatch Date: Mon, 30 Jun 2025 17:10:52 +0200 Subject: [PATCH] Update Changelog and contrib docs --- CHANGELOG.md | 2 + docs/source/Coding/Changelog.md | 70 +++++++--- docs/source/Concepts/Messagepath.md | 2 +- docs/source/Contribs/Contrib-Debugpy.md | 121 ++++++++++++++++++ docs/source/Contribs/Contribs-Overview.md | 30 +++-- .../api/evennia.contrib.utils.debugpy.cmd.md | 10 ++ .../api/evennia.contrib.utils.debugpy.md | 17 +++ docs/source/api/evennia.contrib.utils.md | 1 + 8 files changed, 226 insertions(+), 27 deletions(-) create mode 100644 docs/source/Contribs/Contrib-Debugpy.md create mode 100644 docs/source/api/evennia.contrib.utils.debugpy.cmd.md create mode 100644 docs/source/api/evennia.contrib.utils.debugpy.md diff --git a/CHANGELOG.md b/CHANGELOG.md index 5f50bd0ca6..c614ddd8d9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -52,6 +52,7 @@ This upgrade requires running `evennia migrate` on your existing database since otherwise plurals were lost (jaborsh) - [Fix][issue3788]: `GLOBAL_SCRIPTS.all()` raised error (Griatch) - [Fix][issue3790]: Fix migration issue due to new db init-check code in launcher (Griatch) +- [Fix][issue3794]: Make sure to pass `move_type` kwarg to `at_pre_object_receive|leave` hooks (Griatch) - Fix: `options` setting `NOPROMPTGOAHEAD` was not possible to set (Griatch) - Fix: Make `\\` properly preserve one backlash in funcparser (Griatch) - Fix: The testing 'echo' inputfunc didn't work correctly; now returns both args/kwargs (Griatch) @@ -90,6 +91,7 @@ This upgrade requires running `evennia migrate` on your existing database [pull3768]: https://github.com/evennia/evennia/pull/3768 [pull3783]: https://github.com/evennia/evennia/pull/3783 [pull3777]: https://github.com/evennia/evennia/pull/3777 +[pull3794]: https://github.com/evennia/evennia/pull/3794 [issue3688]: https://github.com/evennia/evennia/issues/3688 [issue3687]: https://github.com/evennia/evennia/issues/3687 [issue3788]: https://github.com/evennia/evennia/issues/3788 diff --git a/docs/source/Coding/Changelog.md b/docs/source/Coding/Changelog.md index 4ee241282c..c614ddd8d9 100644 --- a/docs/source/Coding/Changelog.md +++ b/docs/source/Coding/Changelog.md @@ -2,19 +2,27 @@ ## Main branch -Updated dependencies: Twisted >24 (<25). Python 3.10, 3.11, 3.12, 3.13. Will -drop 3.10 support as part of next major release. +Updated dependencies: Django >5.1 (<5,2), Twisted >24 (<25). +Python versions: 3.11, 3.12, 3.13. +This upgrade requires running `evennia migrate` on your existing database +(ignore any prompts to run `evennia makemigrations`). + +- Feat (backwards incompatible): RUN MIGRATIONS (`evennia migrate`): Now requiring Django 5.1 (Griatch) +- Feat (backwards incompatible): Drop support and testing for Python 3.10 (Griatch) - [Feat][pull3719]: Support Python 3.13. (0xDEADFED5) - [Feat][pull3633]: Default object's default descs are now taken from a `default_description` class variable instead of the `desc` Attribute always being set (count-infinity) - [Feat][pull3718]: Remove twistd.bat creation for Windows, should not be needed anymore (0xDEADFED5) +- [Feat][pull3756]: Updated German translation (JohnFi) +- [Feat][pull3757]: Add more i18n strings to `DefaultObject` for easier translation (JohnFi) +- [Feat][pull3783]: Support users of `ruff` linter by adding compatible config in `pyproject.toml` (jaborsh) +- [Feat][pull3777]: New contrib `debugpy` for debugging Evennia with in VSCode with `debugpy` adapter (electroglyph) - [Fix][pull3677]: Make sure that `DefaultAccount.create` normalizes to empty strings instead of `None` if no name is provided, also enforce string type (InspectorCaracal) - [Fix][pull3682]: Allow in-game help searching for commands natively starting with `*` (which is the Lunr search wildcard) (count-infinity) -- [Fix][pull3684]: Web client stopped auto-focusing the input box after opening - settings (count-infinity) +- [Fix][pull3684]: Web client stopped auto-focusing the input box after opening settings (count-infinity) - [Fix][pull3689]: Partial matching fix in default search, makes sure e.g. `b sw` uniquely finds `big sword` even if another type of sword is around (InspectorCaracal) - [Fix][pull3690]: In searches, allow special 'here' and 'me' keywords only be valid queries @@ -28,15 +36,31 @@ drop 3.10 support as part of next major release. a performance hit for loading cmdsets in rooms with a lot of objects (InspectorCaracal) - [Fix][issue3688]: Made TutorialWorld possible to build cleanly without being a superuser (Griatch) - [Fix][issue3687]: Fixed batchcommand/interactive with developer perms (Griatch) -- [Fix][issue3723]: Bug in `ingame-map-display` contrib when using ordinal alises (aMiss-aWry) -- [Fix][issue3726]: Fix Twisted v25 issue with returnValue() -- [Fix][issue3729]: Godot client text2bbcode mxp link conversion error (ChrisLR) +- [Fix][pull3723]: Bug in `ingame-map-display` contrib when using ordinal alises (aMiss-aWry) +- [Fix][pull3726]: Fix Twisted v25 issue with returnValue() +- [Fix][pull3729]: Godot client text2bbcode mxp link conversion error (ChrisLR) +- [Fix][pull3737]: The `evennia --gamedir` command didn't properly set the alt gamedir (Russel-Jones) +- [Fix][pull3739]: Fixing f-string in account.py for i18n (JohnFi) +- [Fix][pull3744]: Fix for format strings not getting picked up in i18n (JohnFi) +- [Fix][pull3743]: Log full stack trace on failed object creation (aMiss-aWry) +- [Fix][pull3747]: TutorialWorld bridge-room didn't correctly randomize weather effects (SpyrosRoum) +- [Fix][pull3765]: Storing TickerHandler `store_key` in a db attribute would not + work correctly (0xDEADFED5) +- [Fix][pull3753]: Make sure `AttributeProperty`s are initialized with default values also in parent class (JohnFi) +- [Fix][pull3751]: The `access` and `inventory` commands would traceback if run on a character without an Account (EliasWatson) +- [Fix][pull3768]: Make sure the `CmdCopy` command copies object categories, + since otherwise plurals were lost (jaborsh) +- [Fix][issue3788]: `GLOBAL_SCRIPTS.all()` raised error (Griatch) +- [Fix][issue3790]: Fix migration issue due to new db init-check code in launcher (Griatch) +- [Fix][issue3794]: Make sure to pass `move_type` kwarg to `at_pre_object_receive|leave` hooks (Griatch) +- Fix: `options` setting `NOPROMPTGOAHEAD` was not possible to set (Griatch) - Fix: Make `\\` properly preserve one backlash in funcparser (Griatch) +- Fix: The testing 'echo' inputfunc didn't work correctly; now returns both args/kwargs (Griatch) - Fix: When an object was used as an On-Demand Task's category, and that object was then deleted, it caused an OnDemandHandler save error on reload. Will now clean up on save. (Griatch) used as the task's category (Griatch) -- [Docs]: Fixes from InspectorCaracal, Griatch, ChrisLR - +- Fix: Correct aws contrib's use of legacy django string utils (Griatch) +- [Docs]: Fixes from InspectorCaracal, Griatch, ChrisLR, JohnFi, 0xDEADFED5, jaborsh, Problematic, BlaneWins [pull3633]: https://github.com/evennia/evennia/pull/3633 [pull3677]: https://github.com/evennia/evennia/pull/3677 @@ -54,8 +78,24 @@ drop 3.10 support as part of next major release. [pull3723]: https://github.com/evennia/evennia/pull/3723 [pull3726]: https://github.com/evennia/evennia/pull/3726 [pull3729]: https://github.com/evennia/evennia/pull/3729 +[pull3737]: https://github.com/evennia/evennia/pull/3737 +[pull3739]: https://github.com/evennia/evennia/pull/3739 +[pull3743]: https://github.com/evennia/evennia/pull/3743 +[pull3744]: https://github.com/evennia/evennia/pull/3744 +[pull3747]: https://github.com/evennia/evennia/pull/3747 +[pull3765]: https://github.com/evennia/evennia/pull/3765 +[pull3753]: https://github.com/evennia/evennia/pull/3753 +[pull3751]: https://github.com/evennia/evennia/pull/3751 +[pull3756]: https://github.com/evennia/evennia/pull/3756 +[pull3757]: https://github.com/evennia/evennia/pull/3757 +[pull3768]: https://github.com/evennia/evennia/pull/3768 +[pull3783]: https://github.com/evennia/evennia/pull/3783 +[pull3777]: https://github.com/evennia/evennia/pull/3777 +[pull3794]: https://github.com/evennia/evennia/pull/3794 [issue3688]: https://github.com/evennia/evennia/issues/3688 -[issue3688]: https://github.com/evennia/evennia/issues/3687 +[issue3687]: https://github.com/evennia/evennia/issues/3687 +[issue3788]: https://github.com/evennia/evennia/issues/3788 +[issue3790]: https://github.com/evennia/evennia/issues/3790 @@ -190,7 +230,6 @@ did not add it to the handler's object (Griatch) [issue3620]: https://github.com/evennia/evennia/issues/3620 [issue3616]: https://github.com/evennia/evennia/issues/3616 [pull3595]: https://github.com/evennia/evennia/pull/3595 -[pull3595]: https://github.com/evennia/evennia/pull/3595 [pull3533]: https://github.com/evennia/evennia/pull/3533 [pull3594]: https://github.com/evennia/evennia/pull/3594 [pull3592]: https://github.com/evennia/evennia/pull/3592 @@ -223,15 +262,12 @@ underline reset, italic/reset and strikethrough/reset (0xDEADFED5) of local search on multimatch (InspectorCaracal) - [Fix][pull3585]: `TagCmd.switch_options` was misnamed (erratic-pattern) - [Fix][pull3580]: Fix typo that made `find/loc` show the wrong dbref in result (erratic-pattern) -- [Fix][pull3571]: Issue disambiguating between certain partial multimatches - (InspectorCaracal) - [Fix][pull3589]: Fix regex escaping in `utils.py` for future Python versions (hhsiao) - [Docs]: Add True-color description for Colors documentation (0xDEADFED5) - [Docs]: Doc fixes (Griatch, InspectorCaracal, 0xDEADFED5) [pull3585]: https://github.com/evennia/evennia/pull/3585 [pull3580]: https://github.com/evennia/evennia/pull/3580 -[pull3571]: https://github.com/evennia/evennia/pull/3571 [pull3586]: https://github.com/evennia/evennia/pull/3586 [pull3550]: https://github.com/evennia/evennia/pull/3550 [pull3531]: https://github.com/evennia/evennia/pull/3531 @@ -1328,7 +1364,7 @@ without arguments starts a full interactive Python console. - `VALIDATOR_FUNC_MODULES` - (general) text validator functions, for verifying an input is on a specific form. -### Utils +### Utilities - `evennia` launcher now fully handles all django-admin commands, like running tests in parallel. - `evennia.utils.create.account` now also takes `tags` and `attrs` keywords. @@ -1351,7 +1387,7 @@ without arguments starts a full interactive Python console. - Option Classes added to make storing user-options easier and smoother. - `evennia.VALIDATOR_CONTAINER` and `evennia.OPTION_CONTAINER` added to load these. -### Contribs +### New Contribs - Evscaperoom - a full puzzle engine for making multiplayer escape rooms in Evennia. Used to make the entry for the MUD-Coder's Guild's 2019 Game Jam with the theme "One Room", where it ranked #1. @@ -1475,7 +1511,7 @@ without arguments starts a full interactive Python console. - Removed the enforcing of `MAX_NR_CHARACTERS=1` for `MULTISESSION_MODE` `0` and `1` by default. - Add `evennia.utils.logger.log_sec` for logging security-related messages (marked SS in log). -### Contribs +### More Contribs - `Auditing` (Johnny): Log and filter server input/output for security purposes - `Build Menu` (vincent-lg): New @edit command to edit object properties in a menu. diff --git a/docs/source/Concepts/Messagepath.md b/docs/source/Concepts/Messagepath.md index 49047b9ae7..02f46da3a5 100644 --- a/docs/source/Concepts/Messagepath.md +++ b/docs/source/Concepts/Messagepath.md @@ -43,7 +43,7 @@ For the `look`-command (and anything else written by the player), the `text` `co ### Inputfuncs -On the Evennia server side, a list of [inputfuncs](Inputfuncs) are registered. You can add your own by extending `settings.INPUT_FUNC_MODULES`. +On the Evennia server side, a list of [inputfuncs](../Components/Inputfuncs.md) are registered. You can add your own by extending `settings.INPUT_FUNC_MODULES`. ```python inputfunc_commandname(session, *args, **kwargs) diff --git a/docs/source/Contribs/Contrib-Debugpy.md b/docs/source/Contribs/Contrib-Debugpy.md new file mode 100644 index 0000000000..24ad91e149 --- /dev/null +++ b/docs/source/Contribs/Contrib-Debugpy.md @@ -0,0 +1,121 @@ +# DebugPy VSCode debugger integration + +Contribution by electroglyph, 2025 + +This registers an in-game command `debugpy` which starts the debugpy debugger and listens on port 5678. +For now this is only available for Visual Studio Code (VS Code). + +If you are a JetBrains PyCharm user and would like to use this, make some noise at: +https://youtrack.jetbrains.com/issue/PY-63403/Support-debugpy + + +Credit for this goes to Moony on the Evennia Discord getting-help channel, thx Moony! + + +## Installation + +This requires VS Code and debugpy, so make sure you're using VS Code. + +From the venv where you installed Evennia run: + +`pip install debugpy` + +### Enable the command in Evennia + +In your Evennia mygame folder, open up `/commands/default_cmdsets.py` + +add `from evennia.contrib.utils.debugpy import CmdDebugPy` somewhere near the top. + +in `CharacterCmdSet.at_cmdset_creation` add this under `super().at_cmdset_creation()`: + +`self.add(CmdDebugPy)` + + +### Add "remote attach" option to VS Code debugger + +Start VS Code and open your launch.json like this: + +![screenshot](./vscode.png) + +Add this to your configuration: + +```json + { + "name": "Python Debugger: Remote Attach", + "justMyCode": false, + "type": "debugpy", + "request": "attach", + "connect": { + "host": "127.0.0.1", + "port": 5678 + }, + "pathMappings": [ + { + "localRoot": "${workspaceFolder}", + "remoteRoot": "${workspaceFolder}" + } + ] + }, +``` + +Use `127.0.0.1` for the host if you are running Evennia from the same machine you'll be debugging from. Otherwise, if you want to debug a remote server, change host (and possibly remoteRoot mapping) as necessary. + +Afterwards it should look something like this: + +```json +{ + // Use IntelliSense to learn about possible attributes. + // Hover to view descriptions of existing attributes. + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + { + "name": "Python Debugger: Current File", + "type": "debugpy", + "request": "launch", + "program": "${file}", + "console": "integratedTerminal", + }, + { + "name": "Python Debugger: Remote Attach", + "justMyCode": false, + "type": "debugpy", + "request": "attach", + "connect": { + "host": "127.0.0.1", + "port": 5678 + }, + "pathMappings": [ + { + "localRoot": "${workspaceFolder}", + "remoteRoot": "${workspaceFolder}" + } + ] + }, + ] +} +``` + +(notice the comma between the curly braces) + +## Usage + +Set a breakpoint in VS Code where you want the debugger to stop at. + +In Evennia run `debugpy` command. + +You should see "Waiting for debugger attach..." + +Back in VS Code attach the debugger: + +![screenshot](./attach.png) + +Back in Evennia you should see "Debugger attached." + +Now trigger the breakpoint you set and you'll be using a nice graphical debugger. + + +---- + +This document page is generated from `evennia/contrib/utils/debugpy/README.md`. Changes to this +file will be overwritten, so edit that file rather than this one. diff --git a/docs/source/Contribs/Contribs-Overview.md b/docs/source/Contribs/Contribs-Overview.md index 232284616e..0f40423933 100644 --- a/docs/source/Contribs/Contribs-Overview.md +++ b/docs/source/Contribs/Contribs-Overview.md @@ -7,7 +7,7 @@ in the [Community Contribs & Snippets][forum] forum. _Contribs_ are optional code snippets and systems contributed by the Evennia community. They vary in size and complexity and may be more specific about game types and styles than 'core' Evennia. -This page is auto-generated and summarizes all **52** contribs currently included +This page is auto-generated and summarizes all **53** contribs currently included with the Evennia distribution. All contrib categories are imported from `evennia.contrib`, such as @@ -32,14 +32,14 @@ If you want to add a contrib, see [the contrib guidelines](./Contribs-Guidelines | [achievements](#achievements) | [auditing](#auditing) | [awsstorage](#awsstorage) | [barter](#barter) | [batchprocessor](#batchprocessor) | | [bodyfunctions](#bodyfunctions) | [buffs](#buffs) | [building_menu](#building_menu) | [character_creator](#character_creator) | [clothing](#clothing) | | [color_markups](#color_markups) | [components](#components) | [containers](#containers) | [cooldowns](#cooldowns) | [crafting](#crafting) | -| [custom_gametime](#custom_gametime) | [dice](#dice) | [email_login](#email_login) | [evadventure](#evadventure) | [evscaperoom](#evscaperoom) | -| [extended_room](#extended_room) | [fieldfill](#fieldfill) | [gendersub](#gendersub) | [git_integration](#git_integration) | [godotwebsocket](#godotwebsocket) | -| [health_bar](#health_bar) | [ingame_map_display](#ingame_map_display) | [ingame_python](#ingame_python) | [ingame_reports](#ingame_reports) | [llm](#llm) | -| [mail](#mail) | [mapbuilder](#mapbuilder) | [menu_login](#menu_login) | [mirror](#mirror) | [multidescer](#multidescer) | -| [mux_comms_cmds](#mux_comms_cmds) | [name_generator](#name_generator) | [puzzles](#puzzles) | [random_string_generator](#random_string_generator) | [red_button](#red_button) | -| [rpsystem](#rpsystem) | [simpledoor](#simpledoor) | [slow_exit](#slow_exit) | [storage](#storage) | [talking_npc](#talking_npc) | -| [traits](#traits) | [tree_select](#tree_select) | [turnbattle](#turnbattle) | [tutorial_world](#tutorial_world) | [unixcommand](#unixcommand) | -| [wilderness](#wilderness) | [xyzgrid](#xyzgrid) | +| [custom_gametime](#custom_gametime) | [debugpy](#debugpy) | [dice](#dice) | [email_login](#email_login) | [evadventure](#evadventure) | +| [evscaperoom](#evscaperoom) | [extended_room](#extended_room) | [fieldfill](#fieldfill) | [gendersub](#gendersub) | [git_integration](#git_integration) | +| [godotwebsocket](#godotwebsocket) | [health_bar](#health_bar) | [ingame_map_display](#ingame_map_display) | [ingame_python](#ingame_python) | [ingame_reports](#ingame_reports) | +| [llm](#llm) | [mail](#mail) | [mapbuilder](#mapbuilder) | [menu_login](#menu_login) | [mirror](#mirror) | +| [multidescer](#multidescer) | [mux_comms_cmds](#mux_comms_cmds) | [name_generator](#name_generator) | [puzzles](#puzzles) | [random_string_generator](#random_string_generator) | +| [red_button](#red_button) | [rpsystem](#rpsystem) | [simpledoor](#simpledoor) | [slow_exit](#slow_exit) | [storage](#storage) | +| [talking_npc](#talking_npc) | [traits](#traits) | [tree_select](#tree_select) | [turnbattle](#turnbattle) | [tutorial_world](#tutorial_world) | +| [unixcommand](#unixcommand) | [wilderness](#wilderness) | [xyzgrid](#xyzgrid) | @@ -804,6 +804,7 @@ Contribs-Guidelines.md :maxdepth: 1 Contrib-Auditing.md +Contrib-Debugpy.md Contrib-Fieldfill.md Contrib-Git-Integration.md Contrib-Name-Generator.md @@ -824,6 +825,17 @@ quality assurance, post-incident investigations and debugging. +### `debugpy` + +_Contribution by electroglyph, 2025_ + +This registers an in-game command `debugpy` which starts the debugpy debugger and listens on port 5678. +For now this is only available for Visual Studio Code (VS Code). + +[Read the documentation](./Contrib-Debugpy.md) - [Browse the Code](evennia.contrib.utils.debugpy) + + + ### `fieldfill` _Contribution by Tim Ashley Jenkins, 2018_ diff --git a/docs/source/api/evennia.contrib.utils.debugpy.cmd.md b/docs/source/api/evennia.contrib.utils.debugpy.cmd.md new file mode 100644 index 0000000000..216dfa7f44 --- /dev/null +++ b/docs/source/api/evennia.contrib.utils.debugpy.cmd.md @@ -0,0 +1,10 @@ +```{eval-rst} +evennia.contrib.utils.debugpy.cmd +======================================== + +.. automodule:: evennia.contrib.utils.debugpy.cmd + :members: + :undoc-members: + :show-inheritance: + +``` \ No newline at end of file diff --git a/docs/source/api/evennia.contrib.utils.debugpy.md b/docs/source/api/evennia.contrib.utils.debugpy.md new file mode 100644 index 0000000000..5d6428a26c --- /dev/null +++ b/docs/source/api/evennia.contrib.utils.debugpy.md @@ -0,0 +1,17 @@ +```{eval-rst} +evennia.contrib.utils.debugpy +===================================== + +.. automodule:: evennia.contrib.utils.debugpy + :members: + :undoc-members: + :show-inheritance: + + + +.. toctree:: + :maxdepth: 6 + + evennia.contrib.utils.debugpy.cmd + +``` \ No newline at end of file diff --git a/docs/source/api/evennia.contrib.utils.md b/docs/source/api/evennia.contrib.utils.md index 3fa0e0af69..b2eb1a6d09 100644 --- a/docs/source/api/evennia.contrib.utils.md +++ b/docs/source/api/evennia.contrib.utils.md @@ -12,6 +12,7 @@ evennia.contrib.utils :maxdepth: 6 evennia.contrib.utils.auditing + evennia.contrib.utils.debugpy evennia.contrib.utils.fieldfill evennia.contrib.utils.git_integration evennia.contrib.utils.name_generator