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

« back to all changes in this revision

Viewing changes to build/lib/gozerplugs/plugs/shop.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
 
# plugs/shop.py
2
 
#
3
 
#
4
 
 
5
 
""" maintain shopping lists """
6
 
 
7
 
__copyright__ = 'this file is in the public domain'
8
 
 
9
 
from gozerbot.generic import getwho
10
 
from gozerbot.users import users
11
 
from gozerbot.commands import cmnds
12
 
from gozerbot.examples import examples
13
 
from gozerbot.datadir import datadir
14
 
from gozerbot.pdol import Pdol
15
 
from gozerbot.plughelp import plughelp
16
 
import os
17
 
 
18
 
plughelp.add('shop', ' maintain shopping lists (per user)')
19
 
 
20
 
# shops are pickled dict of lists
21
 
shops = Pdol(datadir + os.sep + 'shops')
22
 
 
23
 
def size():
24
 
    """ return number of shops entries """
25
 
    return len(shops.data)
26
 
 
27
 
def sayshop(bot, ievent, shoplist):
28
 
    """ output shoplist """
29
 
    if not shoplist:
30
 
        ievent.reply('nothing to shop ;]')
31
 
        return
32
 
    result = []
33
 
    teller = 0
34
 
    for i in shoplist:
35
 
        result.append('%s) %s' % (teller, i))
36
 
        teller += 1
37
 
    ievent.reply("shoplist: ", result)
38
 
 
39
 
def handle_shop(bot, ievent):
40
 
    """ shop [<item>] .. show shop list or add <item> """
41
 
    if len(ievent.args) != 0:
42
 
        handle_shop2(bot, ievent)
43
 
        return
44
 
    shop = []
45
 
    username = users.getname(ievent.userhost)
46
 
    shop = shops[username]
47
 
    sayshop(bot, ievent, shop)
48
 
 
49
 
cmnds.add('shop', handle_shop, 'USER')
50
 
 
51
 
def handle_shop2(bot, ievent):
52
 
    """ add items to shop list """
53
 
    if not ievent.rest:
54
 
        ievent.missing('<shopitem>')
55
 
        return
56
 
    else:
57
 
        what = ievent.rest
58
 
    username = users.getname(ievent.userhost)
59
 
    shops[username] = what
60
 
    shops.save()
61
 
    ievent.reply('shop item added')
62
 
 
63
 
examples.add('shop', 'shop [<item>] .. show shop items or add a shop item', \
64
 
'1) shop 2) shop bread')
65
 
 
66
 
def handle_shopchan(bot, ievent):
67
 
    """ shop-chan [<item>] .. show channel shop list or add <item> """
68
 
    if len(ievent.args) != 0:
69
 
        handle_shopchan2(bot, ievent)
70
 
        return
71
 
    shop = shops[(bot.name, ievent.channel)]
72
 
    sayshop(bot, ievent, shop)
73
 
 
74
 
cmnds.add('shop-chan', handle_shopchan, 'USER')
75
 
examples.add('shop-chan', 'shop-chan [<item>] .. show channel shop list or \
76
 
add <item>', '1) shop-chan 2) shop-chan milk')
77
 
 
78
 
def handle_shopchan2(bot, ievent):
79
 
    """ add items to shop list """
80
 
    if not ievent.rest:
81
 
        ievent.missing('<shopitem>')
82
 
        return
83
 
    else:
84
 
        what = ievent.rest
85
 
    shops[(bot.name, ievent.channel)] = what
86
 
    shops.save()
87
 
    ievent.reply('shop item added')
88
 
 
89
 
def handle_addshop(bot, ievent):
90
 
    """ shop-add <username> <item> .. add items to shop list of <username>"""
91
 
    if len(ievent.args) < 2:
92
 
        ievent.missing('<username> <item>')
93
 
        return
94
 
    else:
95
 
        who = ievent.args[0]
96
 
        what = ' '.join(ievent.args[1:])
97
 
    userhost = getwho(bot, who)
98
 
    if not userhost:
99
 
        ievent.reply("can't find userhost of %s" % who)
100
 
        return
101
 
    # get username of use giviing the command
102
 
    username = users.getname(ievent.userhost)
103
 
    # get username of person we want to knwo the shop list of
104
 
    whoname = users.getname(userhost)
105
 
    if not whoname:
106
 
        ievent.reply("can't find user for %s" % userhost)
107
 
        return
108
 
    if users.permitted(userhost, username, 'shop'):
109
 
        shops[whoname] = what
110
 
        shops.save()
111
 
        ievent.reply('shop item added')
112
 
    else:
113
 
        ievent.reply("%s does not share shopping list with %s" % (who, \
114
 
username))
115
 
 
116
 
cmnds.add('shop-add', handle_addshop, 'USER')
117
 
examples.add('shop-add', 'shop-add <username> <item> .. add shop item of \
118
 
someone else', '1) shop-add dunker milk')
119
 
 
120
 
def handle_getshop(bot, ievent):
121
 
    """ shop-get <name> .. get items of someone elses shop list """
122
 
    if not ievent.rest:
123
 
        ievent.missing('<username>')
124
 
        return
125
 
    who = ievent.rest
126
 
    userhost = getwho(bot, who)
127
 
    if not userhost:
128
 
        ievent.reply("can't find userhost of %s" % who)
129
 
        return
130
 
    username = users.getname(ievent.userhost)
131
 
    whoname = users.getname(userhost)
