summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAdam <Adam@anope.org>2010-11-24 21:40:56 -0600
committerAdam <Adam@anope.org>2010-12-12 19:36:19 -0500
commitcb6ef574e3df5cc846247450b74ca37d265f319e (patch)
tree8ce3374a537c312af63c78125bfea4622bb188f0 /src
parent37e02a3594fdddc3d5a3df0501c528f42db6c4da (diff)
Send replies from fantasy commands back to the channel, this will be expanded on later
Diffstat (limited to 'src')
-rw-r--r--src/command.cpp51
-rw-r--r--src/commands.cpp14
2 files changed, 57 insertions, 8 deletions
diff --git a/src/command.cpp b/src/command.cpp
index 19ca62544..91e4507db 100644
--- a/src/command.cpp
+++ b/src/command.cpp
@@ -8,6 +8,52 @@
#include "services.h"
#include "modules.h"
+void CommandSource::Reply(LanguageString message, ...)
+{
+ Anope::string m = GetString(this->u, message);
+
+ m = m.replace_all_cs("%S", this->owner->nick);
+
+ if (m.length() >= 4096)
+ Log() << "Warning, language string " << message << " is longer than 4096 bytes";
+
+ va_list args;
+ char buf[4096];
+ va_start(args, message);
+ vsnprintf(buf, sizeof(buf) - 1, m.c_str(), args);
+ va_end(args);
+
+ sepstream sep(buf, '\n');
+ Anope::string line;
+
+ while (sep.GetToken(line))
+ this->Reply(line.empty() ? " " : line);
+}
+
+void CommandSource::Reply(const char *message, ...)
+{
+ va_list args;
+ char buf[BUFSIZE] = "";
+
+ if (message)
+ {
+ va_start(args, message);
+ vsnprintf(buf, BUFSIZE - 1, message, args);
+
+ this->Reply(Anope::string(buf));
+
+ va_end(args);
+ }
+}
+
+void CommandSource::Reply(const Anope::string &message)
+{
+ if (this->fantasy && this->ci)
+ ircdproto->SendPrivmsg(this->service, this->ci->name, message.c_str());
+ else
+ u->SendMessage(this->service->nick, message);
+}
+
Command::Command(const Anope::string &sname, size_t min_params, size_t max_params, const Anope::string &spermission) : MaxParams(max_params), MinParams(min_params), name(sname), permission(spermission)
{
this->module = NULL;
@@ -20,11 +66,6 @@ Command::~Command()
this->module->DelCommand(this->service, this);
}
-CommandReturn Command::Execute(User *u, const std::vector<Anope::string> &)
-{
- return MOD_CONT;
-}
-
void Command::OnServHelp(User *u) { }
bool Command::OnHelp(User *u, const Anope::string &subcommand) { return false; }
diff --git a/src/commands.cpp b/src/commands.cpp
index e1f744954..97078af09 100644
--- a/src/commands.cpp
+++ b/src/commands.cpp
@@ -99,11 +99,12 @@ void mod_run_cmd(BotInfo *bi, User *u, Command *c, const Anope::string &command,
if (MOD_RESULT == EVENT_STOP)
return;
+ ChannelInfo *ci = NULL;
if (params.size() > 0 && !c->HasFlag(CFLAG_STRIP_CHANNEL) && (bi == ChanServ || bi == BotServ))
{
if (ircdproto->IsChannelValid(params[0]))
{
- ChannelInfo *ci = cs_findchan(params[0]);
+ ci = cs_findchan(params[0]);
if (ci)
{
if (ci->HasFlag(CI_FORBIDDEN) && !c->HasFlag(CFLAG_ALLOW_FORBIDDEN))
@@ -141,11 +142,18 @@ void mod_run_cmd(BotInfo *bi, User *u, Command *c, const Anope::string &command,
return;
}
- CommandReturn ret = c->Execute(u, params);
+ CommandSource source;
+ source.u = u;
+ source.ci = ci;
+ source.owner = bi;
+ source.service = fantasy && ci ? ci->bi : c->service;
+ source.fantasy = fantasy;
+
+ CommandReturn ret = c->Execute(source, params);
if (ret == MOD_CONT)
{
- FOREACH_MOD(I_OnPostCommand, OnPostCommand(u, c->service, c->name, params));
+ FOREACH_MOD(I_OnPostCommand, OnPostCommand(source, c, params));
}
}