~ubuntu-branches/ubuntu/precise/gozerbot/precise

« back to all changes in this revision

Viewing changes to build/lib/gozerplugs/dbplugs/lists.py

  • Committer: Bazaar Package Importer
  • Author(s): Jeremy Malcolm
  • Date: 2008-06-02 19:26:39 UTC
  • mfrom: (1.1.3 upstream) (3.1.1 lenny)
  • Revision ID: james.westby@ubuntu.com-20080602192639-3rn65nx4q1sgd6sy
Tags: 0.8.1-1
New upstream release.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# dbplugs/lists.py
2
 
#
3
 
#
4
 
#
5
 
 
6
 
""" lists per global/channel/user """
7
 
 
8
 
__copyright__ = 'this file is in the public domain'
9
 
 
10
 
from gozerbot.generic import handle_exception
11
 
from gozerbot.commands import cmnds
12
 
from gozerbot.examples import examples
13
 
from gozerbot.plughelp import plughelp
14
 
from gozerbot.users import users
15
 
from gozerbot.db import db
16
 
 
17
 
plughelp.add('lists', 'maintain lists')
18
 
 
19
 
def size():
20
 
    """ return number of lists """
21
 
    result = db.execute(""" SELECT COUNT(*) FROM list """)
22
 
    return result[0][0]
23
 
 
24
 
def getlists(username):
25
 
    """ get all lists of user """
26
 
    result = db.execute(""" SELECT * FROM list WHERE username = %s """, \
27
 
username)
28
 
    return result
29
 
 
30
 
def getlist(username, listname):
31
 
    """ get list of user """
32
 
    result = db.execute(""" SELECT * FROM list WHERE username = %s AND \
33
 
listname = %s """, (username, listname))
34
 
    return result
35
 
 
36
 
def addtolist(username, listname, item):
37
 
    """ add item to list """
38
 
    result = db.execute(""" INSERT INTO list(username, listname, item) \
39
 
VALUES(%s, %s, %s) """, (username, listname, item))
40
 
    return result
41
 
 
42
 
def delfromlist(username, indx):
43
 
    """ delete item from list """
44
 
    result = db.execute(""" DELETE FROM list WHERE username = %s AND indx = %s \
45
 
""", (username, indx))
46
 
    return result
47
 
 
48
 
def mergelist(username, listname, l):
49
 
    """ merge 2 lists """
50
 
    for i in l:
51
 
        addtolist(username, listname, i)
52
 
 
53
 
def handle_listsglobal(bot, ievent):
54
 
    """ lists <listname> [',' <item>] .. global lists"""
55
 
    if not ievent.rest:
56
 
        ievent.missing("<listname> [',' <item>]")
57
 
        return
58
 
    try:
59
 
        listname, item = ievent.rest.split(',', 1)
60
 
    except ValueError:
61
 
        l = getlist('all', ievent.rest)
62
 
        if not l:
63
 
            ievent.reply('no %s list available' % ievent.rest)
64
 
            return
65
 
        result = []
66
 
        for i in l:
67
 
            result.append("%s) %s" % (i[0], i[3]))
68
 
        ievent.reply(result)
69
 
        return
70
 
    listname = listname.strip().lower()
71
 
    item = item.strip()
72
 
    if not listname or not item:
73
 
        ievent.missing("<listname> [',' <item>]")
74
 
        return
75
 
    result = 0
76
 
    try:
77
 
        result = addtolist('all', listname, item)
78
 
    except Exception, ex:
79
 
        handle_exception()
80
 
        ievent.reply('ERROR: %s' % str(ex))
81
 
        return
82
 
    if result:
83
 
        ievent.reply('%s added to %s list' % (item, listname))
84
 
    else:
85
 
        ievent.reply('add failed')
86
 
 
87
 
cmnds.add('lists-global', handle_listsglobal, 'USER')
88
 