132
 
    if not whoname:
133
 
        ievent.reply("can't find user for %s" % userhost)
134
 
        return
135
 
    if users.permitted(userhost, username, 'shop'):
136
 
        shop = shops[whoname]
137
 
        sayshop(bot, ievent, shop)
138
 
    else:
139
 
        ievent.reply("%s does not share shopping list with %s" % (who, \
140
 
username))
141
 
 
142
 
cmnds.add('shop-get', handle_getshop, ['USER', 'WEB'])
143
 
examples.add('shop-get', 'shop-get <name> .. get shop items of someone \
144
 
else', '1) shop-get dunker')
145
 
 
146
 
def handle_delshop(bot, ievent):
147
 
    """ shop-del <username> <listofnrs> .. delete items of someone elses \
148
 
        shop list """
149
 
    if len(ievent.args) < 2:
150
 
        ievent.missing('<username> <listofnrs>')
151
 
        return
152
 
    else:
153
 
        who = ievent.args[0]
154
 
    try:
155
 
        nrs = []
156
 
        for i in ievent.args[1:]:
157
 
            nrs.append(int(i))
158
 
    except ValueError:
159
 
        ievent.reply('%s is not an integer' % i)
160
 
        return
161
 
    userhost = getwho(bot, who)
162
 
    if not userhost:
163
 
        ievent.reply("can't find userhost of %s" % who)
164
 
        return
165
 
    username = users.getname(ievent.userhost)
166
 
    whoname = users.getname(userhost)
167
 
    if not whoname:
168
 
        ievent.reply("can't find user for %s" % userhost)
169
 
        return
170
 
    if users.permitted(userhost, username, 'shop'):
171
 
        try:
172
 
            shop = shops[whoname]
173
 
        except KeyError:
174
 
            ievent.reply('nothing to shop ;]')
175
 
            return
176
 
        nrs.sort()
177
 
        nrs.reverse()
178
 
        for i in range(len(shop)-1, -1 , -1):
179
 
            if i in nrs:
180
 
                try:
181
 
                    del shop[i]
182
 
                except IndexError:
183
 
                    pass
184
 
        shops.save()
185
 
        ievent.reply('shop item deleted')
186
 
    else:
187
 
        ievent.reply("%s does not share shopping list with %s" % (who, \
188
 
username))
189
 
 
190
 
cmnds.add('shop-del', handle_delshop, 'USER')
191
 
examples.add('shop-del', 'shop-del <username> <listofnrs> .. delete shop \
192
 
item of someone else', '1) shop-del dunker 2 4 5')
193
 
 
194
 
def handle_got(bot, ievent):
195
 
    """ got <listofnrs> .. remove items from shoplist """
196
 
    if len(ievent.args) == 0:
197
 
        ievent.missing('<list of nrs>')
198
 
        return
199
 
    try:
200
 
        nrs = []
201
 
        for i in ievent.args:
202
 
            nrs.append(int(i))
203
 
    except ValueError:
204
 
        ievent.reply('%s is not an integer' % i)
205
 
        return
206
 
    username = users.getname(ievent.userhost)
207
 
    try:
208
 
        shop = shops[username]
209
 
    except KeyError:
210
 
        ievent.reply('nothing to shop ;]')
211
 
        return
212
 
    if not shop:
213
 
        ievent.reply("nothing to shop ;]")
214
 
        return
215
 
    nrs.sort()
216
 
    nrs.reverse()
217
 
    teller = 0
218
 
    for i in range(len(shop)-1, -1 , -1):
219
 
        if i in nrs:
220
 
            try:
221
 
                del shop[i]
222
 
                teller += 1
223
 
            except IndexError:
224
 
                pass
225
 
    shops.save()
226
 
    ievent.reply('%s shop item(s) deleted' % teller)
227
 
 
228
 
cmnds.add('got', handle_got, 'USER')
229
 
examples.add('got', 'got <listofnrs> .. remove item <listofnrs> from shop \
230
 
list','1) got 3 2) got 1 6 8')
231
 
 
232
 
def handle_gotchan(bot, ievent):
233
 
    """ got-chan <listofnrs> .. remove items from channel shoplist """
234
 
    if len(ievent.args) == 0:
235
 
        ievent.missing('<list of nrs>')
236
 
        return
237
 
    try:
238
 
        nrs = []
239
 
        for i in ievent.args:
240
 
            nrs.append(int(i))
241
 
    except ValueError:
242
 
        ievent.reply('%s is not an integer' % i)
243
 
        return
244
 
    try:
245
 
        shop = shops[(bot.name, ievent.channel)]
246
 
    except KeyError:
247
 
        ievent.reply("nothing to shop")
248
 
        return
249
 
    if not shop:
250
 
        ievent.reply("nothing to shop")
251
 
        return
252
 
    nrs.sort()
253
 
    nrs.reverse()
254
 
    teller = 0
255
 
    for i in range(len(shop)-1, -1 , -1):
256
 
        if i in nrs:
257
 
            try:
258
 
                del shop[i]
259
 
                teller += 1
260
 
            except IndexError:
261
 
                pass
262
 
    shops.save()
263
 
    ievent.reply('%s shop item(s) deleted' % teller)
264
 
 
265
 
cmnds.add('got-chan', handle_gotchan, 'USER')
266
 
examples.add('got-chan', 'got-chan <listofnrs> .. remove listofnrs from \
267
 
channel shop list', '1) got-chan 3 2) got-chan 1 6 8')