// TODO : Rewrite this f***g ugly function unsigned int setlevel(USERS *user_actif, USERS *user_passif, CHANNEL *chan, unsigned int lvl, acetables *g_ape) { RAW *newraw; userslist *user_passif_chan, *user_actif_chan; json_item *jlist; user_passif_chan = getuchan(user_passif, chan); if (user_actif != NULL) { user_actif_chan = getuchan(user_actif, chan); if (user_passif_chan == NULL || user_actif_chan == NULL || ((user_actif_chan->level < lvl || user_actif_chan->level < user_passif_chan->level) && !(user_actif->flags & FLG_AUTOOP)) || lvl < 1 || lvl > 32) { send_error(user_actif, "SETLEVEL_ERROR", "110", g_ape); return 0; } user_passif_chan->level = lvl; if (chan->interactive) { jlist = json_new_object(); json_set_property_objN(jlist, "ope", 3, get_json_object_user(user_passif)); json_set_property_objN(jlist, "oper", 4, get_json_object_user(user_actif)); json_set_property_objN(jlist, "pipe", 4, get_json_object_channel(chan)); json_set_property_intN(jlist, "level", 5, lvl); newraw = forge_raw(RAW_SETLEVEL, jlist); post_raw_channel(newraw, chan, g_ape); } return 1; } else if (user_passif_chan != NULL && lvl > 0 && lvl < 32) { user_passif_chan->level = lvl; if (chan->interactive) { jlist = json_new_object(); json_set_property_objN(jlist, "ope", 3, get_json_object_user(user_passif)); json_set_property_objN(jlist, "oper", 4, get_json_object_user(NULL)); json_set_property_objN(jlist, "pipe", 4, get_json_object_channel(chan)); json_set_property_intN(jlist, "level", 5, lvl); newraw = forge_raw(RAW_SETLEVEL, jlist); post_raw_channel(newraw, chan, g_ape); } return 1; } return 0; }
unsigned int settopic(USERS *user, CHANNEL *chan, const char *topic, acetables *g_ape) { RAW *newraw; userslist *list; json *jlist; list = getuchan(user, chan); if (list == NULL || list->level < 3 || strlen(topic)+1 > MAX_TOPIC_LEN) { send_error(user, "SETTOPIC_ERROR", "111", g_ape); } else { memcpy(chan->topic, topic, strlen(topic)+1); jlist = NULL; set_json("user", NULL, &jlist); json_attach(jlist, get_json_object_user(user), JSON_OBJECT); set_json("pipe", NULL, &jlist); json_attach(jlist, get_json_object_channel(chan), JSON_OBJECT); newraw = forge_raw(RAW_SETTOPIC, jlist); post_raw_channel(newraw, chan, g_ape); return 1; } return 0; }
unsigned int cmd_ban(callbackp *callbacki) { CHANNEL *chan; RAW *newraw; json *jlist; USERS *victim; if ((chan = getchan(callbacki->param[2], callbacki->g_ape)) == NULL) { send_error(callbacki->call_user, "UNKNOWN_CHANNEL", "103", callbacki->g_ape); } else if (!isonchannel(callbacki->call_user, chan)) { send_error(callbacki->call_user, "NOT_IN_CHANNEL", "104", callbacki->g_ape); } else if (getuchan(callbacki->call_user, chan)->level < 3) { send_error(callbacki->call_user, "CANT_BAN", "107", callbacki->g_ape); } else { victim = seek_user(callbacki->param[3], chan->name, callbacki->g_ape); if (victim == NULL) { send_error(callbacki->call_user, "UNKNOWN_USER", "102", callbacki->g_ape); } else if (victim->flags & FLG_NOKICK) { send_error(callbacki->call_user, "USER_PROTECTED", "106", callbacki->g_ape); // Bad boy :-) jlist = NULL; set_json("banner", NULL, &jlist); json_attach(jlist, get_json_object_user(callbacki->call_user), JSON_OBJECT); set_json("channel", NULL, &jlist); json_attach(jlist, get_json_object_channel(chan), JSON_OBJECT); newraw = forge_raw("TRY_BAN", jlist); post_raw(newraw, victim, callbacki->g_ape); } else if (strlen(callbacki->param[4]) > 255 || atoi(callbacki->param[5]) > 44640) { // 31 days max send_error(callbacki->call_user, "REASON_OR_TIME_TOO_LONG", "107", callbacki->g_ape); } else { ban(chan, callbacki->call_user, victim->ip, callbacki->param[4], atoi(callbacki->param[5]), callbacki->g_ape); } } return (FOR_NOTHING); }
unsigned int cmd_kick(callbackp *callbacki) { CHANNEL *chan; RAW *newraw; json *jlist; USERS *victim; if ((chan = getchan(callbacki->param[2], callbacki->g_ape)) == NULL) { send_error(callbacki->call_user, "UNKNOWN_CHANNEL", "103", callbacki->g_ape); } else if (!isonchannel(callbacki->call_user, chan)) { send_error(callbacki->call_user, "NOT_IN_CHANNEL", "104", callbacki->g_ape); } else if (getuchan(callbacki->call_user, chan)->level < 3) { send_error(callbacki->call_user, "CANT_KICK", "105", callbacki->g_ape); } else { victim = seek_user(callbacki->param[3], chan->name, callbacki->g_ape); if (victim == NULL) { send_error(callbacki->call_user, "UNKNOWN_USER", "102", callbacki->g_ape); } else if (victim->flags & FLG_NOKICK) { send_error(callbacki->call_user, "USER_PROTECTED", "106", callbacki->g_ape); // haha ;-) jlist = NULL; set_json("kicker", NULL, &jlist); json_attach(jlist, get_json_object_user(callbacki->call_user), JSON_OBJECT); set_json("channel", NULL, &jlist); json_attach(jlist, get_json_object_channel(chan), JSON_OBJECT); newraw = forge_raw("TRY_KICK", jlist); post_raw(newraw, victim, callbacki->g_ape); } else { jlist = NULL; set_json("kicker", NULL, &jlist); json_attach(jlist, get_json_object_user(callbacki->call_user), JSON_OBJECT); set_json("channel", NULL, &jlist); json_attach(jlist, get_json_object_channel(chan), JSON_OBJECT); newraw = forge_raw(RAW_KICK, jlist); post_raw(newraw, victim, callbacki->g_ape); left(victim, chan, callbacki->g_ape); // chan may be removed } } return (FOR_NOTHING); }
// TODO : Rewrite this f***g ugly function unsigned int setlevel(USERS *user_actif, USERS *user_passif, CHANNEL *chan, unsigned int lvl, acetables *g_ape) { RAW *newraw; userslist *user_passif_chan, *user_actif_chan; json *jlist; char level[8]; user_passif_chan = getuchan(user_passif, chan); if (user_actif != NULL) { user_actif_chan = getuchan(user_actif, chan); if (user_passif_chan == NULL || user_actif_chan == NULL || ((user_actif_chan->level < lvl || user_actif_chan->level < user_passif_chan->level) && !(user_actif->flags & FLG_AUTOOP)) || lvl < 1 || lvl > 32) { send_error(user_actif, "SETLEVEL_ERROR", "110", g_ape); return 0; } user_passif_chan->level = lvl; if (chan->interactive) { jlist = NULL; set_json("ope", NULL, &jlist); json_attach(jlist, get_json_object_user(user_passif), JSON_OBJECT); set_json("opeur", NULL, &jlist); json_attach(jlist, get_json_object_user(user_actif), JSON_OBJECT); set_json("level", itos(lvl, level), &jlist); set_json("pipe", NULL, &jlist); json_attach(jlist, get_json_object_channel(chan), JSON_OBJECT); newraw = forge_raw(RAW_SETLEVEL, jlist); post_raw_channel(newraw, chan, g_ape); } return 1; } else if (user_passif_chan != NULL && lvl > 0 && lvl < 32) { user_passif_chan->level = lvl; if (chan->interactive) { jlist = NULL; set_json("ope", NULL, &jlist); json_attach(jlist, get_json_object_user(user_passif), JSON_OBJECT); set_json("opeur", NULL, &jlist); json_attach(jlist, get_json_object_user(NULL), JSON_OBJECT); set_json("level", itos(lvl, level), &jlist); set_json("pipe", NULL, &jlist); json_attach(jlist, get_json_object_channel(chan), JSON_OBJECT); newraw = forge_raw(RAW_SETLEVEL, jlist); post_raw_channel(newraw, chan, g_ape); } return 1; } return 0; }