internal int get_nick_access(string tmp_nick, string channel)
{
List<int> access_num = new List<int>();
int top_access = Conf.Default_Level;
access_num.Add(Conf.Default_Level);
try
{
Nick_Info nick_info = get_nick_info(tmp_nick, channel);
if (nick_info != null)
{
access_num.Add(nick_info.Access);
}
else
{
Nick_Info new_nick = new Nick_Info();
new_nick.Nick = tmp_nick;
new_nick.Access = Conf.Default_Level;
new_nick.Identified = false;
add_nick_info(new_nick, channel);
nick_info = new_nick;
}
if (nick_info.Nick.Equals(nick, StringComparison.InvariantCultureIgnoreCase))
{
access_num.Add(Conf.Owner_Level);
}
if (!nick_info.Identified)
{
nick_info.Identified = get_nick_ident(nick_info.Nick);
}
if (nick_info.Identified == true)
{
foreach (Modules.Module module in Conf.Modules)
{
if (module.Class_Name.Equals("access"))
{
bool chan_allowed = true;
foreach (string blacklist in module.Blacklist)
{
if (blacklist.Equals(channel, StringComparison.InvariantCultureIgnoreCase))
{
chan_allowed = false;
break;
}
}
if (chan_allowed)
{
Modules.access acc = new Modules.access();
access_num.AddRange(acc.get_access_list(tmp_nick, channel, this));
}
break;
}
}
}
if (nick_info.Identified == true)
{
foreach (string owner in Conf.Owners)
{
if (tmp_nick.Equals(owner, StringComparison.InvariantCultureIgnoreCase))
{
access_num.Add(Conf.Owner_Level);
}
}
}
foreach (int access in access_num)
{
if (access > top_access)
{
top_access = access;
}
}
if (top_access == Conf.Default_Level && channel != null)
{
top_access = get_nick_chan_access(tmp_nick, channel);
if (top_access != Conf.Default_Level)
{
nick_info.Access = top_access;
}
}
}
catch (Exception ex)
{
lock (controller.errorlock)
{
controller.log_error(ex, Conf.Logs_Path);
}
}
return top_access;
}