summaryrefslogtreecommitdiff
path: root/chatgroups.py
blob: 21cc4f40eb423828896be0b928e83e2bd5298efc (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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
#pylint: disable = F0401
from helpers import *
from java.util.UUID import fromString as juuid
import json

chatgroups_filename = "plugins/redstoner-utils.py.dir/files/chatgroups.json"
groups              = {}
cg_key              = ":"
cg_toggle_list      = []

try:
  groups = json.loads(open(chatgroups_filename).read())
except Exception, e:
  error("Failed to load chatgroups: %s" % e)


@hook.command("chatgroup")
def on_chatgroup_command(sender, args):
  try:
    plugin_header(sender, "ChatGroups")
    sender_id = uid(sender)
    if len(args) == 1 and args[0] == "leave":
      if sender_id in groups.keys():
        groupchat(sender, "left the group", True)
        group = groups[sender_id]
        del(groups[sender_id])
        save_groups()
      else:
        msg(sender, "&aYou can't leave no group, derp!")
    elif len(args) == 1 and args[0] == "info":
      if sender_id in groups.keys():
        group = groups[sender_id]
        msg(sender, "&aCurrent chatgroup: %s" % group)
        users = []
        for uuid, ugroup in groups.iteritems():
          if ugroup == group:
            usr = server.getPlayer(juuid(uuid))
            if usr:
              users.append(usr.getDisplayName())
        msg(sender, "&aUsers in this group:")
        msg(sender,  "&a%s" % ", ".join(users))
      else:
        msg(sender, "&aYou're in no chatgroup.")
    elif len(args) == 2 and args[0] == "join":
      groups[sender_id] = args[1]
      groupchat(sender, "joined the group", True)
      save_groups()
      msg(sender, "&aYour chatgroup is set to '%s'" % args[1])
      msg(sender, "&aUse chat like '&e%s<message>' to send messages to this group." % cg_key)
    else:
      msg(sender, "&e/chatgroup join <name>")
      msg(sender, "&e/chatgroup leave")
      msg(sender, "&e/chatgroup info")
  except Exception, e:
    error(e)


@hook.command("cgt")
def on_cgt_command(sender, args):
  p = uid(sender)
  if p in cg_toggle_list:
    cg_toggle_list.remove(p)
    msg(sender, "&8[&bCG&8] &e&oCG toggle: off")
  else:
    cg_toggle_list.append(p)
    msg(sender, "&8[&bCG&8] &e&oCG toggle: on")
  return True


def groupchat(sender, message, ann = False):
  #try:
  group = groups.get(uid(sender))
  if group == None:
    msg(sender, "&cYou are not in a group!")
    return
  name = sender.getDisplayName()
  if ann:
    mesg = "&8[&bCG&8] &e&o%s&e&o %s" % (name, message)
  else:
    mesg = "&8[&bCG&8] &f%s&f: &6%s" % (name, message)
  log("[ChatGroups] %s (%s): %s" % (sender, group, message))
  for receiver in server.getOnlinePlayers():
    groups.get(uid(receiver)) == group and msg(receiver, mesg)
  #except Exception, e:
  #  error(e)


def save_groups():
  try:
    chatgroups_file = open(chatgroups_filename, "w")
    chatgroups_file.write(json.dumps(groups))
    chatgroups_file.close()
  except Exception, e:
    error("Failed to write reports: " + str(e))


@hook.event("player.AsyncPlayerChatEvent", "normal")
def on_chat(event):
  sender = event.getPlayer()
  msge = event.getMessage()
  if not event.isCancelled():
    sender_id = uid(sender)
    if msge[:len(cg_key)] == cg_key and sender_id in groups.keys():
      groupchat(sender, msge[1:])
      event.setCancelled(True)
    elif sender_id in cg_toggle_list:
      groupchat(sender, msge)
      event.setCancelled(True)