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(); } } }