+ void init() CXX11_OVERRIDE
+ {
+ ServerInstance->Modules->AddService(oc);
+ Implementation eventlist[] = { I_OnCheckBan, I_On005Numeric, I_OnUserPreJoin };
+ ServerInstance->Modules->Attach(eventlist, this, sizeof(eventlist)/sizeof(Implementation));
+ }
+
+ ModResult OnUserPreJoin(LocalUser* user, Channel* chan, const std::string& cname, std::string& privs, const std::string& keygiven) CXX11_OVERRIDE
+ {
+ if (chan && chan->IsModeSet('O') && !user->IsOper())
+ {
+ user->WriteNumeric(ERR_CANTJOINOPERSONLY, "%s %s :Only IRC operators may join %s (+O is set)",
+ user->nick.c_str(), chan->name.c_str(), chan->name.c_str());
+ return MOD_RES_DENY;
+ }
+ return MOD_RES_PASSTHRU;
+ }