*/
#include "inspircd.h"
-#include "mode.h"
-#include "users.h"
-#include "channels.h"
-#include "modules.h"
#include "u_listmode.h"
/* $ModDesc: Allows an extended ban (+b) syntax redirecting banned users to another channel */
std::string::iterator start_pos = param.begin();
long maxbans = channel->GetMaxBans();
- if(channel->bans.size() > static_cast<unsigned>(maxbans))
+ if(adding && (channel->bans.size() > static_cast<unsigned>(maxbans)))
{
source->WriteServ("478 %s %s :Channel ban list for %s is full (maximum entries for this channel is %d)", source->nick, channel->name, channel->name, maxbans);
return false;
irc::modestacker modestack(false);
StringDeque stackresult;
const char* mode_junk[MAXMODES+2];
- userrec* myhorriblefakeuser = new userrec(ServerInstance);
- myhorriblefakeuser->SetFd(FD_MAGIC_NUMBER);
mode_junk[0] = chan->name;
mode_junk[i+1] = stackresult[i].c_str();
}
- ServerInstance->SendMode(mode_junk, stackresult.size() + 1, myhorriblefakeuser);
+ ServerInstance->SendMode(mode_junk, stackresult.size() + 1, ServerInstance->FakeClient);
}
- DELETE(myhorriblefakeuser);
DELETE(redirects);
chan->Shrink("banredirects");
}
}
else
{
- user->WriteServ("470 %s :You are banned from %s. You are being automatically redirected to %s", user->nick, chan->name, redir->targetchan.c_str());
+ user->WriteServ("474 %s %s :Cannot join channel (You are banned)", user->nick, chan->name);
+ user->WriteServ("470 %s :You are being automatically redirected to %s", user->nick, redir->targetchan.c_str());
nofollow = true;
chanrec::JoinUser(ServerInstance, user, redir->targetchan.c_str(), false, "", ServerInstance->Time(true));
nofollow = false;
};
-class ModuleBanRedirectFactory : public ModuleFactory
-{
- public:
- ModuleBanRedirectFactory()
- {
- }
-
- ~ModuleBanRedirectFactory()
- {
- }
-
- virtual Module * CreateModule(InspIRCd* Me)
- {
- return new ModuleBanRedirect(Me);
- }
-
-};
-
-
-extern "C" DllExport void * init_module( void )
-{
- return new ModuleBanRedirectFactory;
-}
+MODULE_INIT(ModuleBanRedirect)