Sat, 27 Mar 2010 17:43:08 +0000
Initial commit (importing from old SVN repo which got lost)
--[[ Lua XMPP MOO Component by Matthew Wild (MattJ) ]] function onMessage(msg) success, message = pcall(handleMessage, msg); if not success then print("\nERROR: "..message.."\n"); end end function handleMessage(msg) local action, object, room, server, person; person = people[msg.fromFull] room = people["local"].room._properties.name; if not person then print("No such person as "..msg.fromFull, tostring(people[msg.fromFull]).."\n"); end if not rooms[room] then return; end person:_processCommand(msg.body); return nil; end function GetOccupantNick(jid) local pjid, p for pjid, p in pairs(people) do if CompareJIDs(pjid, jid) then return p.nick; end end return "user"; end function CompareJIDs(j1, j2) return j1 == j2; end function MoveToRoom(person, room) if not ( person and room) then print("Error, can't move person to room, invalid args"); return; end if type(room) ~= "table" then if not rooms[room] then rooms[room] = CreateObject(classes.obj_room, room); rooms[room]:_create{ room = room, server = "" }; end room = rooms[room]; end if person.room ~= room then if person.room then person.room.people[person.nick] = nil; -- Remove from room end end person.room = room; --table.print("rooms", rooms); room.people[person.nick] = person; room:_enter{ room = person.room, person = person, nick = person.nick }; end function RemoveFromRoom(room, jid) if not ( room and jid) then return; end for id, t in pairs(room.people) do room.people[id] = nil; end end function BroadcastMessage(people_, from, text, mtype, sender_sees) print("\n|>>"..from..": "..text); end function FSay(room, fromnick, text) if text and fromnick then print("\n|>>"..fromnick..": "..text); end end function SendMessage(to, from, text, type) if to == "local" then print("\n>>"..from..": "..text); else print("\n|>>"..(from or "")..": "..text); end end function PSay(room, tonick, fromnick, text) print("\n>>"..fromnick..": "..text); end dofile("common.lua"); rooms = rooms or { }; people = people or { ["local"] = setmetatable({ nick = "user", group = {} }, { __index = occupant }); }; people["local"]._contents = { ["in"] = createcontainertable(); }; -- Single user -- if not people["local"].room then MoveToRoom(people["local"],"lounge"); end io.write("\n> "); for line in io.lines() do onMessage({ fromFull = "local", body = line }); io.write("\n> "); end