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