summaryrefslogtreecommitdiff
path: root/stopspam_mod/tags/0.0.1.6/stopspam.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'stopspam_mod/tags/0.0.1.6/stopspam.cpp')
-rw-r--r--stopspam_mod/tags/0.0.1.6/stopspam.cpp255
1 files changed, 0 insertions, 255 deletions
diff --git a/stopspam_mod/tags/0.0.1.6/stopspam.cpp b/stopspam_mod/tags/0.0.1.6/stopspam.cpp
deleted file mode 100644
index e162837..0000000
--- a/stopspam_mod/tags/0.0.1.6/stopspam.cpp
+++ /dev/null
@@ -1,255 +0,0 @@
-#include "headers.h"
-
-MIRANDA_HOOK_EVENT(ME_DB_CONTACT_ADDED, w, l)
-{
- return 0;
-}
-
-
-MIRANDA_HOOK_EVENT(ME_DB_EVENT_ADDED, wParam, lParam)
-{
- HANDLE hContact = (HANDLE)wParam;
- HANDLE hDbEvent = (HANDLE)lParam;
-
- DBEVENTINFO dbei = {0};
- dbei.cbSize = sizeof(dbei);
- dbei.cbBlob = CallService(MS_DB_EVENT_GETBLOBSIZE, (WPARAM)hDbEvent, 0);
- if(-1 == dbei.cbBlob)
- return 0;
-
- dbei.pBlob = new BYTE[dbei.cbBlob];
- CallService(MS_DB_EVENT_GET, lParam, (LPARAM)&dbei);
-
- // if event is in protocol that is not despammed
- if(!ProtoInList(dbei.szModule)) {
- delete dbei.pBlob;
- return 0;
- }
-
- // event is an auth request
- if(gbHandleAuthReq)
- {
- if(!(dbei.flags & DBEF_SENT) && !(dbei.flags & DBEF_READ) && dbei.eventType == EVENTTYPE_AUTHREQUEST)
- {
- HANDLE hcntct;
- hcntct=*((PHANDLE)(dbei.pBlob+sizeof(DWORD)));
-
- /*char text[100];
- sprintf(text, "%d, %d, \r\n%d, %d",
- (int)hcntct,
- (int)hDbEvent,
- DBGetContactSettingByte(hContact, pluginName, answeredSetting, 0),
- DBGetContactSettingByte(hContact, "CList", "NotOnList", 0));
-
- int a = MessageBox( 0, text, "Авторизация",MB_OK|MB_ICONQUESTION );*/
-
-
- // if request is from unknown or not marked Answered contact
-
- int a = DBGetContactSettingByte(hcntct, "CList", "NotOnList", 0);
- int b = !DBGetContactSettingByte(hcntct, pluginName, "Answered", 0);
-
- if(a && b)//
- {
- // ...send message
- /*MessageBox( 0, "...send message", "yappp...",MB_OK|MB_ICONQUESTION );*/
- std::string allowService = dbei.szModule;
- allowService += PS_AUTHDENY;
-
- if(gbHideContacts)
- DBWriteContactSettingByte(hcntct, "CList", "Hidden", 1);
- if(gbSpecialGroup)
- DBWriteContactSettingTString(hcntct, "CList", "Group", gbSpammersGroup.c_str());
-
- int a = CallService(allowService.c_str(), (WPARAM)hDbEvent, (LPARAM)gbAuthRepl.c_str());
-
- //CallProtoService(dbei.szModule,PS_AUTHDENY,(WPARAM)hDbEvent,(LPARAM)GetAuthRepl().c_str());
- delete dbei.pBlob;
- return 1;
- }
- }
- }
- delete dbei.pBlob;
- return 0;
-}
-
-MIRANDA_HOOK_EVENT(ME_DB_EVENT_FILTER_ADD, w, l)
-{
- HANDLE hContact = (HANDLE)w;
- DBEVENTINFO * dbei = (DBEVENTINFO*)l;
-
-
- // if event is in protocol that is not despammed
- if(!ProtoInList(dbei->szModule))
- {
- // ...let the event go its way
- return 0;
- }
- //do not check excluded contact
-
-/* if(DBGetContactSettingWord(hContact, dbei->szModule, "ServerId", 0))
- {
- DBDeleteContactSetting(hContact, "CList", "NotOnList");
- return 0;
- }*/
-
-/* if(gbDelNotInList)
- if(DBGetContactSettingStringPAN_A((HANDLE)w, "CList", "Group", "") == "Not In List")
- {
- CallService(MS_DB_CONTACT_DELETE, (WPARAM)w, 0);
- return 1;
- }
-*/
- if(DBGetContactSettingByte(hContact, pluginName, "Answered", 0))
- return 0;
- if(DBGetContactSettingByte(hContact, pluginName, "Excluded", 0))
- {
- if(!DBGetContactSettingByte(hContact, "CList", "NotOnList", 0))
- DBDeleteContactSetting(hContact, pluginName, "Excluded");
- return 0;
- }
- // if event is not a message, or if the message has been read or sent...
-/* if((dbei->flags & DBEF_READ) || (dbei->eventType != EVENTTYPE_MESSAGE) || (dbei->eventType != EVENTTYPE_FILE) || (dbei->eventType != EVENTTYPE_URL) || (dbei->eventType != EVENTTYPE_CONTACTS))
- // ...let the event go its way
- return 0; */
- //we want block not only messages, i seen many types other eventtype flood
- if(dbei->flags & DBEF_READ)
- // ...let the event go its way
- return 0;
- //mark contact which we trying to contact for exclude from check
- if((dbei->flags & DBEF_SENT) && DBGetContactSettingByte(hContact, "CList", "NotOnList", 0)
- && (!gbMaxQuestCount || DBGetContactSettingDword(hContact, pluginName, "QuestionCount", 0) < gbMaxQuestCount) && gbExclude)
- {
- DBWriteContactSettingByte(hContact, pluginName, "Excluded", 1);
- return 0;
- }
- // if message is from known or marked Answered contact
- if(!DBGetContactSettingByte(hContact, "CList", "NotOnList", 0))
- // ...let the event go its way
- return 0;
- // if message is corrupted or empty it cannot be an answer.
- if(!dbei->cbBlob || !dbei->pBlob)
- // reject processing of the event
- return 1;
-
- tstring message;
-
- if(dbei->flags & DBEF_UTF){
- WCHAR* msg_u;
- char* msg_a = mir_strdup(( char* )dbei->pBlob );
- mir_utf8decode( msg_a, &msg_u );
-#ifdef _UNICODE
- message = msg_u;
-#else
- message = mir_u2a(msg_u);
-#endif
- }
- else{
-#ifdef _UNICODE
- message = mir_a2u((char*)(dbei->pBlob));
-#else
- message = (char*)(dbei->pBlob);
-#endif
- }
-
- // if message contains right answer...
-
-// if( tstring::npos!=message.find(gbAnswer) )
- if(!wcscmp(message.c_str(), gbAnswer.c_str()))
- {
- // unhide contact
- DBDeleteContactSetting(hContact, "CList", "Hidden");
-
- // mark contact as Answered
- DBWriteContactSettingByte(hContact, pluginName, "Answered", 1);
-
- //add contact permanently
- if(gbAddPermanent) //do not use this )
- DBDeleteContactSetting(hContact, "CList", "NotOnList");
-
- // send congratulation
-#ifdef _UNICODE
- char * buf=mir_utf8encodeW(gbCongratulation.c_str());
- CallContactService(hContact, PSS_MESSAGE, PREF_UTF, (LPARAM)buf);
- mir_free(buf);
-#else
- CallContactService(hContact, PSS_MESSAGE, 0, (LPARAM)GetCongratulation().c_str());
-#endif
-
- // process the event
- return 0;
- }
-
- // if message message does not contain infintite talk protection prefix
- // and question count for this contact is less then maximum
- if( (!gbInfTalkProtection || tstring::npos==message.find(_T("StopSpam automatic message:\r\n")))
- && (!gbMaxQuestCount || DBGetContactSettingDword(hContact, pluginName, "QuestionCount", 0) < gbMaxQuestCount) )
- {
- // send question
- tstring q = _T("StopSpam automatic message:\r\n") + gbQuestion;
-
-#ifdef _UNICODE
- char * buf=mir_utf8encodeW(q.c_str());
- CallContactService(hContact, PSS_MESSAGE, PREF_UTF, (LPARAM)buf);
- mir_free(buf);
-#else
- CallContactService(hContact, PSS_MESSAGE, 0, (LPARAM)q.c_str());
-#endif
-
- // increment question count
- DWORD questCount = DBGetContactSettingDword(hContact, pluginName, "QuestionCount", 0);
- DBWriteContactSettingDword(hContact, pluginName, "QuestionCount", questCount + 1);
-
- }
- else
- {
- if (gbDosServiceExist)
- {
- if(gbDosServiceIntegration)
- {
- int i;
- i = rand()%255*13;
- CallService(MS_DOS_SERVICE, (WPARAM)hContact, (LPARAM)i);
- }
- }
- if(gbIgnoreContacts)
- {
- DBWriteContactSettingDword(hContact, "Ignore", "Mask1", 0x0000007F);
- }
- }
- if(gbHideContacts)
- DBWriteContactSettingByte(hContact, "CList", "Hidden", 1);
- if(gbSpecialGroup)
- DBWriteContactSettingTString(hContact, "CList", "Group", gbSpammersGroup.c_str());
- DBWriteContactSettingByte(hContact, "CList", "NotOnList", 1);
-
- // save message from contact
- dbei->flags |= DBEF_READ;
- CallService(MS_DB_EVENT_ADD, (WPARAM)hContact, (LPARAM)dbei);
-
- // reject processing of the event
- return 1;
-}
-
-
-MIRANDA_HOOK_EVENT(ME_DB_CONTACT_SETTINGCHANGED, w, l)
-{
- HANDLE hContact = (HANDLE)w;
- DBCONTACTWRITESETTING * cws = (DBCONTACTWRITESETTING*)l;
-
- // if CList/NotOnList is being deleted then remove answeredSetting
- if(strcmp(cws->szModule, "CList"))
- return 0;
- if(strcmp(cws->szSetting, "NotOnList"))
- return 0;
- if(!cws->value.type)
- {
- DBDeleteContactSetting(hContact, pluginName, "Answered");
- DBDeleteContactSetting(hContact, pluginName, "QuestionCount");
- }
-
- return 0;
-}
-
-
-