else if (command == "FTOPIC")
{
// Drop channel TS for FTOPIC
- // :sid FTOPIC #target TS TopicTS ...
- // A B C D
+ // :sid FTOPIC #target TS TopicTS setter :newtopic
+ // A B C D E F
+ // :uid FTOPIC #target TS TopicTS :newtopic
+ // A B C D E
if (b == std::string::npos)
return;
if (d == std::string::npos)
return;
- line.erase(c, d-c);
+ std::string::size_type e = line.find(' ', d + 1);
+ if (line[e+1] == ':')
+ {
+ line.erase(c, e-c);
+ line.erase(a+1, 1);
+ }
+ else
+ line.erase(c, d-c);
}
else if ((command == "PING") || (command == "PONG"))
{
params.insert(params.begin()+1, "operquit");
who = MyRoot->ServerUser;
}
+ else if ((cmd == "TOPIC") && (params.size() >= 2))
+ {
+ // :20DAAAAAC TOPIC #chan :new topic
+ cmd = "FTOPIC";
+ if (!InsertCurrentChannelTS(params))
+ return false;
+
+ params.insert(params.begin()+2, ConvToStr(ServerInstance->Time()));
+ }
+ else if (cmd == "MODENOTICE")
+ {
+ // MODENOTICE is always supported by 2.0 but it's optional in 2.2.
+ params.insert(params.begin(), "*");
+ params.insert(params.begin()+1, cmd);
+ cmd = "ENCAP";
+ }
+ else if (cmd == "RULES")
+ {
+ return false;
+ }
return true; // Passthru
}