channels.py 1.0 KB

12345678910111213141516171819202122232425262728293031
  1. import re
  2. def extract_mentions(message: str, triggerChar: str = "@"):
  3. # Escape triggerChar in case it's a regex special character
  4. triggerChar = re.escape(triggerChar)
  5. pattern = rf"<{triggerChar}([A-Z]):([^|>]+)"
  6. matches = re.findall(pattern, message)
  7. return [{"id_type": id_type, "id": id_value} for id_type, id_value in matches]
  8. def replace_mentions(message: str, triggerChar: str = "@", use_label: bool = True):
  9. """
  10. Replace mentions in the message with either their label (after the pipe `|`)
  11. or their id if no label exists.
  12. Example:
  13. "<@M:gpt-4.1|GPT-4>" -> "GPT-4" (if use_label=True)
  14. "<@M:gpt-4.1|GPT-4>" -> "gpt-4.1" (if use_label=False)
  15. """
  16. # Escape triggerChar
  17. triggerChar = re.escape(triggerChar)
  18. def replacer(match):
  19. id_type, id_value, label = match.groups()
  20. return label if use_label and label else id_value
  21. # Regex captures: idType, id, optional label
  22. pattern = rf"<{triggerChar}([A-Z]):([^|>]+)(?:\|([^>]+))?>"
  23. return re.sub(pattern, replacer, message)