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