+
+ m1 = new Channel_r(ServerInstance);
+ m2 = new Channel_R(ServerInstance);
+ m3 = new Channel_M(ServerInstance);
+ m4 = new User_r(ServerInstance);
+ m5 = new User_R(ServerInstance);
+
+ if (!ServerInstance->AddMode(m1, 'r') || !ServerInstance->AddMode(m2, 'R') || !ServerInstance->AddMode(m3, 'M')
+ || !ServerInstance->AddMode(m4, 'r') || !ServerInstance->AddMode(m5, 'R'))
+ {
+ throw ModuleException("Could not add user and channel modes!");
+ }
+
+ kludgeme = false;
+ }
+
+ /* <- :stitch.chatspike.net 307 w00t w00t :is a registered nick */
+ virtual void OnWhois(userrec* source, userrec* dest)
+ {
+ if (dest->IsModeSet('r'))
+ {
+ /* user is registered */
+ ServerInstance->SendWhoisLine(source, dest, 307, "%s %s :is a registered nick", source->nick, dest->nick);
+ }
+ }
+
+ void Implements(char* List)
+ {
+ List[I_OnWhois] = List[I_OnUserPostNick] = List[I_OnUserPreMessage] = List[I_OnUserPreNotice] = List[I_OnUserPreJoin] = 1;
+ }
+
+ virtual void OnUserPostNick(userrec* user, const std::string &oldnick)
+ {
+ /* On nickchange, if they have +r, remove it */
+ if (user->IsModeSet('r'))
+ {
+ const char* modechange[2];
+ modechange[0] = user->nick;
+ modechange[1] = "-r";
+ kludgeme = true;
+ ServerInstance->SendMode(modechange,2,user);
+ kludgeme = false;
+ }
+ }
+
+ virtual int OnUserPreMessage(userrec* user,void* dest,int target_type, std::string &text, char status, CUList &exempt_list)
+ {
+ if (!IS_LOCAL(user))
+ return 0;
+