summaryrefslogtreecommitdiff
path: root/chatgroups.py
blob: 79ff74cfa96a959a5043af14ada9431ceeddd92b (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
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
#pylint: disable = F0401
from helpers import *
from basecommands import simplecommand
from java.util.UUID import fromString as juuid

groups         = open_json_file("chatgroups", {})
cg_defaultkey  = ":"
cg_keys        = open_json_file("chatgroup_keys", {})
cg_toggle_list = []

def get_key(uuid):
    key = cg_keys.get(uuid)
    return key if key != None else cg_defaultkey


@hook.command("chatgroup")
def on_chatgroup_command(sender, command, label, args):
    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)
            if sender in cg_toggle_list:
                cg_toggle_list.remove(p)
            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 = [user.getName() for user in [server.getOfflinePlayer(juuid(uuid)) for uuid, ugroup in groups.iteritems() if ugroup == group] if user]
            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." % get_key(sender_id))
    elif len(args) == 1 and args[0] == "key":
        msg(sender, "&aYour chatgroup key is currently: '&c%s&a'" % get_key(sender_id))
    elif len(args) == 1 and args[0] == "tpahere":
        if sender_id in groups.keys():
            do_for_chatgroup(groups[sender_id], send_tpa_request, sender)
            msg(sender, "&aSent a tpahere request to all users in your chatgroup")
        else:
            msg(sender, "&cYou have to be in a chatgroup to do that")
    else:
        msg(sender, "&e/chatgroup join <name>")
        msg(sender, "&e/chatgroup leave")
        msg(sender, "&e/chatgroup info")
        msg(sender, "&e/chatgroup key")
        msg(sender, "&e/chatgroup tpahere")


@hook.command("cgt")
def on_cgt_command(sender, command, label, 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):
    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)
    mesg = colorify(mesg)
    
    info("[ChatGroups] %s (%s): %s" % (sender.getDisplayName(), group, message))
    do_for_chatgroup(group, msg, mesg, usecolor = False)

def do_for_chatgroup(group, func, *args, **kwargs):
    for receiver in server.getOnlinePlayers():
        if groups.get(uid(receiver)) == group:
            func(receiver, *args, **kwargs)

def send_tpa_request(receiver, sender):
    if not receiver == sender:
        runas(sender, "/tpahere " + receiver.getName())

def save_groups():
    save_json_file("chatgroups", groups)


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

@simplecommand("chatgroupkey",
        aliases = ["cgkey"],
        senderLimit = 0,
        helpNoargs = True,
        helpSubcmd = True,
        description = "Sets a key character for chatting to your chatgroup",
        usage = "<key>")
def chatgroupkey_command(sender, command, label, args):
    key = " ".join(args)
    uuid = uid(sender)
    if key.lower() == "default" or key == cg_defaultkey:
        del cg_keys[uuid]
        save_keys()
        return "&aYour chatgroup key was set to the default character: '&c%s&a'" % cg_defaultkey
    cg_keys[uid(sender)] = key
    save_keys()
    return "&aYour chatgroup key was set to: '&c%s&a'" % key


def save_keys():
    save_json_file("chatgroup_keys", cg_keys)