#include "ChanUser.h"
#include "UserNode.h"
#include "modcmd.h"
+#include "mysqlConn.h"
static struct ChanNode **chanList;
static int modes_with_strarg, modes_with_intarg;
#undef MODE_VALUE_INDEX
}
+
+void load_channel_settings(struct ChanNode *chan) {
+ if(!(chan->flags & CHANFLAG_REQUESTED_CHANINFO)) {
+ check_mysql();
+ MYSQL_RES *res;
+ MYSQL_ROW row;
+ printf_mysql_query("SELECT `channel_id` FROM `channels` WHERE `channel_name` = '%s'", escape_string(chan->name));
+ res = mysql_use();
+ if ((row = mysql_fetch_row(res)) != NULL) {
+ chan->flags |= CHANFLAG_CHAN_REGISTERED;
+ chan->channel_id = atoi(row[0]);
+ }
+ chan->flags |= CHANFLAG_REQUESTED_CHANINFO;
+ }
+}
struct trigger_cache;
#define CHANFLAG_RECEIVED_USERLIST 0x01
+#define CHANFLAG_REQUESTED_CHANINFO 0x02
+#define CHANFLAG_CHAN_REGISTERED 0x04
struct ChanNode {
char name[CHANNELLEN+1];
struct UserNode *chanbot;
struct trigger_cache *trigger;
+ int channel_id;
struct ChanNode *next;
};
void parseModes(struct ChanNode* chan, char *modeStr, char **argv, int argc);
void getModeString(struct ChanNode* chan, char *modesStr);
+void load_channel_settings(struct ChanNode *chan);
+
#endif
\ No newline at end of file
#include "WHOHandler.h"
#define BOTID 1
-#define CLASSNAME "NeonServ"
static const struct default_language_entry msgtab[] = {
{"NS_USER_UNKNOWN", "User with nick \002%s\002 does not exist."},
{"NS_AUTH_UNKNOWN", "Account \002%s\002 has not been registered."},
{"NS_USER_NEED_AUTH", "%s must first authenticate with \002AuthServ\002."},
{"NS_INVALID_ACCESS", "\002%d\002 is an invalid access level."},
+ {"NS_ADDUSER_ALREADY_ADDED", "%s is already on the \002%s\002 user list (with access %d)."},
+ {"NS_ADDUSER_DONE", "Added %s to the %s user list with access %d."},
{NULL, NULL}
};
MYSQL_RES *res, *res2;
MYSQL_ROW row;
- printf_mysql_query("SELECT `nick`, `ident`, `realname`, `server`, `port`, `pass`, `whoisbot`, `id` FROM `bots` WHERE `botclass` = '%s' AND `active` = '1'", escape_string(CLASSNAME));
+ printf_mysql_query("SELECT `nick`, `ident`, `realname`, `server`, `port`, `pass`, `whoisbot`, `id` FROM `bots` WHERE `botclass` = '%d' AND `active` = '1'", BOTID);
res = mysql_use();
while ((row = mysql_fetch_row(res)) != NULL) {
register_command(BOTID, "users", neonserv_cmd_users, 1, CMDFLAG_REQUIRE_CHAN | CMDFLAG_REQUIRE_AUTH);
register_command(BOTID, "modes", neonserv_cmd_modes, 1, CMDFLAG_REQUIRE_CHAN | CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH);
- register_command(BOTID, "adduser", neonserv_cmd_adduser, 2, CMDFLAG_REQUIRE_CHAN | CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH);
+ register_command(BOTID, "adduser", neonserv_cmd_adduser, 2, CMDFLAG_REQUIRE_CHAN | CMDFLAG_REGISTERED_CHAN | CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH);
start_bots();
bind_bot_ready(neonserv_bot_ready);
}
#undef BOTID
-#undef CLASSNAME
res = mysql_use();
if ((row = mysql_fetch_row(res)) != NULL) {
userid = atoi(row[0]);
+ //check if the user is already added
+ printf_mysql_query("SELECT `chanuser_access` FROM `chanusers` WHERE `chanuser_cid` = '%d' AND `chanuser_uid` = '%d'", chan->channel_id, userid);
+ res = mysql_use();
+ if ((row = mysql_fetch_row(res)) != NULL) {
+ reply(textclient, user, "NS_ADDUSER_ALREADY_ADDED", nick, chan->name, atoi(row[0]));
+ return;
+ }
} else {
printf_mysql_query("INSERT INTO `users` (`user_user`) VALUES ('%s')", escape_string(auth));
userid = (int) mysql_insert_id(mysql_conn);
}
- putsock(client, "PRIVMSG %s :%s: [%d] %s %d", chan->name, nick, userid, auth, caccess);
+ printf_mysql_query("INSERT INTO `chanusers` (`chanuser_cid`, `chanuser_uid`, `chanuser_access`) VALUES ('%d', '%d', '%d')", chan->channel_id, userid, access);
+ reply(textclient, user, "NS_ADDUSER_DONE", nick, chan->name, atoi(row[0]));
}
reply(tmp_text_client, user, "MODCMD_CHAN_REQUIRED");
break;
}
+ if((cbind->func->flags & CMDFLAG_REGISTERED_CHAN)) {
+ load_channel_settings(chan);
+ if(!(chan->flags & CHANFLAG_CHAN_REGISTERED)) {
+ reply(tmp_text_client, user, "MODCMD_CHAN_REQUIRED");
+ break;
+ }
+ check_mysql();
+ MYSQL_RES *res;
+ MYSQL_ROW row;
+ printf_mysql_query("SELECT `botid` FROM `bot_channels` LEFT JOIN `bots` ON `bot_channels`.`botid` = `bots`.`id` WHERE `chanid` = '%d' AND `botclass` = '%d'", chan->channel_id, client->botid);
+ res = mysql_use();
+ if ((row = mysql_fetch_row(res)) == NULL) {
+ reply(tmp_text_client, user, "MODCMD_CHAN_REQUIRED");
+ break;
+ }
+ }
if((cbind->func->flags & CMDFLAG_CHECK_AUTH) && !(user->flags & USERFLAG_ISAUTHED)) {
//check auth...
struct command_check_user_cache *data = malloc(sizeof(*data));
#define CMDFLAG_REQUIRE_GOD 0x04
#define CMDFLAG_CHECK_AUTH 0x08
#define CMDFLAG_OVERRIDE_ACCESS 0x10
+#define CMDFLAG_REGISTERED_CHAN 0x20
struct ClientSocket;
struct UserNode;