+ private:
+
+ char fprefix;
+
+ /* We cant use a map, there may be multiple aliases with the same name.
+ * We can, however, use a fancy invention: the multimap. Maps a key to one or more values.
+ * -- w00t
+ */
+ std::multimap<std::string, Alias> Aliases;
+
+ /* whether or not +B users are allowed to use fantasy commands */
+ bool AllowBots;
+
+ virtual void ReadAliases()
+ {
+ ConfigReader MyConf;
+
+ AllowBots = MyConf.ReadFlag("fantasy", "allowbots", "no", 0);
+
+ std::string fpre = MyConf.ReadValue("fantasy","prefix",0);
+ fprefix = fpre.empty() ? '!' : fpre[0];
+
+ Aliases.clear();
+ for (int i = 0; i < MyConf.Enumerate("alias"); i++)
+ {
+ Alias a;
+ std::string txt;
+ txt = MyConf.ReadValue("alias", "text", i);
+ a.AliasedCommand = txt.c_str();
+ a.ReplaceFormat = MyConf.ReadValue("alias", "replace", i, true);
+ a.RequiredNick = MyConf.ReadValue("alias", "requires", i);
+ a.ULineOnly = MyConf.ReadFlag("alias", "uline", i);
+ a.ChannelCommand = MyConf.ReadFlag("alias", "channelcommand", "no", i);
+ a.UserCommand = MyConf.ReadFlag("alias", "usercommand", "yes", i);
+ a.OperOnly = MyConf.ReadFlag("alias", "operonly", i);
+ a.format = MyConf.ReadValue("alias", "format", i);
+ a.CaseSensitive = MyConf.ReadFlag("alias", "matchcase", i);
+ Aliases.insert(std::make_pair(txt, a));
+ }
+ }
+
+ public:
+
+ ModuleAlias()
+ {
+ ReadAliases();
+ ServerInstance->Modules->Attach(I_OnPreCommand, this);
+ ServerInstance->Modules->Attach(I_OnRehash, this);
+ ServerInstance->Modules->Attach(I_OnUserMessage, this);
+
+ }
+
+ virtual ~ModuleAlias()
+ {
+ }
+
+ virtual Version GetVersion()
+ {
+ return Version("Provides aliases of commands.", VF_VENDOR);
+ }