commit ba255c481a7478da3d13a72faa31b13af1fc6a66 Author: stuzer05 Date: Tue Oct 12 02:40:30 2021 +0300 Initial diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..e20d2dd --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +.idea +conf/tls/*.pem +conf/unrealircd.conf diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..4fd5adf --- /dev/null +++ b/Dockerfile @@ -0,0 +1,21 @@ +FROM debian:unstable-slim as builder_source +RUN apt-get update && apt-get install -y \ + && apt-get install -y git build-essential pkg-config libssl-dev libpcre2-dev libargon2-0-dev libsodium-dev libc-ares-dev libcurl4-openssl-dev \ + && rm -rf /var/lib/apt/lists/* + +WORKDIR /opt +RUN git clone https://github.com/unrealircd/unrealircd.git --depth 1 . \ + && ./configure --with-showlistmodes --enable-ssl --with-bindir=/app/bin --with-datadir=/app/data --with-pidfile=/app/data/unrealircd.pid --with-confdir=/app/conf --with-modulesdir=/app/modules --with-logdir=/app/logs --with-cachedir=/app/cache --with-docdir=/app/doc --with-tmpdir=/app/tmp --with-privatelibdir=/app/lib --with-scriptdir=/app --with-nick-history=2000 --with-permissions=0600 --enable-dynamic-linking \ + && make -j4 \ + && make install \ + && rm /app/source \ + && cp /app/conf/examples/example.conf /app/conf/unrealircd.conf + +FROM builder_source AS builder_binary +COPY --from=builder_source /app /app +WORKDIR /app +RUN useradd unrealircd \ + && chown unrealircd:unrealircd -R /app + USER unrealircd +CMD /app/unrealircd start \ + && until ! [ -f /app/data/unrealircd.pid ]; do sleep 60; done diff --git a/README.md b/README.md new file mode 100644 index 0000000..3b9383f --- /dev/null +++ b/README.md @@ -0,0 +1,2 @@ +docker-compose build --no-cache +docker run -d -p 127.0.0.1:6900:6900 -p 127.0.0.1:6697:6697 -p 127.0.0.1:6667:6667 -v /${PWD}/conf/:/app/conf --name unrealircd unrealircd_ircd -it /bin/bash diff --git a/conf/aliases/aliases.conf b/conf/aliases/aliases.conf new file mode 100644 index 0000000..ea484aa --- /dev/null +++ b/conf/aliases/aliases.conf @@ -0,0 +1,43 @@ +/* Standard Aliases */ + +alias identify { + format "^#" { + target chanserv; + type services; + parameters "IDENTIFY %1-"; + } + format "^[^#]" { + target nickserv; + type services; + parameters "IDENTIFY %1-"; + } + type command; +} + +alias services { + format "^#" { + target chanserv; + type services; + parameters "%1-"; + } + format "^[^#]" { + target nickserv; + type services; + parameters "%1-"; + } + type command; +} + +alias register { + format "^#" { + target chanserv; + type services; + parameters "REGISTER %1-"; + } + format "^[^#]" { + target nickserv; + type services; + parameters "REGISTER %1-"; + } + type command; +} diff --git a/conf/aliases/anope.conf b/conf/aliases/anope.conf new file mode 100644 index 0000000..9ae578b --- /dev/null +++ b/conf/aliases/anope.conf @@ -0,0 +1,17 @@ +/* Anope Aliases */ + +alias nickserv { type services; } +alias ns { target nickserv; type services; } +alias chanserv { type services; } +alias cs { target chanserv; type services; } +alias memoserv { type services; spamfilter yes; } +alias ms { target memoserv; type services; spamfilter yes; } +alias operserv { type services; } +alias os { target operserv; type services; } +alias botserv { type services; } +alias bs { target botserv; type services; } +alias hostserv { type services; } +alias hs { target hostserv; type services; } + +include "aliases/aliases.conf"; + diff --git a/conf/aliases/atheme.conf b/conf/aliases/atheme.conf new file mode 100644 index 0000000..4f58394 --- /dev/null +++ b/conf/aliases/atheme.conf @@ -0,0 +1,26 @@ +/* Atheme Aliases */ + +alias nickserv { type services; } +alias ns { target nickserv; type services; } +alias chanserv { type services; } +alias cs { target chanserv; type services; } +alias memoserv { type services; spamfilter yes; } +alias ms { target memoserv; type services; spamfilter yes; } +alias operserv { type services; } +alias os { target operserv; type services; } +alias helpserv { type services; } +alias botserv { type services; } +alias bs { target botserv; type services; } +alias hostserv { type services; } +alias hs { target hostserv; type services; } +alias saslserv { type services; } +alias sss { target saslserv; type services; } +alias gameserv { type services; } +alias gms { target gameserv; type services; } +alias groupserv { type services; } +alias grs { target groupserv; type services; } +alias alis { type services; } +alias ls { target alis; type services; } + +include "aliases/aliases.conf"; + diff --git a/conf/aliases/auspice.conf b/conf/aliases/auspice.conf new file mode 100644 index 0000000..5a4b86b --- /dev/null +++ b/conf/aliases/auspice.conf @@ -0,0 +1,33 @@ +/* Auspice Aliases */ + +/* Uncomment this, if you have enabled "MassServ, W and X" in auspice */ +# alias massserv { type services; } +# alias ma { target massserv; type services; } +# alias W { type services; } +# alias X { type services; } + +/* Uncomment this, if you have enabled "WebServ" in auspice */ +# alias webserv { type services; } +# alias ws { target webserv; type services; } + +alias agent { type services; } +alias adminserv { type services; } +alias as { target adminserv; type services; } +alias botserv { type services; } +alias bs { target botserv; type services; } +alias chanserv { type services; } +alias cs { target chanserv; type services; } +alias helpserv { type services; } +alias hs { target helpserv; type services; } +alias hostserv { type services; } +alias ho { target hostserv; type services; } +alias memoserv { type services; spamfilter yes; } +alias ms { target memoserv; type services; spamfilter yes; } +alias nickserv { type services; } +alias ns { target nickserv; type services; } +alias operserv { type services; } +alias os { target operserv; type services; } +alias rootserv { type services; } +alias rs { target rootserv; type services; } + +include "aliases/aliases.conf"; diff --git a/conf/aliases/cygnus.conf b/conf/aliases/cygnus.conf new file mode 100644 index 0000000..96b90ec --- /dev/null +++ b/conf/aliases/cygnus.conf @@ -0,0 +1,12 @@ +/* Cygnus Aliases */ + +alias nickserv { type services; } +alias ns { target nickserv; type services; } +alias chanserv { type services; } +alias cs { target chanserv; type services; } +alias memoserv { type services; spamfilter yes; } +alias ms { target memoserv; type services; spamfilter yes; } +alias rootserv { type services; } +alias rs { target rootserv; type services; } + +include "aliases/aliases.conf"; diff --git a/conf/aliases/epona.conf b/conf/aliases/epona.conf new file mode 100644 index 0000000..73f868f --- /dev/null +++ b/conf/aliases/epona.conf @@ -0,0 +1,16 @@ +/* Epona Aliases */ + +alias nickserv { type services; } +alias ns { target nickserv; type services; } +alias chanserv { type services; } +alias cs { target chanserv; type services; } +alias memoserv { type services; spamfilter yes; } +alias ms { target memoserv; type services; spamfilter yes; } +alias operserv { type services; } +alias os { target operserv; type services; } +alias helpserv { type services; } +alias hs { target helpserv; type services; } +alias botserv { type services; } +alias bs { target botserv; type services; } + +include "aliases/aliases.conf"; diff --git a/conf/aliases/generic.conf b/conf/aliases/generic.conf new file mode 100644 index 0000000..24a83a2 --- /dev/null +++ b/conf/aliases/generic.conf @@ -0,0 +1,14 @@ +/* Generic Aliases */ + +alias nickserv { type services; } +alias ns { target nickserv; type services; } +alias chanserv { type services; } +alias cs { target chanserv; type services; } +alias memoserv { type services; spamfilter yes; } +alias ms { target memoserv; type services; spamfilter yes; } +alias operserv { type services; } +alias os { target operserv; type services; } +alias helpserv { type services; } +alias hs { target helpserv; type services; } + +include "aliases/aliases.conf"; diff --git a/conf/aliases/genericstats.conf b/conf/aliases/genericstats.conf new file mode 100644 index 0000000..01aa3f5 --- /dev/null +++ b/conf/aliases/genericstats.conf @@ -0,0 +1,4 @@ +/* Generic StatServ Aliases */ + +alias statserv { type stats; } +alias ss { target statserv; type stats; } diff --git a/conf/aliases/ircservices.conf b/conf/aliases/ircservices.conf new file mode 100644 index 0000000..2101fbb --- /dev/null +++ b/conf/aliases/ircservices.conf @@ -0,0 +1,17 @@ +/* IRCServices Aliases */ + +alias nickserv { type services; } +alias ns { target nickserv; type services; } +alias chanserv { type services; } +alias cs { target chanserv; type services; } +alias memoserv { type services; spamfilter yes; } +alias ms { target memoserv; type services; spamfilter yes; } +alias operserv { type services; } +alias os { target operserv; type services; } +alias helpserv { type services; } +alias hs { target helpserv; type services; } +alias irciihelp { type services; } +alias statserv { type services; } +alias ss { target statserv; type services; } + +include "aliases/aliases.conf"; diff --git a/conf/aliases/operstats.conf b/conf/aliases/operstats.conf new file mode 100644 index 0000000..61acce4 --- /dev/null +++ b/conf/aliases/operstats.conf @@ -0,0 +1,6 @@ +/* OperStats Aliases */ + +alias operserv { type stats; } +alias os { target operserv; type stats; } +alias statserv { type stats; } +alias ss { target statserv; type stats; } diff --git a/conf/badwords.conf b/conf/badwords.conf new file mode 100644 index 0000000..474b029 --- /dev/null +++ b/conf/badwords.conf @@ -0,0 +1,51 @@ +/* + Unreal Internet Relay Chat Daemon + Copyright (C) Carsten V. Munk 2000 + + NOTE: Those words are not meant to insult you (the user) + but is meant to be a list of words so that the +G channel/user mode + will work properly. You can easily modify this file at your will. + If you got words to add to this file, please mail badwords@tspre.org + + + + + + + This is some filling space, scroll down to see the words + + + + + + + + + + + + + + + + +*/ +badword all { word "pussy"; } +badword all { word "fuck"; } +badword all { word "whore"; } +badword all { word "slut"; } +badword all { word "shit"; } +badword all { word "asshole"; } +badword all { word "bitch"; } +badword all { word "cunt"; } +badword all { word "vagina"; } +badword all { word "penis"; } +badword all { word "jackass"; } +badword all { word "*fucker*"; } +badword all { word "faggot"; } +badword all { word "fag"; } +badword all { word "horny"; } +badword all { word "dickhead"; } +badword all { word "sonuvabitch"; } +badword all { word "*fuck*"; } +badword all { word "tits"; } diff --git a/conf/dccallow.conf b/conf/dccallow.conf new file mode 100644 index 0000000..7cc8e21 --- /dev/null +++ b/conf/dccallow.conf @@ -0,0 +1,42 @@ +/* Example of a possible semi-secure /DCCALLOW configuration written by Syzop. + * $Id$ + * + * Actually nothing is *100% secure*... there could still be + * bugs in the software itself (think: a winamp bug that can + * be exploited via an mp3, or: a wmplayer bug that can be + * exploited via a specially crafted .wmv, etc..). + * If you are really that paranoid you could just remove + * all 'allow dcc'-blocks and prompt the user for EVERY file ;). + * + * Still, I think this file is a good tradeoff between userfriendlyness + * and security. Note that when you try to only DENY specific + * file type (exe, com, etc) you are *guaranteed* to miss ones + * (like: did you know .r17 gets treated as a rar archive? + * and that an exe can be disguished as .cmd which is executable + * on nt/w2k/xp?) + */ + +/* first.. deny everything, then allow known-good stuff... */ +deny dcc { filename "*"; reason "Possible executable content"; soft yes; } +/* common image formats */ +allow dcc { filename "*.jpg"; soft yes; } +allow dcc { filename "*.jpeg"; soft yes; } +allow dcc { filename "*.gif"; soft yes; } +allow dcc { filename "*.png"; soft yes; } +allow dcc { filename "*.bmp"; soft yes; } +/* audio / video (but not scripted/playlists!) */ +allow dcc { filename "*.mp1"; soft yes; } +allow dcc { filename "*.mp2"; soft yes; } +allow dcc { filename "*.mp3"; soft yes; } +allow dcc { filename "*.mpg"; soft yes; } +allow dcc { filename "*.mpeg"; soft yes; } +allow dcc { filename "*.m1v"; soft yes; } +allow dcc { filename "*.m2v"; soft yes; } +allow dcc { filename "*.vob"; soft yes; } +allow dcc { filename "*.wav"; soft yes; } +/* text / misc */ +allow dcc { filename "*.txt"; soft yes; } +allow dcc { filename "*.log"; soft yes; } +allow dcc { filename "*.pdf"; soft yes; } +allow dcc { filename "*.c"; soft yes; } +allow dcc { filename "*.cpp"; soft yes; } diff --git a/conf/help/help.conf b/conf/help/help.conf new file mode 100644 index 0000000..dd6b9c2 --- /dev/null +++ b/conf/help/help.conf @@ -0,0 +1,1463 @@ +/* UnrealIRCd 5 Help Configuration + * Based on the original help text written by hAtbLaDe + * Revised by CC (07/2002) and many others + */ + +help { + " Server Commands Help."; + " Specify your Question after the /HELPOP command."; + " You will find all of the server commands and options"; + " available for use."; + " If you need extra assistance please visit the server's"; + " help channel or ask an available IRCop."; + " -"; + " /HELPOP USERCMDS - To get the list of User Commands"; + " /HELPOP OPERCMDS - To get the list of Oper Commands"; + " /HELPOP SVSCMDS - Commands sent via U-Lined Server (Services)"; + " /HELPOP UMODES - To get the list of User Modes"; + " /HELPOP SNOMASKS - To get a list of Snomasks"; + " /HELPOP CHMODES - To get the list of Channel Modes"; + " -"; + " ==-------------------------oOo--------------------------=="; +} + +/* note: indexes were generated by cat somecmds|sort|column -c 70 + * along with tab->space conversion (tabwidth 8). + * Perhaps we should automate this step :). -- Syzop + */ + +help Usercmds { + " Currently the following User commands are available."; + " Use /HELPOP to get more information about"; + " a specific command."; + " -"; + " ==-------------------------oOo-------------------------=="; + " ADMIN LICENSE PART USERHOST"; + " AWAY LINKS PING USERIP"; + " CREDITS LIST PONG VERSION"; + " CYCLE LUSERS PRIVMSG VHOST"; + " DALINFO MAP QUIT WATCH"; + " DCCALLOW MODE RULES WHO"; + " INVITE MODULE SETNAME WHOIS"; + " ISON MOTD SILENCE WHOWAS"; + " JOIN NAMES STATS"; + " KICK NICK TIME"; + " KNOCK NOTICE TOPIC"; + " ==-------------------------oOo-------------------------=="; +} + +help Opercmds { + " This section gives the IRC Operator only commands."; + " Use /HELPOP to get more information about"; + " a specific command."; + " -"; + " See also https://www.unrealircd.org/docs/IRCOp_guide"; + " -"; + " ==-------------------------oOo-------------------------=="; + " DNS SETIDENT"; + " ADDMOTD ELINE OPER SHUN"; + " ADDOMOTD GLINE OPERMOTD SPAMFILTER"; + " GLOBOPS REHASH SQUIT"; + " CHGHOST GZLINE RESTART TEMPSHUN"; + " CHGIDENT KILL TRACE"; + " CHGNAME KLINE SAJOIN TSCTL"; + " CLOSE LAG SAMODE UNDCCDENY"; + " CONNECT LOCOPS SAPART WALLOPS"; + " DCCDENY MKPASSWD SDESC ZLINE"; + " DIE MODULE SETHOST"; + " ==-------------------------oOo-------------------------=="; +} + +help Svscmds { + " This section gives the commands that can be"; + " sent via a U-Lined Server such as Services."; + " The command is typically sent as:"; + " /MSG OPERSERV RAW :services "; + " Use /HELPOP to get more information about"; + " a specific command."; + " -"; + " ==-------------------------oOo-------------------------=="; + " SQLINE SVSKILL SVSNLINE SVSSILENCE"; + " SVS2MODE SVSLUSERS SVSNOLAG SVSSNO"; + " SVS2SNO SVSMODE SVSNOOP SVSWATCH"; + " SVSFLINE SVSMOTD SVSO SWHOIS"; + " SVSJOIN SVSNICK SVSPART UNSQLINE"; + " ==-------------------------oOo-------------------------=="; +} + +help Umodes { + " Here is a list of all the usermodes which are available for use."; + " -"; + " ==---------------------------oOo---------------------------=="; + " o = IRC Operator"; + " -"; + " d = Only receive channel PRIVMSGs starting with a bot command character (Deaf)"; + " i = Invisible (Not shown in /WHO searches)"; + " p = Hide all channels in /whois and /who"; + " q = Only U-Lines can kick you (Services Admins/Net Admins only)"; + " r = Identifies the nick as being Registered (settable by services only)"; + " s = Can listen to Server notices"; + " t = Says that you are using a /VHOST"; + " w = Can listen to Wallop messages"; + " x = Gives the user Hidden Hostname (security)"; + " z = Marks the client as being on a Secure Connection (SSL)"; + " B = Marks you as being a Bot"; + " D = Only receive PRIVMSGs from IRCOps, servers and services (privdeaf)"; + " G = Filters out all Bad words in your messages with "; + " H = Hide IRCop status in /WHO and /WHOIS. (IRC Operators only)"; + " I = Hide an oper's idle time (in /whois output) from regular users."; + " R = Allows you to only receive PRIVMSGs/NOTICEs from registered (+r) users"; + " S = For Services only. (Protects them)"; + " T = Prevents you from receiving CTCPs"; + " W = Lets you see when people do a /WHOIS on you (IRC Operators only)"; + " Z = Only receive/send PRIVMSGs from/to users using a Secure Connection (SSL)"; + " ==---------------------------oOo---------------------------=="; +} + +help Snomasks { + " Snomask stands for 'Service NOtice MASK', it (mainly) controls which"; + " server notices you will receive."; + " Usage: /MODE nick +s "; + " Ex: /MODE blah +s +cF-j"; + " The parameter specifies which snomasks you want (or don't want)."; + " You can also remove all snomasks by simply doing /MODE nick -s."; + "-"; + " Below is a list of possible snomasks:"; + " ==-------------------------oOo-----------------------=="; + " b = View blacklist hits"; + " c = View connects/disconnects on local server"; + " e = View 'Eyes' server messages (OperOverride, /CHG* and /SET* usage, ..)"; + " f = View flood alerts"; + " F = View connects/disconnects on remote servers (except U-Lines)"; + " G = View TKL notices (Gline, GZline, Shun, etc)"; + " j = View Junk notices (not recommended for normal use)"; + " k = View KILL notices"; + " n = View nick changes on local server"; + " N = View nick changes on remote servers"; + " o = View oper-up notices"; + " q = View rejected nick changes due to Q-Lines"; + " s = View general notices"; + " S = View spamfilter matches"; + " v = View usage of /VHOST command"; + " ==-------------------------oOo------------------------=="; +} + +help Chmodes { + " This section lists all of the possible channel modes that may be used with /MODE"; + " -"; + " ==------------------------------oOo----------------------------=="; + " v = Gives Voice to the user (May talk if chan is +m)"; + " h = Gives HalfOp status to the user (Limited op access)"; + " o = Gives Operator status to the user"; + " a = Gives Channel Admin to the user"; + " q = Gives Owner status to the user"; + " -"; + " b = Bans the nick!ident@host from the channel [h]"; + " (For more info on extended bantypes, see /HELPOP EXTBANS)"; + " c = Block messages containing mIRC color codes [o]"; + " C = No CTCPs allowed in the channel [h]"; + " D = Delay showing joins until someone actually speaks [o]"; + " e = Overrides a ban for matching users [h]"; + " f = Flood protection (for more info see /HELPOP CHMODEF) [o]"; + " G = Filters out all Bad words in messages with [o]"; + " H = Record channel history with specified maximums [o]"; + " i = A user must be invited to join the channel [h]"; + " I = Overrides +i for matching users [h]"; + " k = Users must specify to join [h]"; + " K = /KNOCK is not allowed [h]"; + " L = Channel link (if unable to join, user will be forwarded to ) [o]"; + " l = Channel may hold at most of users [h]"; + " m = Moderated channel (only +vhoaq users may speak) [h]"; + " M = Must be using a registered nick (+r), or have voice access to talk [h]"; + " N = No Nickname changes are permitted in the channel [h]"; + " n = Users outside the channel can not send PRIVMSGs to the channel [h]"; + " O = IRC Operator only channel (settable by IRCops)"; + " p = Private channel [o]"; + " P = Permanent channel (the channel is not destroyed when empty) (settable by IRCops)"; + " Q = No kicks allowed [o]"; + " R = Only registered (+r) users may join the channel [h]"; + " r = The channel is registered (settable by services only)"; + " s = Secret channel [o]"; + " S = Strips mIRC color codes [o]"; + " T = No NOTICEs allowed in the channel [o]"; + " t = Only +hoaq may change the topic [h]"; + " V = /INVITE is not allowed [o]"; + " z = Only Clients on a Secure Connection (SSL) can join [o]"; + " Z = All users on the channel are on a Secure connection (SSL) [server]"; + " (This mode is set/unset by the server. Only if the channel is also +z)"; + " -"; + " [h] requires at least halfop, [o] requires at least chanop"; + " ==------------------------------oOo----------------------------=="; +} + +help ExtBans { + " These bans let you ban based on things other than the traditional nick!user@host"; + " mask. These bans start with a tilde, followed by a letter denoting the extban type."; + " For example +b ~q:nick!user@host denotes a quiet extban."; + " -"; + " The following ban type can be used in front of any (ext)ban:"; + " ==-Type--------Name---------------------------Explanation-----------------------=="; + " | | Timed bans are automatically unset by the server after "; + " ~t | timedban | the specified number of minutes. For example: "; + " | | +b ~t:3:*!*@hostname "; + " ==------------------------------------------------------------------------------=="; + " -"; + " These bantypes specify which actions are affected by a ban:"; + " ==-Type--------Name---------------------------Explanation-----------------------=="; + " | | People matching these bans can join but are unable to "; + " ~q | quiet | speak, unless they have +v or higher. "; + " | | Example: "; + " | | +bb ~q:*!*@blah.blah.com ~q:nick*!*@* "; + "-----------------------------------------------------------------------------------"; + " | | People matching these bans cannot change nicks, unless "; + " ~n | nickchange | they have +v or higher. "; + " | | Example: "; + " | | +bb ~n:*!*@*.aol.com ~n:nick*!*@* "; + "-----------------------------------------------------------------------------------"; + " | | If a user matches this, he may not join the channel. "; + " ~j | join | He may perform all other activities if he is already on "; + " | | the channel, such as speaking and changing his nick. "; + "-----------------------------------------------------------------------------------"; + " | | Bypass message restrictions. This extended ban is only "; + " | | available as +e and not as +b. Syntax: +e ~m:type:mask. "; + " | | Valid types: 'external' (bypass +n), 'censor' (bypass +G),"; + " | | 'moderated' (bypass +m/+M), 'color' (bypass +S/+c), and "; + " ~m | msgbypass | 'notice' (bypass +T). Some examples: "; + " | | +e ~m:moderated:*!*@192.168.* Allow IP to bypass +m "; + " | | +e ~m:external:*!*@192.168.* Allow IP to bypass +n "; + " | | +e ~m:color:~a:ColorBot Allow account 'ColorBot' "; + " | | to bypass +c "; + "-----------------------------------------------------------------------------------"; + " | | If a user matches the ban, he will be forwarded to the "; + " ~f | forward | specified channel. For example: "; + " | | +b ~f:#badisp:*!*@*.isp.xx "; + " ==------------------------------------------------------------------------------=="; + " -"; + " These bantypes introduce new criteria which can be used:"; + " ==-Type--------Name---------------------------Explanation-----------------------=="; + " | | If a user is logged in to services with this account "; + " ~a | account | name, then this ban will match. "; + " | | Example: +e ~a:Name "; + "-----------------------------------------------------------------------------------"; + " | | If the user is in this channel then (s)he is unable to "; + " | | join. A prefix can also be specified (+/%/@/&/~) which "; + " ~c | channel | means that it will only match if the user has that "; + " | | rights or higher on the specified channel. "; + " | | Example: +b ~c:#lamers, +e ~c:@#trusted "; + "-----------------------------------------------------------------------------------"; + " | | If the user is an IRCOp and is logged in with an oper "; + " | | block with a matching oper::operclass name then this "; + " ~O | operclass | will match. This way you can create channels which only "; + " | | specific type(s) of opers may join. Set +i and use +I. "; + " | | Example: +iI ~O:*admin* "; + "-----------------------------------------------------------------------------------"; + " | | If the realname of a user matches this then (s)he is "; + " | | unable to join. "; + " ~r | realname | Example: +b ~r:*Stupid_bot_script* "; + " | | NOTE: an underscore ('_') matches both a space (' ') and"; + " | | an underscore ('_'), so this ban would "; + " | | match 'Stupid bot script v1.4'. "; + "-----------------------------------------------------------------------------------"; + " | | When a user is using SSL/TLS with a client certificate "; + " | | then you can match the user by his/her SSL fingerprint "; + " ~S | certfp | (the one you see in /WHOIS). Mostly useful for safe "; + " | | ban exceptions and invite exceptions. "; + " | | Example: +iI ~S:00112233445566778899aabbccddeeff..etc.. "; + "-----------------------------------------------------------------------------------"; + " | | Channel-specific text filtering. Supports two actions: "; + " ~T | textban | 'censor' and 'block'. Two examples: "; + " | | +b ~T:censor:*badword* and +b ~T:block:*something* "; + " ==------------------------------------------------------------------------------=="; + " -"; + "You may stack extended bans from the 2nd group with the 3rd group."; + "For example +b ~q:~c:#lamers would quiet all users who are also in #lamers."; + "Bans from the 3rd group may also be used for invite exceptions (+I),"; + "such as +I ~c:@#trusted and +I ~a:accountname."; +} + +help Chmodef { + " The +f channel mode provides comprehensive flood protection for a channel."; + " This mode allows you to prevent join, nick change, CTCP, text, and knock"; + " floods. The syntax for this mode's parameter is as follows:"; + " -"; + " +f [{#}{,...}]:"; + " -"; + " The amount specifies the number of times the specified flood must occur"; + " before action is taken. Below are the available types:"; + " -"; + " ==-----Type-----Name--------Default Action---Other Actions-----=="; + " c CTCP +C m, M"; + " j Join +i R"; + " k Knock +K"; + " m Messages +m M, d"; + " n Nickchange +N"; + " t Text kick b, d"; + " r Repeat kick d, b"; + " -"; + " The difference between type m and t is that m is tallied for the entire"; + " channel whereas t is tallied per user."; + " -"; + " If you choose to specify an action for a mode, you may also specify a"; + " time (in minutes) after which the specific action will be reversed."; +} + +help Nick { + " Changes your \"Online Identity\" on a server."; + " All those in the channel you are in will be"; + " alerted of your nickname change."; + " -"; + " Syntax: NICK "; + " Example: NICK hAtbLaDe"; +} + +help Whois { + " Shows information about the user in question,"; + " such as their \"Name\", channels they are"; + " currently in, their hostmask, etc."; + " -"; + " Syntax: WHOIS "; + " Example: WHOIS hAtbLaDe"; + " -"; + " Status flags:"; + " The list of channels shown in the WHOIS reply can include one or more"; + " status flags to indicate information about the channel. These flags are"; + " described below:"; + " ~ - User is a Channel Owner (+q)"; + " & - User is a Channel Admin (+a)"; + " @ - User is a Channel Operator (+o)"; + " % - User is a Halfop (+h)"; + " + - User is Voiced (+v)"; + " ! - User has channels hidden in whois (+p) and you are an IRC Operator"; + " ? - The channel is secret (+s) and you are an IRC Operator"; +} + +help Who { + " Retrieves information about users"; + " In its most simple form the syntax is 'WHO #channel' or 'WHO nickname'"; + " However we also support the extended who syntax (WHOX):"; + " -"; + " Syntax:"; + " /WHO [options]"; + " /WHO [options [mask2]]"; + " -"; + " The mask can contain wildcards such as * and ?"; + " -"; + " The options consist of [][%[[,]]]"; + " Where:"; + " The define where to SEARCH on, and may contain one or more letters:"; + " n: nick name"; + " u: user name (ident)"; + " h: host name [*]"; + " i: IP address [*]"; + " s: server name [*]"; + " r: real name (gecos)"; + " a: account name (services account)"; + " m: user modes (the mask contains for example +z or -z) [*]"; + " R: sets output to show real hostnames [*]"; + " I: sets output to show IP addresses [*]"; + " Items marked with [*] mean that IRCOp privileges are (possibly) required."; + " The decide which fields appear in the WHO output"; + " (note that any fields are always outputed in this order:)"; + " t: querytype (the parameter that was provided in )"; + " c: first channel name the user is on"; + " u: user name (ident)"; + " i: IP Address [*]"; + " h: hostname [*]"; + " H: real hostname [*]"; + " s: server name"; + " n: nick name"; + " f: status flags (explained later)"; + " m: user modes [*]"; + " d: number of server hops (eg: 0 means user is on same server)"; + " l: seconds idle (only for users on the same server as you, otherwise 0)"; + " a: account name (services account)"; + " o: operclass name [*]"; + " R: reputation score [*]"; + " r: real name (gecos)"; + " Items marked with [*] mean that IRCOp privileges are (possibly) required."; + " And finally, the is a word that clients can use to tag"; + " WHO requests so they can easily see which WHO response belongs to"; + " what WHO request."; + " -"; + " Examples of simple WHO requests:"; + " WHO #channel - To list all users in a channel"; + " WHO 1.2.3.4 - To show all users with this IP address (IRCOp only)"; + " Examples of WHOX requests:"; + " WHO Servic* n - Show all users which name starts with Servic"; + " (Only IRCOps are likely to see the full list)"; + " WHO #chan cI - Show all users in channel #chan with their"; + " IP address instead of hostname (IRCOp only)"; + " WHO z m - Show all users with user mode z set, that is:"; + " all users on SSL/TLS. (IRCOp only command)"; + " WHO -z m - Show all insecure users, without umode z."; + " (IRCOp only command)"; + " Examples of WHOX requests using output modifiers:"; + " WHO #test %acfhnru - Show all users in the channel #test and show"; + " various fields, among which 'a' (services"; + " account) is not displayed by normal WHO."; + " -"; + " Status flags:"; + " The WHO command shows several flags in the returned result to indicate"; + " different information about the user. These flags are explained below:"; + " G - User is /away (gone)"; + " H - User is not /away (here)"; + " r - User is using a registered nickname"; + " B - User is a bot (+B)"; + " s - User is securely connected (SSL/TLS)"; + " * - User is an IRC Operator"; + " ~ - User is a Channel Owner (+q)"; + " & - User is a Channel Admin (+a)"; + " @ - User is a Channel Operator (+o)"; + " % - User is a Halfop (+h)"; + " + - User is Voiced (+v)"; + " ! - User is +H and you are an IRC Operator"; + "-"; +} + +help Whowas { + " Retrieves previous WHOIS information for users"; + " no longer connected to the server."; + " -"; + " Syntax: WHOWAS "; + " WHOWAS "; + " Example: WHOWAS hAtbLaDe"; +} + +help Cycle { + " Cycles the given channel(s). This command is equivilent"; + " to sending a PART then a JOIN command."; + " -"; + " Syntax: CYCLE ,,"; + " Example: CYCLE #help"; + " Example: CYCLE #main,#chat"; +} + +help Dns { + " Returns information about the IRC server's DNS cache."; + " Note, since most clients have a builtin DNS command,"; + " you will most likely need to use /raw DNS to use this."; + " There are also 2 other variants:"; + " 'DNS l' will show you the DNS cache entries"; + " 'DNS i' will give you details about the nameserver config"; + " -"; + "Syntax: DNS [option]"; +} + +help Names { + " Provides a list of users on the specified channel."; + " -"; + "Syntax: NAMES "; + "Example: NAMES #Support"; +} + +help Ison { + " Used to determine if certain user(s) are"; + " currently online based upon their nickname."; + " -"; + " Syntax: ISON "; + " Example: ISON hAtbLaDe Stskeeps OperServ AOLBot"; +} + +help Join { + " Used to enter one or more channels on an IRC server."; + " All occupants of the channel will be notified of your arrival."; + " JOIN with 0 as a parameter makes you Part all channels."; + " If you specify one or more keys, they will be used to join a +k channel"; + " -"; + " Syntax: JOIN ,, ,,"; + " JOIN 0 (Parts all channels)"; + " Example: JOIN #Support"; + " JOIN #Lobby,#IRCd"; + " JOIN #IRCd,#Support,#main letmein,somepass,anotherpass"; +} + +help Part { + " Used to part (or leave) a channel you currently occupy."; + " All those in the channel will be notified of your departure."; + " If you specify a reason it will be displayed to the users on the channel"; + " -"; + " Syntax: PART ,,, "; + " Example: PART #Support"; + " PART #Lobby,#IRCd See ya later!"; +} + +help Motd { + " Displays the Message Of The Day of the IRC Server you are logged onto."; + " -"; + " Syntax: MOTD"; + " MOTD "; +} + +help Rules { + " Shows you the Rules of the Network."; + " -"; + " Syntax: RULES"; + " RULES "; +} + +help Lusers { + " Provides Local and Global user information"; + " (Such as Current and Maximum user count)."; + " -"; + " Syntax: LUSERS [server]"; +} + +help Map { + " Provides a graphical \"Network Map\" of the IRC network."; + " Mainly used for routing purposes."; + " -"; + " Syntax: MAP"; +} + +help Quit { + " Disconnects you from the IRC server. Those in the"; + " channels you occupy will be notified of your departure."; + " If you do not specify a reason, your nickname becomes the reason."; + " -"; + " Syntax: QUIT "; + " Example: QUIT Leaving!"; +} + +help Ping { + " The PING command is used to test the presence of an active client or"; + " server at the other end of the connection. Servers send a PING"; + " message at regular intervals if no other activity detected coming"; + " from a connection. If a connection fails to respond to a PING"; + " message within a set amount of time, that connection is closed. A"; + " PING message MAY be sent even if the connection is active."; + " Note that this is different from a CTCP PING command.."; + " -"; + " Syntax: PING "; + " Example: PING irc.example.org"; + " PING hAtbLaDe"; + " PING hAtbLaDe irc2.dynam.ac"; +} + +help Pong { + " PONG message is a reply to PING message. If parameter is"; + " given, this message will be forwarded to given target. The "; + " parameter is the name of the entity who has responded to PING message"; + " and generated this message."; + " -"; + " Syntax: PONG "; + " Example: PONG irc.example.org irc2.dynam.ac"; + " (PONG message from irc.example.org to irc2.dynam.ac)"; +} + +help Version { + " Provides Version information of the IRCd software in usage."; + " -"; + " Syntax: VERSION"; + " VERSION "; +} + +help Stats { + " Provides certain Statistical information about the server"; + " -"; + " Syntax: STATS "; + " Example: STATS u"; + " -"; + " Type /stats without parameters to get a list of available flags."; +} + +help Links { + " Lists all of the servers currently linked to the network."; + " Only IRCops can see linked U-Lined servers."; + " -"; + " Syntax: LINKS"; +} + +help Admin { + " Provides Administrative information regarding the server."; + " -"; + " Syntax: ADMIN"; + " ADMIN "; +} + +help Userhost { + " Returns the userhost of the user in question."; + " Usually used by scripts or bots."; + " -"; + " Syntax: USERHOST "; + " Example: USERHOST hAtbLaDe"; +} + +help Userip { + " Returns the userip of the user in question."; + " Usually used by scripts or bots."; + " -"; + " Syntax: USERIP "; + " Example: USERIP codemastr"; +} + +help Topic { + " Sets/Changes the topic of the channel in question,"; + " or just display the current Topic."; + " -"; + " Syntax: TOPIC (Displays the current topic)"; + " TOPIC (Changes topic)"; + " Example: TOPIC #Operhelp"; + " TOPIC #Lobby Welcome to #Lobby!!"; +} + +help Invite { + " Sends a user an Invitation to join a particular channel."; + " If the channel is +i, you must be an Operator to use this"; + " command, otherwise any user may use the command."; + " Invite without parameters lists the channels you have been"; + " invited to."; + " -"; + " Syntax: INVITE [ ]"; + " Example: INVITE hAtbLaDe #Support"; + " Example: INVITE"; +} + +help Kick { + " Removes a user from a channel. Can only be used by Operators"; + " or Half-Ops. If no reason is specified, your nickname becomes the reason."; + " -"; + " Syntax: KICK [reason]"; + " Example: KICK #Lobby foobar Lamer.."; +} + +help Away { + " Sets your online status to \"Away\"."; + " -"; + " Syntax: AWAY (Sets you Away with the reason given)"; + " AWAY (Un-Sets you as Away)"; + " Example: AWAY Lunch time!"; +} + +help Watch { + " Watch is a notify-type system on the server which is both faster"; + " and uses less network resources than any old-style notify"; + " system. The server will send you a message when any nickname"; + " in your watch list logs on or off."; + " The watch list DOES NOT REMAIN BETWEEN SESSIONS - You (or your"; + " script or client) must add the nicknames to your watch list every"; + " time you connect to an IRC server."; + " -"; + " Syntax: WATCH +nick1 +nick2 +nick3 (Add nicknames)"; + " WATCH -nick (Delete nicknames)"; + " WATCH (View which users are online)"; +} + +help List { + " Provides a complete listing of all channels on the network."; + " If a search string is specified, it will only show those"; + " matching the search string."; + " -"; + " Syntax: LIST "; + " Example: LIST"; + " LIST *ircd*"; + " -"; + " Some additional flags are also supported."; + " >number List channels with more than people"; + " people"; + " !*mask* List channels that do not match *mask*"; + " -"; + " Any of those may be used instead of a standard mask."; +} + +help Privmsg { + " Send a message to a user, channel or server."; + " /PRIVMSG "; + " Send a private message."; + " Ex: /PRIVMSG Blah hi, how are you?"; + " /PRIVMSG <#channel> "; + " Send a message to a channel."; + " Ex: /PRIVMSG #room Hi all"; + " /PRIVMSG <#channel> "; + " Send a message to users with and higher in <#channel> only"; + " Ex: /PRIVMSG @#room This goes to +oaq"; + " /PRIVMSG +#room This goes to +vhoaq"; + " NOTE: You need at least voice in order to send to +#chan/%#chan/@#chan"; + " and at least ops to send to &#chan/~#chan."; + " /PRIVMSG $ "; + " Send a message to all users on servers matching [Oper only]"; + " This is shown in the status window by most clients."; + " Ex: /PRIVMSG $*.example.org We will be upgrading our net in the next hour"; + " Note that in most cases services (/OS GLOBAL) is a better alternative."; + " -"; + " Multiple targets are also supported, like /PRIVMSG ,,."; + " -"; + " NOTE: In case of some old clients (eg: ircII) you cannot use /msg"; + " or /privmsg to use any of the 'advanced features', you'll then have to use:"; + " '/QUOTE PRIVMSG @#channel blah' or something similar."; +} + +help Notice { + " Send a notice to a user, channel or server."; + " /NOTICE "; + " Send a notice to a user."; + " Ex: /NOTICE Blah hi, how are you?"; + " /NOTICE <#channel> "; + " Send a notice to a channel."; + " Ex: /NOTICE #room Hi all, this is annoying"; + " /NOTICE <#channel> "; + " Send a notice to users with and higher in <#channel> only"; + " Ex: /NOTICE @#room This goes to +oaq"; + " /NOTICE +#room This goes to +vhoaq"; + " NOTE: You need at least voice in order to send to +#chan/%#chan/@#chan"; + " and at least ops to send to &#chan/~#chan."; + " /NOTICE $ "; + " Send a notice to all users on servers matching [Oper only]"; + " This is shown in the status window by most clients."; + " Ex: /NOTICE $*.example.org We will be upgrading our net in the next hour"; + " Note that in most cases services (/OS GLOBAL) is a better alternative."; + " -"; + " Multiple targets are also supported, like /NOTICE ,,."; + " -"; + " NOTE: In case of some old clients (eg: ircII) you cannot use /notice"; + " to use any of the 'advanced features', you'll then have to use:"; + " '/QUOTE NOTICE @#channel blah' or something similar."; +} + +help Knock { + " For channels which are invite only, you can \"Knock\" on the"; + " channel to request an invite."; + " -"; + " Syntax: KNOCK "; + " Example: KNOCK #secret_chan I'm an op, let me in!"; +} + +help Setname { + " Allows users to change their \"Real name\" (GECOS)"; + " directly online at IRC without reconnecting"; + " -"; + " Syntax: SETNAME "; +} + +help Vhost { + " Hides your real hostname with a virtual hostname"; + " provided by the IRC server , using SETHOST."; + " -"; + " Syntax: VHOST "; + " Example: VHOST openbsd ilovecypto"; +} + +help Mode { + " Sets a mode on a Channel or User."; + " Use /HELPOP CHMODES or /HELPOP UMODES to see a list of Modes"; + " -"; + " Syntax: MODE "; + " Example: MODE #Support +tn"; + " MODE #Support +ootn hAtbLaDe XYZ"; +} + +help Credits { + " This command will list the Credits to all the people who"; + " helped create UnrealIRCd."; + " -"; + " Syntax: CREDITS"; + " CREDITS "; +} + +help Dalinfo { + " This command will show historical credits (from ircu, etc..)"; + " -"; + " Syntax: DALINFO"; + " Syntax: DALINFO "; +} + +help License { + " This command displays information about the license UnrealIRCd is released under."; + " Syntax: LICENSE"; + " LICENSE "; +} + +help Time { + " Displays the current Server Date and Time."; + " -"; + " Syntax: TIME"; + " TIME "; +} + +help Silence { + " Ignores messages from a user or list of users at the Server itself."; + " -"; + " Syntax: SILENCE +nickname (Adds a nickname to SILENCE list)"; + " SILENCE -nickname (Removes a nickname from the SILENCE list)"; + " SILENCE (Lists the current SILENCE list)"; +} + +help Oper { + " Attempts to give a user IRC Operator status."; + " (Lets the IRCop oper up)"; + " -"; + " Syntax: OPER "; + " Note: both uid and password are case sensitive"; + " Example: OPER hAtbLaDe foobar234"; +} + +help Wallops { + " Sends a \"Message\" to all those with the umode +w."; + " Only IRCops can send Wallops, while anyone with the mode +w"; + " can view them."; + " -"; + " Syntax: WALLOPS "; +} + +help Locops { + " Sends a message to all IRCops at this server (local)."; + " -"; + " Syntax: LOCOPS "; + " Example: LOCOPS Gonna K-Line that user ..."; +} + +help Globops { + " Sends a message to all ircops (global)."; + " -"; + " Syntax: GLOBOPS "; + " Example: GLOBOPS Gonna K-Line that user ..."; +} + +help Kill { + " Forcefully Disconnects users from an IRC Server."; + " IRC Operator only command."; + " -"; + " Syntax: KILL ,,,... "; + " Example: KILL Jack16 Cloning is not allowed"; +} + +help Kline { + " This command provides timed K-Lines. If you match a K-Line you cannot"; + " connect to the server"; + " A time of 0 in the KLINE makes it permanent (Never Expires)."; + " You may also specify the time in the format 1d10h15m30s."; + " IRC Operator only command."; + " -"; + " Syntax: KLINE [time] (adds a K-Line)"; + " KLINE - (removes a K-Line)"; + " Example: KLINE *@*.aol.com Abuse (Adds a permanent K-Line)"; + " KLINE *@*.someisp.com 2d Abuse (Adds a K-Line for 2 days)"; + " KLINE Idiot 1d Please go away"; + " KLINE -*@*.aol.com"; + " -"; + " Soft actions (more info at https://www.unrealircd.org/docs/Actions)"; + " Syntax: KLINE % [time] (adds a soft K-Line)"; + " KLINE -% (removes a soft K-Line)"; + " Example: KLINE %*@*.aol.com Abuse (Adds a permanent soft K-Line)"; + " KLINE %*@*.someisp.com 2d Abuse (Adds a soft K-Line for 2 days)"; + " KLINE %Idiot 1d Please go away"; + " KLINE -%*@*.aol.com"; + " -"; + " Extended server bans (more info at https://www.unrealircd.org/docs/Extended_server_bans)"; + " Syntax: KLINE ~: [time] "; + " Example: KLINE ~r:*Stupid_bot_script*"; + +} + +help Zline { + " This command provides timed Z-Lines. If you match a Z-Line you cannot"; + " connect to the server"; + " A time of 0 in the ZLINE makes it permanent (Never Expires)."; + " You may also specify the time in the format 1d10h15m30s."; + " IRC Operator only command."; + " -"; + " Syntax: ZLINE <*@ipmask> [time] (adds a Z-Line)"; + " ZLINE -<*@ipmask> (removes a Z-Line)"; + " Example: ZLINE *@127.0.0.1 Abuse (Adds a permanent Z-Line)"; + " ZLINE *@127.0.0.1 2d Abuse (Adds a Z-Line for 2 days)"; + " ZLINE -*@127.0.0.1"; + " -"; + " Extended server bans (more info at https://www.unrealircd.org/docs/Extended_server_bans)"; + " Syntax: ZLINE ~: [time] "; + " Example: ZLINE ~r:*Stupid_bot_script*"; + " -"; + " NOTE: requires the can_zline oper flag"; +} + +help Gline { + " This command provides timed G-Lines. If you match a G-Line you cannot"; + " connect to ANY server on the IRC network"; + " A time of 0 in the GLINE makes it permanent (Never Expires)."; + " You may also specify the time in the format 1d10h15m30s."; + " IRC Operator only command."; + " -"; + " Syntax: GLINE [time] "; + " (Adds a G-Line for user@host)"; + " GLINE - (Removes a G-Line for user@host)"; + " Example: GLINE *@*.idiot.net 900 Spammers (Adds a 15 min G-Line)"; + " GLINE *@*.idiot.net 1d5h Spammers (Adds a 29 hour G-Line)"; + " GLINE Idiot 1d Abuse"; + " GLINE -*@*.idiot.net"; + " -"; + " Soft Actions (More info at https://www.unrealircd.org/docs/Actions)"; + " -"; + " Syntax: GLINE % [time] "; + " (Adds a G-Line for user@host, but still allows the connection if the"; + " user has a registered account and identifies using SASL)"; + " GLINE -% (Removes a soft G-Line for user@host)"; + " Example: GLINE %*@*.idiot.net 900 Spammers (Adds a 15 min soft G-Line)"; + " GLINE %*@*.idiot.net 1d5h Spammers (Adds a 29 hour soft G-Line)"; + " GLINE %Idiot 1d Abuse"; + " GLINE -%*@*.idiot.net"; + " -"; + " Extended server bans (more info at https://www.unrealircd.org/docs/Extended_server_bans)"; + " Syntax: GLINE ~: [time] "; + " Example: GLINE ~r:*Stupid_bot_script*"; + " Supported are:"; + " a - Services account name"; + " r - gecos/realname string"; + " S - SSL/TLS client certificate fingerprint"; + " -"; + " NOTE: requires the can_gkline oper flag"; +} + +help Shun { + " Prevents a user from executing ANY command except ADMIN"; + " and respond to Server Pings. Shuns are global (like glines)."; + " A time of 0 in the SHUN makes it permanent (Never Expires)."; + " You may also specify the time in the format 1d10h15m30s."; + " IRC Operator only command."; + " -"; + " Syntax: SHUN