}
static void
-chanserv_ctcp_check(struct userNode *user, struct chanNode *channel, const char *text, UNUSED_ARG(struct userNode *bot), UNUSED_ARG(unsigned int is_notice))
+chanserv_ctcp_check(struct userNode *user, struct chanNode *channel, const char *text, UNUSED_ARG(struct userNode *bot), UNUSED_ARG(unsigned int is_notice), UNUSED_ARG(void *extra))
{
unsigned int eflags, argc;
char *argv[4];
REQUIRE_PARAMS(2);
if(!(hi = modcmd_get_handle_info(user, argv[1]))) return 0;
+ actor = GetChannelUser(channel->channel_info, user->handle_info);
real_actor = GetChannelAccess(channel->channel_info, user->handle_info);
if(!(target = GetTrueChannelAccess(channel->channel_info, hi)))
{
}
/* random time gline */
else if (!strcasecmp(wheel, "gline")) {
- char target[IRC_NTOP_MAX_SIZE + 3];
+ char target[HOSTLEN + 3];
int wtime = 120 + rand() % 600;
strcpy(target, "*@");
}
/* random shun */
else if (!strcasecmp(wheel, "shun")) {
- char target[IRC_NTOP_MAX_SIZE + 3];
+ char target[HOSTLEN + 3];
int wtime = 120 + rand() % 600;
strcpy(target, "*@");
/* service ignore */
else if (!strcasecmp(wheel, "svsignore")) {
int gagged, ignoretime = 0;
- char target[IRC_NTOP_MAX_SIZE + 13];
+ char target[HOSTLEN + 13];
if(IsOper(user)) {
/* we cant gag opers, so just verbally abuse them */
else if (!strcasecmp(wheel, "kickbanall")) {
unsigned int count, n;
struct modeNode *mn;
- //char ban[IRC_NTOP_MAX_SIZE + 1];
+ //char ban[HOSTLEN + 1];
send_target_message(1, channel->name, chanserv, "CSMSG_SPIN_KICKBANALL");
}
static void
-handle_new_channel(struct chanNode *channel)
+handle_new_channel(struct chanNode *channel, UNUSED_ARG(void *extra))
{
struct chanData *cData;
/* Welcome to my worst nightmare. Warning: Read (or modify)
the code below at your own risk. */
static int
-handle_join(struct modeNode *mNode)
+handle_join(struct modeNode *mNode, UNUSED_ARG(void *extra))
{
struct mod_chanmode change;
struct userNode *user = mNode->user;
}
static void
-handle_part(struct modeNode *mn, UNUSED_ARG(const char *reason))
+handle_part(struct modeNode *mn, UNUSED_ARG(const char *reason), UNUSED_ARG(void *extra))
{
struct chanData *cData;
struct userData *uData;
if(IsHelping(mn->user) && IsSupportHelper(mn->user))
{
unsigned int ii;
- for(ii = 0; ii < chanserv_conf.support_channels.used; ++ii)
- if(find_handle_in_channel(chanserv_conf.support_channels.list[ii], mn->user->handle_info, mn->user))
+ for(ii = 0; ii < chanserv_conf.support_channels.used; ++ii) {
+ struct chanNode *channel;
+ struct userNode *exclude;
+ /* When looking at the channel that is being /part'ed, we
+ * have to skip over the client that is leaving. For
+ * other channels, we must not do that.
+ */
+ channel = chanserv_conf.support_channels.list[ii];
+ exclude = (channel == mn->channel) ? mn->user : NULL;
+ if(find_handle_in_channel(channel, mn->user->handle_info, exclude))
break;
- if(ii == chanserv_conf.support_channels.used)
+ }
+ if(ii == chanserv_conf.support_channels.used)
HANDLE_CLEAR_FLAG(mn->user->handle_info, HELPING);
}
}
}
static int
-handle_topic(struct userNode *user, struct chanNode *channel, const char *old_topic)
+handle_topic(struct userNode *user, struct chanNode *channel, const char *old_topic, UNUSED_ARG(void *extra))
{
struct chanData *cData;
}
static void
-handle_nick_change(struct userNode *user, UNUSED_ARG(const char *old_nick))
+handle_nick_change(struct userNode *user, UNUSED_ARG(const char *old_nick), UNUSED_ARG(void *extra))
{
struct chanNode *channel;
struct banData *bData;
}
}
-static void handle_rename(struct handle_info *handle, const char *old_handle)
+static void handle_rename(struct handle_info *handle, const char *old_handle, UNUSED_ARG(void *extra))
{
struct do_not_register *dnr = dict_find(handle_dnrs, old_handle, NULL);
}
static int
-handle_server_link(UNUSED_ARG(struct server *server))
+handle_server_link(UNUSED_ARG(struct server *server), UNUSED_ARG(void *extra))
{
struct chanData *cData;
static void
chanserv_db_cleanup(void) {
unsigned int ii;
- unreg_part_func(handle_part);
+ unreg_part_func(handle_part, NULL);
while(channelList)
unregister_channel(channelList, "terminating.");
for(ii = 0; ii < chanserv_conf.support_channels.used; ++ii)
conf_register_reload(chanserv_conf_read);
if (nick) {
- reg_server_link_func(handle_server_link);
- reg_new_channel_func(handle_new_channel);
- reg_join_func(handle_join);
- reg_part_func(handle_part);
+ reg_server_link_func(handle_server_link, NULL);
+ reg_new_channel_func(handle_new_channel, NULL);
+ reg_join_func(handle_join, NULL);
+ reg_part_func(handle_part, NULL);
reg_kick_func(handle_kick);
- reg_topic_func(handle_topic);
+ reg_topic_func(handle_topic, NULL);
reg_mode_change_func(handle_mode);
- reg_nick_change_func(handle_nick_change);
+ reg_nick_change_func(handle_nick_change, NULL);
reg_auth_func(handle_auth);
}
- reg_handle_rename_func(handle_rename);
+ reg_handle_rename_func(handle_rename, NULL);
reg_unreg_func(handle_unreg);
handle_dnrs = dict_new();
const char *modes = conf_get_data("services/chanserv/modes", RECDB_QSTRING);
chanserv = AddLocalUser(nick, nick, NULL, "Channel Services", modes);
service_register(chanserv)->trigger = '!';
- reg_chanmsg_func('\001', chanserv, chanserv_ctcp_check);
+ reg_chanmsg_func('\001', chanserv, chanserv_ctcp_check, NULL);
}
saxdb_register("ChanServ", chanserv_saxdb_read, chanserv_saxdb_write);