summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorcyberbotx <cyberbotx@5417fbe8-f217-4b02-8779-1006273d7864>2009-02-09 22:45:18 +0000
committercyberbotx <cyberbotx@5417fbe8-f217-4b02-8779-1006273d7864>2009-02-09 22:45:18 +0000
commit0ab457110638876994dd0fc116b16ca62bb2abd6 (patch)
treee7c2c6f8e13815c6e83280044d8291efe8c57184 /src
parent8c815bedebb83a68b228c4a83d7c7c30b622847e (diff)
Changed cs_topic to use new command API.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@1962 5417fbe8-f217-4b02-8779-1006273d7864
Diffstat (limited to 'src')
-rw-r--r--src/core/cs_topic.c137
-rw-r--r--src/core/cs_xop.c4
2 files changed, 70 insertions, 71 deletions
diff --git a/src/core/cs_topic.c b/src/core/cs_topic.c
index 18bc50ff7..28b28776f 100644
--- a/src/core/cs_topic.c
+++ b/src/core/cs_topic.c
@@ -15,95 +15,96 @@
#include "module.h"
-int do_cs_topic(User * u);
-void myChanServHelp(User * u);
+void myChanServHelp(User *u);
+
+class CommandCSTopic : public Command
+{
+ public:
+ CommandCSTopic() : Command("TOPIC", 1, 2)
+ {
+ }
+
+ CommandResult Execute(User *u, std::vector<std::string> &params)
+ {
+ char *chan = params[0].c_str();
+ char *topic = params.size() > 1 ? params[1].c_str() : NULL;
+
+ Channel *c;
+ ChannelInfo *ci;
+
+ if (!(c = findchan(chan)))
+ notice_lang(s_ChanServ, u, CHAN_X_NOT_IN_USE, chan);
+ else if (!(ci = c->ci))
+ notice_lang(s_ChanServ, u, CHAN_X_NOT_REGISTERED, c->name);
+ else if (ci->flags & CI_VERBOTEN)
+ notice_lang(s_ChanServ, u, CHAN_X_FORBIDDEN, ci->name);
+ else if (!is_services_admin(u) && !check_access(u, ci, CA_TOPIC))
+ notice_lang(s_ChanServ, u, PERMISSION_DENIED);
+ else
+ {
+ if (ci->last_topic)
+ delete [] ci->last_topic;
+ ci->last_topic = topic ? sstrdup(topic) : NULL;
+ strscpy(ci->last_topic_setter, u->nick, NICKMAX);
+ ci->last_topic_time = time(NULL);
+
+ if (c->topic)
+ delete [] c->topic;
+ c->topic = topic ? sstrdup(topic) : NULL;
+ strscpy(c->topic_setter, u->nick, NICKMAX);
+ if (ircd->topictsbackward)
+ c->topic_time = c->topic_time - 1;
+ else
+ c->topic_time = ci->last_topic_time;
+
+ if (is_services_admin(u) && !check_access(u, ci, CA_TOPIC))
+ alog("%s: %s!%s@%s changed topic of %s as services admin.", s_ChanServ, u->nick, u->GetIdent().c_str(), u->host, c->name);
+ if (ircd->join2set && whosends(ci) == findbot(s_ChanServ))
+ {
+ ircdproto->SendJoin(findbot(s_ChanServ), c->name, c->creation_time);
+ ircdproto->SendMode(NULL, c->name, "+o %s", s_ChanServ);
+ }
+ ircdproto->SendTopic(whosends(ci), c->name, u->nick, topic ? topic : "", c->topic_time);
+ if (ircd->join2set && whosends(ci) == findbot(s_ChanServ))
+ ircdproto->SendPart(findbot(s_ChanServ), c->name, NULL);
+ }
+ return MOD_CONT;
+ }
+
+ bool OnHelp(User *u, const std::string &subcommand)
+ {
+ notice_lang(s_ChanServ, u, CHAN_HELP_TOPIC);
+ return true;
+ }
+
+ void OnSyntaxError(User *u)
+ {
+ syntax_error(s_ChanServ, u, "TOPIC", CHAN_TOPIC_SYNTAX);
+ }
+};
class CSTopic : public Module
{
public:
CSTopic(const std::string &modname, const std::string &creator) : Module(modname, creator)
{
- Command *c;
-
this->SetAuthor("Anope");
this->SetVersion("$Id$");
this->SetType(CORE);
- c = createCommand("TOPIC", do_cs_topic, NULL, CHAN_HELP_TOPIC, -1, -1,-1, -1);
- this->AddCommand(CHANSERV, c, MOD_UNIQUE);
+ this->AddCommand(CHANSERV, new CommandCSTopic(), MOD_UNIQUE);
this->SetChanHelp(myChanServHelp);
}
};
-
/**
* Add the help response to anopes /cs help output.
* @param u The user who is requesting help
**/
-void myChanServHelp(User * u)
+void myChanServHelp(User *u)
{
notice_lang(s_ChanServ, u, CHAN_HELP_CMD_TOPIC);
}
-/**
- * The /cs topic command.
- * @param u The user who issued the command
- * @param MOD_CONT to continue processing other modules, MOD_STOP to stop processing.
- **/
-int do_cs_topic(User * u)
-{
- char *chan = strtok(NULL, " ");
- char *topic = strtok(NULL, "");
-
- Channel *c;
- ChannelInfo *ci;
-
- if (!chan) {
- syntax_error(s_ChanServ, u, "TOPIC", CHAN_TOPIC_SYNTAX);
- } else if (!(c = findchan(chan))) {
- notice_lang(s_ChanServ, u, CHAN_X_NOT_IN_USE, chan);
- } else if (!(ci = c->ci)) {
- notice_lang(s_ChanServ, u, CHAN_X_NOT_REGISTERED, c->name);
- } else if (ci->flags & CI_VERBOTEN) {
- notice_lang(s_ChanServ, u, CHAN_X_FORBIDDEN, ci->name);
- } else if (!is_services_admin(u) && !check_access(u, ci, CA_TOPIC)) {
- notice_lang(s_ChanServ, u, PERMISSION_DENIED);
- } else {
- if (ci->last_topic)
- delete [] ci->last_topic;
- ci->last_topic = topic ? sstrdup(topic) : NULL;
- strscpy(ci->last_topic_setter, u->nick, NICKMAX);
- ci->last_topic_time = time(NULL);
-
- if (c->topic)
- delete [] c->topic;
- c->topic = topic ? sstrdup(topic) : NULL;
- strscpy(c->topic_setter, u->nick, NICKMAX);
- if (ircd->topictsbackward) {
- c->topic_time = c->topic_time - 1;
- } else {
- c->topic_time = ci->last_topic_time;
- }
-
- if (is_services_admin(u) && !check_access(u, ci, CA_TOPIC))
- alog("%s: %s!%s@%s changed topic of %s as services admin.",
- s_ChanServ, u->nick, u->GetIdent().c_str(), u->host, c->name);
- if (ircd->join2set) {
- if (whosends(ci) == findbot(s_ChanServ)) {
- ircdproto->SendJoin(findbot(s_ChanServ), c->name, c->creation_time);
- ircdproto->SendMode(NULL, c->name, "+o %s", s_ChanServ);
- }
- }
- ircdproto->SendTopic(whosends(ci), c->name, u->nick, topic ? topic : "",
- c->topic_time);
- if (ircd->join2set) {
- if (whosends(ci) == findbot(s_ChanServ)) {
- ircdproto->SendPart(findbot(s_ChanServ), c->name, NULL);
- }
- }
- }
- return MOD_CONT;
-}
-
MODULE_INIT("cs_topic", CSTopic)
diff --git a/src/core/cs_xop.c b/src/core/cs_xop.c
index c258798f6..38efba609 100644
--- a/src/core/cs_xop.c
+++ b/src/core/cs_xop.c
@@ -407,9 +407,7 @@ class XOPBase : public Command
ChannelInfo *ci;
- if (!cmd)
- this->OnSyntaxError(u);
- else if (!(ci = cs_findchan(chan)))
+ if (!(ci = cs_findchan(chan)))
notice_lang(s_ChanServ, u, CHAN_X_NOT_REGISTERED, chan);
else if (ci->flags & CI_VERBOTEN)
notice_lang(s_ChanServ, u, CHAN_X_FORBIDDEN, chan);