2 * $Id: Rfc2812.cs 198 2005-06-08 16:50:11Z meebey $
3 * $URL: svn://svn.qnetp.net/smartirc/SmartIrc4net/tags/0.4.0/src/IrcCommands/Rfc2812.cs $
6 * $Date: 2005-06-08 18:50:11 +0200 (Wed, 08 Jun 2005) $
8 * SmartIrc4net - the IRC library for .NET/C# <http://smartirc4net.sf.net>
10 * Copyright (c) 2003-2005 Mirco Bauer <meebey@meebey.net> <http://www.meebey.net>
12 * Full LGPL License: <http://www.gnu.org/licenses/lgpl.txt>
14 * This library is free software; you can redistribute it and/or
15 * modify it under the terms of the GNU Lesser General Public
16 * License as published by the Free Software Foundation; either
17 * version 2.1 of the License, or (at your option) any later version.
19 * This library is distributed in the hope that it will be useful,
20 * but WITHOUT ANY WARRANTY; without even the implied warranty of
21 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
22 * Lesser General Public License for more details.
24 * You should have received a copy of the GNU Lesser General Public
25 * License along with this library; if not, write to the Free Software
26 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
30 using System
.Globalization
;
31 using System
.Text
.RegularExpressions
;
33 namespace Meebey
.SmartIrc4net
38 /// <threadsafety static="true" instance="true" />
39 public sealed class Rfc2812
41 // nickname = ( letter / special ) *8( letter / digit / special / "-" )
42 // letter = %x41-5A / %x61-7A ; A-Z / a-z
43 // digit = %x30-39 ; 0-9
44 // special = %x5B-60 / %x7B-7D
45 // ; "[", "]", "\", "`", "_", "^", "{", "|", "}"
46 private static Regex _NicknameRegex
= new Regex(@"^[A-Za-z\[\]\\`_^{|}][A-Za-z0-9\[\]\\`_\-^{|}]+$", RegexOptions
.Compiled
);
53 /// Checks if the passed nickname is valid according to the RFC
55 /// Use with caution, many IRC servers are not conform with this!
57 public static bool IsValidNickname(string nickname
)
59 if ((nickname
!= null) &&
60 (nickname
.Length
> 0) &&
61 (_NicknameRegex
.Match(nickname
).Success
)) {
68 public static string Pass(string password
)
70 return "PASS "+password
;
73 public static string Nick(string nickname
)
75 return "NICK "+nickname
;
78 public static string User(string username
, int usermode
, string realname
)
80 return "USER "+username
+" "+usermode
.ToString()+" * :"+realname
;
83 public static string Oper(string name
, string password
)
85 return "OPER "+name
+" "+password
;
88 public static string Privmsg(string destination
, string message
)
90 return "PRIVMSG "+destination
+" :"+message
;
93 public static string Notice(string destination
, string message
)
95 return "NOTICE "+destination
+" :"+message
;
98 public static string Join(string channel
)
100 return "JOIN "+channel
;
103 public static string Join(string[] channels
)
105 string channellist
= String
.Join(",", channels
);
106 return "JOIN "+channellist
;
109 public static string Join(string channel
, string key
)
111 return "JOIN "+channel
+" "+key
;
114 public static string Join(string[] channels
, string[] keys
)
116 string channellist
= String
.Join(",", channels
);
117 string keylist
= String
.Join(",", keys
);
118 return "JOIN "+channellist
+" "+keylist
;
121 public static string Part(string channel
)
123 return "PART "+channel
;
126 public static string Part(string[] channels
)
128 string channellist
= String
.Join(",", channels
);
129 return "PART "+channellist
;
132 public static string Part(string channel
, string partmessage
)
134 return "PART "+channel
+" :"+partmessage
;
137 public static string Part(string[] channels
, string partmessage
)
139 string channellist
= String
.Join(",", channels
);
140 return "PART "+channellist
+" :"+partmessage
;
143 public static string Kick(string channel
, string nickname
)
145 return "KICK "+channel
+" "+nickname
;
148 public static string Kick(string channel
, string nickname
, string comment
)
150 return "KICK "+channel
+" "+nickname
+" :"+comment
;
153 public static string Kick(string[] channels
, string nickname
)
155 string channellist
= String
.Join(",", channels
);
156 return "KICK "+channellist
+" "+nickname
;
159 public static string Kick(string[] channels
, string nickname
, string comment
)
161 string channellist
= String
.Join(",", channels
);
162 return "KICK "+channellist
+" "+nickname
+" :"+comment
;
165 public static string Kick(string channel
, string[] nicknames
)
167 string nicknamelist
= String
.Join(",", nicknames
);
168 return "KICK "+channel
+" "+nicknamelist
;
171 public static string Kick(string channel
, string[] nicknames
, string comment
)
173 string nicknamelist
= String
.Join(",", nicknames
);
174 return "KICK "+channel
+" "+nicknamelist
+" :"+comment
;
177 public static string Kick(string[] channels
, string[] nicknames
)
179 string channellist
= String
.Join(",", channels
);
180 string nicknamelist
= String
.Join(",", nicknames
);
181 return "KICK "+channellist
+" "+nicknamelist
;
184 public static string Kick(string[] channels
, string[] nicknames
, string comment
)
186 string channellist
= String
.Join(",", channels
);
187 string nicknamelist
= String
.Join(",", nicknames
);
188 return "KICK "+channellist
+" "+nicknamelist
+" :"+comment
;
191 public static string Motd()
196 public static string Motd(string target
)
198 return "MOTD "+target
;
201 public static string Luser()
206 public static string Luser(string mask
)
208 return "LUSER "+mask
;
211 public static string Luser(string mask
, string target
)
213 return "LUSER "+mask
+" "+target
;
216 public static string Version()
221 public static string Version(string target
)
223 return "VERSION "+target
;
226 public static string Stats()
231 public static string Stats(string query
)
233 return "STATS "+query
;
236 public static string Stats(string query
, string target
)
238 return "STATS "+query
+" "+target
;
241 public static string Links()
246 public static string Links(string servermask
)
248 return "LINKS "+servermask
;
251 public static string Links(string remoteserver
, string servermask
)
253 return "LINKS "+remoteserver
+" "+servermask
;
256 public static string Time()
261 public static string Time(string target
)
263 return "TIME "+target
;
266 public static string Connect(string targetserver
, string port
)
268 return "CONNECT "+targetserver
+" "+port
;
271 public static string Connect(string targetserver
, string port
, string remoteserver
)
273 return "CONNECT "+targetserver
+" "+port
+" "+remoteserver
;
276 public static string Trace()
281 public static string Trace(string target
)
283 return "TRACE "+target
;
286 public static string Admin()
291 public static string Admin(string target
)
293 return "ADMIN "+target
;
296 public static string Info()
301 public static string Info(string target
)
303 return "INFO "+target
;
306 public static string Servlist()
311 public static string Servlist(string mask
)
313 return "SERVLIST "+mask
;
316 public static string Servlist(string mask
, string type
)
318 return "SERVLIST "+mask
+" "+type
;
321 public static string Squery(string servicename
, string servicetext
)
323 return "SQUERY "+servicename
+" :"+servicetext
;
326 public static string List()
331 public static string List(string channel
)
333 return "LIST "+channel
;
336 public static string List(string[] channels
)
338 string channellist
= String
.Join(",", channels
);
339 return "LIST "+channellist
;
342 public static string List(string channel
, string target
)
344 return "LIST "+channel
+" "+target
;
347 public static string List(string[] channels
, string target
)
349 string channellist
= String
.Join(",", channels
);
350 return "LIST "+channellist
+" "+target
;
353 public static string Names()
358 public static string Names(string channel
)
360 return "NAMES "+channel
;
363 public static string Names(string[] channels
)
365 string channellist
= String
.Join(",", channels
);
366 return "NAMES "+channellist
;
369 public static string Names(string channel
, string target
)
371 return "NAMES "+channel
+" "+target
;
374 public static string Names(string[] channels
, string target
)
376 string channellist
= String
.Join(",", channels
);
377 return "NAMES "+channellist
+" "+target
;
380 public static string Topic(string channel
)
382 return "TOPIC "+channel
;
385 public static string Topic(string channel
, string newtopic
)
387 return "TOPIC "+channel
+" :"+newtopic
;
390 public static string Mode(string target
)
392 return "MODE "+target
;
395 public static string Mode(string target
, string newmode
)
397 return "MODE "+target
+" "+newmode
;
400 public static string Service(string nickname
, string distribution
, string info
)
402 return "SERVICE "+nickname
+" * "+distribution
+" * * :"+info
;
405 public static string Invite(string nickname
, string channel
)
407 return "INVITE "+nickname
+" "+channel
;
410 public static string Who()
415 public static string Who(string mask
)
420 public static string Who(string mask
, bool ircop
)
423 return "WHO "+mask
+" o";
429 public static string Whois(string mask
)
431 return "WHOIS "+mask
;
434 public static string Whois(string[] masks
)
436 string masklist
= String
.Join(",", masks
);
437 return "WHOIS "+masklist
;
440 public static string Whois(string target
, string mask
)
442 return "WHOIS "+target
+" "+mask
;
445 public static string Whois(string target
, string[] masks
)
447 string masklist
= String
.Join(",", masks
);
448 return "WHOIS "+target
+" "+masklist
;
451 public static string Whowas(string nickname
)
453 return "WHOWAS "+nickname
;
456 public static string Whowas(string[] nicknames
)
458 string nicknamelist
= String
.Join(",", nicknames
);
459 return "WHOWAS "+nicknamelist
;
462 public static string Whowas(string nickname
, string count
)
464 return "WHOWAS "+nickname
+" "+count
+" ";
467 public static string Whowas(string[] nicknames
, string count
)
469 string nicknamelist
= String
.Join(",", nicknames
);
470 return "WHOWAS "+nicknamelist
+" "+count
+" ";
473 public static string Whowas(string nickname
, string count
, string target
)
475 return "WHOWAS "+nickname
+" "+count
+" "+target
;
478 public static string Whowas(string[] nicknames
, string count
, string target
)
480 string nicknamelist
= String
.Join(",", nicknames
);
481 return "WHOWAS "+nicknamelist
+" "+count
+" "+target
;
484 public static string Kill(string nickname
, string comment
)
486 return "KILL "+nickname
+" :"+comment
;
489 public static string Ping(string server
)
491 return "PING "+server
;
494 public static string Ping(string server
, string server2
)
496 return "PING "+server
+" "+server2
;
499 public static string Pong(string server
)
501 return "PONG "+server
;
504 public static string Pong(string server
, string server2
)
506 return "PONG "+server
+" "+server2
;
509 public static string Error(string errormessage
)
511 return "ERROR :"+errormessage
;
514 public static string Away()
519 public static string Away(string awaytext
)
521 return "AWAY :"+awaytext
;
524 public static string Rehash()
529 public static string Die()
534 public static string Restart()
539 public static string Summon(string user
)
541 return "SUMMON "+user
;
544 public static string Summon(string user
, string target
)
546 return "SUMMON "+user
+" "+target
;
549 public static string Summon(string user
, string target
, string channel
)
551 return "SUMMON "+user
+" "+target
+" "+channel
;
554 public static string Users()
559 public static string Users(string target
)
561 return "USERS "+target
;
564 public static string Wallops(string wallopstext
)
566 return "WALLOPS :"+wallopstext
;
569 public static string Userhost(string nickname
)
571 return "USERHOST "+nickname
;
574 public static string Userhost(string[] nicknames
)
576 string nicknamelist
= String
.Join(" ", nicknames
);
577 return "USERHOST "+nicknamelist
;
580 public static string Ison(string nickname
)
582 return "ISON "+nickname
;
585 public static string Ison(string[] nicknames
)
587 string nicknamelist
= String
.Join(" ", nicknames
);
588 return "ISON "+nicknamelist
;
591 public static string Quit()
596 public static string Quit(string quitmessage
)
598 return "QUIT :"+quitmessage
;
601 public static string Squit(string server
, string comment
)
603 return "SQUIT "+server
+" :"+comment
;