mirror of
https://github.com/evennia/evennia.git
synced 2026-03-16 21:06:30 +01:00
add optional fallback string to emotes
This commit is contained in:
parent
5423ee238c
commit
5eac62fd4a
2 changed files with 31 additions and 4 deletions
|
|
@ -319,7 +319,7 @@ def parse_language(speaker, emote):
|
|||
return emote, mapping
|
||||
|
||||
|
||||
def parse_sdescs_and_recogs(sender, candidates, string, search_mode=False, case_sensitive=True):
|
||||
def parse_sdescs_and_recogs(sender, candidates, string, search_mode=False, case_sensitive=True, fallback=None):
|
||||
"""
|
||||
Read a raw emote and parse it into an intermediary
|
||||
format for distributing to all observers.
|
||||
|
|
@ -332,11 +332,13 @@ def parse_sdescs_and_recogs(sender, candidates, string, search_mode=False, case_
|
|||
string (str): The string (like an emote) we want to analyze for keywords.
|
||||
search_mode (bool, optional): If `True`, the "emote" is a query string
|
||||
we want to analyze. If so, the return value is changed.
|
||||
case_sensitive (bool, optional); If set, the case of /refs matter, so that
|
||||
case_sensitive (bool, optional): If set, the case of /refs matter, so that
|
||||
/tall will come out as 'tall man' while /Tall will become 'Tall man'.
|
||||
This allows for more grammatically correct emotes at the cost of being
|
||||
a little more to learn for players. If disabled, the original sdesc case
|
||||
is always kept and are inserted as-is.
|
||||
fallback (string, optional): If set, any references that don't match a target
|
||||
will be replaced with the fallback string.
|
||||
|
||||
Returns:
|
||||
(emote, mapping) (tuple): If `search_mode` is `False`
|
||||
|
|
@ -485,7 +487,11 @@ def parse_sdescs_and_recogs(sender, candidates, string, search_mode=False, case_
|
|||
# single-object search mode. Don't continue loop.
|
||||
break
|
||||
elif nmatches == 0:
|
||||
errors.append(_EMOTE_NOMATCH_ERROR.format(ref=marker_match.group()))
|
||||
if fallback:
|
||||
# replace unmatched reference with the fallback string
|
||||
string = f"{head}{fallback}{tail}"
|
||||
else:
|
||||
errors.append(_EMOTE_NOMATCH_ERROR.format(ref=marker_match.group()))
|
||||
elif nmatches == 1:
|
||||
# a unique match - parse into intermediary representation
|
||||
case = _get_case_ref(marker_match.group()) if case_sensitive else ""
|
||||
|
|
@ -560,9 +566,10 @@ def send_emote(sender, receivers, emote, msg_type="pose", anonymous_add="first",
|
|||
|
||||
"""
|
||||
case_sensitive = kwargs.pop("case_sensitive", True)
|
||||
fallback = kwargs.pop("fallback", None)
|
||||
try:
|
||||
emote, obj_mapping = parse_sdescs_and_recogs(
|
||||
sender, receivers, emote, case_sensitive=case_sensitive
|
||||
sender, receivers, emote, case_sensitive=case_sensitive, fallback=fallback
|
||||
)
|
||||
emote, language_mapping = parse_language(sender, emote)
|
||||
except (EmoteError, LanguageError) as err:
|
||||
|
|
|
|||
|
|
@ -243,6 +243,26 @@ class TestRPSystem(BaseEvenniaTest):
|
|||
'receiver of emotes.|n and |mReceiver2|n. She says |w"This is a test."|n',
|
||||
)
|
||||
|
||||
def test_send_emote_fallback(self):
|
||||
speaker = self.speaker
|
||||
receiver1 = self.receiver1
|
||||
receivers = [speaker, receiver1]
|
||||
speaker.sdesc.add(sdesc0)
|
||||
receiver1.sdesc.add(sdesc1)
|
||||
speaker.msg = lambda text, **kwargs: setattr(self, "out0", text)
|
||||
receiver1.msg = lambda text, **kwargs: setattr(self, "out1", text)
|
||||
rpsystem.send_emote(speaker, receivers, emote, case_sensitive=False, fallback="something")
|
||||
self.assertEqual(
|
||||
self.out0[0],
|
||||
"With a flair, |mSender|n looks at |bThe first receiver of emotes.|n "
|
||||
'and |bsomething|n. She says |w"This is a test."|n',
|
||||
)
|
||||
self.assertEqual(
|
||||
self.out1[0],
|
||||
"With a flair, |bA nice sender of emotes|n looks at |mReceiver1|n and "
|
||||
'|bsomething|n. She says |w"This is a test."|n',
|
||||
)
|
||||
|
||||
def test_send_case_sensitive_emote(self):
|
||||
"""Test new case-sensitive rp-parsing"""
|
||||
speaker = self.speaker
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue