home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 35 Internet / 35-Internet.zip / ircd4652.zip / ircd-df-4.6.5-os2 / src / help.c < prev    next >
Text File  |  1998-02-21  |  43KB  |  1,029 lines

  1. /************************************************************************
  2.  *   IRC - Internet Relay Chat, ircd/help.c
  3.  *   Copyright (C) 1996 DALnet
  4.  *
  5.  *   This program is free software; you can redistribute it and/or modify
  6.  *   it under the terms of the GNU General Public License as published by
  7.  *   the Free Software Foundation; either version 1, or (at your option)
  8.  *   any later version.
  9.  *
  10.  *   This program is distributed in the hope that it will be useful,
  11.  *   but WITHOUT ANY WARRANTY; without even the implied warranty of
  12.  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  13.  *   GNU General Public License for more details.
  14.  *
  15.  *   You should have received a copy of the GNU General Public License
  16.  *   along with this program; if not, write to the Free Software
  17.  *   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  18.  */
  19. #ifndef lint
  20. static char sccsid[] = "@(#)help.c    6.00 9/22/96 (C) 1996 DALnet";
  21. #endif
  22.  
  23. #include "struct.h"
  24. #include "common.h"
  25. #include "sys.h"
  26. #include "h.h"
  27. #include "msg.h"
  28.  
  29. #define HDR(str) sendto_one(sptr, ":%s 290 %s :" str "", me.name, name)
  30. #define SND(str) sendto_one(sptr, ":%s 291 %s :" str "", me.name, name)
  31. #define FTR(str) sendto_one(sptr, ":%s 292 %s :" str "", me.name, name)
  32. #define HLP(str) sendto_one(sptr, ":%s 293 %s :" str "", me.name, name)
  33.  
  34. /*
  35.  * This is _not_ the final help.c, we're just testing the functionality...
  36.  * Return 0 to forward request to helpops... -Donwulff
  37.  */
  38. int parse_help (sptr, name, help)
  39. aClient    *sptr;
  40. char    *name;
  41. char    *help;
  42. {
  43.   int i;
  44.   if(BadPtr(help) || !mycmp(help, "HELP")) {
  45. HDR("0 ***** DALnet Help System *****");
  46. SND("  You need to specify your question after the help-command. For");
  47. SND("  an index of topics, use /helpop index");
  48. SND("  If the DALnet IRC Server is unable to satisfy your help-request");
  49. SND("  it will be forwarded to appropriate people for handling.");
  50. SND("  Precede your question with ! to automatically forward it to");
  51. SND("  DALnet qualified helpers, or ? to never forward it.");
  52.  
  53.   } else if(!myncmp(help, "NICKSERV", 8)) {
  54. HDR("0 ***** NickServ Help *****");
  55.     if(!*(help+8) || !mycmp(help+9, "HELP")) {
  56.  
  57. SND("NickServ permits users to 'register' a nickname, and stop");
  58. SND("  others from using that nick. NickServ allows the owner of a");
  59. SND("  nick to disconnect a user using the owners registered nick.");
  60. SND("  If a registered nick is not used by the owner for 20 days,");
  61. SND("  NickServ will drop it, leaving it up for grabs by another user.");
  62. SND("  Please do NOT register more nicks than you will actively use! =)");
  63. SND("For more information on a command /msg NickServ help <command>");
  64. SND("");
  65. SND("Core Commands:");
  66. SND("       REGISTER  - Register a nickname");
  67. SND("       SET       - Change settings, including the KILL option");
  68. SND("       ACCESS    - Change the list of addresses allowed to use");
  69. SND("                   a nick");
  70. SND("       IDENTIFY  - Authorize yourself using a password");
  71. SND("       RECOVER   - Stop someone from using your registered nick");
  72. SND("       GHOST     - Terminate a ghosted nickname");
  73. SND("       DROP      - Drop a registered nickname");
  74. SND("  Other Commands:");
  75. SND("       RELEASE       INFO          ACC");
  76.  
  77. } else
  78.     if(!mycmp(help+9, "REGISTER")) {
  79.  
  80. SND("Command - REGISTER");
  81. SND("Usage   - REGISTER <password>");
  82. SND("  This will register your current nickname with NickServ. This");
  83. SND("  means that only you can have access to this nickname, unless");
  84. SND("  you give access to others. The password is a case-sensative");
  85. SND("  password that you make up. Please write down or memorize");
  86. SND("  your password! You will need it later to change settings.");
  87. SND("  When you register a nickname, an entry is added to your");
  88. SND("  access list based on your current address.");
  89. SND("Example:");
  90. SND("  /msg NickServ REGISTER AnyGoodPassword");
  91. SND("   (If dalvenjah's user@host mask was dalvenja@123.321.231.132,");
  92. SND("    then dalvenja@123.321.231.* would be added to his access list.)");
  93.  
  94. } else
  95.     if(!mycmp(help+9, "SET")) {
  96.  
  97. SND("Command - SET <command> [<value>]");
  98. SND("  Lets you change your nickname settings. These are several options");
  99. SND("  here, but to use any of them, your nickname MUST be registered.");
  100. SND("For more information on a command /helpop NickServ SET <command>");
  101. SND("");
  102. SND("Available SET Commands:");
  103. SND("        PASSWD    - Lets you change your nickname's password");
  104. SND("        KILL      - Forcibly prevent people from using your nick");
  105. SND("        URL       - Attaches a Uniform Resource Locator to your nick");
  106. SND("        NOMEMO    - Disables ALL memos to your nick");
  107. SND("        NOOP      - Stops users from adding you to AOp/SOp lists");
  108.  
  109. } else
  110.   if(!myncmp(help+9, "SET ", 4)) {
  111.     if(!mycmp(help+13, "PASSWD")) {
  112.  
  113. SND("Command - SET PASSWD");
  114. SND("Usage   - SET PASSWD <password>");
  115. SND("  This command changes the current password for your nickname.");
  116. SND("  You must use the NickServ IDENTIFY command before doing this.");
  117. SND("Example:");
  118. SND("  /msg NickServ SET PASSWD AnyGoodPassword");
  119.  
  120. } else
  121.     if(!mycmp(help+13, "KILL")) {
  122.  
  123. SND("Command - SET KILL");
  124. SND("Usage   - SET KILL [ON|OFF]");
  125. SND("  This option will make it much harder for anybody to use your");
  126. SND("  nick. If someone changes their nick to a nick registered with");
  127. SND("  kill on, they will be given 60 seconds in which they must");
  128. SND("  either change nicks, or IDENTIFY themselves.");
  129. SND("Example:");
  130. SND("  /msg NickServ SET KILL ON");
  131.  
  132. } else
  133.     if(!mycmp(help+13, "URL")) {
  134.  
  135. SND("Command - SET URL");
  136. SND("Usage   - SET URL [<URL>]");
  137. SND("  Will show anyone who asks NickServ for info on your nickname an");
  138. SND("  URL (Uniform Resource Locator) along with the rest of your info.");
  139. SND("  This could be your home page location, or an email address.");
  140. SND("Examples:");
  141. SND("  /msg NickServ SET URL http://www.dal.net/lefler/");
  142. SND("  /msg NickServ SET URL mailto:lefler@dal.net");
  143. SND("  /msg NickServ SET URL");
  144. SND("           - The first shows a Web Page URL, the second");
  145. SND("             one is an email address. The final example");
  146. SND("             clears any previous URL setting.");
  147.  
  148. } else
  149.     if(!mycmp(help+13, "NOMEMO")) {
  150.  
  151. SND("Command - SET NOMEMO");
  152. SND("Usage   - SET NOMEMO ON|OFF");
  153. SND("  When this option is on, ALL memos to your nickname will be");
  154. SND("  ignored. MemoServ will simply not store them. This command could");
  155. SND("  be usful if you were going on vacation for a while, and did not");
  156. SND("  want your memo list to build up.");
  157. SND("Example:");
  158. SND("  /msg NickServ SET NOMEMO ON");
  159.  
  160. } else
  161.     if(!mycmp(help+13, "NOOP")) {
  162.  
  163. SND("Command - SET NOOP");
  164. SND("Usage   - SET NOOP ON|OFF");
  165. SND("  When this is on, ChanServ will not allow your nick to be added to");
  166. SND("  any AOp/SOp lists in any channels. Whoever tries to add you will");
  167. SND("  get a notice from ChanServ back saying that you have NOOP set on.");
  168. SND("Example:");
  169. SND("  /msg NickServ SET NOOP ON");
  170.  
  171.   } else HLP("Try NICKSERV SET for list of available settings.");
  172.  
  173. } else
  174.     if(!mycmp(help+9, "ACCESS")) {
  175.  
  176. SND("Command - ACCESS");
  177. SND("Usage   - ACCESS LIST");
  178. SND("          ACCESS ADD <user@host mask>");
  179. SND("          ACCESS DEL <user@host mask>");
  180. SND("  Allows you to list, add, or delete user@host masks from your");
  181. SND("  access list. If your address matches a mask in this list, you");
  182. SND("  will not need to IDENTIFY to NickServ to use your nick.");
  183. SND("Examples:");
  184. SND("  /msg NickServ ACCESS ADD calvin@hobbes.catt.ncsu.edu");
  185. SND("  /msg NickServ ACCESS DEL birdman@alcatraz.com");
  186.  
  187. } else
  188.     if(!mycmp(help+9, "IDENTIFY")) {
  189.  
  190. SND("Command - IDENTIFY");
  191. SND("Usage   - IDENTIFY <password>");
  192. SND("  This tells NickServ that you are the owner of a certain nickname.");
  193. SND("  After you have identified, you have full access to the nickname.");
  194. SND("Example:");
  195. SND("  /msg NickServ IDENTIFY AnyGoodPassword");
  196.  
  197. } else
  198.     if(!mycmp(help+9, "RECOVER")) {
  199.  
  200. SND("Command - RECOVER");
  201. SND("Usage   - RECOVER <nick> [<password>]");
  202. SND("  If you haven't set your nick kill switch to on, then this is the");
  203. SND("  manual version of preventing someone from using your nickname.");
  204. SND("  You only need to send the password with this command if your");
  205. SND("  current address doesn't match the nick's access list. This");
  206. SND("  will forcibly stop them from using your nick. A check in");
  207. SND("  this command prevents you from killing yourself. :)");
  208. SND("Example:");
  209. SND("  /msg NickServ RECOVER dalvenjah AnyGoodPassword");
  210.  
  211. } else
  212.     if(!mycmp(help+9, "GHOST")) {
  213.  
  214. SND("Command - GHOST");
  215. SND("Usage   - GHOST <nick> [<password>]");
  216. SND("  If, for some reason, your Internet connection fails, then your");
  217. SND("  client may not log off IRC properly. This is called a ghost.");
  218. SND("  With this command, you can remove your ghost.");
  219. SND("  If you're not in the access list for the nick, you must");
  220. SND("  use the password.");
  221. SND("Example:");
  222. SND("  /msg NickServ GHOST dalvenjah AnyGoodPassword");
  223.  
  224. } else
  225.     if(!mycmp(help+9, "DROP")) {
  226.  
  227. SND("Command - DROP");
  228. SND("Usage   - DROP <nick>");
  229. SND("  Using this command makes NickServ stop watching your nick, and");
  230. SND("  will remove it from services' database. If a nick is dropped,");
  231. SND("  anyone else can register it. You must use the NickServ");
  232. SND("  IDENTIFY command before doing this.");
  233. SND("Example:");
  234. SND("  /msg NickServ DROP Cit");
  235.  
  236. } else
  237.     if(!mycmp(help+9, "RELEASE")) {
  238.  
  239. SND("Command - RELEASE");
  240. SND("Usage   - RELEASE <nick> [password]");
  241. SND("  If you used the recover command to stop another user from using");
  242. SND("  your nick, then NickServ won't let go of the nick for 2 minutes.");
  243. SND("  This command overrides that, telling NickServ to release the");
  244. SND("  nick now. If you're not in the access list for the nick you");
  245. SND("  want to release, then you will need to include the password.");
  246. SND("Example:");
  247. SND("  /msg NickServ RELEASE dalvenjah AnyGoodPassword");
  248.  
  249. } else
  250.     if(!mycmp(help+9, "INFO")) {
  251.  
  252. SND("Command - INFO");
  253. SND("Usage   - INFO <nick>");
  254. SND("  If a nick is registered, this command shows certain info about");
  255. SND("  it, such as the owner, when it was registered, when it was last");
  256. SND("  recognised by NickServ, and what options the owner has set.");
  257. SND("Example:");
  258. SND("  /msg NickServ INFO Cit");
  259.  
  260. } else
  261.     if(!mycmp(help+9, "ACC")) {
  262.  
  263. SND("Command - ACC");
  264. SND("Usage   - ACC <nick>");
  265. SND("  This can be used by bots to determine if the person using the");
  266. SND("  nick is the real owner. The reply will be given in a notice:");
  267. SND("");
  268. SND("        ACC <nick> <access level>");
  269. SND("");
  270. SND("The returned access level is a number from 0 to 3:");
  271. SND("   0 = No such registered nick.");
  272. SND("   1 = User is not online or is not recognized by");
  273. SND("       NickServ as the true owner.");
  274. SND("   2 = User has access to a nick by matching a mask in");
  275. SND("       the nick's access list.");
  276. SND("   3 = User is identified by password to NickServ.");
  277. SND("");
  278. SND("Example:");
  279. SND("  /msg NickServ ACC dalvenjah");
  280.  
  281. } else
  282.     HLP("I do not know what you mean. Try NICKSERV HELP instead.");
  283.  
  284.   } else if(!myncmp(help, "CHANSERV", 8)) {
  285. HDR("0 ***** ChanServ Help *****");
  286.     if(!*(help+8) || !mycmp(help+9, "HELP")) {
  287.  
  288. SND("ChanServ gives normal users the ability to keep hold of a");
  289. SND("  channel, without the need for a bot. Unlike other IRC networks,");
  290. SND("  channel takeovers are virtually impossible, when they are registered.");
  291. SND("  Registration is a quick and painless process. Once registered,");
  292. SND("  the founder can maintain complete and total control of the");
  293. SND("  channel. ChanServ will stop monitoring a channel if no Op enters");
  294. SND("  the channel for 20 days or the founder's nick expires.");
  295. SND("For more information on a command /msg ChanServ help <command>");
  296. SND("");
  297. SND("Core Commands:");
  298. SND("      REGISTER  - Register a channel");
  299. SND("      SET       - Change various channel configuration settings");
  300. SND("      SOP       - Maintain SuperOp channel operator list");
  301. SND("      AOP       - Maintain AutoOp channel operator list");
  302. SND("      AKICK     - Maintain the channel AutoKick banned user list");
  303. SND("      DROP      - Drop a registered channel");
  304. SND("Other Commands:");
  305. SND("      IDENTIFY      ACCESS        OP            DEOP");
  306. SND("      INFO          INVITE        MKICK         MDEOP");
  307. SND("      UNBAN         COUNT         WHY");
  308.  
  309. } else
  310.     if(!mycmp(help+9, "REGISTER")) {
  311.  
  312. SND("Command - REGISTER");
  313. SND("Usage   - REGISTER <channel> <password> <description>");
  314. SND("  When you register a channel with ChanServ, you don't need to");
  315. SND("  worry about takeovers, or bots to keep a list of Ops. ChanServ");
  316. SND("  does all of this and more. The founder is the person who does");
  317. SND("  the registering. Make up a password to register with. The");
  318. SND("  password is used so that only the founder can completely");
  319. SND("  control the channel. The description is only used when a");
  320. SND("  user asks ChanServ for information on a channel, and you make");
  321. SND("  this up also.");
  322. SND("*** PLEASE NOTE: Also, PLEASE memorize your password, write");
  323. SND("  it down somewhere, but PLEASE remember it! You will need it");
  324. SND("  later on. Also, all passwords are case-sensative!");
  325. SND("Examples:");
  326. SND("  /msg ChanServ register #DragonRealm adminchannel Admin channel");
  327. SND("  /msg ChanServ register #Macintosh NeXTStep Macintosh discussion");
  328.  
  329. } else
  330.     if(!mycmp(help+9, "SET")) {
  331.  
  332. SND("Command - SET <channel> <command> [<value>]");
  333. SND("  Allows you to change your channel settigns. These affect a");
  334. SND("  registered channel's status and operation. Only the");
  335. SND("  channel founder can use the SET commands.");
  336. SND("For more information on a command /helpop ChanServ SET <command>");
  337. SND("");
  338. SND("Core SET Commands:");
  339. SND("       FOUNDER   - Allows you to change the channel founder");
  340. SND("       PASSWD    - Lets you change the channel founder password");
  341. SND("       DESC      - Modify the channel's description");
  342. SND("       MLOCK     - Locks the channel to certain modes");
  343. SND("       OPGUARD   - More militant channel operator protection");
  344. SND("       KEEPTOPIC - Maintain the topic when no one is on the channel");
  345. SND("       URL       - Attaches a URL to the channel");
  346. SND("       IDENT     - Ops have to identify to NickServ before");
  347. SND("                   ChanServ ops them");
  348. SND("       RESTRICT  - Allow ops only into a channel");
  349. SND("Additional Comands:");
  350. SND("       TOPICLOCK      LEAVEOPS     UNSECURE      PRIVATE");
  351. SND("       MEMO");
  352.  
  353. } else
  354.   if(!myncmp(help+9, "SET ", 4)) {
  355.     if(!mycmp(help+13, "FOUNDER")) {
  356.  
  357. SND("Command - SET FOUNDER");
  358. SND("Usage   - SET <channel> FOUNDER");
  359. SND("  Allows a channel's founder to be changed to suit different");
  360. SND("  situations should they arise. This command sets the founder");
  361. SND("  of a channel to the current user. You must use the ChanServ");
  362. SND("  IDENTIFY command before using this command.");
  363. SND("Example:");
  364. SND("  /msg ChanServ SET #DragonRealm FOUNDER");
  365. SND("           - This would make the person using this command");
  366. SND("             the new founder of #DragonRealm. This person");
  367. SND("             would need to use ChanServ's IDENTIFY command");
  368. SND("             before using this command.");
  369.  
  370. } else
  371.     if(!mycmp(help+13, "PASSWD")) {
  372.  
  373. SND("Command - SET PASSWD");
  374. SND("Usage   - SET <channel> PASSWD <password>");
  375. SND("  Will change the password needed for founder access on a");
  376. SND("  channel. You must use the IDENTIFY command to gain access.");
  377. SND("Example:");
  378. SND("  /msg ChanServ SET #DragonRealm PASSWD ANewPassword");
  379.  
  380. } else
  381.     if(!mycmp(help+13, "DESC")) {
  382.  
  383. SND("Command - SET DESC");
  384. SND("Usage   - SET <channel> DESC <description>");
  385. SND("  Allows the founder to change the description of a channel.");
  386. SND("Example:");
  387. SND("  /msg ChanServ SET #DragonRealm DESC");
  388.  
  389. } else
  390.     if(!mycmp(help+13, "MLOCK")) {
  391.  
  392. SND("Command - SET MLOCK");
  393. SND("Usage   - SET <channel> MLOCK <mode lock mask>");
  394. SND("  Changes mode lock pattern for specified channel. Setting");
  395. SND("  a lock mask of * will turn off all mode locking.");
  396. SND("Examples:");
  397. SND("  /msg ChanServ SET #dragonrealm MLOCK +nt-ispklm");
  398. SND("  /msg ChanServ SET #dragonrealm MLOCK +nt-ipklm");
  399. SND("  /msg ChanServ SET #dragonrealm MLOCK *");
  400. SND("           - The first example keeps modes nt ON and ispklm");
  401. SND("             OFF. The second is the same, except mode s can be");
  402. SND("             ON or OFF in the channel. The last example clears");
  403. SND("             ALL previous mode locks on a channel.");
  404.  
  405. } else
  406.     if(!mycmp(help+13, "OPGUARD")) {
  407.  
  408. SND("Command - SET OPGUARD");
  409. SND("Usage   - SET <channel> OPGUARD [ON|OFF]");
  410. SND("  Turns on/off ops guarding on a channel.  When ON, only");
  411. SND("  AutoOps, SuperOps, and the channel founder will be allowed");
  412. SND("  ops on the channel.");
  413. SND("Example:");
  414. SND("  /msg ChanServ SET #DragonRealm OPGUARD ON");
  415.  
  416. } else
  417.     if(!mycmp(help+13, "KEEPTOPIC")) {
  418.  
  419. SND("Command - SET KEEPTOPIC");
  420. SND("Usage   - SET <channel> KEEPTOPIC [ON|OFF]");
  421. SND("  Turns \"Sticky\" topics for a channel on or off. If everybody in a");
  422. SND("  certain channel leaves that channel, then the topic is normally");
  423. SND("  lost. But with this option on, ChanServ will save the last topic");
  424. SND("  and when the channel is recreated, it will set the topic to what it");
  425. SND("  previously was, followed by the nick who previously set that topic.");
  426. SND("Example:");
  427. SND("  /msg ChanServ SET #DragonRealm KEEPTOPIC ON");
  428.  
  429. } else
  430.     if(!mycmp(help+13, "URL")) {
  431.  
  432. SND("Command - SET URL");
  433. SND("Usage   - SET <channel> URL [<url>]");
  434. SND("  Allows a URL (Uniform Resource Locator) to be shown");
  435. SND("  in the channel's INFO listing. Usually indicates");
  436. SND("  where more information on the channel may be found.");
  437. SND("Examples:");
  438. SND("  /msg ChanServ SET #dragonrealm URL http://www.dal.net/");
  439. SND("  /msg ChanServ SET #dragonrealm URL mailto:info@dal.net");
  440. SND("  /msg ChanServ SET #dragonrealm URL");
  441. SND("           - The first example is setting the URL to a Web");
  442. SND("             Site, the second to an email address. The final");
  443. SND("             is used to clear any former URL setting.");
  444.  
  445. } else
  446.     if(!mycmp(help+13, "IDENT")) {
  447.  
  448. SND("Command - SET IDENT");
  449. SND("Usage   - SET <channel> IDENT [ON|OFF]");
  450. SND("  This command makes it harder for anyone to use someone elses nick");
  451. SND("  to gain ops in your channel. If this option is on, then all ops");
  452. SND("  have to identify to NickServ before ChanServ ops them.");
  453. SND("  NickServ's Access Lists will have no effect on ops. Any AOp or");
  454. SND("  SOp entries that don't use registered nicknames will also");
  455. SND("  become useless.");
  456. SND("Example:");
  457. SND("  /msg ChanServ SET #Macintosh IDENT ON");
  458.  
  459. } else
  460.     if(!mycmp(help+13, "RESTRICT")) {
  461.  
  462. SND("Command - SET RESTRICT");
  463. SND("Usage   - SET <channel> RESTRICT [ON|OFF]");
  464. SND("  This option will only allow ops into a channel. If someone who");
  465. SND("  joins is not on the AOp/SOp list, they will be kickbanned when");
  466. SND("  they enter the channel.");
  467. SND("Example:");
  468. SND("  /msg ChanServ SET #Macintosh RESTRICT ON");
  469.  
  470. } else
  471.     if(!mycmp(help+13, "TOPICLOCK")) {
  472.  
  473. SND("Command - SET TOPICLOCK");
  474. SND("Usage   - SET <channel> TOPICLOCK [FOUNDER|SOP|OFF]");
  475. SND("  Sets the \"topic lock\" option for a channel. When on, only the");
  476. SND("  founder or SuperOps (depending on the option) are able to change");
  477. SND("  the topic. This setting also performs the function of the");
  478. SND("  KEEPTOPIC command.");
  479. SND("Example:");
  480. SND("  /msg ChanServ SET #DragonRealm TOPICLOCK SOP");
  481.  
  482. } else
  483.     if(!mycmp(help+13, "LEAVEOPS")) {
  484.  
  485. SND("Command - SET LEAVEOPS");
  486. SND("Usage   - SET <channel> LEAVEOPS [ON|OFF]");
  487. SND("  Turns on/off leave-ops behavior on a channel.  When ON, the");
  488. SND("  channel will behave as if ChanServ was not present, and will");
  489. SND("  not deop users who 'create' the channel. AutoOps and");
  490. SND("  SuperOps will still be opped.");
  491. SND("Example:");
  492. SND("  /msg ChanServ SET #DragonRealm LEAVEOPS ON");
  493.  
  494. } else
  495.     if(!mycmp(help+13, "UNSECURE")) {
  496.  
  497. SND("Command - SET UNSECURE");
  498. SND("Usage   - SET <channel> UNSECURE [ON|OFF]");
  499. SND("  Will make a channel a little less secure than normal. When on,");
  500. SND("  you need only be in the founders nick access list to make founder");
  501. SND("  level changes; you won't need to identify.");
  502. SND("*** NOTE: This setting can cause problems if you do not have");
  503. SND("  a secure NickServ Access List. This setting is strongly");
  504. SND("  discouraged.");
  505. SND("Example:");
  506. SND("  /msg ChanServ SET #afd UNSECURE ON");
  507.  
  508. } else
  509.     if(!mycmp(help+13, "PRIVATE")) {
  510.  
  511. SND("Command - SET PRIVATE");
  512. SND("Usage   - SET <channel> PRIVATE [ON|OFF]");
  513. SND("  When this option is ON, only those who know about the channel");
  514. SND("  will have access to it. An MLOCK of +p will be set.");
  515. SND("Example:");
  516. SND("  /msg ChanServ SET #Macintosh PRIVATE ON");
  517.  
  518. } else
  519.     if(!mycmp(help+13, "MEMO")) {
  520.  
  521. SND("Command - SET MEMO");
  522. SND("Usage   - SET <channel> MEMO NONE|AOP|SOP|FOUNDER");
  523. SND("  Use this command to limit who can send channel memos. When");
  524. SND("  NONE, no-one can send channel memos. When AOP, only AOps and");
  525. SND("  above can send channel memos (this is the default setting). When");
  526. SND("  SOP, only SOps and the founder can send channel memos. When");
  527. SND("  FOUNDER, only the Channel Founder can send channel memos.");
  528. SND("Example:");
  529. SND("  /msg ChanServ SET #DragonRealm MEMO AOP");
  530.  
  531.   } else HLP("Try CHANSERV SET for list of available settings.");
  532.  
  533. } else
  534.     if(!mycmp(help+9, "SOP")) {
  535.  
  536. SND("Command - SOP");
  537. SND("Usage   - SOP <channel> ADD <nick or mask>");
  538. SND("          SOP <channel> DEL <index number or mask>");
  539. SND("          SOP <channel> LIST [<search pattern>]");
  540. SND("          SOP <channel> WIPE");
  541. SND("          SOP <channel> CLEAN");
  542. SND("  Maintains the channel SuperOp list. All SOP commands are limited");
  543. SND("  to the channel founder except the LIST command, which is");
  544. SND("  available to all AutoOps or above.");
  545. SND("  ADD adds a user to a channels SuperOp access list. DEL removes");
  546. SND("  a user from a channel's SuperOp access list. LIST lists the");
  547. SND("  SuperOp access list, with an index number. When LIST is used");
  548. SND("  with a search pattern, only those entries to the SOp access list");
  549. SND("  matching your search pattern will be shown to you. LIST will");
  550. SND("  only display the first 100 entries.");
  551. SND("  WIPE will totally clear the SOp list.");
  552. SND("  CLEAN will remove any SOp entries whose nicks have expired.");
  553. SND("Examples:");
  554. SND("  /msg ChanServ SOP #dragonrealm ADD dalvenjah");
  555. SND("  /msg ChanServ SOP #dragonrealm ADD *!besmith@*.uncc.edu");
  556. SND("  /msg ChanServ SOP #dragonrealm DEL 3");
  557. SND("  /msg ChanServ SOP #dragonrealm LIST");
  558. SND("  /msg ChanServ SOP #dragonrealm WIPE");
  559. SND("  /msg ChanServ SOP #dragonrealm CLEAN");
  560.  
  561. } else
  562.     if(!mycmp(help+9, "AOP")) {
  563.  
  564. SND("Command - AOP");
  565. SND("Usage   - AOP <channel> ADD <nick or mask>");
  566. SND("          AOP <channel> DEL <index number or mask>");
  567. SND("          AOP <channel> LIST [<search pattern>]");
  568. SND("          AOP <channel> WIPE");
  569. SND("          AOP <channel> CLEAN");
  570. SND("  Maintains the channel AutoOp list. Only the channel founder");
  571. SND("  may use CLEAN or WIPE, Sops or above may ADD and DEL AOps,");
  572. SND("  and any AOp or above may use LIST.");
  573. SND("  ADD adds a user to a channels AutoOp access list. DEL removes a");
  574. SND("  user from a channel's AutoOp access list. LIST lists the");
  575. SND("  AutoOp access list, with an index number. When LIST is used");
  576. SND("  with a search pattern, only those entries to the AOp access list");
  577. SND("  matching your search pattern will be shown to you. In a list,");
  578. SND("  only the first 100 entries will be shown.");
  579. SND("  WIPE will totally clear the AOp list.");
  580. SND("  CLEAN will remove any expired nicknames from the list.");
  581. SND("Examples:");
  582. SND("  /msg ChanServ AOP #dragonrealm ADD dalvenjah");
  583. SND("  /msg ChanServ AOP #dragonrealm ADD *!besmith@*.uncc.edu");
  584. SND("  /msg ChanServ AOP #dragonrealm DEL 3");
  585. SND("  /msg ChanServ AOP #dragonrealm LIST");
  586. SND("  /msg ChanServ AOP #dragonrealm WIPE");
  587. SND("  /msg ChanServ AOP #dragonrealm CLEAN");
  588.  
  589. } else
  590.     if(!mycmp(help+9, "AKICK")) {
  591.  
  592. SND("Command - AKICK");
  593. SND("Usage   - AKICK <channel> ADD <nick or mask>");
  594. SND("          AKICK <channel> DEL <index number or mask>");
  595. SND("          AKICK <channel> LIST [<search pattern>]");
  596. SND("          AKICK <channel> WIPE");
  597. SND("  Maintains the channel AutoKick list. If a user on the channel");
  598. SND("  AKICK list does try to join a channel, then they will be");
  599. SND("  kicked by ChanServ, as well as banned.");
  600. SND("  WIPE is limited to the channel founder, ADDing and DELeting");
  601. SND("  AKICKs is limited to SOps or above, list can be used by");
  602. SND("  AOps or above.");
  603. SND("  ADD adds a user to a channel's AutoKick list. DEL removes");
  604. SND("  a user from a channel's AutoKick list. LIST lists the");
  605. SND("  AutoKick list, with an index number. When LIST is used");
  606. SND("  with a search pattern, only those entries to the");
  607. SND("  AutoKick list matching your search pattern will be shown");
  608. SND("  to you. Only the first 100 entries in a LIST will be shown.");
  609. SND("  WIPE will remove all entries from the AutoKick list.");
  610. SND("Examples:");
  611. SND("  /msg ChanServ AKICK #dragonrealm ADD dalvenjah");
  612. SND("  /msg ChanServ AKICK #dragonrealm ADD *!besmith@*.uncc.edu");
  613. SND("  /msg ChanServ AKICK #dragonrealm DEL 3");
  614. SND("  /msg ChanServ AKICK #dragonrealm LIST");
  615. SND("  /msg ChanServ AKICK #dragonrealm WIPE");
  616.  
  617. } else
  618.     if(!mycmp(help+9, "DROP")) {
  619.  
  620. SND("Command - DROP");
  621. SND("Usage   - DROP <channel>");
  622. SND("  This command is used when you no longer want ChanServ to manage");
  623. SND("  a channel. Use of this command is limited to the channel founder.");
  624. SND("  Before using the DROP command you MUST use the ChanServ");
  625. SND("  IDENTIFY command.");
  626. SND("Example:");
  627. SND("  /msg ChanServ DROP #DragonRealm");
  628.  
  629. } else
  630.     if(!mycmp(help+9, "IDENTIFY")) {
  631.  
  632. SND("Command - IDENTIFY");
  633. SND("Usage   - IDENTIFY <channel> <password>");
  634. SND("  This command will identify the user to ChanServ as the founder,");
  635. SND("  and give them full access to the channel.");
  636. SND("Example:");
  637. SND("  /msg ChanServ IDENTIFY #DragonRealm AnyGoodPassword");
  638.  
  639. } else
  640.     if(!mycmp(help+9, "ACCESS")) {
  641.  
  642. SND("Command - ACCESS");
  643. SND("Usage   - ACCESS <channel> [<nick>]");
  644. SND("  When used without the optional <nick> parameter, this command");
  645. SND("  allows a user to query their access on any registered channel.");
  646. SND("  The reply for this form of the command will verbosly state your");
  647. SND("  access on the given channel (Basic, AOP, SOP, or Founder).");
  648. SND("  When used with the optional <nick> parameter, you must be");
  649. SND("  an AOp or higher on the specificed channel. This form of the");
  650. SND("  command could serve as a protocol for bots to query user access");
  651. SND("  on a channel using the ChanServ facility, thus relieving the");
  652. SND("  bot of keeping track of access lists. For a registered channel,");
  653. SND("  the reply is given in a NOTICE of the following format:");
  654. SND("");
  655. SND("       ACC <channel> <nick> <user@host> <access level>");
  656. SND("");
  657. SND("The returned access level is a number from -1 to 5, where:");
  658. SND(" -1 = AutoKICKed from the channel");
  659. SND("  0 = basic");
  660. SND("  1 = AutoOp");
  661. SND("  3 = Has founder access via a NickServ access list mask");
  662. SND("  4 = Has founder access via identification to NickServ");
  663. SND("  5 = Has founder access via identification to ChanServ");
  664. SND("");
  665. SND("  If the user is not online, the user@host and access level will be");
  666. SND("  *UNKNOWN* and 0, respectively.");
  667. SND("Examples:");
  668. SND("  /msg ChanServ ACCESS #dalnethelp");
  669. SND("  /msg ChanServ ACCESS #dalnethelp Cit");
  670.  
  671. } else
  672.     if(!mycmp(help+9, "ACC")) {
  673.  
  674. SND("Command - ACC");
  675. SND("Usage   - ACC <channel> <nick>");
  676. SND("  This command gives exactly the same results as specifying a");
  677. SND("  nick with the ACCESS command. ACCESS can effectivly be used");
  678. SND("  in place of this command. Refer to the help for ACCESS for");
  679. SND("  the format of the output and the meaning of the levels.");
  680. SND("  Limited to channel AOps or above.");
  681. SND("Example:");
  682. SND("  /msg ChanServ ACC #dalnethelp Cit");
  683.  
  684. } else
  685.     if(!mycmp(help+9, "OP")) {
  686.  
  687. SND("Command - OP");
  688. SND("Usage   - OP <channel> [-]<nick>...");
  689. SND("  Will op the given nick(s) in the given channel. Will not work if");
  690. SND("  secured ops is on and the user isn't in the AOp or SOp list.");
  691. SND("  When used with the - flag, it deops the named user(s). You cannot");
  692. SND("  deop someone who outranks you, ie an AOp can't deop a SOp using");
  693. SND("  this command. Limited to AutoOp or above.");
  694. SND("Example:");
  695. SND("  /msg ChanServ OP #DragonRealm Cit");
  696.  
  697. } else
  698.     if(!mycmp(help+9, "DEOP")) {
  699.  
  700. SND("Command - DEOP");
  701. SND("Usage   - DEOP <channel> <nick>");
  702. SND("  This command is used to remove operator status from someone in a");
  703. SND("  channel. It's the same as /msg ChanServ op #name -nick; You cannot");
  704. SND("  deop someone who outranks you, ie an AOp can't deop a SOp using");
  705. SND("  this command. Limited to AutoOp or above.");
  706. SND("Example:");
  707. SND("  /msg ChanServ DEOP #DragonRealm Cit");
  708.  
  709. } else
  710.     if(!mycmp(help+9, "INFO")) {
  711.  
  712. SND("Command - INFO");
  713. SND("Usage   - INFO <channel>");
  714. SND("  Shows information for a channel, such as the channel founder,");
  715. SND("  any mode locks, the current topic, the channel description,");
  716. SND("  any settings such as topic lock, the time the channel was");
  717. SND("  registered, and the time of the last opping.");
  718. SND("Example:");
  719. SND("  /msg ChanServ info #DragonRealm");
  720.  
  721. } else
  722.     if(!mycmp(help+9, "INVITE")) {
  723.  
  724. SND("Command - INVITE");
  725. SND("Usage   - INVITE <channel>");
  726. SND("  Invites the sender to a channel that is set to invite only (mode");
  727. SND("  +i). Used mainly for channels where the MLOCK is set +i. You");
  728. SND("  cannot invite other users to a channel via ChanServ.");
  729. SND("  Limited to channel AutoOps or above.");
  730. SND("Example:");
  731. SND("  /msg ChanServ INVITE #DragonRealm");
  732.  
  733. } else
  734.     if(!mycmp(help+9, "MKICK")) {
  735.  
  736. SND("Command - MKICK");
  737. SND("Usage   - MKICK <channel>");
  738. SND("  Evacuates a channel completely by kicking everyone out, banning");
  739. SND("  *!*@* (everyone), setting mode +i (invite only) and +l 1. When");
  740. SND("  MKICKing a channel, you cannot UNAN or INVITE yourself back");
  741. SND("  into the channel. This should only be used in a takeover");
  742. SND("  situation. Limited to channel AutoOps and above while they are");
  743. SND("  not outranked on the channel (if there is a SOp present, an AOp");
  744. SND("  cannot MKICK).");
  745. SND("Example:");
  746. SND("  /msg ChanServ MKICK #Macintosh");
  747.  
  748. } else
  749.     if(!mycmp(help+9, "MDEOP")) {
  750.  
  751. SND("Command - MDEOP");
  752. SND("Usage   - MDEOP <channel>");
  753. SND("  Removes operator status from all users on the named channel who");
  754. SND("  don't outrank the user, ie an AOp can't deop a SOp. Limited to");
  755. SND("  channel AutoOps and above.");
  756. SND("Example:");
  757. SND("  /msg ChanServ MDEOP #dalnethelp");
  758.  
  759. } else
  760.     if(!mycmp(help+9, "UNBAN")) {
  761.  
  762. SND("Command - UNBAN");
  763. SND("Usage   - UNBAN <channel> [ME|ALL]");
  764. SND("  Will remove bans in the specified channels. The ME option,");
  765. SND("  available to channel AutoOps or higher, will remove all");
  766. SND("  bans that match your current address. The ALL option,");
  767. SND("  which is limited to channel SuperOps or higher, will");
  768. SND("  remove all bans from the channel ban list.");
  769. SND("Examples:");
  770. SND("  /msg ChanServ UNBAN #dragonrealm ME");
  771. SND("  /msg ChanServ UNBAN #afd ALL");
  772.  
  773. } else
  774.   if(!mycmp(help+9, "COUNT")) {
  775.  
  776. SND("Command - COUNT");
  777. SND("Usage   - COUNT <channel>");
  778. SND("  This command will display the number of AOps, SOps, and");
  779. SND("  AKICKs in a channel. Limited to AutoOp or higher.");
  780. SND("Example:");
  781. SND("  /msg ChanServ COUNT #Macintosh");
  782.  
  783. } else
  784.     if(!mycmp(help+9, "WHY")) {
  785.  
  786. SND("Command - WHY");
  787. SND("Usage   - WHY <channel> <nick>");
  788. SND("  This command is used to tell why the given nick is gaining");
  789. SND("  operator status (ops) on the given registered channel. The reply");
  790. SND("  will tell which entry, either registered nick or mask, in the AOp");
  791. SND("  or SOp list is allowing the nick to gain ops. This command has no");
  792. SND("  useful effect if the given nick is not gaining ops or some type");
  793. SND("  of access in the given channel.");
  794. SND("Example:");
  795. SND("  /msg ChanServ why #dalnethelp Ramuh");
  796.  
  797. } else
  798.     HLP("I do not know what you mean. Try CHANSERV HELP instead.");
  799.  
  800.   } else if(!myncmp(help, "MEMOSERV", 8)) {
  801. HDR("0 ***** MemoServ Help *****");
  802.     if(!*(help+8) || !mycmp(help+9, "HELP")) {
  803.  
  804. SND("MemoServ allows users registered with NickServ to send");
  805. SND("  each other messages, which can be read by the recipient at");
  806. SND("  his/her leisure. Memos can be sent to people even when they");
  807. SND("  are not on IRC.");
  808. SND("For more information on a command /helpop MemoServ <command>");
  809. SND("");
  810. SND("Commands:");
  811. SND("       SEND      - Send another user or a channel a memo");
  812. SND("       SENDSOP   - Sends a memo to all SOPs");
  813. SND("       LIST      - List your current memos");
  814. SND("       READ      - Read a memo");
  815. SND("       DEL       - Mark a memo as deleted");
  816. SND("       UNDEL     - Mark a memo as not deleted");
  817. SND("       PURGE     - Erase memos marked as deleted");
  818. SND("       FORWARD   - Arrange or modify memo forwarding");
  819.  
  820. } else
  821.     if(!mycmp(help+9, "SEND")) {
  822.  
  823. SND("Command - SEND");
  824. SND("Usage   - SEND <nick> <memo>");
  825. SND("          SEND <channel> <memo>");
  826. SND("  This lets you send a short memo to another nick. Both your nick,");
  827. SND("  and the nick of the person you're sending the memo to must be");
  828. SND("  registered, otherwise you will be unable to send a memo.");
  829. SND("");
  830. SND("  This command can also be used to send a memo to all the ops of");
  831. SND("  a channel registered with ChanServ. When a memo is sent to a");
  832. SND("  channel, all AOps and SOps entered by registered nick, and the");
  833. SND("  channel founder will receive a copy. Access for sending channel");
  834. SND("  memos depends on the channel founder's ChanServ MEMO Setting,");
  835. SND("  however you must always be an AOp or better on the channel.");
  836. SND("Examples:");
  837. SND("  /msg MemoServ SEND JoeUser Meet me in #Macintosh at 8pm.");
  838. SND("  /msg MemoServ SEND #dalnethelp Channel meeting, 8pm!");
  839.  
  840. } else
  841.     if(!mycmp(help+9, "SENDSOP")) {
  842.  
  843. SND("Command - SENDSOP");
  844. SND("Usage   - SENDSOP <channel> <memo>");
  845. SND("  This command is used to send memos to all SOps and the founder");
  846. SND("  in a channel. Only gets sent to those nicks in the SOp list");
  847. SND("  that are registered. Limited to AutoOp and above.");
  848. SND("Example:");
  849. SND("  /msg MemoServ SENDSOP #DragonRealm This is a SOps only memo.");
  850.  
  851. } else
  852.     if(!mycmp(help+9, "LIST")) {
  853.  
  854. SND("Command - LIST");
  855. SND("Usage   - LIST");
  856. SND("  Displays a list of memos sent to you. You cannot see memos that");
  857. SND("  you have sent. Only 20 memos will be displayed. If you have more");
  858. SND("  than 20 memos, you will have to delete some of the earlier memos,");
  859. SND("  to get at the ones near the top.");
  860. SND("Example:");
  861. SND("  /msg MemoServ LIST");
  862.  
  863. } else
  864.     if(!mycmp(help+9, "READ")) {
  865.  
  866. SND("Command - READ");
  867. SND("Usage   - READ <memo number>");
  868. SND("  Shows you the contents of <memo number>. To find out what <memo");
  869. SND("  number> is, use /msg MemoServ List.");
  870. SND("Example:");
  871. SND("  /msg MemoServ READ 1");
  872. SND("  /msg MemoServ READ 15");
  873.  
  874. } else
  875.     if(!mycmp(help+9, "DEL")) {
  876.  
  877. SND("Command - DEL");
  878. SND("Usage   - DEL <memo number>");
  879. SND("          DEL ALL");
  880. SND("  Deletes memo <memo number> (as given by the LIST command)");
  881. SND("  from your memo list. DEL ALL deletes and purges all of your");
  882. SND("  memos without restriction, so use it with care. There is no way");
  883. SND("  to get a memo back after it has been deleted and PURGED.");
  884. SND("Note: DEL does not actually remove the memo, but simply");
  885. SND("  marks it as deleted (indicated with D in the LIST display).");
  886. SND("  The memo is not removed until you sign off or the PURGE");
  887. SND("  command is used.");
  888. SND("Examples:");
  889. SND("  /msg MemoServ DEL ALL");
  890. SND("  /msg MemoServ DEL 13");
  891.  
  892. } else
  893.     if(!mycmp(help+9, "UNDEL")) {
  894.  
  895. SND("Command - UNDEL");
  896. SND("Usage   - UNDEL <memo number>");
  897. SND("  Marks memo <memo numbe> (as given by the LIST command) as");
  898. SND("  undeleted, if has been marked deleted with the DEL command");
  899. SND("Example:");
  900. SND("  /msg MemoServ UNDEL 1");
  901.  
  902. } else
  903.     if(!mycmp(help+9, "PURGE")) {
  904.  
  905. SND("Command - PURGE");
  906. SND("Usage   - PURGE");
  907. SND("  This command removes all memos which have been marked as");
  908. SND("  deleted from your memo list.");
  909. SND("  This command cannot be reversed, so use it carefully.");
  910. SND("Example:");
  911. SND("  /msg MemoServ PURGE");
  912.  
  913. } else
  914.     if(!mycmp(help+9, "FORWARD")) {
  915.  
  916. SND("Command - FORWARD");
  917. SND("Usage   - FORWARD");
  918. SND("          FORWARD -");
  919. SND("          FORWARD <nickname> [password]");
  920. SND("  This command will 'forward' memos from one registered nickname");
  921. SND("  to another. The first command will tell you if forwarding on your");
  922. SND("  current nickname is on. The second command will turn forwarding");
  923. SND("  for your current nickname off.");
  924. SND("  The third will forward memos from your current nick to <nick>.");
  925. SND("  You must know the password of the nick you wish to forward");
  926. SND("  memos to.");
  927. SND("Examples:");
  928. SND("  /msg MemoServ FORWARD");
  929. SND("  /msg MemoServ FORWARD -");
  930. SND("  /msg MemoServ FORWARD dalvenjah AnyGoodPassword");
  931.  
  932. } else
  933.     HLP("I do not know what you mean. Try MEMOSERV HELP instead.");
  934.  
  935.   } else if(!myncmp(help, "IRCD", 8)) {
  936. HDR("0 ***** ircd Help *****");
  937. SND("Currently help is available on the following topics:");
  938. SND("  WATCH    - new DALnet notify system");
  939. /* SND("  HELPOP   - DALnet Help System"); */
  940. SND("  LIST     - new /list features");
  941. /* SND("  WHO      - new /who features"); */
  942. /* SND("  PROTOCTL - protocol control (for client/script authors)"); */
  943. SND("  PRIVMSG  - special /msg and /notice formats");
  944. SND("  COMMANDS - full list of server commands");
  945.   } else if(!myncmp(help, "WATCH", 8)) {
  946. HDR("0 ***** ircd Help *****");
  947. SND("Watch is a new notify-type system on DALnet which is both faster");
  948. SND("and uses less network resources than any old-style notify");
  949. SND("system. You may add entries to your Watch list with the command");
  950. SND("/watch +nick1 [+nick2 +nick3 ...], and the server will send");
  951. SND("you a message when any nickname in your watch list logs on or off.");
  952. SND("Use /watch -nick to remove a nickname from the watch list, and");
  953. SND("just /watch to view your watch list.");
  954. SND("The watch list DOES NOT REMAIN BETWEEN SESSIONS - you (or your");
  955. SND("script or client) must add the nicknames to your watch list every");
  956. SND("time you connect to an IRC server.");
  957.   } else if(!myncmp(help, "HELPOP", 8)) {
  958. HDR("0 ***** ircd Help *****");
  959. SND("Sorry, we're working on this.");
  960.   } else if(!myncmp(help, "LIST", 8)) {
  961. HDR("0 ***** ircd Help *****");
  962. SND("New extended /list command options are supported.  To use these");
  963. SND("features, you will likely need to prefix the LIST command with");
  964. SND("/quote to avoid your client interpreting the command.");
  965. SND("");
  966. SND("Usage: /quote LIST options");
  967. SND("");
  968. SND("If you don't include any options, the default is to send you the");
  969. SND("entire unfiltered list of channels. Below are the options you can");
  970. SND("use, and what channels LIST will return when you use them.");
  971. SND(">number  List channels with more than <number> people.");
  972. SND("<number  List channels with less than <number> people.");
  973. SND("C>number List channels created between now and <number> minutes ago.");
  974. SND("C<number List channels created earlier than <number> minutes ago.");
  975. SND("T>number List channels whose topics are older than <number> minutes");
  976. SND("         (Ie., they have not changed in the last <number> minutes.");
  977. SND("T<number List channels whose topics are newer than <number> minutes.");
  978. SND("*mask*   List channels that match *mask*");
  979. SND("!*mask*  List channels that do not match *mask*");
  980. SND("LIST defaults to sending a list of channels with 2 or more members,");
  981. SND("so use the >0 option to get the full channel listing.");
  982.   } else if(!myncmp(help, "WHO", 8)) {
  983. HDR("0 ***** ircd Help *****");
  984. SND("Sorry, we're working on this.");
  985.   } else if(!myncmp(help, "PROTOCTL", 8)) {
  986. HDR("0 ***** ircd Help *****");
  987. SND("Sorry, we're working on this.");
  988.   } else if(!myncmp(help, "PRIVMSG", 8)) {
  989. HDR("0 ***** ircd Help *****");
  990. SND("PRIVMSG and NOTICE, which are used internally by the client for");
  991. SND("/msg and /notice, on DALnet support two additional formats:");
  992. SND("/msg @#channel <text> will send the text to channel-ops on the");
  993. SND("given channel only. /msg @+#channel <text> will send the text");
  994. SND("to both ops and voiced users on the channel. While some clients");
  995. SND("may support these as-is, on others (such as ircII), it's necessary");
  996. SND("to use /quote privmsg @#channel <text> instead. It's perhaps a");
  997. SND("good idea to add the /alias omsg /quote privmsg @$0 $1- into");
  998. SND("your script (.ircrc) file in that case.");
  999.   } else if(!myncmp(help, "COMMANDS", 8)) {
  1000. HDR("0 ***** ircd Help *****");
  1001. SND("Full command list, in the format: command token");
  1002.     /* Send the command list (with tokens)
  1003.      * -Wizzu
  1004.      */
  1005.     for (i = 0; msgtab[i].cmd; i++)
  1006.         /* The following command is (almost) the same as the SND
  1007.          * macro, but includes variables.  -Wizzu
  1008.          */
  1009.         sendto_one(sptr,":%s 291 %s :%s %s",
  1010.             me.name, name, msgtab[i].cmd, msgtab[i].token);
  1011.   } else { /* Flood back the user ;) */
  1012.     HLP("If you need help on DALnet services, try...");
  1013.     HLP("  /helpop nickserv - for help on registering nicknames");
  1014.     HLP("  /helpop chanserv - for help on registering channels");
  1015.     HLP("  /helpop memoserv - for help on sending short messages");
  1016.     HLP("For help on DALnet IRC server extra features, use...");
  1017.     HLP("  /helpop ircd     - special DALnet ircd features");
  1018.     HLP("If /helpop gives \"unknown command\" on your client, try using");
  1019.     HLP("/quote helpop instead.");
  1020.     FTR(" ***** Go to #dalnethelp if you have any further questions *****");
  1021.     if(!myncmp(help, "INDEX", 8))
  1022.       return 1;
  1023.     else
  1024.       return 0;
  1025.   }
  1026.   FTR(" ***** Go to #dalnethelp if you have any further questions *****");
  1027.   return 1;
  1028. }
  1029.