diff --git a/evennia/contrib/game_systems/gendersub/gendersub.py b/evennia/contrib/game_systems/gendersub/gendersub.py index d7fda80e1d..0558cde9d6 100644 --- a/evennia/contrib/game_systems/gendersub/gendersub.py +++ b/evennia/contrib/game_systems/gendersub/gendersub.py @@ -147,13 +147,17 @@ class GenderCharacter(DefaultCharacter): super().msg(from_obj=from_obj, session=session, **kwargs) return - try: - if text and isinstance(text, tuple): - text = (_RE_GENDER_PRONOUN.sub(self._get_pronoun, text[0]), *text[1:]) - else: - text = _RE_GENDER_PRONOUN.sub(self._get_pronoun, text) - except TypeError: - pass - except Exception as e: - logger.log_trace(e) + gender_source = from_obj if from_obj else self + + if hasattr(gender_source, "_get_pronoun"): + try: + if text and isinstance(text, tuple): + text = (_RE_GENDER_PRONOUN.sub(gender_source._get_pronoun, text[0]), *text[1:]) + else: + text = _RE_GENDER_PRONOUN.sub(gender_source._get_pronoun, text) + except TypeError: + pass + except Exception as e: + logger.log_trace(e) + super().msg(text, from_obj=from_obj, session=session, **kwargs) diff --git a/evennia/contrib/game_systems/gendersub/tests.py b/evennia/contrib/game_systems/gendersub/tests.py index c50e2d6e83..ac5ff29514 100644 --- a/evennia/contrib/game_systems/gendersub/tests.py +++ b/evennia/contrib/game_systems/gendersub/tests.py @@ -28,5 +28,29 @@ class TestGenderSub(BaseEvenniaCommandTest): "evennia.contrib.game_systems.gendersub.gendersub.DefaultCharacter.msg" ) as mock_msg: char.db.gender = "female" - char.msg("Test |p gender") + char.msg(txt) mock_msg.assert_called_with("Test her gender", from_obj=None, session=None) + + def test_gendering_others(self): + """ensure characters see the gender of the sender, not themselves""" + fem = create_object( + gendersub.GenderCharacter, + key="Gendered", + location=self.room2, + attributes=[("gender", "female")], + ) + masc = create_object( + gendersub.GenderCharacter, + key="Gendered", + location=self.room2, + attributes=[("gender", "male")], + ) + txt = "Test |p gender" + + with patch( + "evennia.contrib.game_systems.gendersub.gendersub.DefaultCharacter.msg" + ) as mock_msg: + fem.msg(txt, from_obj=masc) + self.assertIn("Test his gender", mock_msg.call_args.args) + masc.msg(txt, from_obj=fem) + self.assertIn("Test her gender", mock_msg.call_args.args)