Mercurial > nix
view tiny-nix.lua @ 0:0d4d8b432980 default tip master
Initial commit.
author | Kooda <kooda@upyum.com> |
---|---|
date | Fri, 27 Aug 2010 17:00:32 +0200 |
parents | |
children |
line wrap: on
line source
require("libs.utils"); local verse = require("verse"); require("verse.client"); local config = config_load(); room_map = { [config.muc1.jid] = config.muc2.jid; [config.muc2.jid] = config.muc1.jid; }; local bot = verse.new(); local occupants = { [config.muc1.jid] = {}; [config.muc2.jid] = {}; }; function new_clone(table, room, nick, presence) table[room][nick] = verse.new(); table[room][nick]:connect_client(config.jid.."/"..nick, config.password); table[room][nick]:hook("ready", function() table[room][nick]:send(presence); end); end; function stanza_split(stanza) return jid.bare(stanza.attr.from), room_map[jid.bare(stanza.attr.from)], select(3, jid.split(stanza.attr.from)); end bot:hook("ready", function() room_join(bot, config.muc1, config.nickname); room_join(bot, config.muc2, config.nickname); end); bot:hook("stanza", function(stanza) local room_from, room_to, nick = stanza_split(stanza); if not room_from or not room_to or not nick or nick == config.nickname then return; end; if occupants[room_from][nick] then return; end; if stanza.name == "message" and stanza.attr.type ~= "groupchat" then return; end; local reply = stanza; reply.attr.from = nil; reply.attr.to = room_to; if stanza.name == "presence" then reply.attr.to = room_to.."/"..nick; if not occupants[room_to][nick] then new_clone(occupants, room_to, nick, reply); end; if stanza.attr.type == "unavailable" then occupants[room_to][nick]:send(reply); occupants[room_to][nick]:close(); occupants[room_to][nick] = nil; occupants[room_from][nick] = nil; return; end end if occupants[room_to][nick] then occupants[room_to][nick]:send(reply); end; end); bot:connect_client(config.jid, config.password); verse.loop();