protected override void PrivateHandle(UserInfo info, List <string> args) { if (info.Registered) { IrcDaemon.Replies.SendAlreadyRegistered(info); return; } if (!IrcDaemon.ValidNick(args[0])) { IrcDaemon.Replies.SendErroneousNickname(info, args[0]); return; } if (IrcDaemon.Nicks.ContainsKey(args[0])) { IrcDaemon.Replies.SendNicknameInUse(info, args[0]); return; } info.IsService = true; info.InitNick(args[0]); info.InitUser("service", "I am a service"); IrcDaemon.Nicks.Add(info.Nick, info); }
public ChannelInfo(string name, IrcDaemon ircDaemon) : base(ircDaemon) { Name = name; ChannelType = ircDaemon.SupportedChannelTypes[name[0]]; Modes = new ChannelModeList(ircDaemon); }
protected override void PrivateHandle(UserInfo info, List <string> args) { if (info.Modes.Exist <ModeOperator>() || info.Modes.Exist <ModeLocalOperator>()) { IrcDaemon.OnRehashEvent(this, new RehashEventArgs(IrcDaemon, info)); } }
public void LaunchDaemon(File daemonLauncher) { var lines = daemonLauncher.Content.Split(new string[] { "\r\n" }, StringSplitOptions.None); if (lines[0] == "IRC") { var newDaemon = new IrcDaemon(NextPID, null, this, new Credentials(GetUserId("guest"), Group.GUEST)); daemons.Add(newDaemon); } else if (lines[0] == "DNS") { var newDaemon = new DNSDaemon(NextPID, null, this, new Credentials(GetUserId("guest"), Group.GUEST)); daemons.Add(newDaemon); } else if (lines[0] == "HTTP") { var newDaemon = new HTTPDaemon(NextPID, null, this, new Credentials(GetUserId("guest"), Group.GUEST)); daemons.Add(newDaemon); } else if (lines[0] == "BANK") { var newDaemon = new BankDaemon(NextPID, null, this, new Credentials(GetUserId("guest"), Group.GUEST)); daemons.Add(newDaemon); } else if (lines[0] == "MISSION") { var newDaemon = new MissionDaemon(NextPID, null, this, new Credentials(GetUserId("guest"), Group.GUEST)); daemons.Add(newDaemon); } else if (lines[0] == "MAIL") { var newDaemon = new MailDaemon(NextPID, null, this, new Credentials(GetUserId("guest"), Group.GUEST)); daemons.Add(newDaemon); } }
public void Run() { var settings = new IRCSettings(); var ircDaemon = new IrcDaemon(settings.GetIrcMode()); settings.SetDaemon(ircDaemon); settings.LoadSettings(); if (blocking) { ircDaemon.Start(); } else { ircDaemon.ServerRehash += ServerRehash; var serverThread = new Thread(ircDaemon.Start) { IsBackground = false, Name = "serverThread-1" }; serverThread.Start(); } }
protected virtual void Dispose(bool disposing) { Disposing = true; try { if (disposing) { if (Socket != null) { try { Socket.Shutdown(SocketShutdown.Both); IrcDaemon.RemoveUserFromAllChannels(UserInfo); } catch (Exception) { } Socket.Close(); Socket.Dispose(); Socket = null; } } GC.Collect(); } catch (Exception) { } }
protected override void PrivateHandle(UserInfo info, List <string> args) { if (args.Count < 1) { IrcDaemon.Replies.SendNoRecipient(info, Name); return; } if (args.Count < 2) { IrcDaemon.Replies.SendNoTextToSend(info); return; } // Only Private Messages set this info.LastAction = DateTime.Now; if (IrcDaemon.ValidChannel(args[0])) { if (IrcDaemon.Channels.ContainsKey(args[0])) { var chan = IrcDaemon.Channels[args[0]]; if (!chan.Modes.HandleEvent(this, chan, info, args)) { return; } // Send Channel Message Send(new PrivateMessageArgument(info, chan, chan.Name, args[1])); } else { IrcDaemon.Replies.SendCannotSendToChannel(info, args[0]); } } else if (IrcDaemon.ValidNick(args[0])) { UserInfo user; if (IrcDaemon.Nicks.TryGetValue(args[0], out user)) { if (user.Modes.Exist <ModeAway>()) { IrcDaemon.Replies.SendAwayMessage(info, user); } // Send Private Message Send(new PrivateMessageArgument(info, user, user.Nick, args[1])); } else { IrcDaemon.Replies.SendNoSuchNick(info, args[0]); } } else { IrcDaemon.Replies.SendNoSuchNick(info, args[0]); } }
public Away(IrcDaemon ircDaemon) : base(ircDaemon, "AWAY", "A") { if (!ircDaemon.Capabilities.Contains("away-notify")) { ircDaemon.Capabilities.Add("away-notify"); } }
protected override void PrivateHandle(UserInfo info, List <string> args) { if (args.Count < 1) { IrcDaemon.Replies.SendNoRecipient(info, Name); return; } if (args.Count < 2) { IrcDaemon.Replies.SendNoTextToSend(info); return; } if (IrcDaemon.ValidChannel(args[0])) { if (IrcDaemon.Channels.ContainsKey(args[0])) { var chan = IrcDaemon.Channels[args[0]]; if (!chan.Modes.HandleEvent(this, chan, info, args)) { return; } // Send Channel Message Send(new NoticeArgument(info, chan, chan.Name, args[1])); } else { IrcDaemon.Replies.SendCannotSendToChannel(info, args[0]); } } else if (IrcDaemon.ValidNick(args[0])) { if (IrcDaemon.Nicks.ContainsKey(args[0])) { var user = IrcDaemon.Nicks[args[0]]; if (user.AwayMessage != null) { IrcDaemon.Replies.SendAwayMessage(info, user); } // Send PM Send(new NoticeArgument(info, user, user.Nick, args[1])); } else { IrcDaemon.Replies.SendNoSuchNick(info, args[0]); } } else { IrcDaemon.Replies.SendNoSuchNick(info, args[0]); } }
protected override void PrivateHandle(UserInfo info, List <string> args) { if (!info.Modes.Exist <ModeOperator>() && !info.Modes.Exist <ModeLocalOperator>()) { IrcDaemon.Replies.SendNoPrivileges(info); return; } IrcDaemon.Stop(false); }
protected override void PrivateHandle(UserInfo info, List <string> args) { if (args[0] == "0") { PartAll(info); return; } // Тестовый вывод подключения к чату //IrcDaemon.SendToAll($@"{info.Nick} присоединился к комнате {string.Join(" ", args)}"); // info($@"{info.Nick} {string.Join(" подключение ", args)}"); foreach (var channel in from temp in GetSubArgument(args[0]) where info.UserPerChannelInfos.All(upci => upci.ChannelInfo.Name != temp) select temp) { if (IrcDaemon.Channels.TryGetValue(channel, out ChannelInfo chan)) { if (!chan.Modes.HandleEvent(this, chan, info, args)) { continue; } } else { if (IrcDaemon.ValidChannel(channel)) { chan = new ChannelInfo(channel, IrcDaemon); IrcDaemon.Channels[chan.Name] = chan; } else { IrcDaemon.Replies.SendBadChannelMask(info, channel); return; } } var chanuser = new UserPerChannelInfo(info, chan); // ToDo: this probably should get delegated to the Channel Type specific "NormalChannel" class, because it depends on the channel type. if (!chan.Users.Any()) { chanuser.Modes.Add(IrcDaemon.ModeFactory.GetChannelRank('o')); } chan.UserPerChannelInfos[info.Nick] = chanuser; info.UserPerChannelInfos.Add(chanuser); Send(new JoinArgument(info, chan, chan)); SendTopic(info, chan); IrcDaemon.Replies.SendNamesReply(chanuser.UserInfo, chan); IrcDaemon.Replies.SendEndOfNamesReply(info, chan); } }
protected override void PrivateHandle(UserInfo info, List <string> args) { if (args[0] == "0") { PartAll(info); return; } foreach (var channel in from temp in GetSubArgument(args[0]) where info.UserPerChannelInfos.All(upci => upci.ChannelInfo.Name != temp) select temp) { ChannelInfo chan; if (IrcDaemon.Channels.ContainsKey(channel)) { chan = IrcDaemon.Channels[channel]; if (!chan.Modes.HandleEvent(this, chan, info, args)) { continue; } } else { if (IrcDaemon.ValidChannel(channel)) { chan = new ChannelInfo(channel, IrcDaemon); IrcDaemon.Channels.Add(chan.Name, chan); } else { IrcDaemon.Replies.SendBadChannelMask(info, channel); return; } } var chanuser = new UserPerChannelInfo(info, chan); // ToDo: this probably should get delegated to the Channel Type specific "NormalChannel" class, because it depends on the channel type. if (!chan.Users.Any()) { chanuser.Modes.Add(IrcDaemon.ModeFactory.GetChannelRank('o')); } chan.UserPerChannelInfos.Add(info.Nick, chanuser); info.UserPerChannelInfos.Add(chanuser); Send(new JoinArgument(info, chan, chan)); SendTopic(info, chan); IrcDaemon.Replies.SendNamesReply(chanuser.UserInfo, chan); IrcDaemon.Replies.SendEndOfNamesReply(info, chan); } }
protected override void PrivateHandle(UserInfo info, List <string> args) { if (info.Nick != null) { args[0] = info.Nick; } else { if (!info.PassAccepted) { IrcDaemon.Replies.SendPasswordMismatch(info); return; } if (args.Count < 1) { IrcDaemon.Replies.SendNoNicknameGiven(info); return; } if (IrcDaemon.Nicks.ContainsKey(args[0])) { IrcDaemon.Replies.SendNicknameInUse(info, args[0]); return; } if (!IrcDaemon.ValidNick(args[0])) { IrcDaemon.Replies.SendErroneousNickname(info, args[0]); return; } // *** NICK command valid after this point *** if (!info.NickExists) { //First Nick Command IrcDaemon.Nicks[args[0]] = info; info.InitNick(args[0]); return; } } Send(new NickArgument(info, info, args[0])); foreach (var channelInfo in info.Channels) { Send(new NickArgument(info, channelInfo, args[0])); } info.Rename(args[0]); }
public StatsServer(IPAddress address, ushort port) { _thread = new Thread(StartServer) { Name = "Stats Socket Thread" }; _thread.Start(new AddressInfo() { Address = address, Port = port }); _ircDaemon = new IrcDaemon(IrcMode.Modern); }
public static void Start() { var settings = new Settings(); var ircDaemon = new IrcDaemon(settings.GetIrcMode()); settings.setDaemon(ircDaemon); settings.LoadSettings(); ircDaemon.ServerRehash += ServerRehash; var serverThread = new Thread(ircDaemon.Start); serverThread.IsBackground = false; serverThread.Name = "serverThread-1"; serverThread.Start(); }
protected override void PrivateHandle(UserInfo info, List <string> args) { if (!info.Modes.Exist <ModeOperator>() && !info.Modes.Exist <ModeLocalOperator>()) { IrcDaemon.Replies.SendNoPrivileges(info); return; } int port; if (int.TryParse(args[1], out port)) { IrcDaemon.Connect(args[0], port); } IrcDaemon.Replies.SendNoSuchServer(info, "Connect failed"); }
public void LaunchDaemon(File daemonLauncher) { var lines = daemonLauncher.Content.Split(new string[] { "\r\n" }, StringSplitOptions.None); if (lines[0] == "IRC") { var newDaemon = new IrcDaemon(this); daemons.Add(newDaemon); } else if (lines[0] == "DNS") { var newDaemon = new DNSDaemon(this); daemons.Add(newDaemon); } else if (lines[0] == "HTTP") { var newDaemon = new HTTPDaemon(this); daemons.Add(newDaemon); } }
protected override void PrivateHandle(UserInfo info, List <string> args) { // Check if its a channel if (IrcDaemon.ValidChannel(args[0])) { if (!IrcDaemon.Channels.ContainsKey(args[0])) { IrcDaemon.Replies.SendNoSuchChannel(info, args[0]); return; } var chan = IrcDaemon.Channels[args[0]]; // Modes command without any mode -> query the Mode of the Channel if (args.Count == 1) { IrcDaemon.Replies.SendChannelModeIs(info, chan); return; } // Update the Channel Modes chan.Modes.Update(info, chan, args.Skip(1)); } else if (args[0] == info.Nick) { // Modes command without any mode -> query the Mode of the User if (args.Count == 1) { IrcDaemon.Replies.SendUserModeIs(info); return; } // Update the User Modes info.Modes.Update(info, args.Skip(1)); } else { // You cannot use Mode on any user but yourself IrcDaemon.Replies.SendUsersDoNotMatch(info); } }
protected override void PrivateHandle(UserInfo info, List <string> args) { if (info.PassAccepted) { IrcDaemon.Replies.SendAlreadyRegistered(info); return; } if (args[0] == IrcDaemon.Options.ServerPass) { info.PassAccepted = true; return; } if (IrcDaemon.Options.ConnectionPasses.Any(p => p == args[0])) { // This is an allowed Server connection IrcDaemon.ConnectFromServer(info); return; } IrcDaemon.Replies.SendPasswordMismatch(info); }
protected override void PrivateHandle(UserInfo info, List <string> args) { // "#GSP!whammer40kdc!MJD13lhaPM" // "GML " // list(channel.members)[i].message(":" + self.prefix + " UTM " + arguments[0] + " :" + arguments[1]) if (IrcDaemon.Channels.TryGetValue(args[0], out ChannelInfo channel)) { // elamaunt!Xv1sFqOa9X|[email protected] UTM elamaunt :GML // This code only for warhammer var usersInGame = channel.Users.ToArray(); IrcDaemon.RegisterRatingGame(usersInGame); for (int i = 0; i < usersInGame.Length; i++) { var item = usersInGame[i]; item.WriteLine($@":{info.Usermask} UTM {args[0]} :{args[1]}"); } } }
public Version(IrcDaemon ircDaemon) : base(ircDaemon, "VERSION", "V") { }
public Silence(IrcDaemon ircDaemon) : base(ircDaemon, "SILENCE", "U") { }
public Admin(IrcDaemon ircDaemon) : base(ircDaemon, "ADMIN", "AD") { }
public override IEnumerable <string> Support(IrcDaemon ircDaemon) { return(Enumerable.Repeat("INEVEX=" + Char, 1)); }
public Kill(IrcDaemon ircDaemon) : base(ircDaemon, "KILL", "D") { }
public Kick(IrcDaemon ircDaemon) : base(ircDaemon, "KICK", "K") { }
public override IEnumerable<string> Support(IrcDaemon ircDaemon) { return Enumerable.Repeat("LANGUAGE=" + ircDaemon.Options.MaxLanguages, 1); }
public RehashEventArgs(IrcDaemon ircDaemon, UserInfo userInfo) { IrcDaemon = ircDaemon; UserInfo = userInfo; }
public override IEnumerable<string> Support(IrcDaemon ircDaemon) { return Enumerable.Repeat("KNOCK", 1); }
public WhoIs(IrcDaemon ircDaemon) : base(ircDaemon, "WHOIS", "W") { }
public Stats(IrcDaemon ircDaemon) : base(ircDaemon, "STATS", "R") { }
public Part(IrcDaemon ircDaemon) : base(ircDaemon, "PART", "L") { }
public Rehash(IrcDaemon ircDaemon) : base(ircDaemon, "REHASH", "REHASH") { }
public User(IrcDaemon ircDaemon) : base(ircDaemon, "USER", "USER") { }
public Topic(IrcDaemon ircDaemon) : base(ircDaemon, "TOPIC", "T") { }
public Quit(IrcDaemon ircDaemon) : base(ircDaemon, "QUIT", "Q") { }
public override IEnumerable<string> Support(IrcDaemon ircDaemon) { return Enumerable.Repeat("EXCEPTS=" + Char, 1); }
public Restart(IrcDaemon ircDaemon) : base(ircDaemon, "RESTART", "RESTART") { }
public Knock(IrcDaemon ircDaemon) : base(ircDaemon, "KNOCK", "") { }
public ServiceList(IrcDaemon ircDaemon) : base(ircDaemon, "SERVLIST", "SERVLIST") { }
public Time(IrcDaemon ircDaemon) : base(ircDaemon, "TIME", "TI") { }
public Die(IrcDaemon ircDaemon) : base(ircDaemon, "DIE", "DIE") { }
public Names(IrcDaemon ircDaemon) : base(ircDaemon, "NAMES", "E") { }
public Mode(IrcDaemon ircDaemon) : base(ircDaemon, "MODE", "M") { }
internal void setDaemon(IrcDaemon ircDaemon) { this.ircDaemon = ircDaemon; }
public override IEnumerable <string> Support(IrcDaemon ircDaemon) { return(Enumerable.Repeat("SILENCE=" + ircDaemon.Options.MaxSilence, 1)); }
public Language(IrcDaemon ircDaemon) : base(ircDaemon, "LANGUAGE", "") { }
public Links(IrcDaemon ircDaemon) : base(ircDaemon, "LINKS", "LI") { }
public Ping(IrcDaemon ircDaemon) : base(ircDaemon, "PING", "G") { }
public PrivateMessage(IrcDaemon ircDaemon) : base(ircDaemon, "PRIVMSG", "P") { }
public Nick(IrcDaemon ircDaemon) : base(ircDaemon, "NICK", "N") { }
public WhoWas(IrcDaemon ircDaemon) : base(ircDaemon, "WHOWAS", "X") { }
public Service(IrcDaemon ircDaemon) : base(ircDaemon, "SERVICE", "") { }
public Error(IrcDaemon ircDaemon) : base(ircDaemon, "ERROR", "Y") { }
public Who(IrcDaemon ircDaemon) : base(ircDaemon, "WHO", "H") { }
public Join(IrcDaemon ircDaemon) : base(ircDaemon, "JOIN", "J") { }