Browse Source

Added methods. Made Nick and Channel classes separate files.

tags/3.0.0
Teknikode 5 years ago
parent
commit
af341bbfed
9 changed files with 1200 additions and 201 deletions
  1. 6
    2
      Bot.cs
  2. 2
    0
      Combot.csproj
  3. 35
    0
      Config.cs
  4. 93
    0
      IRC/Channel.cs
  5. 3
    2
      IRC/IRCMessages.cs
  6. 836
    41
      IRC/IRCMethods.cs
  7. 146
    148
      IRC/IRCTypes.cs
  8. 67
    0
      IRC/Nick.cs
  9. 12
    8
      TCP/TCPInterface.cs

+ 6
- 2
Bot.cs View File

@@ -12,11 +12,15 @@ namespace Combot

public Config Config;

internal IRCService _ircService;
public IRCService IRCService;

internal Bot()
{
_ircService = new IRCService(this);
IRCService = new IRCService(this);

Message msg = new Message();
Nick nick = new Nick();
msg.Sender = nick;
}
}
}

+ 2
- 0
Combot.csproj View File

@@ -42,7 +42,9 @@
<Compile Include="Access.cs" />
<Compile Include="Bot.cs" />
<Compile Include="Config.cs" />
<Compile Include="IRC\Channel.cs" />
<Compile Include="IRC\IRCMethods.cs" />
<Compile Include="IRC\Nick.cs" />
<Compile Include="IRC\IRCService.cs" />
<Compile Include="IRC\IRCTypes.cs" />
<Compile Include="IRC\IRCMessages.cs" />

+ 35
- 0
Config.cs View File

@@ -3,11 +3,46 @@ using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Net;