examples.add('lists-global', "lists-global <listname> [',' <item>] .. show \
89
 
content of list or add item to list", '1) lists-global bla 2) lists-global \
90
 
bla, mekker')
91
 
 
92
 
def handle_listsglobaldel(bot, ievent):
93
 
    """ list-globaldel <listname> ',' <listofnrs> .. remove items with \
94
 
indexnr from list """
95
 
    if not ievent.rest:
96
 
        ievent.missing('<listofnrs>')
97
 
        return
98
 
    try:
99
 
        nrs = []
100
 
        for i in ievent.rest.split():
101
 
            nrs.append(int(i))
102
 
    except ValueError:
103
 
        ievent.reply('%s is not an integer' % i)
104
 
        return
105
 
    nrs.sort()
106
 
    failed = []
107
 
    itemsdeleted = 0
108
 
    try:
109
 
        for i in nrs:
110
 
            result = delfromlist('all', i)
111
 
            if not result:
112
 
                failed.append(i)
113
 
            else:
114
 
                itemsdeleted += 1
115
 
    except Exception, ex:
116
 
        handle_exception()
117
 
        ievent.reply('ERROR: %s' % str(ex))
118
 
        return
119
 
    if failed:
120
 
        ievent.reply('failed to delete %s' % ' '.join(failed))
121
 
    ievent.reply('%s item(s) removed' % itemsdeleted)
122
 
 
123
 
cmnds.add('lists-globaldel', handle_listsglobaldel, 'USER')
124
 
examples.add('lists-globaldel', "lists-globaldel <listname> ',' <listofnrs> \
125
 
.. remove items with indexnr from list", '1) lists-globaldel mekker , 1 2) \
126
 
lists-globaldel mekker , 0 3 6')
127
 
 
128
 
def handle_listsglobalshow(bot, ievent):
129
 
    """ show avaiable global lists """
130
 
    l = getlists('all')
131
 
    if not l:
132
 
        ievent.reply('no lists available')
133
 
        return
134
 
    else:
135
 
        result = []
136
 
        for i in l:
137
 
            if not i[2] in result:
138
 
                result.append(i[2])
139
 
        if result:
140
 
            ievent.reply(result, dot=True)
141
 
 
142
 
cmnds.add('lists-globalshow', handle_listsglobalshow, 'USER')
143
 
examples.add('lists-globalshow', 'show available global lists' , \
144
 
'lists-globalshow')
145
 
 
146
 
def handle_listschan(bot, ievent):
147
 
    """ lists-chan <listname> [',' <item>] .. global lists"""
148
 
    if not ievent.rest:
149
 
        ievent.missing("<listname> [',' <item>]")
150
 
        return
151
 
    try:
152
 
        listname, item = ievent.rest.split(',', 1)
153
 
    except ValueError:
154
 
        l = getlist(ievent.channel, ievent.rest)
155
 
        if not l:
156
 
            ievent.reply('no %s list available' % ievent.rest)
157
 
            return
158
 
        result = []
159
 
        for i in l:
160
 
            result.append("%s) %s" % (i[0], i[3]))
161
 
        ievent.reply(result)
162
 
        return
163
 
    listname = listname.strip().lower()
164
 
    item = item.strip()
165
 
    if not listname or not item:
166
 
        ievent.missing("<listname> [',' <item>]")
167
 
        return
168
 
    ok = 0
169
 
    try:
170
 
        ok = addtolist(ievent.channel, listname, item)
171
 
    except Exception, ex:
172
 
        handle_exception()
173
 
        ievent.reply('ERROR: %s' % str(ex))
174
 
        return
175
 
    if ok:
176
 
        ievent.reply('%s added to %s list' % (item, listname))
177
 
    else:
178
 
        ievent.reply('add failed')
179
 
 
180
 
cmnds.add('lists-chan', handle_listschan, 'USER')
181
 
examples.add('lists-chan', "lists-chan <listname> [',' <item>] .. show \
182
 
content of list or add item to list", '1) lists-chan bla 2) lists-chan \
183
 
bla, mekker')
184
 
 
185
 
def handle_listschandel(bot, ievent):
186
 
    """ lists-chandel <listname> ',' <listofnrs> .. remove items with \
187
 
indexnr from list """
188
 
    if not ievent.rest:
189
 
        ievent.missing('<listofnrs>')
190
 
        return
191
 
    try:
192
 
        nrs = []
193
 
        for i in ievent.rest.split():
194
 
            nrs.append(int(i))
195
 
    except ValueError:
196
 
        ievent.reply('%s is not an integer' % i)
197
 
        return
198
 
    nrs.sort()
199
 
    failed = []
200
 
    itemsdeleted = 0
201
 
    try:
202
 
        for i in nrs:
203
 
            result = delfromlist(ievent.channel, i)
204
 
            if not result:
205
 
                failed.append(i)
206
 
            else:
207
 
                itemsdeleted += 1
208
 
    except Exception, ex:
209
 
        handle_exception()
210
 
        ievent.reply('ERROR: %s' % str(ex))
211
 
        return
212
 
    if failed:
213
 
        ievent.reply('failed to remove %s' % ' '.join(failed))
214
 
    ievent.reply('%s item(s) removed' % itemsdeleted)
215
 
 
216
 
cmnds.add('lists-chandel', handle_listschandel, 'USER')
217
 
examples.add('lists-chandel', "lists-chandel <listname> ',' <listofnrs> \
218
 
.. remove items with indexnr from list", '1) lists-chandel mekker , 1 2) \
219
 
lists-chandel mekker , 0 3 6')
220
 
 
221
 
def handle_listschanshow(bot, ievent):
222
 
    """ show avaiable lists """
223
 
    l = getlists(ievent.channel)
224
 
    if not l:
225
 
        ievent.reply('no lists available')
226
 
        return
227
 
    else:
228
 
        result = []
229
 
        for i in l:
230
 
            if not i[2] in result:
231
 
                result.append(i[2])
232
 
        if result:
233
 
            ievent.reply(result, dot=True)
234
 
 
235
 
cmnds.add('lists-chanshow', handle_listschanshow, 'USER')
236
 
examples.add('lists-chanshow', 'show available channel lists' , \
237
 
'lists-chanshow')
238
 
 
239
 
def handle_lists(bot, ievent):
240
 
    """ lists <listname> [',' <item>] .. global lists"""
241
 
    if not ievent.rest:
242
 
        ievent.missing("<listname> [',' <item>]")
243
 
        return
244
 
    username = users.getname(ievent.userhost)
245
 
    try:
246
 
        listname, item = ievent.rest.split(',', 1)
247
 
    except ValueError:
248
 
        l = getlist(username, ievent.rest)
249
 
        if not l:
250
 
            ievent.reply('no %s list available' % ievent.rest)
251
 
            return
252
 
        result = []
253
 
        for i in l:
254
 
            result.append("%s) %s" % (i[0], i[3]))
255
 
        ievent.reply(result)
256
 
        return
257
 
    listname = listname.strip().lower()
258
 
    item = item.strip()
259
 
    if not listname or not item:
260
 
        ievent.missing("<listname> [',' <item>]")
261
 
        return
262
 
    ok = 0
263
 
    try:
264
 
        ok = addtolist(username, listname, item)
265
 
    except Exception, ex:
266
 
        handle_exception()
267
 
        ievent.reply('ERROR: %s' % str(ex))
268
 
        return
269
 
    if ok:
270
 
        ievent.reply('%s added to %s list' % (item, listname))
271
 
    else:
272
 
        ievent.reply('add failed')
273
 
 
274
 
cmnds.add('lists', handle_lists, 'USER')
275
 
examples.add('lists', "lists <listname> [',' <item>] .. show content of list \
276
 
or add item to list", '1) lists bla 2) lists bla, mekker')
277
 
 
278
 
def handle_listsdel(bot, ievent):
279
 
    """ lists-del <listname> ',' <listofnrs> .. remove items with indexnr \
280
 
from list """
281
 
    if not ievent.rest:
282
 
        ievent.missing('<listofnrs>')
283
 
        return
284
 
    try:
285
 
        nrs = []
286
 
        for i in ievent.rest.split():
287
 
            nrs.append(int(i))
288
 
    except ValueError:
289
 
        ievent.reply('%s is not an integer' % i)
290
 
        return
291
 
    username = users.getname(ievent.userhost)
292
 
    nrs.sort()
293
 
    failed = []
294
 
    itemsdeleted = 0
295
 
    try:
296
 
        for i in nrs:
297
 
            result = delfromlist(username, i)
298
 
            if not result:
299
 
                failed.append(i)
300
 
            else:
301
 
                itemsdeleted += 1
302
 
    except Exception, ex:
303
 
        handle_exception()
304
 
        ievent.reply('ERROR: %s' % str(ex))
305
 
        return
306
 
    if failed:
307
 
        ievent.reply('failed to delete %s' % ' '.join(failed))
308
 
    ievent.reply('%s item(s) removed' % itemsdeleted)
309
 
 
310
 
cmnds.add('lists-del', handle_listsdel, 'USER')
311
 
examples.add('lists-del', "lists-del <listname> ',' <listofnrs> \
312
 
.. remove items with indexnr from list", '1) lists-del mekker , 1 2) \
313
 
lists-del mekker , 0 3 6')
314
 
 
315
 
def handle_listshow(bot, ievent):
316
 
    """ show avaiable lists """
317
 
    username = users.getname(ievent.userhost)
318
 
    l = getlists(username)
319
 
    if not l:
320
 
        ievent.reply('no lists available')
321
 
        return
322
 
    else:
323
 
        result = []
324
 
        for i in l:
325
 
            if not i[2] in result:
326
 
                result.append(i[2])
327
 
        if result:
328
 
            ievent.reply(result, dot=True)
329
 
 
330
 
cmnds.add('lists-show', handle_listshow, 'USER')
331
 
examples.add('lists-show', 'show available channel lists' , 'lists-show')
332
 
 
333
 
def handle_listsmerge(bot, ievent):
334
 
    """ merge 2 lists """
335
 
    try:
336
 
        (fromlist, tolist) = ievent.args
337
 
    except ValueError:
338
 
        ievent.missing('<fromlist> <tolist>')
339
 
        return
340
 
    username = users.getname(ievent.userhost)
341
 
    res = getlist(username, fromlist)
342
 
    if not res: 
343
 
        ievent.reply('no %s list available or empty' % fromlist)
344
 
        return
345
 
    l = []
346
 
    for i in res:
347
 
        l.append(i[3])
348
 
    result = 0
349
 
    try:
350
 
        result = mergelist(username, tolist, l)
351
 
    except Exception, ex:
352
 
        handle_exception()
353
 
        ievent.reply('ERROR: %s' % str(ex))
354
 
        return
355
 
    ievent.reply('%s items merged' % result)
356
 
 
357
 
cmnds.add('lists-merge', handle_listsmerge, 'USER')
358
 
examples.add('lists-merge', 'lists-merge <fromlist> <tolist> .. merge 2 \
359
 
lists', 'lists-merge mekker miep')