All pastes #764563 Raw Edit

Untitled

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

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

//TODO ~_~
//1. Check if Already on list when adding user
//2. Check if adduser is in the right order >:( (Invoke Exception bullshit otherwise)
//3. Fix Delete Method (currently returning null or some bullshit)

namespace UserManagment {

    public class Main : IModuleCreator {

        public override void Initialize() {

            mp.RegisterEvent( "ChannelMessage", new CrossAppDomainDelegate( ChannelMethod ) );
        
        }
        //Try debugging it again.
        //WTF
        public Injections.ChannelMessageEvent channelMessageData;

        public Project2Q.SDK.IRCEvents.ParseReturns parseReturns;
        
        [Project2Q.SDK.UserSystem.PrivelegeRequired(Priveleges.UserSystem)]
        public void ChannelMethod() {

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

            if ( text.Equals( "?users" ) ) {
                returns = new string[] {
                    "PRIVMSG " + channel + " :" + GetUsers(),
                };
                return;
            }

            else if ( text.StartsWith( "?adduser" ) ) {

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

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

                //Say you want the format: ?adduser nick privflags userlevel
                //                            [0]   [1]     [2]      [3]

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

                UserCollection uc = (UserCollection)mp.RequestVariable( ModuleProxy.Request.UserCollection );
                User u = null;
                try {
                    u = uc[splits[1]];
                }
                catch ( KeyNotFoundException ) {
                    returns = new string[] {
                        ":" + user + " NOTICE " + user + " :could not add " + splits[1],
                    };
                    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!",
                };
                return;
            }

            else if ( text.StartsWith( "?deluser" ) ) {

                string[] splits = text.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 );
                User client = null;
                Channel c = channelMessageData.channel;
                if ( c.HasNick( splits[1] ) ) {
                    try {
                        client.CurrentHost.Username = splits[1];
                        uc.RemoveRegisterdUser( client );
                    }
                    catch ( KeyNotFoundException ) {
                        returns = new string[] {
                        ":" + user + " NOTICE " + user + " :Could not delete " + splits[1],
                        };
                        return;
                    }
                }
                returns = new string[] {
                    ":" + user + " NOTICE " + user + " :Deleted " + splits[1],
                };
            }
        }

        public string GetUsers() {
            UserCollection uc = (UserCollection)mp.RequestVariable( ModuleProxy.Request.UserCollection );

            StringBuilder sb = new StringBuilder();

            foreach ( User u in uc ) {
                sb.Append( u.Nickname + ":(" + u.CurrentHost + ")" );

                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( irch.FullHost );
                        sb.Append( ", " );
                    }
                    sb.Append( "], " );
                }
            }
            return sb.ToString();
        }

        
    }
}