soo.lua

changeset 0
cc66ad6b0d75
equal deleted inserted replaced
-1:000000000000 0:cc66ad6b0d75
1 --[[ Lua XMPP MOO Component by Matthew Wild (MattJ) ]]
2
3 function onMessage(msg)
4 success, message = pcall(handleMessage, msg);
5 if not success then print("\nERROR: "..message.."\n"); end
6 end
7
8 function handleMessage(msg)
9 local action, object, room, server, person;
10 person = people[msg.fromFull]
11 room = people["local"].room._properties.name;
12 if not person then print("No such person as "..msg.fromFull, tostring(people[msg.fromFull]).."\n"); end
13 if not rooms[room] then return; end
14
15 person:_processCommand(msg.body);
16
17 return nil;
18 end
19
20 function GetOccupantNick(jid)
21 local pjid, p
22 for pjid, p in pairs(people) do
23 if CompareJIDs(pjid, jid) then return p.nick; end
24 end
25 return "user";
26 end
27
28 function CompareJIDs(j1, j2)
29 return j1 == j2;
30 end
31
32 function MoveToRoom(person, room)
33 if not ( person and room) then print("Error, can't move person to room, invalid args"); return; end
34 if type(room) ~= "table" then
35 if not rooms[room] then rooms[room] = CreateObject(classes.obj_room, room); rooms[room]:_create{ room = room, server = "" }; end
36 room = rooms[room];
37 end
38
39 if person.room ~= room then
40 if person.room then
41 person.room.people[person.nick] = nil; -- Remove from room
42 end
43 end
44 person.room = room;
45 --table.print("rooms", rooms);
46 room.people[person.nick] = person;
47 room:_enter{ room = person.room, person = person, nick = person.nick };
48 end
49
50 function RemoveFromRoom(room, jid)
51 if not ( room and jid) then return; end
52 for id, t in pairs(room.people) do
53 room.people[id] = nil;
54 end
55 end
56
57 function BroadcastMessage(people_, from, text, mtype, sender_sees)
58 print("\n|>>"..from..": "..text);
59 end
60
61 function FSay(room, fromnick, text)
62 if text and fromnick then print("\n|>>"..fromnick..": "..text); end
63 end
64
65 function SendMessage(to, from, text, type)
66 if to == "local" then print("\n>>"..from..": "..text);
67 else print("\n|>>"..(from or "")..": "..text); end
68 end
69
70 function PSay(room, tonick, fromnick, text)
71 print("\n>>"..fromnick..": "..text);
72 end
73
74 dofile("common.lua");
75
76 rooms = rooms or { };
77 people = people or { ["local"] = setmetatable({ nick = "user", group = {} }, { __index = occupant }); };
78 people["local"]._contents = { ["in"] = createcontainertable(); };
79
80
81 -- Single user --
82
83 if not people["local"].room then MoveToRoom(people["local"],"lounge"); end
84 io.write("\n> ");
85 for line in io.lines() do
86 onMessage({ fromFull = "local", body = line });
87 io.write("\n> ");
88 end

mercurial