+ FilterBase(InspIRCd* Me, const std::string &source);
+ virtual ~FilterBase();
+ virtual void Implements(char* List);
+ virtual int OnUserPreMessage(userrec* user,void* dest,int target_type, std::string &text, char status, CUList &exempt_list);
+ virtual FilterResult* FilterMatch(const std::string &text) = 0;
+ virtual bool DeleteFilter(const std::string &freeform) = 0;
+ virtual void SyncFilters(Module* proto, void* opaque) = 0;
+ virtual void SendFilter(Module* proto, void* opaque, FilterResult* iter);
+ virtual std::pair<bool, std::string> AddFilter(const std::string &freeform, const std::string &type, const std::string &reason, long duration) = 0;
+ virtual int OnUserPreNotice(userrec* user,void* dest,int target_type, std::string &text, char status, CUList &exempt_list);
+ virtual void OnRehash(userrec* user, const std::string ¶meter);
+ virtual Version GetVersion();
+ std::string EncodeFilter(FilterResult* filter);
+ FilterResult DecodeFilter(const std::string &data);
+ virtual void OnSyncOtherMetaData(Module* proto, void* opaque);
+ virtual void OnDecodeMetaData(int target_type, void* target, const std::string &extname, const std::string &extdata);
+ virtual int OnStats(char symbol, userrec* user, string_list &results) = 0;
+ virtual int OnPreCommand(const std::string &command, const char** parameters, int pcnt, userrec *user, bool validated, const std::string &original_line);
+};
+
+class cmd_filter : public command_t
+{
+ FilterBase* Base;
+ public:
+ cmd_filter(FilterBase* f, InspIRCd* Me, const std::string &source) : command_t(Me, "FILTER", 'o', 1), Base(f)