diff options
Diffstat (limited to 'alternativ_nick.py')
-rw-r--r-- | alternativ_nick.py | 39 |
1 files changed, 36 insertions, 3 deletions
diff --git a/alternativ_nick.py b/alternativ_nick.py index 61385cb..e7d6a26 100644 --- a/alternativ_nick.py +++ b/alternativ_nick.py @@ -7,6 +7,20 @@ Licensed under the Eiffel Forum License 2. http://inamidst.com/phenny/ """ +import sys +import threading + + +# Duration to wait before trying to get the nick again (in seconds) +NICKLOOP_DELAY = 60 + + +def _start_nickloop(phenny): + def nickloop(): + print >> sys.stderr, ('Trying to get: %s' % phenny.config.nick) + phenny.write(('NICK', phenny.config.nick)) + threading.Timer(NICKLOOP_DELAY, nickloop).start() + def _set_nick(wrapper, nick): # The phenny argument of the event handler is only a wrapper to enable the @@ -40,9 +54,28 @@ def _build_nick(phenny): def nickname_in_use(phenny, input): - new_nick = _build_nick(phenny) - _set_nick(phenny, new_nick) - phenny.write(('NICK', new_nick)) + # The nickname in use event can occur during connection phase if the + # supplied nick is already taken, or if we try to get the default nick and + # it is still taken. We remember the connection state, to decide what to + # do. + if phenny.data.get('alternativ_nick.connected'): + _start_nickloop(phenny) + else: + new_nick = _build_nick(phenny) + _set_nick(phenny, new_nick) + phenny.data['alternativ_nick.active'] = True + phenny.write(('NICK', new_nick)) nickname_in_use.rule = r'(.*)' nickname_in_use.event = '433' nickname_in_use.thread = False + + +def connected(phenny, input): + # The '001' event is the first message after establishing the connection + # and providing a valid NICK and USER. If we used an alternativ nick, we + # could start trying to get back the default nick. + phenny.data['alternativ_nick.connected'] = True + if phenny.data.get('alternativ_nick.active'): + _start_nickloop(phenny) +connected.rule = r'(.*)' +connected.event = '001' |