+ FilterBase(InspIRCd* Me, const std::string &source);
+ virtual ~FilterBase();
+ virtual int OnUserPreMessage(User* user,void* dest,int target_type, std::string &text, char status, CUList &exempt_list);
+ virtual FilterResult* FilterMatch(User* user, const std::string &text, int flags) = 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, const std::string &flags) = 0;
+ virtual int OnUserPreNotice(User* user,void* dest,int target_type, std::string &text, char status, CUList &exempt_list);
+ virtual void OnRehash(User* 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, bool displayable = false);
+ virtual void OnDecodeMetaData(int target_type, void* target, const std::string &extname, const std::string &extdata);
+ virtual int OnStats(char symbol, User* user, string_list &results) = 0;
+ virtual int OnPreCommand(const std::string &command, const char* const* parameters, int pcnt, User *user, bool validated, const std::string &original_line);
+ bool AppliesToMe(User* user, FilterResult* filter, int flags);
+};
+
+class CommandFilter : public Command
+{
+ FilterBase* Base;
+ public:
+ CommandFilter(FilterBase* f, InspIRCd* Me, const std::string &ssource) : Command(Me, "FILTER", "o", 1), Base(f)