summaryrefslogtreecommitdiff
path: root/saylol.py
blob: fce356e8f9802ba2b8faf3e635e8f2dd2c221bd7 (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
from time import time
from helpers import *
from random import randrange
import math

lols     = open_json_file("lol", [])
timeout  = 15
last_msg = 0
list_limit = 20


def save_lols():
    save_json_file("lol", lols)


def add_lol(txt):
    lols.append(txt)
    save_lols()


def del_lol(lid):
    lols.pop(lid)
    save_lols()


def print_lol(sender, lid):
    global last_msg
    if time() - last_msg > timeout:
        if len(lols) > lid:
            dispname = sender.getDisplayName() if is_player(sender) else sender.getName()
            broadcast(None, "&8[&blol&8] &7%s&8: &e%s" % (dispname, lols[lid]))
            last_msg = time()
        else:
            msg(sender, "&cInvalid id")
    else:
        msg(sender, "&cYou can use SayLol again in &a%s seconds!" % int(timeout + 1 - (time() - last_msg)))


def search_lols(sender, keyword):
    if not keyword:
        msg(sender, "&cPlease provide a keyword to search for!")
        return
    keyword = keyword.lower()
    msg(sender, "&aLols containing '&6%s&a':" % keyword)
    for i, lol in enumerate(lols):
        if keyword in lol.lower():
            msg(sender, "&a%s: &e%s" % (str(i).rjust(3), lol))
    msg(sender, "") # empty line showing end of list


@hook.command("lol")
def on_lol_command(sender, command, label, args):
    plugin_header(sender, "SayLol")

    cmd = args[0] if len(args) > 0 else None
    if len(args) == 0:
        if sender.hasPermission("utils.lol"):
            print_lol(sender, randrange(len(lols)))
        else:
            noperm(sender)

    elif cmd == "id":
        if sender.hasPermission("utils.lol.id"):
            try:
                i = int(args[1])
                print_lol(sender, i)
            except ValueError:
                msg(sender, "&cInvalid number '&e%s&c'" % args[1])
        else:
            noperm(sender)

    elif cmd == "list":
        arg1 = args[1] if len(args) > 1 else None
        if not arg1:
            arg1 = "1"        
        if not arg1.isdigit():
            msg(sender, "&cInvalid argument \"%s\"" % arg1)
            return True
        if int(arg1) == 0:
            msg(sender, "&cPage 0 does not exist")
            return True
        arg1 = int(arg1) - 1
        offset = list_limit * arg1
        if offset > len(lols):
            msg(sender, "&cNot a valid page (too high).")
            return True
        msg(sender, "    &9&nLol list page %s/%s" % (str(arg1 + 1), str(int(math.ceil(len(lols) / list_limit))))) #"\t" symbol displays weirdly, hence the 4 spaces
        for i in range(offset, min(offset + list_limit, len(lols))):
            msg(sender, "&a%s: &e%s" % (str(i).rjust(3), lols[i]))
        msg(sender, "")        
        msg(sender, "&eFor a specific page, type &a/lol list <page>&e.")
        msg(sender, "") #emptyline

    elif cmd == "search":
        if sender.hasPermission("utils.lol.search"):
            search_lols(sender, " ".join(args[1:]))
        else:
            noperm(sender)

    elif cmd == "add":
        if sender.hasPermission("utils.lol.modify"):
            add_lol(" ".join(args[1:]))
            msg(sender, "&aNew lol message added!")
        else:
            noperm(sender)

    elif cmd == "del":
        if sender.hasPermission("utils.lol.modify"):
            try:
                i = int(args[1])
                del_lol(i)
                msg(sender, "&aLol message &e#%s&a deleted!" % i)
            except ValueError:
                msg(sender, "&cInvalid number '&e%s&c'" % args[1])

    else:
        msg(sender, "&a/lol               &eSay random message")
        msg(sender, "&a/lol list [page]   &eList messages")
        msg(sender, "&a/lol id <id>       &eSay specific message")
        msg(sender, "&a/lol add <text>    &eAdd message")
        msg(sender, "&a/lol del <id>      &eDelete message")
    return True