/************************************************************************ * Unreal Internet Relay Chat Daemon, src/help.c * Copyright (C) 1996 DALnet * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 1, or (at your option) * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ /* * Updated with the latest UnrealIRCd Commands , * as of Unreal 3.1.1-DarkShades .. * * Last Modified : 28/11/2000 * Version : v2.0 * - hAtbLaDe * */ #include "struct.h" #include "common.h" #include "sys.h" #include "h.h" #include "proto.h" ID_Copyright("DALnet , Techie & hAtbLaDe"); ID_Notes("6.20 7/5/99"); void xx(sptr, str, num) aClient *sptr; char *str; int num; { if (sptr == NULL) { printf("%s\n", str); return; } sendto_one(sptr, ":%s %i %s :%s", me.name, num, sptr->name, str); } #define HDR(str) xx(sptr, str, 290) #define SND(str) xx(sptr, str, 291) #define FTR(str) xx(sptr, str, 292) #define HLP(str) xx(sptr, str, 293) extern struct Message msgtab[]; int parse_help(sptr, name, help) aClient *sptr; char *name; char *help; { int i; if (BadPtr(help)) { SND(" -"); HDR(" ***** UnrealIRCd Help System *****"); SND(" -"); SND(" Specify your Question after the /HELPOP command."); SND(" If the request cannot be satisfied by the Server,"); SND(" it will be forwarded to the appropriate Help Operators"); SND(" A prefix of ! will send the Question directly to Help Ops"); SND(" and a prefix of ? will force it to be queried only within"); SND(" the UnrealIRCd Help System , without forwarding it"); SND(" -"); SND(" /HELPOP USERCMDS - To get the list of User Commands"); SND(" /HELPOP OPERCMDS - To get the list of Oper Commands"); SND(" /HELPOP SVSCMDS - Commands sent via U:Lined Server (Services)"); SND(" /HELPOP UMODES - To get the list of User Modes"); SND(" /HELPOP CHMODES - To get the list of Channel Modes"); SND(" /HELPOP OFLAGS - To get the list of O:Line flags"); SND(" /HELPOP COMMANDS - To get the whole list of commands with Tokens"); SND(" /HELPOP ABOUT - Some more info on the Help System"); SND(" -"); SND(" -------------------------oOo--------------------------"); SND(" -"); } else if (!myncmp(help, "USERCMDS", 8)) { SND(" -"); HDR(" *** User Commands List *** "); SND(" -"); SND(" Currently the following User commands are available."); SND(" Use /HELPOP to get info about the command."); SND(" -"); SND(" -------------------oOo--*----------------"); SND(" NICK WHOIS WHO WHOWAS NAMES"); SND(" ISON JOIN PART MOTD RULES"); SND(" LUSERS MAP QUIT PING VERSION"); SND(" STATS LINKS ADMIN USERHOST TOPIC"); SND(" INVITE KICK AWAY WATCH LIST"); SND(" PRIVMSG NOTICE KNOCK SETNAME VHOST"); SND(" MODE CREDITS DALINFO LICENSE TIME"); SND(" BOTMOTD SILENCE PONG IDENTIFY"); SND(" -------------------oOo-------------------"); SND(" -"); } else if (!myncmp(help, "OPERCMDS", 8)) { SND(" -"); HDR(" *** IRC Operator Commands List ***"); SND(" -"); SND(" This section gives the IRC Operator only commands."); SND(" Use /HELPOP to get info about that command"); SND(" -"); SND(" -----------------oOo----------------"); SND(" OPER WALLOPS GLOBOPS CHATOPS LOCOPS"); SND(" ADCHAT NACHAT KILL KLINE"); SND(" UNKLINE ZLINE UNZLINE GLINE SHUN"); SND(" AKILL RAKILL REHASH RESTART DIE"); SND(" LAG SETHOST SETIDENT CHGHOST CHGIDENT"); SND(" CHGNAME SQUIT CONNECT DCCDENY UNDCCDENY"); SND(" SAJOIN SAPART SAMODE RPING TRACE"); SND(" OPERMOTD ADDMOTD ADDOMOTD SDESC ADDLINE"); SND(" MKPASSWD TSCTL HTM"); SND(" -----------------oOo----------------"); SND(" -"); } else if (!myncmp(help, "SVSCMDS", 8)) { SND(" -"); HDR(" *** U:Lined Server Command List ***"); SND(" -"); SND(" This section gives the commands that can be"); SND(" sent via a U:Lined Server such as Services."); SND(" The command is typically sent as -"); SND(" /MSG OPERSERV RAW :services "); SND(" Use /HELPOP to get info about that command"); SND(" -"); SND(" ----------oOo-----------"); SND(" SVSNICK SVSMODE SVSKILL"); SND(" SVSNOOP SVSJOIN SVSPART"); SND(" SVSO SWHOIS SQLINE"); SND(" UNSQLINE SVS2MODE SVSFLINE"); SND(" SVSMOTD SVSTIME"); SND(" -----------oOo-----------"); SND(" -"); } else if (!myncmp(help, "UMODES", 8)) { SND(" -"); HDR(" *** UnrealIRCd Usermodes ***"); SND(" -"); SND(" o = Global IRC Operator"); SND(" O = Local IRC Operator"); SND(" i = Invisible (Not shown in /WHO searches)"); SND(" w = Can listen to Wallop messages"); SND(" g = Can read & send to GlobOps, and LocOps"); SND(" h = Available for Help (Help Operator)"); SND(" s = Can listen to Server notices"); SND(" k = See's all the /KILL's which were executed"); SND(" S = For Services only. (Protects them)"); SND(" a = Is a Services Administrator"); SND(" A = Is a Server Administrator"); SND(" N = Is a Network Administrator"); SND(" C = Is a Co Administrator"); /* SND(" 1 = Is a coder"); Taken out */ SND(" c = See's all Connects/Disconnects on local server"); SND(" f = Listen to Flood Alerts from server"); SND(" r = Identifies the nick as being Registered"); SND(" x = Gives the user Hidden Hostname"); SND(" e = Can listen to Server messages sent to +e users (Eyes)"); SND(" b = Can read & send to ChatOps"); SND(" W = Lets you see when people do a /WHOIS on you (IRC Operators only)"); SND(" q = Only U:lines can kick you (Services Admins only)"); SND(" B = Marks you as being a Bot"); SND(" F = Lets you recieve Far and Local connect notices)"); SND(" I = Invisible Join/Part. Makes you being hidden at channels"); SND(" H = Hide IRCop status in /WHO and /WHOIS. (IRC Operators only)"); SND(" d = Makes it so you can not recieve channel PRIVMSGs (Deaf)"); SND(" v = Receive infected DCC send rejection notices"); SND(" t = Says that you are using a /VHOST"); SND(" G = Filters out all Bad words in your messages with ."); SND(" z = Marks the client as being on a Secure Connection (SSL)"); SND(" ---------------------oOo-------------------"); SND(" -"); } else if (!myncmp(help, "CHMODES", 8)) { SND(" -"); HDR(" *** UnrealIRCd Channel Modes ***"); SND(" -"); SND(" p = Private channel"); SND(" s = Secret channel"); SND(" i = Invite-only allowed"); SND(" m = Moderated channel, Only users with mode +voh can speak."); SND(" n = No messages from outside channel"); SND(" t = Only Channel Operators may set the topic"); SND(" r = Channel is Registered"); SND(" R = Requires a Registered nickname to join the channel"); SND(" c = Blocks messages with ANSI colour (ColourBlock)."); SND(" q = Channel owner"); SND(" Q = No kicks able in channel unless by U:Lines"); SND(" O = IRC Operator only channel (Settable by IRCops)"); SND(" A = Server/Net Admin only channel (Settable by Admins)"); SND(" K = /KNOCK is not allowed"); SND(" V = /INVITE is not allowed"); SND(" S = Strip all incoming colours away"); SND(" l = Channel may hold at most of users"); SND(" b = Bans the nick!user@host from the channel"); SND(" k = Needs the Channel Key to join the channel"); SND(" o = Gives Operator status to the user"); SND(" v = Gives Voice to the user (May talk if chan is +m)"); SND(" L = If +l is full, the next user will auto-join "); SND(" a = Gives protection to the user (No kick/drop)"); SND(" e = Exception ban - If someone matches it"); SND(" they can join even if a ban matches them"); SND(" h = Gives HalfOp status to the user"); SND(" f [*]: = Flood protection, if the * is given a user will"); SND(" be kick banned when they send in "); SND(" if * is not given they are just kicked and not banned"); SND(" H = No +I users may join (Settable by Admins)"); SND(" N = No Nickname changes are permitted in the channel."); SND(" ^ = Reports Channel modes in bitstring. Only exists in"); SND(" Development Versions i.e #define DEVELOP"); SND(" G = Makes the channel G Rated. Any badwords are replaced"); SND(" with in channel messages (badwords.channel.conf)."); SND(" u = \"Auditorium\". Makes /NAMES and /WHO #channel only show Operators."); SND(" C = No CTCPs allowed in the channel."); SND(" z = Only Clients on a Secure Connection (SSL) can join."); SND(" ---------------------oOo-------------------"); SND(" -"); } else if (!myncmp(help, "OFLAGS", 8)) { SND(" -"); HDR(" *** UnrealIRCd O:Line flags ***"); SND(" -"); SND(" r = Access to /REHASH server"); SND(" R = Access to /RESTART server"); SND(" D = Access to /DIE server"); SND(" h = Oper can send /HELPOPS - gets +h on oper up"); SND(" g = Oper can send /GLOBOPS"); SND(" w = Oper can send /WALLOPS"); SND(" l = Oper can send /LOCOPS"); SND(" c = Access to do local /SQUITs and /CONNECTs"); SND(" Y = Access to do remote /SQUITs and /CONNECTs"); SND(" k = Access to do local /KILLs"); SND(" K = Access to do global /KILLs"); SND(" b = Oper can /KLINE users from server"); SND(" B = Oper can /UNKLINE users from server"); SND(" n = Oper can send Local Server Notices (/NOTICE $servername message)"); SND(" u = Oper can set usermode +c"); SND(" f = Oper can set usermode +f"); SND(" o = Local Operator, flags included: rhgwlckbBnuf"); SND(" O = Global Operator, flags included: oRDK"); SND(" A = Gets +A on oper up. Is Server Administrator"); SND(" a = Gets +a on oper up. Is Services Administrator"); SND(" N = Gets +N on oper up. Is Network Administrator"); SND(" C = Gets +C on oper up. Is Co Administrator"); SND(" z = Can add Z:Lines"); SND(" H = Gets +x on oper up."); SND(" W = Gets +W on oper up."); SND(" ^ = Allows to use usermode +I"); SND(" * = Flags AaNCTzSHW^"); SND(" ----------oOo-----------"); SND(" -"); } else if (!myncmp(help, "ABOUT", 8)) { SND(" -"); HDR(" *** ABOUT UnrealIRCD Help System ***"); SND(" -"); SND(" The UnrealIRCd Help System. Originally by Techie/Stskeeps."); SND(" Modified to include new Modes and Commands by hAtbLaDe."); SND(" Type /INFO for some info about the IRCd."); SND(" -"); SND(" ----------------------------oOo--------------------------"); SND(" -"); } /* All that follows is for the User Commands - hAtbLaDe */ else if (!myncmp(help, "NICK", 8)) { SND(" -"); HDR(" *** NICK Command ***"); SND(" -"); SND(" Changes your \"Online Identity\" on a server."); SND(" All those in the channel you are in will be"); SND(" alerted of your nickname change."); SND(" -"); SND(" Syntax: NICK "); SND(" Example: NICK hAtbLaDe1"); SND(" -"); } else if (!myncmp(help, "WHOIS", 8)) { SND(" -"); HDR(" *** WHOIS Command ***"); SND(" -"); SND(" Shows information about the user in question,"); SND(" such as their \"Name\", channels they are"); SND(" currently in, their hostmask, etc."); SND(" -"); SND(" Syntax: WHOIS "); SND(" Example: WHOIS hAtbLaDe"); SND(" -"); } else if (!myncmp(help, "WHO", 8)) { SND(" -"); HDR(" *** WHO Command ***"); SND(" -"); SND(" Searches User Information (-i users only) for supplied information. IRCops are able to"); SND(" search +i users & can use masks only. When used on a channel, it will give a list of"); SND(" all the non-invisible users on that channel."); SND(" -"); SND(" Syntax: WHO "); SND(" WHO "); SND(" WHO <#channel>"); SND(" WHO 0 o (Lists all IRC Operators currently online and not +i)"); SND(" Example: WHO *.aol.com"); SND(" WHO *Bot*"); SND(" WHO #UnrealIRCd"); SND(" -"); } else if (!myncmp(help, "WHOWAS", 8)) { SND(" -"); HDR(" *** WHOWAS Command ***"); SND(" -"); SND(" Retrieves previous WHOIS information for users"); SND(" no longer connected to the server."); SND(" -"); SND(" Syntax: WHOWAS "); SND(" WHOWAS "); SND(" Example: WHOWAS hAtbLaDe"); SND(" -"); } else if (!myncmp(help, "NAMES", 8)) { SND(" -"); HDR(" *** NAMES Command ***"); SND(" -"); SND(" Provides a list of users on the specified channel."); SND(" -"); SND("Syntax: NAMES "); SND("Example: NAMES #Support"); SND(" -"); } else if (!myncmp(help, "ISON", 8)) { SND(" -"); HDR(" *** ISON Command ***"); SND(" -"); SND(" Used to determine of a certain user or users are"); SND(" currently on the IRC server based upon their nickname."); SND(" -"); SND(" Syntax: ISON "); SND(" Example: ISON hAtbLaDe Stskeeps OperServ AOLBot"); SND(" -"); } else if (!myncmp(help, "JOIN", 8)) { SND(" -"); HDR(" *** JOIN Command ***"); SND(" -"); SND(" Used to enter one or more channels on an IRC server."); SND(" All occupants of the channel will be notified of your arrival."); SND(" JOIN with 0 as a parameter makes you Part all channels."); SND(" -"); SND(" Syntax: JOIN ,,"); SND(" JOIN 0 (Parts all channels)"); SND(" Example: JOIN #Support"); SND(" JOIN #Lobby,#UnrealIRCd"); SND(" -"); } else if (!myncmp(help, "PART", 8)) { SND(" -"); HDR(" *** PART Command ***"); SND(" -"); SND(" Used to part (or leave) a channel you currently occupy."); SND(" All those in the channel will be notified of your departure."); SND(" -"); SND(" Syntax: PART ,,,"); SND(" Example: PART #Support"); SND(" PART #Lobby,#UnrealIRCd"); SND(" -"); } else if (!myncmp(help, "MOTD", 8)) { SND(" -"); HDR(" *** MOTD Command ***"); SND(" -"); SND(" Displays the Message Of The Day."); SND(" -"); SND(" Syntax: MOTD"); SND(" MOTD "); SND(" -"); } else if (!myncmp(help, "BOTMOTD", 8)) { SND(" -"); SND(" *** BOTMOTD Command ***"); SND(" -"); SND(" Displays the IRCd Bot Message Of The Day"); SND(" -"); SND(" Syntax : BOTMOTD"); SND(" BOTMOTD "); SND(" -"); } else if (!myncmp(help, "RULES", 8)) { SND(" -"); HDR(" *** RULES Command ***"); SND(" -"); SND(" Reads the Network Rules (ircd.rules) file and sends"); SND(" the contents to the user."); SND(" -"); SND(" Syntax: RULES"); SND(" RULES "); SND(" -"); } else if (!myncmp(help, "LUSERS", 8)) { SND(" -"); HDR(" *** LUSERS Command ***"); SND(" -"); SND(" Provides Local and Global user information"); SND(" (Such as Current and Maximum user count)."); SND(" -"); SND(" Syntax: LUSERS"); SND(" -"); } else if (!myncmp(help, "MAP", 8)) { SND(" -"); HDR(" *** MAP Command ***"); SND(" -"); SND(" Provides a graphical \"Network Map\" of the IRC network."); SND(" Mainly used for routing purposes."); SND(" -"); SND(" Syntax: MAP"); SND(" -"); } else if (!myncmp(help, "QUIT", 8)) { SND(" -"); HDR(" *** QUIT Command ***"); SND(" -"); SND(" Disconnects you from the IRC server. Those in the"); SND(" channels you occupy will be notified of your departure."); SND(" If you do not specify a reason, your nickname becomes the reason."); SND(" -"); SND(" Syntax: QUIT "); SND(" Example: QUIT Leaving!"); SND(" -"); } else if (!myncmp(help, "PING", 8)) { SND(" -"); HDR(" *** PING Command ***"); SND(" -"); SND(" The PING command is used to test the presence of an active client or"); SND(" server at the other end of the connection. Servers send a PING"); SND(" message at regular intervals if no other activity detected coming"); SND(" from a connection. If a connection fails to respond to a PING"); SND(" message within a set amount of time, that connection is closed.A"); SND(" PING message MAY be sent even if the connection is active."); SND(" Note that this is different from a CTCP PING command.."); SND(" -"); SND(" Syntax: PING "); SND(" Example: PING irc.fyremoon.net"); SND(" PING hAtbLaDe"); SND(" PING hAtbLaDe irc2.dynam.ac"); SND(" -"); } else if (!myncmp(help, "PONG", 8)) { SND(" -"); HDR(" *** PONG Command ***"); SND(" -"); SND(" PONG message is a reply to PING message. If parameter is"); SND(" given, this message will be forwarded to given target. The "); SND(" parameter is the name of the entity who has responded to PING message"); SND(" and generated this message."); SND(" -"); SND(" Syntax: PONG "); SND(" Example: PONG irc.fyremoon.net irc2.dynam.ac"); SND(" (PONG message from irc.fyremoon.net to irc2.dynam.ac)"); SND(" -"); } else if (!myncmp(help, "VERSION", 8)) { SND(" -"); HDR(" *** VERSION Command ***"); SND(" -"); SND(" Provides Version information of the IRCd software in usage."); SND(" -"); SND(" Syntax: VERSION"); SND(" VERSION "); SND(" -"); } else if (!myncmp(help, "STATS", 8)) { SND(" -"); HDR(" *** STATS Command ***"); SND(" -"); SND(" Provides certain Statistical information about the server"); SND(" -"); SND(" Syntax: STATS "); SND(" Example: STATS u"); SND(" -"); SND(" ### Stats Flags ###"); SND(" -"); SND(" k = Lists all the current K:Lines, Z:Lines (Banned hosts/IP) & E:Lines (K:Line exceptions)"); SND(" g = Lists all the current G:Lines (Banned hosts) & Shuns"); SND(" E = Lists all the current E:Lines (K:Line Exceptions)"); SND(" f = Lists all the current F:lines (Filename masks on DCCDENY)"); SND(" O = Lists all the current O:Lines (IRC Operator Lines)"); SND(" Q = Lists all the current Q:Lines (Forbidden Nicks)"); SND(" C = Lists all the current C/N:Lines (Servers to connect or accept connects from)"); SND(" H = Lists all the current H:Lines (Hub Lines) & L:Lines (Leaf Lines)"); SND(" n = Lists all the current n:Lines (GECOS Deny)"); SND(" V = Lists all the current VHost lines"); SND(" T = Lists all the current T:Lines (Specific MOTD/Rules Lines)"); SND(" Y = Lists all the current Y:Lines (Connection classes)"); SND(" U = Lists all the current U:Lines (Usually Services)"); SND(" v = Lists all the current V:Lines (Version Deny)"); SND(" D = Lists all the current D:Lines (Disallow Lines-Oper & Server Orig Connects)"); SND(" d = Lists all the current d:Lines (Disallow Lines-Autoconnects)"); SND(" e = Lists all the current e:Lines (Proxy scan exempt IPs)"); SND(" I = Lists all the current I:Lines (Client auth Lines)"); SND(" F = Lists all the current F:Lines (DCCDENY Lines)"); SND(" r = Lists all Channel Restrict lines"); SND(" N = Lists the Network Configuration report"); SND(" S = Gives the Dynamic Configuration report"); SND(" W = Gives the current Server Load"); SND(" q = Lists all the SQLINEed Nicks"); SND(" u = Server Uptime"); SND(" m = Gives the Server command list"); SND(" z = Gives Misc Server Information"); SND(" s = Returns the scache and NS numbers"); SND(" t = Returns Misc Info"); SND(" L = Information about current server connections"); SND(" -"); } else if (!myncmp(help, "LINKS", 8)) { SND(" -"); HDR(" *** LINKS Command ***"); SND(" -"); SND(" Lists all of the servers currently linked to the network."); SND(" -"); SND(" Syntax: LINKS"); SND(" -"); } else if (!myncmp(help, "ADMIN", 8)) { SND(" -"); HDR(" *** ADMIN Command ***"); SND(" -"); SND(" Provides Administrative information regarding the server."); SND(" -"); SND(" Syntax: ADMIN "); SND(" -"); } else if (!myncmp(help, "USERHOST", 8)) { SND(" -"); HDR(" *** USERHOST Command ***"); SND(" -"); SND(" Returns the userhost of the user in question."); SND(" Usually used by scripts or bots."); SND(" -"); SND(" Syntax: USERHOST "); SND(" Example: USERHOST hAtbLaDe"); SND(" -"); } else if (!myncmp(help, "TOPIC", 8)) { SND(" -"); HDR(" *** TOPIC Command ***"); SND(" -"); SND(" Sets/Changes the topic of the channel in question,"); SND(" or just display the current Topic."); SND(" -"); SND(" Syntax: TOPIC (Displays the current topic)"); SND(" TOPIC (Changes topic)"); SND(" Example: TOPIC #Operhelp"); SND(" TOPIC #Lobby Welcome to #Lobby!!"); SND(" -"); } else if (!myncmp(help, "INVITE", 8)) { SND(" -"); HDR(" *** INVITE Command ***"); SND(" -"); SND(" Sends a user an Invitation to join a particular channel."); SND(" You must be an Operator on the channel in order to"); SND(" invite a user into it."); SND(" -"); SND(" Syntax: INVITE "); SND(" Example: INVITE hAtbLaDe #Support"); SND(" -"); } else if (!myncmp(help, "KICK", 8)) { SND(" -"); HDR(" *** KICK Command ***"); SND(" -"); SND(" Removes a user from a channel. Can only be used by Operators"); SND(" or Half-Ops. If no reason is specified, your nickname becomes the reason."); SND(" -"); SND(" Syntax: KICK [,..] [,..] "); SND(" Example: KICK #Lobby foobar Lamer.."); SND(" KICK #Lobby,#OperHelp Lamer23,Luser12 Lamers!"); SND(" -"); } else if (!myncmp(help, "AWAY", 8)) { SND(" -"); HDR(" *** AWAY Command ***"); SND(" -"); SND(" Sets your online status to \"Away\"."); SND(" -"); SND(" Syntax: AWAY (Sets you Away with the reason given)"); SND(" AWAY (Un-Sets you as Away)"); SND(" Example: AWAY Lunch time!"); SND(" -"); } else if (!myncmp(help, "WATCH", 8)) { SND(" -"); HDR(" *** WATCH Command ***"); SND(" -"); SND(" Watch is a new notify-type system in UnrealIRCd which is both faster"); SND(" and uses less network resources than any old-style notify"); SND(" system. The server will send you a message when any nickname"); SND(" in your watch list logs on or off."); SND(" The watch list DOES NOT REMAIN BETWEEN SESSIONS - You (or your"); SND(" script or client) must add the nicknames to your watch list every"); SND(" time you connect to an IRC server."); SND(" -"); SND(" Syntax: WATCH +nick1 +nick2 +nick3 (Add nicknames)"); SND(" WATCH -nick (Delete nicknames)"); SND(" WATCH (View the watchlist)"); SND(" -"); } else if (!myncmp(help, "LIST", 8)) { SND(" -"); HDR(" *** LIST Command ***"); SND(" -"); SND(" Provides a complete listing of all channels on the network."); SND(" If a search string is specified, it will only show those"); SND(" matching the search string."); SND(" -"); SND(" Syntax: LIST "); SND(" Example: LIST"); SND(" LIST *ircd*"); SND(" -"); SND(" New extended /LIST command options are supported. To use these"); SND(" features, you will likely need to prefix the LIST command with"); SND(" /QUOTE to avoid your client interpreting the command."); SND(" -"); SND(" Usage: /QUOTE LIST options"); SND(" -"); SND(" If you don't include any options, the default is to send you the"); SND(" entire unfiltered list of channels. Below are the options you can"); SND(" use, and what channels LIST will return when you use them."); SND(" -"); SND(" >number List channels with more than people."); SND(" people."); SND(" C>number List channels created between now and minutes ago."); SND(" C minutes ago."); SND(" T>number List channels whose topics are older than minutes"); SND(" (Ie., they have not changed in the last minutes."); SND(" T minutes."); SND(" *mask* List channels that match *mask*"); SND(" !*mask* List channels that do not match *mask*"); SND(" -"); SND(" NOTE : C & T parameters do not exist Unreal 3.1.1-Darkshades onwards."); SND(" LIST defaults to sending a list of channels with 2 or more members,"); SND(" so use the >0 option to get the full channel listing."); SND(" -"); } else if ((!myncmp(help, "PRIVMSG", 8))||(!myncmp(help, "NOTICE", 8))) { SND(" -"); HDR(" *** PRIVMSG/NOTICE Command ***"); SND(" -"); SND(" PRIVMSG and NOTICE, which are used internally by the client for"); SND(" /MSG and /NOTICE, in UnrealIRCd support two additional formats:"); SND(" /MSG @#channel will send the text to Channel-ops on the"); SND(" given channel only. /MSG @+#channel will send the text"); SND(" to both ops and voiced users on the channel. While some clients"); SND(" may support these as-is, on others (such as ircII), it's necessary"); SND(" to use /QUOTE PRIVMSG @#channel instead. You can also use"); SND(" % to signify HalfOps on the channel."); SND(" -"); SND(" Syntax: MSG ,,, :"); SND(" Example: PRIVMSG hAtbLaDe :Hello."); SND(" PRIVMSG hAtbLaDe,Somefella,Lamer :Hello everyone!"); SND(" -"); SND(" The format for the NOTICE command is the same as above."); SND(" -"); } else if (!myncmp(help, "KNOCK", 8)) { SND(" -"); HDR(" **** KNOCK Command ****"); SND(" -"); SND(" For channels which are invite only, you can \"Knock\" on the"); SND(" channel to request an invite."); SND(" -"); SND(" The following criteria must be met :"); SND(" - Channel is not +K (No knocks)"); SND(" - Channel is not +I (No invites!)"); SND(" - You're not banned!"); SND(" - And you are not already there"); SND(" -"); SND(" Syntax: KNOCK "); SND(" Example: KNOCK #secret_chan I'm an op, let me in!"); SND(" -"); } else if (!myncmp(help, "SETNAME", 8)) { SND(" -"); HDR(" *** SETNAME Command ***"); SND(" -"); SND(" Allows users to change their \'Real name\' (GECOS)"); SND(" directly online at IRC without reconnecting"); SND(" -"); SND(" Syntax: SETNAME "); SND(" -"); } else if (!myncmp(help, "VHOST", 8)) { SND(" -"); HDR(" *** VHOST Command ***"); SND(" -"); SND(" Hides your real hostname with a virtual hostname"); SND(" provided by the IRC server , using SETHOST."); SND(" -"); SND(" Synatx: VHOST "); SND(" Example: VHOST openbsd ilovecypto"); SND(" -"); } else if (!myncmp(help, "MODE", 8)) { SND(" -"); HDR(" *** MODE Command ***"); SND(" -"); SND(" Sets a mode on a Channel or User."); SND(" UnrealIRCd has got some new Channel & User Modes."); SND(" Use /HELPOP CHMODES or /HELPOP UMODES to see a list of Modes"); SND(" -"); SND(" Syntax: MODE "); SND(" Example: MODE #Support +tn"); SND(" MODE #Support +ootn hAtbLaDe XYZ"); SND(" -"); } else if (!myncmp(help, "CREDITS", 8)) { SND(" -"); HDR(" *** CREDITS Command ***"); SND(" -"); SND(" This command will list the Credits to all the people who"); SND(" helped create UnrealIRCd."); SND(" -"); SND(" Syntax: CREDITS"); SND(" CREDITS "); SND(" -"); } else if (!myncmp(help, "DALINFO", 8)) { SND(" -"); HDR(" *** DALINFO Command ***"); SND(" -"); SND(" This command will list the Credits that the Dreamforge"); SND(" IRCd team/the IRCd developers from the start when IRCd got developed"); SND(" -"); SND(" Syntax: DALINFO"); SND(" DALINFO "); SND(" -"); } else if (!myncmp(help, "LICENSE", 8)) { SND(" -"); HDR(" *** LICENSE Command ***"); SND(" -"); SND(" This command shows the GNU License Which is hard-coded into the IRCd."); SND(" -"); SND(" Syntax: LICENSE"); SND(" LICENSE "); SND(" -"); } else if (!myncmp(help, "TIME", 8)) { SND(" -"); HDR(" *** TIME Command ***"); SND(" -"); SND(" Lists the current Server Date and Time."); SND(" -"); SND(" Syntax : TIME"); SND(" TIME "); SND(" -"); } else if (!myncmp(help, "SILENCE", 8)) { SND(" -"); HDR(" *** SILENCE Command ***"); SND(" -"); SND(" Ignores messages from a user or list of users at the Server itself."); SND(" -"); SND(" Syntax: SILENCE +nickname (Adds a nickname to SILENCE list)"); SND(" SILENCE -nickname (Removes a nickname from the SILENCE list)"); SND(" SILENCE (Lists the current SILENCE list)"); SND(" -"); } else if (!myncmp(help, "IDENTIFY", 8)) { SND(" -"); HDR(" *** IDENTIFY Command ***"); SND(" -"); SND(" An alias to allow you to identify to NickServ or ChanServ with your password."); SND(" If it cannot find NickServ or ChanServ , it will report services as down."); SND(" -"); SND(" Syntax: IDENTIFY (Identify to NickServ)"); SND(" IDENTIFY # (Identify to ChanServ as Founder of #channel)"); SND(" -"); } else if ((!myncmp(help, "NICKSERV", 8))||(!myncmp(help, "NS", 8))) { SND(" -"); SND(" *** NICKSERV/NS Command ***"); SND(" -"); SND(" Sends a message to NickServ. This is an alias for /MSG NickServ "); SND(" If NickServ cannot be found , it will report services as down."); SND(" -"); SND(" Syntax: NICKSERV "); SND(" NS "); SND(" -"); } else if ((!myncmp(help, "CHANSERV", 8))||(!myncmp(help, "CS", 8))) { SND(" -"); SND(" *** CHANSERV/CS Command ***"); SND(" -"); SND(" Sends a message to ChanServ. This is an alias for /MSG ChanServ "); SND(" If ChanServ cannot be found , it will report services as down."); SND(" -"); SND(" Syntax: CHANSERV "); SND(" CS "); SND(" -"); } else if ((!myncmp(help, "MEMOSERV", 8))||(!myncmp(help, "MS", 8))) { SND(" -"); SND(" *** MEMOSERV/MS Command ***"); SND(" -"); SND(" Sends a message to MemoServ. This is an alias for /MSG MemoServ "); SND(" If MemoServ cannot be found , it will report services as down."); SND(" -"); SND(" Syntax: MEMOSERV "); SND(" MS "); SND(" -"); } else if ((!myncmp(help, "OPERSERV", 8))||(!myncmp(help, "OS", 8))) { SND(" -"); SND(" *** OPERSERV/OS Command ***"); SND(" -"); SND(" Sends a message to OperServ. This is an alias for /MSG OperServ "); SND(" If OperServ cannot be found , it will report services as down."); SND(" -"); SND(" Syntax: OPERSERV "); SND(" OS "); SND(" -"); } else if ((!myncmp(help, "HELPSERV", 8))||(!myncmp(help, "HS", 8))) { SND(" -"); SND(" *** HELPSERV/HS Command ***"); SND(" -"); SND(" Sends a message to HelpServ. This is an alias for /MSG HelpServ "); SND(" If HelpServ cannot be found , it will report services as down."); SND(" -"); SND(" Syntax: HELPSERV "); SND(" HS "); SND(" -"); } else if ((!myncmp(help, "BOTSERV", 8))||(!myncmp(help, "BS", 8))) { SND(" -"); SND(" *** BOTSERV/BS Command ***"); SND(" -"); SND(" Sends a message to BotServ. This is an alias for /MSG BotServ "); SND(" If BotServ cannot be found , it will report services as down."); SND(" -"); SND(" Syntax: BOTSERV "); SND(" BS "); SND(" -"); } else if ((!myncmp(help, "INFOSERV", 8))||(!myncmp(help, "IS", 8))) { SND(" -"); SND(" *** INFOSERV/IS Command ***"); SND(" -"); SND(" Sends a message to InfoServ. This is an alias for /MSG InfoServ "); SND(" If InfoServ cannot be found , it will report services as down."); SND(" -"); SND(" Syntax: INFOSERV "); SND(" IS "); SND(" -"); } /* On to the IRC Operator commands - hAtbLaDe */ else if (!myncmp(help, "OPER", 8)) { SND(" -"); HDR(" *** OPER Command ***"); SND(" -"); SND(" Attempts to give a user IRC Operator status."); SND(" -"); SND(" Syntax: OPER "); SND(" Example: OPER hAtbLaDe foobar234"); SND(" -"); } else if (!myncmp(help, "WALLOPS", 8)) { SND(" -"); HDR(" *** WALLOPS Command ***"); SND(" -"); SND(" Sends a \"Message\" to all those with the umode +w."); SND(" Only IRCops can send Wallops, while anyone can view them."); SND(" -"); SND(" Syntax: WALLOPS "); SND(" -"); } else if (!myncmp(help, "GLOBOPS", 8)) { SND(" -"); HDR(" *** GLOBOPS Command ***"); SND(" -"); SND(" Sends a global \"Message\" to all IRCops. Only viewable by IRCops"); SND(" (unlike WALLOPS, which can be viewed by normal users)."); SND(" -"); SND(" Syntax: GLOBOPS "); SND(" Example: GLOBOPS Lets get em clones .."); SND(" -"); } else if (!myncmp(help, "CHATOPS", 8)) { SND(" -"); HDR(" *** CHATOPS Command ***"); SND(" -"); SND(" GLOBOPS is usually reserved for important network information."); SND(" Therefore, for Oper Chat, CHATOPS was invented. IRCops with"); SND(" the +c flag enabled will be able to send/receive CHATOPS messages."); SND(" -"); SND(" Syntax: CHATOPS "); SND(" Example: CHATOPS How's everyone doing today?"); SND(" -"); } else if (!myncmp(help, "LOCOPS", 8)) { SND(" -"); HDR(" *** LOCOPS Command ***"); SND(" -"); SND(" Similar to GLOBOPS, except only received by those IRCops local to your server."); SND(" -"); SND(" Syntax: LOCOPS "); SND(" Example: LOCOPS Gonna k:line that luser ..."); SND(" -"); } else if (!myncmp(help, "ADCHAT", 8)) { SND(" -"); HDR(" *** ADCHAT Command ***"); SND(" -"); SND(" This command sends to all Admins online"); SND(" Only for Admins. This is a ChatOps style command"); SND(" -"); SND(" Syntax: ADCHAT "); SND(" Example: ADCHAT Hey guys!"); SND(" -"); } else if (!myncmp(help, "NACHAT", 8)) { SND(" -"); HDR(" *** NACHAT Command ***"); SND(" -"); SND(" This command sends to all NetAdmins online"); SND(" Only for Net Admins. This is a ChatOps style command"); SND(" -"); SND(" Syntax: NACHAT "); SND(" Example: NACHAT Hey guys!"); SND(" -"); } else if (!myncmp(help, "KILL", 8)) { SND(" -"); HDR(" *** KILL Command ***"); SND(" -"); SND(" Forcefully Disconnects a user from an IRC Server."); SND(" IRC Operator only command."); SND(" -"); SND(" Syntax: KILL "); SND(" Example: KILL Clone5 Cloning is not allowed"); SND(" -"); } else if (!myncmp(help, "KLINE", 8)) { SND(" -"); HDR(" *** KLINE Command ***"); SND(" -"); SND(" \"Bans\" a hostmask from connection to the IRC server."); SND(" The user can however connect to other servers on the network !!"); SND(" IRC Operator only command."); SND(" -"); SND(" Syntax: KLINE "); SND(" Example: KLINE *@*.aol.com Abuse"); SND(" -"); } else if (!myncmp(help, "UNKLINE", 8)) { SND(" -"); HDR(" *** UNKLINE Command ***"); SND(" -"); SND(" Removes a k:line from the server."); SND(" IRC Operator only command."); SND(" -"); SND(" Syntax: UNKLINE "); SND(" Example: UNKLINE *@*.aol.com"); SND(" -"); } else if (!myncmp(help, "ZLINE", 8)) { SND(" -"); HDR(" *** ZLINE Command ***"); SND(" -"); SND(" Disables all access to the IRC server from a specified IP."); SND(" The IP can however connect to other servers on the network !!"); SND(" IRC Operator only command."); SND(" -"); SND(" Syntax: ZLINE :"); SND(" Example: ZLINE 127.0.0.1 :Localhost"); SND(" -"); } else if (!myncmp(help, "UNZLINE", 8)) { SND(" -"); HDR(" *** UNZLINE Command ***"); SND(" -"); SND(" Removes a currently active z:Line."); SND(" IRC Operator only command."); SND(" -"); SND(" Syntax: UNZLINE "); SND(" Example: UNZLINE 127.0.0.1"); SND(" -"); } else if (!myncmp(help, "GLINE", 8)) { SND(" -"); HDR(" *** GLINE command ***"); SND(" -"); SND(" This command provides timed G:Lines. If you match a G:Line you cannot"); SND(" connect to ANY server on the IRC network"); SND(" A time of 0 in the GLINE makes it permanent (Never Expires)."); SND(" In Unreal 3.1.1 you may also specify the time in the format 1d10h15m30s."); SND(" IRC Operator only command."); SND(" -"); SND(" Syntax: GLINE :"); SND(" (Adds a G:line for user@host)"); SND(" GLINE - (Removes a G:line for user@host)"); SND(" Example: GLINE *@*.dal.net 900 :Spammers (Adds a 15 min G:line)"); SND(" GLINE *@*.dal.net 1d5h :Spammers (Adds a 29 hour G:line)"); SND(" -"); } else if (!myncmp(help, "SHUN", 8)) { SND(" -"); HDR(" *** SHUN Command ***"); SND(" -"); SND(" Prevents a user from executing ANY command except ADMIN"); SND(" and respond to Server Pings."); SND(" A time of 0 in the SHUN makes it permanent (Never Expires)."); SND(" In Unreal 3.1.1 you may also specify the time in the format 1d10h15m30s."); SND(" IRC Operator only command."); SND(" -"); SND(" Syntax: SHUN