diff --git a/Chan.cpp b/Chan.cpp index a7faec5e..32b979c9 100644 --- a/Chan.cpp +++ b/Chan.cpp @@ -42,8 +42,8 @@ void CChan::Cycle() const { m_pUser->PutIRC("PART " + GetName() + "\r\nJOIN " + GetName() + " " + GetKey()); } -void CChan::JoinUser() { - if (!IsOn()) { +void CChan::JoinUser(bool bForce) { + if (!bForce && (!IsOn() || !IsDetached())) { IncClientRequests(); m_pUser->PutIRC("JOIN " + GetName()); return; @@ -244,18 +244,30 @@ bool CChan::AddNick(const CString& sNick) { const char* p = sNick.c_str(); bool bIsOp = false; bool bIsVoice = false; + bool bNoMode = false; switch (*p) { case '\0': return false; case '@': bIsOp = true; + break; case '+': - if (!*++p) { - return false; - } + bIsVoice = true; + break; + case '%': + break; + case '*': + break; + case '!': + break; + default: + bNoMode = true; + break; + } - bIsVoice = !bIsOp; + if (!bNoMode && !*++p) { + return false; } CNick* pNick = FindNick(p); diff --git a/Chan.h b/Chan.h index 48749d02..762e7f58 100644 --- a/Chan.h +++ b/Chan.h @@ -29,7 +29,7 @@ public: void Reset(); void Joined(); void Cycle() const; - void JoinUser(); + void JoinUser(bool bForce = false); void DetachUser(); void SendBuffer();