All pastes #766897 Raw Edit

Someone

public text v1 · immutable
·published 2007-11-09 07:35 UTC
rendered paste body
using System;
using System.Collections.Generic;
using System.Text;

using Injections = Project2Q.SDK.Injections;
using Project2Q.SDK;
using Project2Q.SDK.UserSystem;
using Project2Q.SDK.ChannelSystem;
using Project2Q.SDK.ModuleSupport;

//TODO ~_~
//FIX " ?adduser asda 32 a " ~ causes a crash.


namespace UserManagment {

    public class Main : IModuleCreator {

        public override void Initialize() {
            mp.RegisterEvent( "ChannelMessage", new CrossAppDomainDelegate( Methods ) );
        }

        public Injections.ChannelMessageEvent channelMessageData;

        static public bool isNumeric( string val, System.Globalization.NumberStyles NumberStyle ) {
            Double result;
            return Double.TryParse( val, NumberStyle, System.Globalization.CultureInfo.CurrentCulture, out result );
        }

        [Project2Q.SDK.UserSystem.PrivelegeRequired( Priveleges.UserSystem )]
        public void AddUser( string info ) {

            string text = channelMessageData.text;
            string user = channelMessageData.channelUser.InternalUser.Nickname;
            string channel = channelMessageData.channel.Name;
            string[] splits = info.Split( ' ' );

            char[] privs = splits[2].ToCharArray();
            uint userlevel = uint.Parse( splits[3] );

            UserCollection uc = (UserCollection)mp.RequestVariable( ModuleProxy.Request.UserCollection );
            User u = null;

            if ( splits.Length != 4 ) {
                returns = new string[] {
                        ":" + user + " NOTICE " + user + " :Could not add: " + splits[1] + " Reason: Not enough arguments.",
                    };
                return;
            }

            if ( !isNumeric( splits[3], System.Globalization.NumberStyles.Integer ) ) {
                returns = new string[] {
                        ":" + user + " NOTICE " + user + " :Could not add: " + splits[1] + " Reason: Wrong format.",
                    };
                return;
            }

            if ( isNumeric( splits[2], System.Globalization.NumberStyles.Integer ) ) {
                returns = new string[] {
                        ":" + user + " NOTICE " + user + " :Could not add: " + splits[1] + " Reason: Wrong format.",
                    };
                return;
            }

            try {
                u = uc[splits[1]];
            }
            catch ( KeyNotFoundException ) {
                returns = new string[] {
                        ":" + user + " NOTICE " + user + " :Could not add " + splits[1] + " Reason: user not found.",
                    };
                return;
            }

            RegisteredUser ru = new RegisteredUser();
            ru.HostList.Add( u.CurrentHost );
            ru.Privegeles.NumericalLevel = userlevel;

            foreach ( char c in privs ) {
                if ( c - 'A' >= 0 && c - 'A' <= 57 )
                    ru.Privegeles.AddPriveleges( c );
            }

            uc.AddRegisteredUser( ru );
            uc.Authenticate( u );

            returns = new string[] {
                    ":" + user + " NOTICE " + user + " :Added user " + splits[1] + " to the userlist!",
            };
        }

        [Project2Q.SDK.UserSystem.PrivelegeRequired( Priveleges.UserSystem )]
        public void DelUser( string info ) {

            string text = channelMessageData.text;
            string user = channelMessageData.channelUser.InternalUser.Nickname;
            string channel = channelMessageData.channel.Name;

            string[] splits = info.Split( ' ' );

            if ( splits.Length != 2 ) {
                returns = new string[] {
                        ":" + user + " NOTICE " + user + " :Not enough arguments to delete user.",
                    };
                return;
            }

            UserCollection uc = (UserCollection)mp.RequestVariable( ModuleProxy.Request.UserCollection );

            Channel c = channelMessageData.channel;
            if ( c.HasNick( splits[1] ) ) {
                try {
                    User client = null;
                    client = uc[splits[1]];
                    client.CurrentHost.Nick = splits[1];
                    if ( client != null ) uc.RemoveRegisterdUser( client );
                    else {
                        returns = new string[] {
                                ":" + user + " NOTICE " + user + " :Could not delete " + splits[1],
                            };
                        return;
                    }
                }

                catch ( KeyNotFoundException ) {
                    returns = new string[] {
                        ":" + user + " NOTICE " + user + " :Could not delete " + splits[1],
                        };
                    return;
                }
            }

            returns = new string[] {
                    ":" + user + " NOTICE " + user + " :Deleted " + splits[1],
            };
        }

        public void UserList() {

            string channel = channelMessageData.channel.Name;
            returns = new string[] {
                    "PRIVMSG " + channel + " :" + GetUsers(),
                };
            return;
        }

        public void Methods() {

            string text = channelMessageData.text;
            if ( text.Equals( "?users" ) ) {
                UserList(); //Shows users (?users)
            }
            else if ( text.StartsWith( "?adduser" ) ) {
                AddUser( text ); //Adds user (?adduser nick flag access)
            }
            else if ( text.StartsWith( "?deluser" ) ) {
                DelUser( text ); //Deletes user (?deluser nick)
            }
        }

        public string GetUsers() {
            UserCollection uc = (UserCollection)mp.RequestVariable( ModuleProxy.Request.UserCollection );
            StringBuilder sb = new StringBuilder();
            foreach ( User u in uc ) {
                sb.Append( u.Nickname );
                if ( u.UserAttributes != null ) {
                    sb.Append( " " );
                    sb.Append( u.UserAttributes.Privegeles.NumericalLevel.ToString() );
                    sb.Append( "|" );
                    sb.Append( u.UserAttributes.Privegeles.GetPrivelegeString() );
                    sb.Append( " " );
                    foreach ( IRCHost irch in u.UserAttributes.HostList ) {
                        sb.Append( "(" );
                        sb.Append( irch.FullHost );
                        sb.Append( ") " );
                    }
                    sb.Append( "\n" );
                }
            }
            return sb.ToString();
        }
    }
}