Пример #1
0
int
anope_event_mode (char *source, int ac, char **av)
{
  if (ac < 2)
    return MOD_CONT;

  if (*av[0] == '#' || *av[0] == '&')
    {
      do_cmode (source, ac, av);
    }
  else
    {
      Server *s;
      s = findserver (servlist, source);

      if (s && *av[0])
	{
	  do_umode (av[0], ac, av);
	}
      else
	{
	  do_umode (source, ac, av);
	}
    }
  return MOD_CONT;
}
Пример #2
0
int denora_event_mode(char *source, int ac, char **av)
{
	if (denora->protocoldebug)
	{
		protocol_debug(source, ac, av);
	}
	if (ac < 2)
		return MOD_CONT;

	if (*av[0] == '#' || *av[0] == '&')
	{
		do_cmode(source, ac, av);
	}
	else
	{
		Server *s;
		s = server_find(source);

		if (s && *av[0])
		{
			do_umode(av[0], ac, av);
		}
		else
		{
			do_umode(source, ac, av);
		}
	}
	return MOD_CONT;
}
Пример #3
0
/* ABAAA M #ircops +v ABAAB */
int denora_event_mode(char *source, int ac, char **av)
{
    User *u;
    Server *s;
    char *sender;

    if (denora->protocoldebug)
        protocol_debug(source, ac, av);

    if (ac < 2)
        return MOD_CONT;

    u = find_byuid(source);

    if (!u) {
        sender = source;
    } else {
        sender = u->nick;
    }

    if (*av[0] == '#' || *av[0] == '&') {
        do_cmode(source, ac, av);
    } else {
        s = server_find(source);
        if (s)
            sender = av[0];
        do_umode(sender, ac, av);
    }
    return MOD_CONT;
}
Пример #4
0
	bool OnMode(const Anope::string &source, const std::vector<Anope::string> &params)
	{
		if (params.size() > 2 && (params[0][0] == '#' || params[0][0] == '&'))
			do_cmode(source, params[0], params[2], params[1]);
		else if (params.size() > 1)
			do_umode(params[0], params[1]);

		return true;
	}
Пример #5
0
int xanadu_event_mode(char *source, int ac, char **av)
{
    if (ac < 2)
        return MOD_CONT;

    if (*av[0] == '#' || *av[0] == '&') {
        do_cmode(source, ac, av);
    } else {
        do_umode(source, ac, av);
    }
    return MOD_CONT;
}
Пример #6
0
/*
  :%s MODE %s :%s
	parv[0] = sender
	parv[1] = target nick (==sender)
	parv[2] = mode change string
*/
int denora_event_mode(char *source, int ac, char **av)
{
    if (denora->protocoldebug) {
        protocol_debug(source, ac, av);
    }
    if (*av[0] == '#' || *av[0] == '&') {
        do_cmode(source, ac, av);
    } else {
        do_umode(source, ac, av);
    }
    return MOD_CONT;
}
Пример #7
0
/*
 * :irc.mynet.org FMODE #opers 115432135 +bb *[email protected] *[email protected]
 * :<source server or nickname> FMODE <target> <timestamp> <modes and parameters>
 */
int denora_event_fmode(char *source, int ac, char **av)
{
    char *newav[127];
    int i = 0;
    Channel *c;

    if (denora->protocoldebug) {
        protocol_debug(source, ac, av);
    }

    if (ac < 3)
        return MOD_CONT;

    /* Checking the TS for validity to avoid desyncs */
    c = findchan(av[0]);
    if (c) {
        if (c->creation_time > strtol(av[1], NULL, 10)) {
            alog(LOG_DEBUG,
                 "DEBUG: av[1] %d < c->creation_time %d, c->creation_time lowered to %d",
                 av[1], c->creation_time, av[1]);
            c->creation_time = strtol(av[1], NULL, 10);
        } else if (c->creation_time < strtol(av[1], NULL, 10)) {
            alog(LOG_DEBUG,
                 "DEBUG: av[1] %d > c->creation_time %d, FMODE ignored.",
                 av[1], c->creation_time);
            return MOD_CONT;
        }
    } else {
        alog(LOG_DEBUG, "DEBUG: got FMODE for non-existing channel %s",
             av[0]);
        return MOD_CONT;
    }

    /* We need to remove the timestamp, which is av[1] */
    newav[0] = av[0];
    newav[1] = av[2];
    for (i = 2; i < (ac - 1); i++) {
        newav[i] = av[i + 1];
    }

    if (*newav[0] == '#' || *newav[0] == '&') {
        do_cmode(source, (ac - 1), newav);
    } else {
        do_umode(source, (ac - 1), newav);
    }

    return MOD_CONT;
}
Пример #8
0
int denora_event_fakehost(char *source, int ac, char **av)
{
    User *ud;
    char *parv[2];

    ud = user_find(av[0]);

    if (ud) {
        parv[0] = (char *) ud->nick;
        parv[1] = (char *) "+f";
        do_umode(ud->nick, 2, parv);
    }

    change_user_host(ud->nick, av[1]);
    return MOD_CONT;
}
Пример #9
0
/* ABAAA M #ircops +v ABAAB */
int denora_event_mode(char *source, int ac, char **av)
{
    User *u;
    User *v;
    Server *s;
    char *sender;
    char hhostbuf[255];

    if (denora->protocoldebug)
        protocol_debug(source, ac, av);

    if (ac < 2)
        return MOD_CONT;

    u = find_byuid(source);

    if (!u) {
        sender = source;
    } else {
        sender = u->nick;
    }

    if (*av[0] == '#' || *av[0] == '&') {
        do_cmode(source, ac, av);
    } else {
        s = server_find(source);
        if (s)
            sender = av[0];
        do_umode(sender, ac, av);
        if (strcmp(av[1], "x") != -1) {
            v = user_find(av[0]);
            if (v->account) {
                ircsnprintf(hhostbuf,
                            sizeof(v->account) + sizeof(hhostbuf) + 2,
                            "%s%s%s", HiddenPrefix, v->account,
                            HiddenSuffix);
                change_user_host(v->nick, hhostbuf);
            }
        }
    }
    return MOD_CONT;
}