namespace Combot
{
class Config
{
private string _name;
public string Name
{
get
{
return _name;
}

set
{
if (value != _name)
{
_name = value;
}
}
}

private IPEndPoint _host;
public IPEndPoint Host
{
get
{
return _host;
}

set
{
if (value != _host)
{
_host = value;
}
}
}

private Nick _nick;
public Nick Nick
{

+ 93
- 0
IRC/Channel.cs View File

@@ -0,0 +1,93 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Combot
{
public class Channel
{
public string Name { get; set; }
public string Topic { get; set; }
public string Key { get; set; }
public bool AutoJoin { get; set; }
public DateTime Registration { get; set; }
public List<ChannelMode> Modes { get; set; }
public List<Nick> Nicks { get; set; }

public Channel()
{
Name = string.Empty;
Topic = string.Empty;
Key = string.Empty;
AutoJoin = false;
Registration = DateTime.Now;
Modes = new List<ChannelMode>();
Nicks = new List<Nick>();
}

public Channel(string name, string topic, string key, bool autojoin, DateTime registration, List<ChannelMode> modes, List<Nick> nicks)
{
Name = name;
Topic = topic;
Key = key;
AutoJoin = autojoin;
Registration = registration;
Modes = modes;
Nicks = nicks;
}

public void AddNick(Nick nick)
{
Nicks.Add(nick);
}

public void AddNicks(List<Nick> nicks)
{
Nicks.AddRange(nicks);
}

public void RemoveNick(Nick nick)
{
if (Nicks.Contains(nick))
{
Nicks.Remove(nick);
}
}

public void RemoveNicks(List<Nick> nicks)
{
foreach (Nick nick in nicks)
{
RemoveNick(nick);
}
}

public void AddMode(ChannelMode mode)
{
Modes.Add(mode);
}

public void AddModes(List<ChannelMode> modes)
{
Modes.AddRange(modes);
}

public void RemoveMode(ChannelMode mode)
{
if (Modes.Contains(mode))
{
Modes.Remove(mode);
}
}

public void RemoveModes(List<ChannelMode> modes)
{
foreach (ChannelMode mode in modes)
{
RemoveMode(mode);
}
}
}
}

+ 3
- 2
IRC/IRCMessages.cs View File

@@ -14,9 +14,10 @@ namespace Combot
{
Message parsedMessage = new Message();

if (MessageReceivedEvent != null)
Action<Message> localEvent = MessageReceivedEvent;
if (localEvent != null)
{
MessageReceivedEvent(parsedMessage);
localEvent(parsedMessage);
}
}
}

+ 836
- 41
IRC/IRCMethods.cs
File diff suppressed because it is too large
View File


+ 146
- 148
IRC/IRCTypes.cs View File

@@ -212,150 +212,6 @@ namespace Combot
public string Message { get; set; }
}

public class Nick
{
public string Realname { get; set; }
public string Host { get; set; }
public string Nickname { get; set; }
public string Password { get; set; }
public bool Identified { get; set; }
public bool Registered { get; set; }
public List<UserMode> Modes { get; set; }

public Nick()
{
Realname = string.Empty;
Host = string.Empty;
Nickname = string.Empty;
Password = string.Empty;
Identified = false;
Registered = false;
Modes = new List<UserMode>();
}

public Nick(string realname, string host, string nickname, string password, bool identified, bool registered, List<UserMode> modes)
{
Realname = realname;
Host = host;
Nickname = nickname;
Password = password;
Identified = identified;
Registered = registered;
Modes = modes;
}

public void AddMode(UserMode mode)
{
Modes.Add(mode);
}

public void AddModes(List<UserMode> modes)
{
Modes.AddRange(modes);
}

public void RemoveMode(UserMode mode)
{
if (Modes.Contains(mode))
{
Modes.Remove(mode);
}
}

public void RemoveModes(List<UserMode> modes)
{
foreach (UserMode mode in modes)
{
RemoveMode(mode);
}
}
}

public class Channel
{
public string Name { get; set; }
public string Topic { get; set; }
public string Key { get; set; }
public bool AutoJoin { get; set; }
public DateTime Registration { get; set; }
public List<ChannelMode> Modes { get; set; }
public List<Nick> Nicks { get; set; }

public Channel()
{
Name = string.Empty;
Topic = string.Empty;
Key = string.Empty;
AutoJoin = false;
Registration = DateTime.Now;
Modes = new List<ChannelMode>();
Nicks = new List<Nick>();
}

public Channel(string name, string topic, string key, bool autojoin, DateTime registration, List<ChannelMode> modes, List<Nick> nicks)
{
Name = name;
Topic = topic;
Key = key;
AutoJoin = autojoin;
Registration = registration;
Modes = modes;
Nicks = nicks;
}

public void AddNick(Nick nick)
{
Nicks.Add(nick);
}

public void AddNicks(List<Nick> nicks)
{
Nicks.AddRange(nicks);
}

public void RemoveNick(Nick nick)
{
if (Nicks.Contains(nick))
{
Nicks.Remove(nick);
}
}

public void RemoveNicks(List<Nick> nicks)
{
foreach (Nick nick in nicks)
{
RemoveNick(nick);
}
}

public void AddMode(ChannelMode mode)
{
Modes.Add(mode);
}

public void AddModes(List<ChannelMode> modes)
{
Modes.AddRange(modes);
}

public void RemoveMode(ChannelMode mode)
{
if (Modes.Contains(mode))
{
Modes.Remove(mode);
}
}

public void RemoveModes(List<ChannelMode> modes)
{
foreach (ChannelMode mode in modes)
{
RemoveMode(mode);
}
}
}

public class Server
{
public string Name { get; set; }
@@ -367,15 +223,157 @@ namespace Combot

public class Message
{
public MessageType Type { get; set; }
public Nick Sender { get; set; }
public Nick Receiver { get; set; }
public Server Server { get; set; }
public Channel Channel { get; set; }
public Nick Sender { get; set; }
public Nick Recipient { get; set; }
public string Parameters { get; set; }
}

public class Sender
// IRC Reply Codes //
public enum IRCReplyCode
{
RPL_WELCOME = 1,
RPL_YOURHOST = 2,
RPL_CREATED = 3,
RPL_MYINFO = 4,
RPL_BOUNCE = 5,
RPL_TRACELINK = 200,
RPL_TRACECONNECTING = 201,
RPL_TRACEHANDSHAKE = 202,
RPL_TRACEUNKNOWN = 203,
RPL_TRACEOPERATOR = 204,
RPL_TRACEUSER = 205,
RPL_TRACESERVER = 206,
RPL_TRACESERVICE = 207,
RPL_TRACENEWTYPE = 208,
RPL_TRACECLASS = 209,
RPL_TRACERECONNECT = 210,
RPL_STATSLINKINFO = 211,
RPL_STATSCOMMANDS = 212,
RPL_ENDOFSTATS = 219,
RPL_UMODEIS = 221,
RPL_SERVLIST = 234,
RPL_SERVLISTEND = 235,
RPL_STATSUPTIME = 242,
RPL_STATSOLINE = 243,
RPL_LUSERCLIENT = 251,
RPL_LUSEROP = 252,
RPL_LUSERUNKNOWN = 253,
RPL_LUSERCHANNELS = 254,
RPL_LUSERME = 255,
RPL_ADMINME = 256,
RPL_ADMINLOC1 = 257,
RPL_ADMINLOC2 = 258,
RPL_ADMINEMAIL = 259,
RPL_TRACELOG = 261,
RPL_TRACEEND = 262,
RPL_TRYAGAIN = 263,
RPL_AWAY = 301,
RPL_USERHOST = 302,
RPL_ISON = 303,
RPL_UNAWAY = 305,
RPL_NOWAWAY = 306,
RPL_WHOISUSER = 311,
RPL_WHOISSERVER = 312,
RPL_WHOISOPERATOR = 313,
RPL_WHOWASUSER = 314,
RPL_ENDOFWHO = 315,
RPL_WHOISIDLE = 317,
RPL_ENDOFWHOIS = 318,
RPL_WHOISCHANNELS = 319,
RPL_LISTSTART = 321,
RPL_LIST = 322,
RPL_LISTEND = 323,
RPL_CHANNELMODEIS = 324,
RPL_UNIQOPIS = 325,
RPL_NOTOPIC = 331,
RPL_TOPIC = 332,
RPL_INVITING = 341,
RPL_SUMMONING = 342,
RPL_INVITELIST = 346,
RPL_ENDOFINVITELIST = 347,
RPL_EXCEPTLIST = 348,
RPL_ENDOFEXCEPTLIST = 349,
RPL_VERSION = 351,
RPL_WHOREPLY = 352,
RPL_NAMREPLY = 353,
RPL_LINKS = 364,
RPL_ENDOFLINKS = 365,
RPL_ENDOFNAMES = 366,
RPL_BANLIST = 367,
RPL_ENDOFBANLIST = 368,
RPL_ENDOFWHOWAS = 369,
RPL_INFO = 371,
RPL_MOTD = 372,
RPL_ENDOFINFO = 374,
RPL_MOTDSTART = 375,
RPL_ENDOFMOTD = 376,
RPL_YOUREOPER = 381,
RPL_REHASHING = 382,
RPL_YOURESERVICE = 383,
RPL_TIME = 391,
RPL_USERSSTART = 392,
RPL_USERS = 393,
RPL_ENDOFUSERS = 394,
RPL_NOUSERS = 395
}

// IRC Error Codes //
public enum IRCErrorCode
{
ERR_NOSUCHNICK = 401,
ERR_NOSUCHSERVER = 402,
ERR_NOSUCHCHANNEL = 403,
ERR_CANNOTSENDTOCHAN = 404,
ERR_TOOMANYCHANNELS = 405,
ERR_WASNOSUCHNICK = 406,
ERR_TOOMANYTARGETS = 407,
ERR_NOSUCHSERVICE = 408,
ERR_NOORIGIN = 409,
ERR_NORECIPIENT = 411,
ERR_NOTEXTTOSEND = 412,
ERR_NOTOPLEVEL = 413,
ERR_WILDTOPLEVEL = 414,
ERR_BADMASK = 415,
ERR_UNKNOWNCOMMAND = 421,
ERR_NOMOTD = 422,
ERR_NOADMININFO = 423,
ERR_FILEERROR = 424,
ERR_NONICKNAMEGIVEN = 431,
ERR_ERRONEUSNICKNAME = 432,
ERR_NICKNAMEINUSE = 433,
ERR_NICKCOLLISION = 436,
ERR_UNAVAILRESOURCE = 437,
ERR_USERNOTINCHANNEL = 441,
ERR_NOTONCHANNEL = 442,
ERR_USERONCHANNEL = 443,
ERR_NOLOGIN = 444,
ERR_SUMMONDISABLED = 445,
ERR_USERSDISABLED = 446,
ERR_NOTREGISTERED = 451,
ERR_NEEDMOREPARAMS = 461,
ERR_ALREADYREGISTRED = 462,
ERR_NOPERMFORHOST = 463,
ERR_PASSWDMISMATCH = 464,
ERR_YOUREBANNEDCREEP = 465,
ERR_YOUWILLBEBANNED = 466,
ERR_KEYSET = 467,
ERR_CHANNELISFULL = 471,
ERR_UNKNOWNMODE = 472,
ERR_INVITEONLYCHAN = 473,
ERR_BANNEDFROMCHAN = 474,
ERR_BADCHANNELKEY = 475,
ERR_BADCHANMASK = 476,
ERR_NOCHANMODES = 477,
ERR_BANLISTFULL = 478,
ERR_NOPRIVILEGES = 481,
ERR_CHANOPRIVSNEEDED = 482,
ERR_CANTKILLSERVER = 483,
ERR_RESTRICTED = 484,
ERR_UNIQOPPRIVSNEEDED = 485,
ERR_NOOPERHOST = 491,
ERR_UMODEUNKNOWNFLAG = 501,
ERR_USERSDONTMATCH = 502
}
}

+ 67
- 0
IRC/Nick.cs View File

@@ -0,0 +1,67 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Combot
{
public class Nick
{
public string Realname { get; set; }
public string Host { get; set; }
public string Nickname { get; set; }
public string Password { get; set; }
public bool Identified { get; set; }
public bool Registered { get; set; }
public List<UserMode> Modes { get; set; }

public Nick()
{
Realname = string.Empty;
Host = string.Empty;
Nickname = string.Empty;
Password = string.Empty;
Identified = false;
Registered = false;
Modes = new List<UserMode>();
}

public Nick(string realname, string host, string nickname, string password, bool identified, bool registered, List<UserMode> modes)
{
Realname = realname;
Host = host;
Nickname = nickname;
Password = password;
Identified = identified;
Registered = registered;
Modes = modes;
}

public void AddMode(UserMode mode)
{
Modes.Add(mode);
}

public void AddModes(List<UserMode> modes)
{
Modes.AddRange(modes);
}

public void RemoveMode(UserMode mode)
{
if (Modes.Contains(mode))
{
Modes.Remove(mode);
}
}

public void RemoveModes(List<UserMode> modes)
{
foreach (UserMode mode in modes)
{
RemoveMode(mode);
}
}
}
}

+ 12
- 8
TCP/TCPInterface.cs View File

@@ -45,11 +45,12 @@ namespace Combot
}
catch
{
if (TCPErrorEvent != null)
Action<TCPError> localEvent = TCPErrorEvent;
if (localEvent != null)
{
TCPError error = new TCPError();
error.Message = string.Format("Unable to connect to {0} on port {1}", _serverIP.Address, _serverIP.Port);
TCPErrorEvent(error);
localEvent(error);
}
}
return false;
@@ -94,29 +95,32 @@ namespace Combot
catch (IOException)
{
_currentFailedCount++;
if (TCPErrorEvent != null && _tcpStream.CanRead)
Action<TCPError> localEvent = TCPErrorEvent;
if (localEvent != null && _tcpStream.CanRead)
{
TCPError error = new TCPError();
error.Message = string.Format("Read Timeout, No Response from Server in {0}ms", _readTimeout);
TCPErrorEvent(error);
localEvent(error);
}
}
catch (Exception ex)
{
_currentFailedCount++;
if (TCPErrorEvent != null)
Action<TCPError> localEvent = TCPErrorEvent;
if (localEvent != null)
{
TCPError error = new TCPError();
error.Message = ex.Message;
TCPErrorEvent(error);
localEvent(error);
}
}

if (_currentFailedCount > _allowedFailedCount)
{
if (TCPConnectionEvent != null)
Action<int> localEvent = TCPConnectionEvent;
if (localEvent != null)
{
TCPConnectionEvent(_currentFailedCount);
localEvent(_currentFailedCount);
}
Disconnect();
_currentFailedCount = 0;

Loading…
Cancel
Save