summaryrefslogtreecommitdiff
path: root/plugins/StopSpamPlus/src/events.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/StopSpamPlus/src/events.cpp')
-rw-r--r--plugins/StopSpamPlus/src/events.cpp83
1 files changed, 36 insertions, 47 deletions
diff --git a/plugins/StopSpamPlus/src/events.cpp b/plugins/StopSpamPlus/src/events.cpp
index fcea573c55..de5a5cfad9 100644
--- a/plugins/StopSpamPlus/src/events.cpp
+++ b/plugins/StopSpamPlus/src/events.cpp
@@ -14,22 +14,20 @@ int OnDbEventAdded(WPARAM, LPARAM lParam)
// event is an auth request
if (!(dbei.flags & DBEF_SENT) && !(dbei.flags & DBEF_READ) && dbei.eventType == EVENTTYPE_AUTHREQUEST) {
- MCONTACT hcntct = DbGetAuthEventContact(&dbei);
+ MCONTACT hContact = DbGetAuthEventContact(&dbei);
// if request is from unknown or not marked Answered contact
//and if I don't sent message to this contact
- if (!Contact::OnList(hcntct) && !g_plugin.getByte(hcntct, DB_KEY_ANSWERED) && !IsExistMyMessage(hcntct)) {
+ if (!Contact::OnList(hContact) && !g_plugin.getByte(hContact, DB_KEY_ANSWERED) && !g_plugin.getByte(hContact, DB_KEY_HASSENT)) {
if (!g_plugin.HandleAuthReq) {
- char *buf = mir_utf8encodeW(variables_parse(g_plugin.getReply(), hcntct).c_str());
- ProtoChainSend(hcntct, PSS_MESSAGE, 0, (LPARAM)buf);
+ char *buf = mir_utf8encodeW(variables_parse(g_plugin.getReply(), hContact).c_str());
+ ProtoChainSend(hContact, PSS_MESSAGE, 0, (LPARAM)buf);
mir_free(buf);
}
- // ...send message
- CallProtoService(dbei.szModule, PS_AUTHDENY, hDbEvent, (LPARAM)_T2A(variables_parse(g_plugin.getReply(), hcntct).c_str()));
-
- Contact::RemoveFromList(hcntct);
- Contact::Hide(hcntct);
+ g_plugin.setDword(hContact, DB_KEY_HASAUTH, hDbEvent);
+ Contact::RemoveFromList(hContact);
+ Contact::Hide(hContact);
if (!g_plugin.HistLog)
db_event_delete(hDbEvent);
return 1;
@@ -41,32 +39,29 @@ int OnDbEventAdded(WPARAM, LPARAM lParam)
int OnDbEventFilterAdd(WPARAM w, LPARAM l)
{
MCONTACT hContact = (MCONTACT)w;
- DBEVENTINFO *dbei = (DBEVENTINFO*)l;
+ DBEVENTINFO *dbei = (DBEVENTINFO *)l;
if (dbei == nullptr || dbei->szModule == nullptr) //fix potential DEP crash
return 0;
// if event is in protocol that is not despammed
if (g_plugin.ProtoDisabled(dbei->szModule))
- // ...let the event go its way
- return 0;
+ return 0; // ...let the event go its way
// if event is not a message, or if the message has been read or sent...
- if (dbei->flags & DBEF_SENT || dbei->flags & DBEF_READ || dbei->eventType != EVENTTYPE_MESSAGE)
- // ...let the event go its way
+ if (dbei->eventType != EVENTTYPE_MESSAGE || (dbei->flags & DBEF_READ) != 0)
return 0;
- // if message is from known or marked Answered contact
- if (g_plugin.getByte(hContact, DB_KEY_ANSWERED))
- // ...let the event go its way
+ if (dbei->flags & DBEF_SENT) {
+ g_plugin.setByte(hContact, DB_KEY_HASSENT, 1);
return 0;
+ }
- // checking if message from self-added contact
- //Contact in Not in list icq group
- if (Contact::OnList(hContact) && db_get_w(hContact, dbei->szModule, "SrvGroupId", -1) != 1)
+ // if message is from known or marked Answered contact
+ if (g_plugin.getByte(hContact, DB_KEY_ANSWERED) || g_plugin.getByte(hContact, DB_KEY_HASSENT))
return 0;
- //if I sent message to this contact
- if (IsExistMyMessage(hContact))
+ // checking if message from self-added contact
+ if (Contact::OnList(hContact))
return 0;
// if message is corrupted or empty it cannot be an answer.
@@ -77,12 +72,12 @@ int OnDbEventFilterAdd(WPARAM w, LPARAM l)
tstring message;
if (dbei->flags & DBEF_UTF) {
- wchar_t* msg_u = mir_utf8decodeW((char*)dbei->pBlob);
+ wchar_t *msg_u = mir_utf8decodeW((char *)dbei->pBlob);
message = msg_u;
mir_free(msg_u);
}
else {
- wchar_t* msg_u = mir_a2u((char*)(dbei->pBlob));
+ wchar_t *msg_u = mir_a2u((char *)(dbei->pBlob));
message = msg_u;
mir_free(msg_u);
}
@@ -102,16 +97,15 @@ int OnDbEventFilterAdd(WPARAM w, LPARAM l)
// unhide contact
Contact::Hide(hContact, false);
- // mark contact as Answered
- g_plugin.setByte(hContact, DB_KEY_ANSWERED, 1);
-
- //add contact permanently
- if (g_plugin.AddPermanent)
+ // add contact permanently and delete our temporary variables
+ if (g_plugin.AddPermanent) {
Contact::PutOnList(hContact);
+ db_delete_module(hContact, MODULENAME);
+ }
+ else g_plugin.setByte(hContact, DB_KEY_ANSWERED, 1);
// send congratulation
-
- char * buf = mir_utf8encodeW(variables_parse(g_plugin.getCongrats(), hContact).c_str());
+ char *buf = mir_utf8encodeW(variables_parse(g_plugin.getCongrats(), hContact).c_str());
ProtoChainSend(hContact, PSS_MESSAGE, 0, (LPARAM)buf);
mir_free(buf);
@@ -129,12 +123,10 @@ int OnDbEventFilterAdd(WPARAM w, LPARAM l)
// send question
tstring q = pwszPrefix + variables_parse(g_plugin.getQuestion(), hContact);
-
- char * buf = mir_utf8encodeW(q.c_str());
+ char *buf = mir_utf8encodeW(q.c_str());
ProtoChainSend(hContact, PSS_MESSAGE, 0, (LPARAM)buf);
mir_free(buf);
-
// increment question count
uint32_t questCount = g_plugin.getDword(hContact, DB_KEY_QUESTCOUNT);
g_plugin.setDword(hContact, DB_KEY_QUESTCOUNT, questCount + 1);
@@ -149,20 +141,17 @@ int OnDbEventFilterAdd(WPARAM w, LPARAM l)
return 0;
}
-int OnDbContactSettingchanged(WPARAM hContact, LPARAM l)
+int OnShutdown(WPARAM, LPARAM)
{
- DBCONTACTWRITESETTING *cws = (DBCONTACTWRITESETTING*)l;
+ for (auto &cc : Contacts()) {
+ if (Contact::OnList(cc))
+ continue;
- // if CList/NotOnList is being deleted then remove DB_KEY_ANSWERED
- if (strcmp(cws->szModule, "CList"))
- return 0;
- if (strcmp(cws->szSetting, "NotOnList"))
- return 0;
-
- if (!cws->value.type) {
- g_plugin.delSetting(hContact, DB_KEY_ANSWERED);
- g_plugin.delSetting(hContact, DB_KEY_QUESTCOUNT);
+ if (MEVENT hDbEvent = g_plugin.getByte(cc, DB_KEY_HASAUTH)) {
+ char *szProto = Proto_GetBaseAccountName(cc);
+ CallProtoService(szProto, PS_AUTHDENY, hDbEvent, (LPARAM)_T2A(variables_parse(g_plugin.getReply(), cc).c_str()));
+ }
}
-
+
return 0;
-}
+} \ No newline at end of file