File

mod_webpresence/mod_webpresence.lua @ 234:abcb59ab355c

Add new motd_sequential module. This module lets you define numbered messages shown to each user in order, but only once per user, and persistent across server restarts. Useful for notifying users of added features and changes in an incremental fashion.
author Jeff Mitchell <jeffrey.mitchell@gmail.com>
date Wed, 04 Aug 2010 22:29:51 +0000
parent 4:63080b8973ee
line wrap: on
line source

do local e={};e["icons/status_online.png"]='PNG\r\
\
\0\0\0\rIHDR\0\0\0\0\0\0\0\0\0V%\0\0\0sBIT|d\0\0\0	pHYs\0\0\r\0\0\rB(x\0\0\0tEXtSoftware\0www.inkscape.org<\0\0IDAT(U_h[u?woM65Kel]+a[uOE\
">D܆Pd0/VӗXAa)Ctin7U$m&Mn{ׇ;kwps뺬\'?7CjZԢ	Tu\\;zVwxGn{f43wiI//ѿ^;y^#jbB\0H["%v1k?R۶<\
\\bЬ*Z@C{A\rPQu%3εjL\0ޕ{YhTPyɟ\' ޫ?(a+dE((BAhc3T^Ob0a2K%uU-.x"-KŸ`ߖ}zbcz4PªґȲ9l6mibA.w\\Fn/7XQA	GZЧ!~alcm"G"9	<xULEo.5"-->~@6@$><JӚ&q8<pZ)[<H\'\0I%~#tgR!X־ؽ2F #\0pC܈wp*<d3S/?oYV\\v6Xa\
VSCT&[ζB5?12oe@uwDήI\'%+ƈݩQN{<J᱂TTd:\r6\\\
}qsCZӝ/Vjg-hEӯ_\'i~&\0\0\0\0IENDB`'e["icons/status_away.png"]='PNG\r\
\
\0\0\0\rIHDR\0\0\0\0\0\0\0\0\0V%\0\0\0sBIT|d\0\0\0	pHYs\0\0\r\0\0\rB(x\0\0\0tEXtSoftware\0www.inkscape.org<\0\01IDAT(U_Lu\0{QD	atԌpXHg\\5aVmڅEKE.Bm,\' H)” 9y{]s<R9/*nA<Ʀ]ms=nSlq2\0tc3wrIpw~xryTn0ii8.pԉ3J\0<X-V\0=0}|`?b`7A}m\0m5Ç0MsfDjK+XΚ<_0UzW8	@:a ~tˏfhBáf,ͤX([>cy@y()BI,Yueyz3o$胰Z&,PII*C$2dI{Cֻ|S<\0"r:p.dJI$x-6~/Q`ք1>Eb}t~x֣ͼwҨ{u5T%%%\0Ӿ}f&ԿGЪ`x7<IMGw3H@*;0K"UDtd/M}C#6nfol	^`E(5yz_Czcy+WumdsxITf`2\
{~_SJQ]U+FFK3GϰőgƘYLzA>=4>=FuVCh?bɔ4C̠ɬwUjwv{Y[ҏ]@*Nn߼k^qRo,3v,j\0\0\0\0IENDB`'e["icons/status_xa.png"]="PNG\r\
\
\0\0\0\rIHDR\0\0\0\0\0\0\0\0\0V%\0\0\0sBIT|d\0\0\0	pHYs\0\0\r\0\0\rB(x\0\0\0tEXtSoftware\0www.inkscape.org<\0\07IDAT(UmLUu\0s=s7LoC؂jm\rIlBhЋsEzqImI,m (6)|P,.쑄,Ϟ6ivFjYEqhFtCmE?KۤIHmLDm3rљPyuSm^JUMƥ\0XCpOKk-,>_SU180$d'xhST>uo_PD87s@~iҵ/M4ώ#8ӹk/Ot$Xʖk%|!XPKW6օxsbGuk;/?etJ	%{F};yX/!8BaaҁD>7^Ӷ*>+~?Xƚ{y_IX&Eq9ic9acddi(\0`vp\0`׫Ӓ$j5T	O\r7M\rӅat=P%px‚Y%j3ٌ]p񠷵Ѻ~Da&FFس\0wzvXԽ3R䡺L'\\+zװL3ZU딎͒á#Ngeʑ\\2Qm	,K2LM7^hQ\0ڎc+_ Ee'(.i-\\1mJXM1Q䋉;Vw>E*lwQ:E=wUU'v?hj\0\0\0\0IENDB`"e["icons/status_dnd.png"]="PNG\r\
\
\0\0\0\rIHDR\0\0\0\0\0\0\0\0\0V%\0\0\0sBIT|d\0\0\0	pHYs\0\0\r\0\0\rB(x\0\0\0tEXtSoftware\0www.inkscape.org<\0\0IDAT(}k\\Us;IBj\"2hRLM[pQWnDtUQ(nZ*6]T\
ªP-lL-I$w⚚ w^xD;{-SGZ宩_U٣6?jd\
%!E`9x}W'zy?OZxi.+#Ei:mϷ{G~;ܡ\0h^xk}`m^D@w)|xp_'浙7~0XS*'}z`@B\"v|_:;ڢ1Z RZ5(P\
_6ϙ(\
7\0i+R1J1A	1DiWL>Fb{s9sf=?=7j!!ƈk-(ͦJVj<w]>3B DAD֚Z]14[C/4jD!@UY@}bSCBPʴzE,Enwp1e:]Yߕ_\\|jڭ{ɉ'֓{+|_R:6rjxuRcፖNuj)ОO?y[]𶎼xt#fjWWdݿ(yRi\0\0\0\0IENDB`"e["icons/status_chat.png"]='PNG\r\
\
\0\0\0\rIHDR\0\0\0\0\0\0\0\0\0V%\0\0\0sBIT|d\0\0\0	pHYs\0\0\r\0\0\rB(x\0\0\0tEXtSoftware\0www.inkscape.org<\0\0IDAT(ULus!D`sqY:3deS˭15d-mfrㇶ6;f-oZs؈X6`LԎKk?PWt:r5c0:75m\rLƌP/ުz[/=@4"Xb24~ğo/ǎ{_hh*Rnr"),I $3=]}8@m@J.Fk/Zк<-no:\0w//gMk6E)ŲbX}N\r`"&o++tyYŕMap\0к\
PEhvsiw%]DagkBY e%,NݦG{buoXd(-+gE2twP\\<M3NGɓg7-I33ss&ׯoC?xzgc+YSf \0\0	LdD"	jksb"|#Gpg,,K1qyGϦ̓gZ[/\
uZ @\
J 2ܝuȵX%WիauHHT7j*jލZ&cy\\={$nCq.u~-" ".D}䧟7Knٲ7Su%XDx7{lK`-("j[,ϛ\rVTV/se}cȈaw^b@03\0\0\0\0IENDB`'e["icons/status_offline.png"]="PNG\r\
\
\0\0\0\rIHDR\0\0\0\0\0\0\0\0\0V%\0\0\0sBIT|d\0\0\0	pHYs\0\0\r\0\0\rB(x\0\0\0tEXtSoftware\0www.inkscape.org<\0\0IDAT(UKcg^\\[;SAp)tmL)3V,dp`6]/BA2JAP(iNҚdD'~Nr?޷Xٝ=Q\\_?VAQv 埮gjCia(\0B<u].//ūT]>Z~PEo5Fof0\0P0wr{UFփ666041]!Jd޽<<P>߯F>H)ut:8###8F0>0{5놚ddppvFGGmn8Tft]GJQ\0Xy`eeYZZbI)F\
(szzP#z{{bT*2Du<$MMME\
\0mL&<\0xjm7֬J#LRTH$eYhi)˸8dYΒfabb~u]|e>Ь¡RD\"Agg'S,RRWWGTUʓEJGw?ގ<\\.i#3y_?nTpztx\\CQ۶B ˲^EWlxVߥaY7&Â3YD_~UUu۟_<1mUirrZ7gD\0\0\0\0IENDB`"function require_resource(r)return e[r]or error("resource '"..tostring(r).."' not found");end end local s=require"util.jid".prepped_split;if not require_resource then
function require_resource(e)local r=io.open((config.get("*","core","presence_icons")or"")..e);if r then
return r:read("*a");end
module:log("warn","Failed to open image file %s",(config.get("*","core","presence_icons")or"")..e);return"";end
end
local e={status="404 Not Found",body="<h1>Page Not Found</h1>Sorry, we couldn't find what you were looking for :("};local n={"online","away","xa","dnd","chat","offline"};for r,e in ipairs(n)do
n[e]={status="200 OK",headers={["Content-Type"]="image/png"},body=require_resource("icons/status_"..e..".png")};end
local function t(e,e,o)local e=o.url.path:match("[^/]+$");if e then
local r,e=s(e);if e and not r then
r,e=e,o.headers.host;if e then e=e:gsub(":%d+$","");end
end
if r and e then
local e=hosts[e]and hosts[e].sessions[r];if e then
local e=e.top_resources[1];if e and e.presence then
e=e.presence:child_with_name("show");if not e then
e="online";else
e=e:get_text();end
return n[e];end
end
end
end
return n.offline;end
local e=config.get(module.host,"core","http_ports")or{5280};require"net.httpserver".new_from_config(e,"status",t);