diff options
Diffstat (limited to 'images/znc')
-rw-r--r-- | images/znc/Dockerfile | 25 | ||||
-rw-r--r-- | images/znc/privmsg.cpp | 40 | ||||
-rw-r--r-- | images/znc/service/znc/run | 5 |
3 files changed, 70 insertions, 0 deletions
diff --git a/images/znc/Dockerfile b/images/znc/Dockerfile new file mode 100644 index 0000000..6dfec6a --- /dev/null +++ b/images/znc/Dockerfile @@ -0,0 +1,25 @@ +FROM alpine:3.5 AS builder + +RUN apk add --no-cache build-base git automake autoconf openssl-dev icu-dev + +RUN git clone --single-branch --depth=1 --recursive https://github.com/znc/znc.git /tmp/znc + +RUN mkdir -p /app /data +RUN cd /tmp/znc \ + && ./autogen.sh \ + && ./configure --prefix="/app/znc" \ + && make \ + && make install + +ADD privmsg.cpp /tmp/ +RUN cd /tmp/ \ + && /app/znc/bin/znc-buildmod /tmp/privmsg.cpp \ + && mv privmsg.so /app/znc/lib/znc/ + +FROM server_runit + +RUN apk add --no-cache sudo libcap openssl icu +COPY --from=builder /app /app + +# -S: system, -h: home +RUN adduser -S -h /data znc && chmod a+x /data diff --git a/images/znc/privmsg.cpp b/images/znc/privmsg.cpp new file mode 100644 index 0000000..0659f96 --- /dev/null +++ b/images/znc/privmsg.cpp @@ -0,0 +1,40 @@ +/* + * Copyright (C) 2004-2012 See the AUTHORS file for details. + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 as published + * by the Free Software Foundation. + */ + +#include <znc/IRCNetwork.h> +#include <znc/Modules.h> + +class CPrivMsgMod : public CModule { +public: + MODCONSTRUCTOR(CPrivMsgMod) {} + + virtual EModRet OnUserMsg(CString& sTarget, CString& sMessage) { + if (m_pNetwork && m_pNetwork->GetIRCSock() && !m_pNetwork->IsChan(sTarget)) { + m_pNetwork->PutUser(":" + m_pNetwork->GetIRCNick().GetNickMask() + " PRIVMSG " + sTarget + " :" + sMessage, NULL, m_pClient); + } + + return CONTINUE; + } + + virtual EModRet OnUserAction(CString& sTarget, CString& sMessage) { + if (m_pNetwork && m_pNetwork->GetIRCSock() && !m_pNetwork->IsChan(sTarget)) { + m_pNetwork->PutUser(":" + m_pNetwork->GetIRCNick().GetNickMask() + " PRIVMSG " + sTarget + " :\x01" + "ACTION " + sMessage + "\x01", NULL, m_pClient); + } + + return CONTINUE; + } +}; + +template<> void TModInfo<CPrivMsgMod>(CModInfo& Info) { + Info.SetWikiPage("privmsg"); + Info.AddType(CModInfo::NetworkModule); + Info.AddType(CModInfo::GlobalModule); +} + +USERMODULEDEFS(CPrivMsgMod, "Send outgoing PRIVMSGs and CTCP ACTIONs to other clients") + diff --git a/images/znc/service/znc/run b/images/znc/service/znc/run new file mode 100644 index 0000000..14814ea --- /dev/null +++ b/images/znc/service/znc/run @@ -0,0 +1,5 @@ +#!/bin/sh + +chown -R znc /data +setcap 'cap_net_bind_service=+ep' /app/znc/bin/znc +exec sudo -u znc /app/znc/bin/znc --foreground --datadir /data |