Extend seen module to be aware of online users and make response behavior more natural

This commit is contained in:
Stefan Hacker
2011-04-09 04:53:57 +02:00
parent ab27fb960a
commit 9119356227

View File

@@ -37,10 +37,12 @@
from mumo_module import (commaSeperatedIntegers,
MumoModule)
from datetime import timedelta
class seen(MumoModule):
default_config = {'seen':(
('servers', commaSeperatedIntegers, []),
('keyword', str, '!seen'),
('keyword', str, '!seen')
)
}
@@ -62,27 +64,55 @@ class seen(MumoModule):
def disconnected(self): pass
def sendMessage(self, server, user, message, msg):
if message.channels:
server.sendMessageChannel(user.channel, False, msg)
else:
server.sendMessage(user.session, msg)
server.sendMessage(message.sessions[0], msg)
#
#--- Server callback functions
#
def userTextMessage(self, server, user, message, current=None):
if message.text.startswith(self.keyword):
if message.text.startswith(self.keyword) and \
(len(message.sessions) == 1 or
(len(message.channels) == 1 and \
message.channels[0] == user.channel)):
tuname = message.text[len(self.keyword):].strip()
self.log().debug("User %s (%d|%d) on server %d asking for '%s'",
user.name, user.session, user.userid, server.id(), tuname)
# Check for self referencing
if tuname == user.name:
msg = "User '%s' knows how to spell his name" % tuname
self.sendMessage(server, user, message, msg)
return
# Check online users
for cuser in server.getUsers().itervalues():
if tuname == cuser.name:
msg = "User '%s' is currently online, has been idle for %s" % (tuname,
timedelta(seconds=cuser.idlesecs))
self.sendMessage(server, user, message, msg)
return
# Check registrations
for cuid, cuname in server.getRegisteredUsers(tuname).iteritems():
if cuname == tuname:
ureg = server.getRegistration(cuid)
if ureg:
server.sendMessage(user.session,
"User '%s' was last active %s UTC" % (tuname,
ureg[self.murmur.UserInfo.UserLastActive]))
msg = "User '%s' was last seen %s UTC" % (tuname,
ureg[self.murmur.UserInfo.UserLastActive])
self.sendMessage(server, user, message, msg)
return
msg = "I don't know who user '%s' is" % tuname
self.sendMessage(server, user, message, msg)
server.sendMessage(user.session,
"I don't know who user '%s' is" % tuname)
def userConnected(self, server, state, context = None): pass
def userDisconnected(self, server, state, context = None): pass