Changeset 118
Legend:
- Unmodified
- Added
- Removed
-
adventure/adventuremuc.py
r116 r118 2 2 # -*- coding: utf-8 -*- 3 3 4 from xmpp import Component, JID, NS_COMPONENT_ACCEPT5 4 from sys import argv 6 5 from world import World 6 from xmpp import Component, JID, NS_COMPONENT_ACCEPT 7 from xmpp_error import Error 7 8 8 9 class AdventureMUC(Component): … … 53 54 # answer.type = :error 54 55 # answer.add(Jabber::Error.new('bad-request')) 55 # self. component.send(answer) if iq.type != :error56 # self.send(answer) if iq.type != :error 56 57 # return 57 58 # answer = iq.answer … … 72 73 # answer.query.add(Jabber::Discovery::Feature.new(Jabber::MUC::XMUC.new.namespace)) 73 74 # answer.query.add(Jabber::Discovery::Feature.new(Jabber::MUC::XMUCUser.new.namespace)) 74 # self. component.send(answer)75 # self.send(answer) 75 76 76 77 #def handle_disco_items(iq): … … 78 79 # answer = iq.answer 79 80 # answer.add(Jabber::Error.new('bad-request')) 80 # self. component.send(answer)81 # self.send(answer) 81 82 # return 82 83 # answer = iq.answer … … 86 87 # answer.query.add(Jabber::Discovery::Item.new(Jabber::JID::new(String::new(node), self.component.jid.domain), world.iname)) 87 88 # } 88 # self. component.send(answer)89 # self.send(answer) 89 90 90 91 def handle_presence(self, _, pres): 91 print 'presence: from %s type %s to %s' % (pres.getFrom(), pres.getType(), pres.getTo()) 92 93 world = self.worlds[pres.getTo().getNode()] 94 if not world: 95 answer = pres.buildReply() 96 answer.setType('error') 97 #answer.add(Jabber::Error.new('item-not-found', 'The world you are trying to reach is currently unavailable.')) 98 self.component.send(answer) 92 print 'presence: from %s type %s to %s' % (pres.getFrom(), 93 pres.getType(), 94 pres.getTo()) 95 96 world = pres.getTo().getNode() 97 if self.worlds.has_key(world): 98 self.worlds[world].handle_presence(pres) 99 99 else: 100 world.handle_presence(self, pres) 100 answer = Error(pres, 'item-not-found', 'The world you are trying to reach is currently unavailable.') 101 self.send(answer) 101 102 return True 102 103 103 104 def handle_message(self, _, msg): 104 print 'message: from %s type %s to %s: %s' % (msg.getFrom(), msg.getType(), msg.getTo(), repr(msg.getBody())) 105 print 'message: from %s type %s to %s: %s' % (msg.getFrom(), 106 msg.getType(), 107 msg.getTo(), 108 repr(msg.getBody())) 105 109 106 world = self.worlds[msg.getTo()]107 if not world:108 answer = msg.buildReply()109 answer.setType('error')110 #answer.add(Jabber::Error.new('item-not-found', 'The world you are trying to reach is currently unavailable.'))110 world = msg.getTo().getNode() 111 if self.worlds.has_key(world): 112 self.worlds[world].handle_message(msg) 113 else: 114 answer = Error(msg, 'item-not-found', 'The world you are trying to reach is currently unavailable.') 111 115 self.send(answer) 112 else:113 #msg.body=REXML::Text::unnormalize(msg.body)114 world.handle_message(msg)115 116 return True 116 117 -
adventure/place.py
r102 r118 2 2 3 3 class Place: 4 def _ init__(self, name, description):4 def __init__(self, name, description): 5 5 self.name = name 6 6 self.description = description -
adventure/player.py
r115 r118 6 6 class Player(Thing): 7 7 def __init__(self, world, name, jid): 8 self.world = world 9 self.name = name 8 Thing.__init__(self, world, name, None) 10 9 self.jid = unicode(jid) 11 10 self.place = None -
adventure/thing.py
r114 r118 5 5 6 6 class Thing: 7 def _ init__(self, world, name, parent):8 self.wor d = word7 def __init__(self, world, name, parent): 8 self.world = world 9 9 self.name = name 10 10 self.parent = parent 11 self.aliases = list() # Noms alternatifs11 self.aliases = (name,) # Noms alternatifs 12 12 self.actions = list() 13 13 self.presence = None … … 54 54 target = None 55 55 if command.action[2]: 56 for object_ in self.place.objects: 57 if object_.place == self.place and object_.name == command.action[2]: 58 target = object_ 59 break 60 for participant in self.place.participants: 61 if participant.place == self.place and participant.name == command.action[2]: 62 target = participant 56 for thing in self.world.each_thing_by_place(self.place): 57 if thing.name == command.action[2]: 58 target = thing 63 59 break 64 60 #else: -
adventure/world.py
r117 r118 5 5 from xml.dom.minidom import parse as xml_parse 6 6 from xmpp import Message, Presence 7 from xmpp_error import Error 7 8 8 9 class World: … … 11 12 self.places = dict() # {'place_name': place, ...} 12 13 self.things = dict() 13 self.players = dict()14 14 15 15 doc = xml_parse(filename) … … 35 35 def send(self, resource, stanza): 36 36 # Avoid sending to things without JID 37 if stanza.getTo() != None:37 if stanza.getTo(): 38 38 self.muc.snd(self.node, resource, stanza) 39 39 … … 57 57 pres = Presence(node=t.presence) 58 58 pres.setType('unavailable') 59 pres. SetTo(thing.jid)59 pres.setTo(thing.jid) 60 60 if t.jid != thing.jid: 61 61 self.send(t.name, pres) … … 99 99 t.on_enter(thing, oldplace) 100 100 101 def handle_presence(self, _,pres):101 def handle_presence(self, pres): 102 102 # A help for the irritated first: 103 103 if pres.getType() == 'subscribe': … … 117 117 # Disallow nick changes 118 118 if isinstance(thing, Player) and (pres.getFrom() == thing.jid) and (player != thing): 119 answer = pres.buildReply() #False 120 answer.setType('error') 121 #answer.add(Jabber::Error.new('not-acceptable', 'Nickchange not allowed')) 119 answer = Error(pres, 'not-acceptable', 'Nickchange not allowed') #False 122 120 self.send(thing.name, answer) 123 121 return True … … 125 123 # Either nick-collission or empty nick 126 124 if player and pres.getFrom() != player.jid or len(pres.getTo().getResource()) < 2: 127 answer = pres.buildReply() 128 answer.setType('error') 129 #if len(pres.getTo().getResource()) > 1: 130 # answer.add(Jabber::Error::new('conflict', 'Nickname already used')) 131 #else: 132 # answer.add(Jabber::Error::new('not-acceptable', 'Please use a nickname')) 125 answer = None 126 if len(pres.getTo().getResource()) > 1: 127 answer = Error(pres, 'conflict', 'Nickname already used') 128 else: 129 answer = Error(pres, 'not-acceptable', 'Please use a nickname') 133 130 self.send(None, answer) 134 131 return True … … 138 135 player = Player(self, pres.getTo().getResource(), pres.getFrom()) 139 136 player.presence = pres 140 self. players[player.name] = player137 self.things[player.name] = player 141 138 self.move_thing(player, self.start) 142 139 player.send_message('Help!', 'Send "?" to get a list of available commands any time.') … … 149 146 pres = Presence(node=player.presence) 150 147 pres.to = t.jid 151 self.send(player. iname, pres)148 self.send(player.name, pres) 152 149 153 150 # Remove the player instantly 154 151 if pres.getType() in ('error', 'unavailable'): 155 152 self.move_thing(player, None) 156 del self. players[player.name]157 158 def handle_message(self, _,msg):153 del self.things[player.name] 154 155 def handle_message(self, msg): 159 156 player = None 160 157 for thing in self.things.values(): 161 if isinstance(thing, Player) and msg.getTo().getResource() == None and msg.getFrom() == thing.jid: 158 print msg.getFrom(), thing.jid 159 if isinstance(thing, Player) and not msg.getTo().getResource() and msg.getFrom() == thing.jid: 162 160 player = thing 163 161 164 162 if not player: 165 answer = msg.buildReply() 166 answer.setType('error') 167 #answer.add(Jabber::Error::new('forbidden')) 163 answer = Error(msg, 'forbidden') 168 164 self.send(msg.getTo().getResource(), answer) 169 165 return True 170 166 171 if not command(player, msg.getBody()):167 if not self.command(player, msg.getBody()): 172 168 for thing in self.each_thing_by_place(player.place): 173 thing.send_message(player. iname, msg.body)169 thing.send_message(player.name, msg.getBody()) 174 170 175 171 def command(self, player, text): … … 180 176 for exit_name in place.exits.keys(): 181 177 player.send_message(None, '(Command) go %s' % exit_name) 182 for thing in foreach_thing_by_place(player.place):178 for thing in self.each_thing_by_place(player.place): 183 179 for c in thing.actions: 184 180 player.send_message(None, '(Command) %s %s' % (c.expressions[0], thing.name)) … … 212 208 else: 213 209 handled = False 214 for thing in each_thing_by_place(player.place):210 for thing in self.each_thing_by_place(player.place): 215 211 if what.lower() in thing.aliases: 216 212 for action in thing.actions:
