Fixed chatalias, no bugs and now SAFE! \o/

This commit is contained in:
PixelSergey
2015-11-21 12:08:45 +02:00
parent 93c9bab421
commit 1b59c79fd7

View File

@@ -4,23 +4,21 @@
# so that when they send a # so that when they send a
# message in chat, it gets # message in chat, it gets
# replaced by their specified # replaced by their specified
# word. Configuration of this # word. The JSON file for this
# plugin is in the "gnl" # plugin is generated if not
# (general) tag of the JSON
# file named "aliases". The
# file is generated if not
# present. Set values to -1 # present. Set values to -1
# for "unlimited" setting. # for "unlimited" setting.
from helpers import * from helpers import *
import re
from traceback import format_exc as trace from traceback import format_exc as trace
data = None data = None
max_entries = 10 max_entries = 10
max_alias_length = 35 max_alias_length = 35
# minecraft message limit is 100 so I decided to give a little tolerance # Minecraft message limit is 100 so I decided to give a little tolerance (and I added a bit more)
max_overall_length = 115 max_overall_length = 100 + max_alias_length
alias_perm = "utils.alias.allowed" alias_perm = "utils.alias.allowed"
exceed_length = "utils.alias.exceedlimit" exceed_length = "utils.alias.exceedlimit"
@@ -38,6 +36,10 @@ def safe_open_json():
save_json_file("aliases", data) save_json_file("aliases", data)
return data return data
def multiple_replace(aliases, text):
regex = re.compile("|".join(map(re.escape, aliases.keys())))
return regex.sub(lambda mo: aliases[mo.group(0)], text)
@hook.command("alias", @hook.command("alias",
usage="/<command> [to_alias] [alias...]", usage="/<command> [to_alias] [alias...]",
@@ -45,7 +47,7 @@ def safe_open_json():
def on_alias_command(sender, cmd, label, args): def on_alias_command(sender, cmd, label, args):
if not is_player(sender): if not is_player(sender):
msg(sender, "Sorry, Console cannot alias words") msg(sender, "Sorry, non-players cannot alias words")
return True return True
if not sender.hasPermission(alias_perm): if not sender.hasPermission(alias_perm):
plugin_header(recipient=sender, name="Chat Alias") plugin_header(recipient=sender, name="Chat Alias")
@@ -123,16 +125,14 @@ def on_player_chat(event):
data = safe_open_json() data = safe_open_json()
if event.isCancelled(): if event.isCancelled():
return return
try: if not data[playerid]:
crashtest = data[playerid].items()
except KeyError:
return return
for alias, value in data[playerid].items(): event.setMessage(multiple_replace(data[playerid], event.getMessage()))
event.setMessage(event.getMessage().replace(alias, value))
if (event.getPlayer().hasPermission('essentials.chat.color')): if (event.getPlayer().hasPermission("essentials.chat.color")):
event.setMessage(colorify(event.getMessage())) event.setMessage(colorify(event.getMessage()))
if (len(event.getMessage()) > max_overall_length) and (not sender.hasPermission(exceed_overall_length)): if (max_overall_length >= 0) and (len(event.getMessage()) > max_overall_length) and (not event.getPlayer().hasPermission(exceed_overall_length)):
event.setCancelled(True) event.setCancelled(True)
msg(sender, "&7The message generated was too long and was not sent " + plugin_header(recipient=event.getPlayer(), name="Chat Alias")
"but it would've looked like that:") msg(event.getPlayer(), "&7The message generated was too long and was not sent. :/")
msg(sender, event.getMessage())