/* Copyright (C) Miklashevsky Roman, sss, elzor * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "stdafx.h" CMPlugin g_plugin; HANDLE hEventFilter = nullptr, hOptInitialise = nullptr, hSettingChanged = nullptr; BOOL gbDosServiceExist = 0; BOOL gbVarsServiceExist = 0; uint32_t gbMaxQuestCount = 5; BOOL gbInfTalkProtection = 0; BOOL gbAddPermanent = 0; BOOL gbHandleAuthReq = 1; BOOL gbSpecialGroup = 0; BOOL gbHideContacts = 1; BOOL gbIgnoreContacts = 0; BOOL gbExclude = 1; BOOL gbDelExcluded = 0; BOOL gbHistoryLog = 0; BOOL gbCaseInsensitive = 0; BOOL gbRegexMatch = 0; BOOL gbInvisDisable = 0; BOOL gbIgnoreURL = 1; BOOL gbLogToFile = 0; BOOL gbMathExpression = 0; HANDLE hStopSpamLogDirH = nullptr; wstring gbSpammersGroup = L"Spammers"; wstring gbQuestion; wstring gbAnswer; wstring gbCongratulation; std::wstring gbAuthRepl; extern const wchar_t *defQuestion, *defCongrats, *defAuthReply; extern int RemoveTmp(WPARAM, LPARAM); ///////////////////////////////////////////////////////////////////////////////////////// // returns plugin's extended information PLUGININFOEX pluginInfoEx = { sizeof(PLUGININFOEX), __PLUGIN_NAME, PLUGIN_MAKE_VERSION(__MAJOR_VERSION, __MINOR_VERSION, __RELEASE_NUM, __BUILD_NUM), __DESCRIPTION, __AUTHOR, __COPYRIGHT, __AUTHORWEB, UNICODE_AWARE, // {94CED94C-A94A-4BB1-ACBD-5CC6EBB689D4} { 0x94ced94c, 0xa94a, 0x4bb1, { 0xac, 0xbd, 0x5c, 0xc6, 0xeb, 0xb6, 0x89, 0xd4 } } }; CMPlugin::CMPlugin() : PLUGIN(MODULENAME, pluginInfoEx) {} ///////////////////////////////////////////////////////////////////////////////////////// extern wstring DBGetContactSettingStringPAN(MCONTACT hContact, char const *szModule, char const *szSetting, wstring errorValue); void InitVars() { gbSpammersGroup = DBGetContactSettingStringPAN(0, MODULENAME, "SpammersGroup", L"Spammers"); gbAnswer = DBGetContactSettingStringPAN(0, MODULENAME, "answer", L"nospam"); gbInfTalkProtection = g_plugin.getByte("infTalkProtection", 0); gbAddPermanent = g_plugin.getByte("addPermanent", 0); gbMaxQuestCount = g_plugin.getDword("maxQuestCount", 5); gbHandleAuthReq = g_plugin.getByte("handleAuthReq", 1); gbQuestion = DBGetContactSettingStringPAN(0, MODULENAME, "question", TranslateW(defQuestion)); gbAnswer = DBGetContactSettingStringPAN(0, MODULENAME, "answer", L"nospam"); gbCongratulation = DBGetContactSettingStringPAN(0, MODULENAME, "congratulation", TranslateW(defCongrats)); gbAuthRepl = DBGetContactSettingStringPAN(0, MODULENAME, "authrepl", TranslateW(defAuthReply)); gbSpecialGroup = g_plugin.getByte("SpecialGroup", 0); gbHideContacts = g_plugin.getByte("HideContacts", 0); gbIgnoreContacts = g_plugin.getByte("IgnoreContacts", 0); gbExclude = g_plugin.getByte("ExcludeContacts", 1); gbDelExcluded = g_plugin.getByte("DelExcluded", 0); gbCaseInsensitive = g_plugin.getByte("CaseInsensitive", 0); gbRegexMatch = g_plugin.getByte("RegexMatch", 0); gbInvisDisable = g_plugin.getByte("DisableInInvis", 0); gbIgnoreURL = g_plugin.getByte("IgnoreURL", 0); gbLogToFile = g_plugin.getByte("LogSpamToFile", 0); gbHistoryLog = g_plugin.getByte("HistoryLog", 0); gbMathExpression = g_plugin.getByte("MathExpression", 0); } static int OnSystemModulesLoaded(WPARAM, LPARAM) { if (ServiceExists(MS_VARS_FORMATSTRING)) gbVarsServiceExist = TRUE; InitVars(); if (gbDelExcluded) mir_forkthread(&CleanThread); // Folders plugin support hStopSpamLogDirH = FoldersRegisterCustomPathW(LPGEN("StopSpam"), LPGEN("StopSpam Logs"), FOLDER_LOGS); return 0; } ///////////////////////////////////////////////////////////////////////////////////////// int CMPlugin::Load() { CreateServiceFunction("/RemoveTmp", (MIRANDASERVICE)RemoveTmp); HookEvent(ME_DB_EVENT_ADDED, OnDbEventAdded); HookEvent(ME_DB_EVENT_FILTER_ADD, OnDbEventFilterAdd); HookEvent(ME_DB_CONTACT_SETTINGCHANGED, OnDbContactSettingChanged); HookEvent(ME_OPT_INITIALISE, OnOptInit); HookEvent(ME_SYSTEM_MODULESLOADED, OnSystemModulesLoaded); CMenuItem mi(&g_plugin); SET_UID(mi, 0x60ce7660, 0x5a5, 0x4234, 0x99, 0xb6, 0x55, 0x21, 0xed, 0xa0, 0xb8, 0x32); mi.position = -0x7FFFFFFF; mi.hIcolibItem = Skin_LoadIcon(SKINICON_OTHER_MIRANDA); mi.name.a = LPGEN("Remove Temporary Contacts"); mi.pszService = "/RemoveTmp"; Menu_AddMainMenuItem(&mi); return 0; }