plugins/tell.lua

Fri, 14 May 2010 14:18:23 +0100

author
Thilo Cestonaro <thilo@cestona.ro>
date
Fri, 14 May 2010 14:18:23 +0100
changeset 10
77753bce939a
parent 8
9663866ca475
child 12
d7ce8ba2c462
child 16
ae69cea97598
permissions
-rw-r--r--

tell.lua: prevent executing the command in a non-groupchat environment.

local st = require "util.stanza";
local tellings = {};

function riddim.plugins.tell(bot)
	bot:hook("commands/tell", function (command)
			if command.room then
				local s, e = command.param:find(" ");
				local nick = command.param:sub(0, s - 1);
				local msg = command.param:sub(s + 1);
				local found = false;
	
				for tmp,_ in pairs(command.room.occupants) do
					if tmp == nick then
						found = true;
						break;
					end
				end

				if not found then
					if(tellings[nick] == nil) then
						tellings[nick] = {};
					end
					tellings[nick][#tellings[nick] + 1] = {from=command.sender.nick, msg=msg};
					return "Ok! Will tell " .. nick .. " what you have said!";
				else
					if nick == command.sender.nick then
						return "Are you going crazy!? You are " .. nick .. "!";
					else
						return "Aehm?! ... " .. nick .. " is currently online!";
					end
				end
			else
				return "Sorry, but this command only makes sense if you execute it in a groupchat.";
			end
		end);

	bot:hook("groupchat/joined", function (room)	
		room:hook("occupant-joined", function (occupant)
				if(tellings[occupant.nick] ~= nil) then
					for _,msg in ipairs(tellings[occupant.nick]) do
						room:send_message(occupant.nick .. ": Welcome back! " .. msg.from .. " told me, to tell you, \"" .. msg.msg .. "\".");
					end
				end
			end);
		end);
end

mercurial