// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
+// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+// 02110-1301, USA.
#include "Macros.H"
#include "Message.H"
#include "Commands.H"
#include "Utils.H"
+#include "StringTokenizer.H"
-#define Ok (Message(0, ""))
-#define NotOnChannel(c) (Message(-1, String("I am not on channel ") + (c)))
-#define NotChannelOp(c) (Message(-2, String("I am not channel op on ") + (c)))
-#define UserNotFound(w, c) (Message(-3, (w) + " is not on channel " + (c)))
-#define UserNotOp(w, c) (Message(-4, (w) + " is not channel op on " + (c)))
-#define UserProtected(w, c) (Message(-5, (w) + " is protected on " + (c)))
-#define InvalidNick(n) (Message(-6, (n) + " is not a valid nickname"))
-#define InvalidChannel(c) (Message(-7, (c) + " is not a valid channel name"))
-#define MassOpNotAllowed (Message(-8, "Mass op is not allowed."))
-#define UserOnShitList(w) (Message(-9, String("User ") + w + " is on my shitlist"))
-#define CanNotChangeTopic(c) (Message(-10, String("I can not change topic on ") + (c)))
-#define TopicLocked(c) (Message(-11, String("Topic is locked on ") + (c)))
-#define InvalidPort(p) (Message(-12, String((long)(p)) + " is an invalid port number"))
-#define InvalidTime(t) (Message(-13, String((long)(t)) + " is an invalid time"))
-#define CanNotChangeServer (Message(-14, "I cannot change server without loosing op on one of my channels"))
-#define EmptyServerList (Message(-15, "Server list is empty"))
-#define InvalidServerNumber(n) (Message(-16, String((long)(n)) + " is an invalid server number"))
-#define InvalidParameters (Message(-17, "Invalid parameters"))
-#define NotFound(w) (Message(-18, String("I can not find ") + (w)));
-#define NotInUserlist(w) (Message(-19, (w) + " is not in my userlist"))
-#define NotInShitlist(w) (Message(-20, (w) + " is not in my shitlist"))
-#define AlreadyInUserlist(m, mc) (Message(-21, (m) + " is already in userlist on channel(s) " + (mc)))
-#define AlreadyInShitlist(m, mc) (Message(-22, (m) + " is already in shitlist on channel(s) " + (mc)))
-#define EmptyMessage (Message(-23, "Can not send an empty message"))
-#define EmptyAddressee (Message(-24, "Can not send to nobody"))
-#define NotToChannel (Message(-25, "Can not send to a channel. Use \"say\" instead."))
-#define NotConnected (Message(-26, "Not connected."))
#define CHECK_CONNECTION if (!bot->serverConnection) return NotConnected
if (message.length() == 0)
return InvalidParameters;
- QUEUE->sendCTCP (channel, "ACTION", message);
+ Commands::CTCP (bot, channel, "ACTION", message);
return Ok;
}
if (!Utils::wildcard_p(who))
{
- mask = bot->getUserhost("", who);
- if (mask.length() == 0)
- return NotFound(who);
- }
+ mask = bot->getUserhost("", who);
+ if (mask.length() == 0)
+ {
+ return NotFound(who);
+ }
+ }
// Aha! This was before the brace...segfault gone
mask = Utils::make_wildcard(mask);
if (bot->userList->isInUserList(mask, maskChannel))
- return AlreadyInUserlist(mask, maskChannel);
+ {
+ return AlreadyInUserlist(mask, maskChannel);
+ }
bot->userList->addUser(mask, maskChannel, level, prot, aop,
expire, password);
return Ok;
}
+Message
+Commands::CTCP (Bot *bot, std::string target, std::string command,
+ std::string message)
+{
+ CHECK_CONNECTION;
+
+ if (target == "")
+ {
+ return EmptyAddressee;
+ }
+
+ if (command == "")
+ {
+ return InvalidParameters;
+ }
+
+ if (message == "")
+ {
+ return EmptyMessage;
+ }
+
+ if (Utils::channel_p (target) && !CHANNEL (target))
+ {
+ return NotOnChannel (target);
+ }
+
+
+ // Send multi-line messages as seperate privmsgs
+ StringTokenizer st_message (message);
+
+ while (st_message.more_tokens_p ('\n'))
+ {
+ QUEUE->sendCTCP (target, command, st_message.next_token ('\n'));
+ }
+
+ return Ok;
+}
+
+Message
+Commands::CTCPReply (Bot *bot, std::string target, std::string command,
+ std::string message)
+{
+ CHECK_CONNECTION;
+
+ if (target == "")
+ {
+ return EmptyAddressee;
+ }
+
+ if (command == "")
+ {
+ return InvalidParameters;
+ }
+
+ if (message == "")
+ {
+ return EmptyMessage;
+ }
+
+ // CTCP-REPLY cannot go to a channel
+ if (Utils::channel_p (target))
+ {
+ return NotToChannel;
+ }
+
+
+ // Send multi-line messages as seperate privmsgs
+ StringTokenizer st_message (message);
+
+ while (st_message.more_tokens_p ('\n'))
+ {
+ QUEUE->sendCTCPReply (target, command, st_message.next_token ('\n'));
+ }
+
+ return Ok;
+}
+
+
Message
Commands::Cycle(Bot *bot, String channel)
{
CHECK_CONNECTION;
if (who == "")
- return EmptyAddressee;
+ {
+ return EmptyAddressee;
+ }
if (Utils::channel_p(who))
- return NotToChannel;
+ {
+ if (!CHANNEL(who))
+ {
+ return NotOnChannel (who);
+ }
+ }
if (message == "")
- return EmptyMessage;
+ {
+ return EmptyMessage;
+ }
- QUEUE->sendPrivmsg(who, message);
+ // Send multi-line messages as seperate privmsgs
+ StringTokenizer st_message (message);
+
+ while (st_message.more_tokens_p ('\n'))
+ {
+ QUEUE->sendPrivmsg(who, st_message.next_token ('\n'));
+ }
return Ok;
}
if (!bot->canChangeServer())
return CanNotChangeServer;
+
+#ifdef USESCRIPTS
+ // Run hooks/disconnect
+ bot->botInterp->RunHooks
+ (Hook::DISCONNECT,
+ bot->serverConnection->server->getHostName (),
+ scm_list_n
+ (Utils::str2scm (bot->serverConnection->server->getHostName ()),
+ SCM_BOOL_T));
+#endif
QUEUE->sendQuit("Changing server");
bot->nextServer();
{
CHECK_CONNECTION;
- if (nick == "" || !Utils::valid_nickname_p(nick))
+ if (nick == "" || !Utils::valid_nickname_p(bot, nick))
return InvalidNick(nick);
bot->wantedNickName = nick;
if (who == "")
return EmptyAddressee;
- if (Utils::channel_p(who))
- return NotToChannel;
+ // if (Utils::channel_p(who))
+ // return NotToChannel;
if (message == "")
return EmptyMessage;
- QUEUE->sendNotice(who, message);
+ // Send multiple lines as multiple notices
+ StringTokenizer st_message (message);
+
+ while (st_message.more_tokens_p ('\n'))
+ {
+ QUEUE->sendNotice(who, st_message.next_token ('\n'));
+ }
return Ok;
}
Message
Commands::Say(Bot *bot, String channel, String message)
{
- CHECK_CONNECTION;
-
-// if (!CHANNEL(channel))
-// return NotOnChannel(channel);
-
- QUEUE->sendPrivmsg(channel, message);
-
- return Ok;
+ return Commands::Msg (bot, channel, message);
}
return Ok;
}
+
+Message
+Commands::Who (Bot *bot, String target)
+{
+ CHECK_CONNECTION;
+
+ QUEUE->sendWho (target);
+
+ return Ok;
+}
+
+Message
+Commands::Whois (Bot *bot, String nick)
+{
+ CHECK_CONNECTION;
+
+ if (!Utils::valid_nickname_p (bot, nick))
+ {
+ return InvalidNick (nick);
+ }
+ else
+ {
+ QUEUE->sendWhois (nick);
+ return Ok;
+ }
+}
+
+