- va_list argsPtr;
- char textbuffer[MAXBUF];
- char tb[MAXBUF];
-
- va_start(argsPtr, text);
- vsnprintf(textbuffer, MAXBUF, text, argsPtr);
- va_end(argsPtr);
- snprintf(tb,MAXBUF,":%s %s",user->GetFullHost().c_str(), textbuffer);
-
- CUList *ulist = channel->GetUsers();
-
- for (CUList::iterator i = ulist->begin(); i != ulist->end(); i++)
- {
- /* User doesnt get a JOIN sent to themselves */
- if (user == i->first)
- continue;
-
- /* Users with a visibility state that hides them dont appear */
- if (user->Visibility && !user->Visibility->VisibleTo(i->first))
- continue;
-
- i->first->Write(std::string(tb));
- }
+ if (!user || !channel || param.empty())
+ return MOD_RES_PASSTHRU;
+
+ User* dest;
+ if (IS_LOCAL(user))
+ dest = ServerInstance->FindNickOnly(param);
+ else
+ dest = ServerInstance->FindNick(param);
+
+ if (!dest)
+ return MOD_RES_PASSTHRU;
+
+ Membership* memb = channel->GetUser(dest);
+ if (memb && unjoined.set(memb, 0))
+ channel->WriteAllExceptSender(dest, false, 0, "JOIN %s", channel->name.c_str());
+ return MOD_RES_PASSTHRU;