soo.lua

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