Allow channel operators to invite users to a channel with +i
This commit is contained in:
parent
7ba5268e90
commit
4407a7419b
|
@ -21,6 +21,7 @@ class Channel
|
||||||
|
|
||||||
string key;
|
string key;
|
||||||
Nullable!uint userLimit;
|
Nullable!uint userLimit;
|
||||||
|
Connection[] inviteHolders;
|
||||||
|
|
||||||
private Server _server;
|
private Server _server;
|
||||||
|
|
||||||
|
@ -43,6 +44,11 @@ class Channel
|
||||||
{
|
{
|
||||||
memberModes[connection] = [];
|
memberModes[connection] = [];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(inviteHolders.canFind(connection))
|
||||||
|
{
|
||||||
|
inviteHolders = inviteHolders.remove!(c => c == connection);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void part(Connection connection, string partMessage)
|
void part(Connection connection, string partMessage)
|
||||||
|
@ -63,6 +69,11 @@ class Channel
|
||||||
memberModes.remove(connection);
|
memberModes.remove(connection);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void invite(Connection connection)
|
||||||
|
{
|
||||||
|
inviteHolders ~= connection;
|
||||||
|
}
|
||||||
|
|
||||||
void sendNames(Connection connection, bool sendRplEndOfNames = true)
|
void sendNames(Connection connection, bool sendRplEndOfNames = true)
|
||||||
{
|
{
|
||||||
string channelType;
|
string channelType;
|
||||||
|
@ -196,6 +207,8 @@ class Channel
|
||||||
|
|
||||||
modes ~= mode;
|
modes ~= mode;
|
||||||
|
|
||||||
|
//TODO: If RFC-strictness is off, clear the invite list when +i is set
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -352,8 +352,7 @@ class Connection
|
||||||
{
|
{
|
||||||
send(Message(_server.name, "474", [nick, channelName, "Cannot join channel (+b)"], true));
|
send(Message(_server.name, "474", [nick, channelName, "Cannot join channel (+b)"], true));
|
||||||
}
|
}
|
||||||
//TODO: Also account for invites from the INVITE command
|
else if(channel.modes.canFind('i') && !(channel.maskLists['I'].any!(m => matchesMask(m)) || channel.inviteHolders.canFind(this)))
|
||||||
else if(channel.modes.canFind('i') && !channel.maskLists['I'].any!(m => matchesMask(m)))
|
|
||||||
{
|
{
|
||||||
send(Message(_server.name, "473", [nick, channelName, "Cannot join channel (+i)"], true));
|
send(Message(_server.name, "473", [nick, channelName, "Cannot join channel (+i)"], true));
|
||||||
}
|
}
|
||||||
|
|
|
@ -323,6 +323,10 @@ class Server
|
||||||
void invite(Connection inviter, string target, string channelName)
|
void invite(Connection inviter, string target, string channelName)
|
||||||
{
|
{
|
||||||
auto user = findConnectionByNick(target)[0];
|
auto user = findConnectionByNick(target)[0];
|
||||||
|
auto channel = findChannelByName(channelName)[0];
|
||||||
|
|
||||||
|
channel.invite(user);
|
||||||
|
|
||||||
user.send(Message(inviter.prefix, "INVITE", [user.nick, channelName]));
|
user.send(Message(inviter.prefix, "INVITE", [user.nick, channelName]));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue