Exemplo n.º 1
0
        protected override void PrivateHandle(UserInfo info, List<string> args)
        {
            var users = new List<UserInfo>();
            foreach (var arg in args)
            {
                UserInfo user;
                if (IrcDaemon.Nicks.TryGetValue(arg, out user))
                {
                    users.Add(user);
                }
            }

            IrcDaemon.Replies.SendUserHost(info, users);
        }
Exemplo n.º 2
0
        private void PartAll(UserInfo info)
        {
            var command = new StringBuilder();
            var partargs = new List<string>();
            // this is a part all channels, it is plainly stupid to handle PARTS in a join message.
            // we won't handle that, we give it to the part handler! YO! why not defining a /part * instead of /join 0

            command.Length = 0; bool first = true;
            foreach (var ci in info.Channels)
            {
                if (first)
                {
                    first = false;
                }
                else
                {
                    command.Append(",");
                }
                command.Append(ci.Name);
            }
            partargs.Add(command.ToString());
            partargs.Add(IrcDaemon.Options.StandardPartMessage);
            IrcDaemon.Commands.Handle(info, info.Usermask, "PART", partargs, 0);
        }
Exemplo n.º 3
0
        /// <summary>
        /// Reply Code 005
        /// </summary>
        /// <param name="info"></param>
        public void SendISupport(UserInfo info)
        {
            // ISUPPORT never went to an RFC, but this is based on draft03.
            const string version = "draft03";

            var features = new List<string>();
            var daemon = info.IrcDaemon;

            features.Add("STD=" + version);
            features.Add("PREFIX=" + daemon.SupportedRanks.ToPrefixList());
            features.Add("CHANMODES=" + daemon.SupportedChannelModes.ToParameterList());
            features.Add("CHANTYPES=" + daemon.SupportedChannelTypes.Select(type => type.Value.Prefix).Concatenate(string.Empty));
            features.Add("CHANLIMIT=" + daemon.SupportedChannelTypes.Select(c => c.Value.Prefix + ":" + c.Value.MaxJoinedAllowed).Concatenate(","));
            features.AddRange(daemon.SupportedChannelModes.SelectMany(m => m.Value.Support(info.IrcDaemon)));
            features.Add("NETWORK=" + daemon.Options.NetworkName);
            features.Add("CASEMAPPING=" + daemon.Options.IrcCaseMapping.ToDescription());
            // TODO: Group by same MaxJoinedAllowed
            features.Add("CHANNELLEN=" + daemon.Options.MaxChannelLength);
            features.Add("NICKLEN=" + daemon.Options.MaxNickLength);
            features.Add("MAXNICKLEN=" + daemon.Options.MaxNickLength);
            features.Add("TOPICLEN=" + daemon.Options.MaxTopicLength);
            features.Add("KICKLEN=" + daemon.Options.MaxKickLength);
            features.Add("AWAYLEN=" + daemon.Options.MaxAwayLength);
            features.AddRange(daemon.Commands.Supported());

            if (daemon.Options.IrcMode != IrcMode.Rfc1459)
            {
                features.Add("RFC2812");
            }

            BuildMessageHeader(info, ReplyCode.ISupport);
            response.Append(" ");

            SendSplitted(response.ToString(), info, features, "are supported by this server");
        }
Exemplo n.º 4
0
        /// <summary>
        /// Reply 302
        /// </summary>
        /// <param name="info"></param>
        /// <param name="userInfos"></param>
        public void SendUserHost(UserInfo info, List<UserInfo> userInfos)
        {
            BuildMessageHeader(info, ReplyCode.UserHost);

            response.Append(" :");

            var userHosts = new List<string>();

            foreach (var userInfo in userInfos)
            {
                var userHost = new StringBuilder();

                userHost.Append(userInfo.Nick);

                if (userInfo.Modes.Exist<ModeOperator>() || userInfo.Modes.Exist<ModeLocalOperator>())
                {
                    userHost.Append("*");
                }

                userHost.Append("=");
                userHost.Append(userInfo.Modes.Exist<ModeAway>() ? "-" : "+");
                userHost.Append(userInfo.User);
                userHost.Append("@");
                userHost.Append(userInfo.Host);

                userHosts.Add(userHost.ToString());

            }

            SendSplitted(response.ToString(), info, userHosts, null);
        }