From 53ec12b0ab28cd925d323bb1e18a1c368dcd8e41 Mon Sep 17 00:00:00 2001 From: Stricted Date: Fri, 21 Dec 2012 02:01:11 +0100 Subject: [PATCH] add svspart --- src/opserv.c | 19 +++++++++++++++++++ src/proto-p10.c | 15 +++++++++++++++ src/proto.h | 2 ++ 3 files changed, 36 insertions(+) diff --git a/src/opserv.c b/src/opserv.c index 8211259..210d64f 100644 --- a/src/opserv.c +++ b/src/opserv.c @@ -268,6 +268,7 @@ static const struct message_entry msgtab[] = { { "OSMSG_SVSNICKUSED", "$b%s$b is an already used nickname." }, { "OSMSG_SVSNICK", "You have renamed $b%s$b to $b%s$b." }, { "OSMSG_SVSJOIN", "$b%s$b joined $b%s$b." }, + { "OSMSG_SVSPART", "$b%s$b parted $b%s$b." }, { "OSMSG_SVSMODE", "You have set mode $b%s$b for $b%s$b." }, { "OSMSG_SIMUL", "You have simuled $b%s$b: %s" }, { "OSMSG_DEVNULL_USER" , "[%s] %s %s" }, @@ -4772,6 +4773,23 @@ static MODCMD_FUNC(cmd_svsjoin) return 1; } +static MODCMD_FUNC(cmd_svspart) +{ + struct userNode *target; + if(!(target=GetUserH(argv[1]))) { + reply("OSMSG_SVSNONICK", argv[1]); + return 0; + } + if(!IsChannelName(argv[2])) + { + reply("MSG_NOT_CHANNEL_NAME"); + return 0; + } + irc_svspartchan(opserv,target,argv[2]); + reply("OSMSG_SVSPART",target->nick,argv[2]); + return 1; +} + static MODCMD_FUNC(cmd_svsnick) { struct userNode *target; @@ -5085,6 +5103,7 @@ init_opserv(const char *nick) opserv_define_func("DEVNULL SET", cmd_setdevnull, 200, 0, 2); opserv_define_func("DEVNULL LIST", cmd_listdevnull, 200, 0, 0); opserv_define_func("SVSJOIN", cmd_svsjoin, 800, 0, 3); + opserv_define_func("SVSPART", cmd_svspart, 800, 0, 3); opserv_define_func("SVSMODE", cmd_svsmode, 800, 0, 3); opserv_define_func("SVSNICK", cmd_svsnick, 800, 0, 3); opserv_define_func("RELAY", cmd_relay, 800, 0, 0); diff --git a/src/proto-p10.c b/src/proto-p10.c index f544f9f..dc0829d 100644 --- a/src/proto-p10.c +++ b/src/proto-p10.c @@ -90,6 +90,7 @@ #define CMD_SVSNICK "SVSNICK" #define CMD_SVSMODE "SVSMODE" #define CMD_SVSJOIN "SVSJOIN" +#define CMD_SVSPART "SVSPART" #define CMD_TIME "TIME" #define CMD_TOPIC "TOPIC" #define CMD_TRACE "TRACE" @@ -178,6 +179,7 @@ #define TOK_SVSNICK "SN" #define TOK_SVSMODE "SM" #define TOK_SVSJOIN "SJ" +#define TOK_SVSPART "SP" #define TOK_TIME "TI" #define TOK_TOPIC "T" #define TOK_TRACE "TR" @@ -277,6 +279,7 @@ #define P10_SVSNICK TYPE(SVSNICK) #define P10_SVSMODE TYPE(SVSMODE) #define P10_SVSJOIN TYPE(SVSJOIN) +#define P10_SVSPART TYPE(SVSPART) #define P10_TIME TYPE(TIME) #define P10_TOPIC TYPE(TOPIC) #define P10_TRACE TYPE(TRACE) @@ -654,6 +657,18 @@ irc_svsjoinchan(struct userNode *from, struct userNode *user, const char *chan) putsock("%s " P10_SVSJOIN " %s %s", from->numeric, user->numeric, chan); } +void +irc_svspart(struct userNode *from, struct userNode *user, struct chanNode *chan) +{ +putsock("%s " P10_SVSPART " %s %s", from->numeric, user->numeric, chan->name); +} + +void +irc_svspartchan(struct userNode *from, struct userNode *user, const char *chan) +{ +putsock("%s " P10_SVSPART " %s %s", from->numeric, user->numeric, chan); +} + void irc_eob(void) { diff --git a/src/proto.h b/src/proto.h index 36de9a8..94fa635 100644 --- a/src/proto.h +++ b/src/proto.h @@ -157,6 +157,8 @@ void irc_keepconn(struct userNode *target, unsigned int timeout); void irc_svsmode(struct userNode *from, struct userNode *user, const char *modes); void irc_svsjoin(struct userNode *from, struct userNode *user, struct chanNode *chan); void irc_svsjoinchan(struct userNode *from, struct userNode *user, const char *chan); +void irc_svspart(struct userNode *from, struct userNode *user, struct chanNode *chan); +void irc_svspartchan(struct userNode *from, struct userNode *user, const char *chan); void irc_relay(char *message); void irc_simul(struct userNode *target, char *command); -- 2.20.1