mirror of
https://github.com/inspircd/inspircd.git
synced 2025-03-10 11:09:04 -04:00
Better Way(TM) of doing easy routing of commands with a user based source. This saves me having to put fixes into SVSJOIN, etc, to stop fake direction.
git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@10101 e03df62e-2008-0410-955e-edbf42e46eb7
This commit is contained in:
parent
c819f500c5
commit
b683e9dccb
@ -27,16 +27,14 @@ bool TreeSocket::ForceTopic(const std::string &source, std::deque<std::string> &
|
||||
if (params.size() != 4)
|
||||
return true;
|
||||
time_t ts = atoi(params[1].c_str());
|
||||
std::string nsource = source;
|
||||
Channel* c = this->Instance->FindChan(params[0]);
|
||||
if (c)
|
||||
{
|
||||
if ((ts >= c->topicset) || (c->topic.empty()))
|
||||
{
|
||||
User* user = this->Instance->FindNick(source);
|
||||
|
||||
if (c->topic != params[3])
|
||||
{
|
||||
User* user = this->Instance->FindNick(source);
|
||||
// Update topic only when it differs from current topic
|
||||
c->topic.assign(params[3], 0, Instance->Config->Limits.MaxTopic);
|
||||
if (!user)
|
||||
@ -53,27 +51,9 @@ bool TreeSocket::ForceTopic(const std::string &source, std::deque<std::string> &
|
||||
c->setby.assign(params[2], 0, 127);
|
||||
c->topicset = ts;
|
||||
|
||||
/*
|
||||
* Take careful note of what happens here;
|
||||
* Above, we display the topic change to the server IF the topic incoming is different to the topic already set.
|
||||
* HERE, we find the server the user that sent this topic is on, so we *do not* send topics back to the link they just
|
||||
* came from. This *cannot* be easily merged with the above check!
|
||||
*
|
||||
* Thanks to Anope and Namegduf for finally helping me isolate this
|
||||
* -- w00t (5th/aug/2008)
|
||||
*/
|
||||
if (user)
|
||||
{
|
||||
nsource = user->server;
|
||||
}
|
||||
|
||||
/* all done, send it on its way */
|
||||
params[3] = ":" + params[3];
|
||||
User* u = Instance->FindNick(nsource);
|
||||
if (u)
|
||||
Utils->DoOneToAllButSender(u->uuid,"FTOPIC",params,u->server);
|
||||
else
|
||||
Utils->DoOneToAllButSender(source,"FTOPIC",params,nsource);
|
||||
Utils->DoOneToAllButSender(source,"FTOPIC",params,source);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -68,6 +68,15 @@ TreeServer* SpanningTreeUtilities::BestRouteTo(const std::string &ServerName)
|
||||
}
|
||||
else
|
||||
{
|
||||
// Cheat a bit. This allows for (better) working versions of routing commands with nick based prefixes, without hassle
|
||||
User *u = ServerInstance->FindNick(ServerName);
|
||||
if (u)
|
||||
{
|
||||
Found = FindServer(u->server);
|
||||
if (Found)
|
||||
return Found;
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user