~ubuntu-branches/ubuntu/utopic/gozerbot/utopic

« back to all changes in this revision

Viewing changes to debian/gozerbot/usr/lib/python2.5/site-packages/gozerplugs/plugs/fleet.py

  • Committer: Bazaar Package Importer
  • Author(s): Jeremy Malcolm
  • Date: 2009-09-14 09:00:29 UTC
  • mfrom: (1.1.4 upstream) (3.1.5 sid)
  • Revision ID: james.westby@ubuntu.com-20090914090029-uval0ekt72kmklxw
Tags: 0.9.1.3-3
Changed dependency on python-setuptools to python-pkg-resources
(Closes: #546435) 

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# plugs/fleet.py
2
 
#
3
 
#
4
 
 
5
 
""" the fleet makes it possible to run multiple bots in one gozerbot.
6
 
 this can both be irc and jabber bots
7
 
"""
8
 
 
9
 
__copyright__ = 'this file is in the public domain'
10
 
__gendoclast__ = ['fleet-disconnect', 'fleet-del']
11
 
 
12
 
from gozerbot.fleet import fleet
13
 
from gozerbot.commands import cmnds
14
 
from gozerbot.examples import examples
15
 
from gozerbot.plughelp import plughelp
16
 
from gozerbot.aliases import aliasset
17
 
from gozerbot.config import config
18
 
 
19
 
plughelp.add('fleet', 'manage list of bots')
20
 
 
21
 
def handle_fleetconnect(bot, ievent):
22
 
    """ fleet-connect <botname> .. connect a fleet bot to it's server """
23
 
    try:
24
 
        botname = ievent.args[0]
25
 
    except IndexError:
26
 
        ievent.missing('<botname>')
27
 
        return
28
 
    try:
29
 
        if fleet.connect(botname):
30
 
            ievent.reply('%s connected' % botname)
31
 
        else:
32
 
            ievent.reply("can't connect %s" % botname)
33
 
    except Exception, ex:
34
 
        ievent.reply(str(ex))
35
 
 
36
 
cmnds.add('fleet-connect', handle_fleetconnect, 'OPER')
37
 
examples.add('fleet-connect', 'connect bot with <name> to irc \
38
 
server', 'fleet-connect test')
39
 
 
40
 
def handle_fleetdisconnect(bot, ievent):
41
 
    """ fleet-disconnect <botname> .. disconnect a fleet bot from server """
42
 
    try:
43
 
        botname = ievent.args[0]
44
 
    except IndexError:
45
 
        ievent.missing('<botname>')
46
 
        return
47
 
    ievent.reply('exiting %s' % botname)
48
 
    try:
49
 
        if fleet.exit(botname):
50
 
            ievent.reply("%s bot stopped" % botname)
51
 
        else:
52
 
            ievent.reply("can't stop %s bot" % botname)
53
 
    except Exception, ex:
54
 
        ievent.reply(str(ex))
55
 
 
56
 
cmnds.add('fleet-disconnect', handle_fleetdisconnect, 'OPER')
57
 
examples.add('fleet-disconnect', 'fleet-disconnect <name> .. disconnect \
58
 
bot with <name> from irc server', 'fleet-disconnect test')
59
 
 
60
 
def handle_fleetlist(bot, ievent):
61
 
    """ fleet-list .. list bot names in fleet """
62
 
    ievent.reply("fleet: ", fleet.list(), dot=True)
63
 
 
64
 
cmnds.add('fleet-list', handle_fleetlist, ['USER', 'WEB'])
65
 
examples.add('fleet-list', 'show current fleet list', 'fleet-list')
66
 
 
67
 
def handle_fleetaddirc(bot, ievent):
68
 
    """ fleed-addirc <name> <nick> <server> [port] [passwd] [ipv6] .. add irc \
69
 
        bot to fleet """
70
 
    from gozerbot.bot import Bot
71
 
    length  = len(ievent.args)
72
 
    if length == 7:
73
 
        (name, nick, server, ipv6, ssl, port, password) = ievent.args
74
 
    elif length == 6:
75
 
        (name, nick, server, ipv6, ssl, port) = ievent.args
76
 
        password = ""
77
 
    elif length == 5:
78
 
        (name, nick, server, ipv6, ssl) = ievent.args
79
 
        password = ""
80
 
        if ssl:
81
 
           port = 6697
82
 
        else:
83
 
           port = 6667
84
 
    elif length == 4:
85
 
        (name, nick, server, ipv6) = ievent.args
86
 
        password = ""
87
 
        ssl = 0
88
 
        port = 6667
89
 
    elif length == 3:
90
 
        (name, nick, server) = ievent.args
91
 
        port = 6667
92
 
        password = ""
93
 
        ssl = 0
94
 
        ipv6 = 0
95
 
    else:
96
 
        ievent.missing('<name> <nick> <server> [<ipv6>] [<ssl>] [<port>] \
97
 
[<password>]')
98
 
        return
99
 
    if fleet.byname(name):
100
 
        ievent.reply('we already have a bot with %s name in fleet' % \
101
 
name)
102
 
        return
103
 
    b = Bot(name, config['owneruserhost'])
104
 
    b.nick = nick
105
 
    b.server = server
106
 
    b.port = port
107
 
    b.password = password
108
 
    b.ipv6 = ipv6
109
 
    b.ssl = ssl
110
 
    try:
111
 
        fleet.addbot(b)
112
 
        fleet.connect(name)
113
 
        ievent.reply('%s started' % name)
114
 
    except Exception, ex:
115
 
        ievent.reply(str(ex))
116
 
        fleet.delete(b)
117
 
 
118
 
cmnds.add('fleet-addirc', handle_fleetaddirc, 'OPER')
119
 
examples.add('fleet-addirc', 'fleet-addirc <name> <nick> <server> [ipv6] \
120
 
[port] [passwd] .. add new server to fleet', 'fleet-addirc test3 gozertest \
121
 
localhost')
122
 
aliasset('fleet-add', 'fleet-addirc')
123
 
 
124
 
def handle_fleetaddjabber(bot, ievent):
125
 
    """ fleed-addjabber <name> <host> <user> <password> [port] .. add jabber \
126
 
        bot to fleet """
127
 
    try:
128
 
        import xmpp
129
 
    except ImportError:
130
 
        ievent.reply('xmpp is not enabled .. install the xmpppy package')
131
 
        return
132
 
    from gozerbot.jabberbot import Jabberbot
133
 
    if not bot.type == 'jabber':
134
 
        ievent.reply('use this command on a jabber bot (and change \
135
 
password if you used it)')
136
 
        return
137
 
    if ievent.groupchat:
138
 
        ievent.reply('use this command in a private message (and change \
139
 
password if you used it)')
140
 
        return
141
 
    length  = len(ievent.args)
142
 
    if length == 5:
143
 
        (name, host, user, password, port) = ievent.args
144
 
    elif length == 4:
145
 
        (name, host, user, password) = ievent.args
146
 
        port = 5222
147
 
    else:
148
 
        ievent.missing('<name> <host> <user> <password> [<port>]')
149
 
        return
150
 
    if fleet.byname(name):
151
 
        ievent.reply('we already have a bot with %s name in fleet' % \
152
 
name)
153
 
        return
154
 
    b = Jabberbot(name)
155
 
    b.host = host
156
 
    b.user = user
157
 
    b.password = password
158
 
    b.port = port
159
 
    try:
160
 
        fleet.addbot(b)
161
 
        fleet.connect(name)
162
 
        ievent.reply('%s started' % name)
163
 
    except Exception, ex:
164
 
        ievent.reply(str(ex))
165
 
        fleet.delete(b)
166
 
 
167
 
cmnds.add('fleet-addjabber', handle_fleetaddjabber, 'OPER')
168
 
examples.add('fleet-addjabber', 'fleet-addjabber <name> <host> <user> \
169
 
<passwd> [<port>] .. add new jabber server to fleet', 'fleet-addjabber test2 \
170
 
jabber.xs4all.nl jtest@jabber.xs4all.nl xwe23')
171
 
 
172
 
def handle_fleetdel(bot, ievent):
173
 
    """ fleet-del <botname> .. delete bot from fleet """
174
 
    try:
175
 
        name = ievent.args[0]
176
 
    except IndexError:
177
 
        ievent.missing('<name>')
178
 
        return
179
 
    try:
180
 
        if fleet.delete(name):
181
 
            ievent.reply('%s deleted' % name)
182
 
        else:
183
 
            ievent.reply('%s delete failed' % name)
184
 
    except Exception, ex:
185
 
        ievent.reply(str(ex))
186
 
 
187
 
cmnds.add('fleet-del', handle_fleetdel, 'OPER')
188
 
examples.add('fleet-del', 'fleet-del <botname> .. delete bot from fleet \
189
 
list', 'fleet-del test')
190
 
 
191
 
def docmnd(bot, ievent):
192
 
    """ cmnd 'all'|<botname> <cmnd> .. do command on bot/all bots """
193
 
    try:
194
 
        name = ievent.args[0]
195
 
        cmnd = ' '.join(ievent.args[1:])
196
 
    except IndexError:
197
 
        ievent.missing('<name> <cmnd>')
198
 
        return
199
 
    if not cmnd:
200
 
        ievent.missing('<name> <cmnd>')
201
 
        return
202
 
    if cmnd.find('cmnd') != -1:
203
 
        ievent.reply("no looping please ;]")
204
 
        return
205
 
    try:
206
 
        if name == 'all':
207
 
            fleet.cmndall(ievent, cmnd)
208
 
        else:
209
 
            fleet.cmnd(ievent, name, cmnd)
210
 
    except Exception, ex:
211
 
        ievent.reply(str(ex))
212
 
 
213
 
cmnds.add('cmnd', docmnd, ['USER', 'WEB'])
214
 
examples.add('cmnd', "cmnd all|<botname> <cmnd> .. excecute command on \
215
 
bot with <name> or on all fleet bots", '1) cmnd main st 2) cmnd all st')