Source plugin now handles groups
This commit is contained in:
@@ -126,6 +126,34 @@ class source(MumoModule):
|
|||||||
|
|
||||||
def disconnected(self): pass
|
def disconnected(self): pass
|
||||||
|
|
||||||
|
def removeFromGroups(self, mumble_server, session, game, server, team):
|
||||||
|
sid = mumble_server.id()
|
||||||
|
prefix = self.cfg().source.groupprefix
|
||||||
|
game_cid = self.db.cidFor(sid, game)
|
||||||
|
|
||||||
|
group = prefix + game
|
||||||
|
mumble_server.removeUserFromGroup(game_cid, session, group) # Game
|
||||||
|
|
||||||
|
group += "_" + server
|
||||||
|
mumble_server.removeUserFromGroup(game_cid, session, group) # Server
|
||||||
|
|
||||||
|
group += "_" + str(team)
|
||||||
|
mumble_server.removeUserFromGroup(game_cid, session, group) # Team
|
||||||
|
|
||||||
|
def addToGroups(self, mumble_server, session, game, server, team):
|
||||||
|
sid = mumble_server.id()
|
||||||
|
prefix = self.cfg().source.groupprefix
|
||||||
|
game_cid = self.db.cidFor(sid, game)
|
||||||
|
|
||||||
|
group = prefix + game
|
||||||
|
mumble_server.addUserToGroup(game_cid, session, group) # Game
|
||||||
|
|
||||||
|
group += "_" + server
|
||||||
|
mumble_server.addUserToGroup(game_cid, session, group) # Server
|
||||||
|
|
||||||
|
group += "_" + str(team)
|
||||||
|
mumble_server.addUserToGroup(game_cid, session, group) # Team
|
||||||
|
|
||||||
def userTransition(self, mumble_server, old, new):
|
def userTransition(self, mumble_server, old, new):
|
||||||
sid = mumble_server.id()
|
sid = mumble_server.id()
|
||||||
|
|
||||||
@@ -133,33 +161,39 @@ class source(MumoModule):
|
|||||||
|
|
||||||
relevant = old or (new and new.valid())
|
relevant = old or (new and new.valid())
|
||||||
if not relevant:
|
if not relevant:
|
||||||
|
# User that is not playing. We don't care about those.
|
||||||
return
|
return
|
||||||
|
|
||||||
user_new = not old and new
|
user_new = not old and new
|
||||||
user_gone = old and (not new or not new.valid())
|
user_gone = old and (not new or not new.valid())
|
||||||
|
|
||||||
if not user_new:
|
|
||||||
# Nuke previous group memberships if any
|
|
||||||
|
|
||||||
#TODO: Remove group memberships
|
|
||||||
|
|
||||||
pass
|
|
||||||
|
|
||||||
if not user_gone:
|
if not user_gone:
|
||||||
#TODO: Establish new group memberships
|
assert(new)
|
||||||
|
|
||||||
|
if user_new:
|
||||||
|
self.dlog(sid, new.state, "User started playing: g/s/t %s/%s/%d", new.game, new.server, new.team)
|
||||||
|
self.addToGroups(mumble_server, new.session, new.game, new.server, new.team)
|
||||||
|
else:
|
||||||
|
assert(old);
|
||||||
|
self.dlog(sid, old.state, "User switched: g/s/t %s/%s/%d", new.game, new.server, new.team)
|
||||||
|
self.removeFromGroups(mumble_server, old.session, old.game, old.server, old.team)
|
||||||
|
self.addToGroups(mumble_server, new.session, new.game, new.server, new.team)
|
||||||
|
|
||||||
moved = self.moveUser(mumble_server, new)
|
moved = self.moveUser(mumble_server, new)
|
||||||
else:
|
else:
|
||||||
# User gone
|
# User gone
|
||||||
assert(old)
|
assert(old)
|
||||||
|
|
||||||
self.users.remove(sid, old.state.session)
|
self.users.remove(sid, old.state.session)
|
||||||
|
self.removeFromGroups(mumble_server, old.session, old.game, old.server, old.team)
|
||||||
moved = True
|
moved = True
|
||||||
|
|
||||||
if not new:
|
if new:
|
||||||
self.dlog(sid, old.state, "User gone")
|
bcid = self.cfg().source.basechannelid
|
||||||
|
self.dlog(sid, old.state, "User stopped playing. Moving to %d.", bcid)
|
||||||
|
self.moveUserToCid(mumble_server, new.state, )
|
||||||
else:
|
else:
|
||||||
# Move user out of our channel structure
|
self.dlog(sid, old.state, "User gone")
|
||||||
self.moveUserToCid(mumble_server, new.state, self.cfg().source.basechannelid)
|
|
||||||
self.dlog(sid, old.state, "User stopped playing")
|
|
||||||
|
|
||||||
|
|
||||||
if moved and old:
|
if moved and old:
|
||||||
|
|||||||
Reference in New Issue
Block a user