summaryrefslogtreecommitdiff
path: root/mentio.py
blob: 1d29d57a903299ae780eac84d97e9b11e661a3c6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#pylint: disable=F0401
from helpers import *
from re import compile as reg_compile
from traceback import format_exc as print_traceback

arrow = colorify(u"&r&7\u2192&r")
regex = reg_compile(u"\u00A7[\\da-fk-or]")


@hook.event("player.AsyncPlayerChatEvent", "normal")
def onChat(event):
  try:
    if not event.isCancelled():
      sender     = event.getPlayer()
      words      = event.getMessage().split(" ")
      recipients = list(event.getRecipients())

      for recipient in recipients[:]:
        rec_words = words[:] # copy
        for i in range(len(rec_words)):
          word = rec_words[i]
          if recipient.getName().lower() in word.lower():
            colors = "".join(regex.findall("".join(words[:i+1]))) # join all color codes used upto this word
            rec_words[i] = colorify("&r&a<&6") + stripcolors(word) + colorify("&r&a>&r") + colors # extra fancy highlight

        # player was mentioned
        if rec_words != words:
          try: # list might not be mutable
            recipients.remove(recipient) # don't send original message
          except:
            pass
          message = " ".join([sender.getDisplayName(), arrow] + rec_words)
          msg(recipient, message, usecolor = False)
          recipient.playSound(recipient.getLocation(), "mob.chicken.plop", 1, 0)
  except:
    error("Failed to handle PlayerChatEvent:")
    error(print_traceback())