+ RouteDescriptor GetRouting(User* user, const std::vector<std::string>& parameters)
+ {
+ return ROUTE_BROADCAST;
+ }
+};
+
+class ImplFilter : public FilterResult
+{
+ public:
+ Regex* regex;
+
+ ImplFilter(ModuleFilter* mymodule, const std::string &rea, const std::string &act, long glinetime, const std::string &pat, const std::string &flgs);
+};
+
+
+class ModuleFilter : public Module
+{
+ public:
+ CommandFilter filtcommand;
+ dynamic_reference<RegexFactory> RegexEngine;
+
+ std::vector<ImplFilter> filters;
+ const char *error;
+ int erroffset;
+ int flags;
+
+ std::vector<std::string> exemptfromfilter; // List of channel names excluded from filtering.
+
+ ModuleFilter();
+ void init();
+ ~ModuleFilter();
+ ModResult OnUserPreMessage(User* user,void* dest,int target_type, std::string &text, char status, CUList &exempt_list);
+ FilterResult* FilterMatch(User* user, const std::string &text, int flags);
+ bool DeleteFilter(const std::string &freeform);
+ void SyncFilters(Module* proto, void* opaque);
+ void SendFilter(Module* proto, void* opaque, FilterResult* iter);
+ std::pair<bool, std::string> AddFilter(const std::string &freeform, const std::string &type, const std::string &reason, long duration, const std::string &flags);
+ ModResult OnUserPreNotice(User* user,void* dest,int target_type, std::string &text, char status, CUList &exempt_list);
+ void OnRehash(User* user);
+ Version GetVersion();
+ std::string EncodeFilter(FilterResult* filter);
+ FilterResult DecodeFilter(const std::string &data);
+ void OnSyncNetwork(Module* proto, void* opaque);
+ void OnDecodeMetaData(Extensible* target, const std::string &extname, const std::string &extdata);
+ ModResult OnStats(char symbol, User* user, string_list &results);
+ ModResult OnPreCommand(std::string &command, std::vector<std::string> ¶meters, LocalUser *user, bool validated, const std::string &original_line);
+ bool AppliesToMe(User* user, FilterResult* filter, int flags);
+ void ReadFilters(ConfigReader &MyConf);
+};
+
+CmdResult CommandFilter::Handle(const std::vector<std::string> ¶meters, User *user)
+{
+ if (parameters.size() == 1)
+ {
+ /* Deleting a filter */
+ if (static_cast<ModuleFilter&>(*creator).DeleteFilter(parameters[0]))
+ {
+ user->WriteServ("NOTICE %s :*** Removed filter '%s'", user->nick.c_str(), parameters[0].c_str());
+ ServerInstance->SNO->WriteToSnoMask(IS_LOCAL(user) ? 'a' : 'A', std::string("FILTER: ")+user->nick+" removed filter '"+parameters[0]+"'");
+ return CMD_SUCCESS;
+ }
+ else
+ {
+ user->WriteServ("NOTICE %s :*** Filter '%s' not found in list, try /stats s.", user->nick.c_str(), parameters[0].c_str());
+ return CMD_FAILURE;
+ }
+ }
+ else