added recover function to NeonBackup (used to recover Bot privileges when NeonBackup...
[NeonServV5.git] / src / modules / NeonServ.mod / cmd_neonserv_invite.c
index 60c00a219aea884d0dceb8d8e51a8c28a59e1e81..307cccd4b3c55fb4304ee4eda611703d180249e0 100644 (file)
@@ -1,4 +1,4 @@
-/* cmd_neonserv_invite.c - NeonServ v5.3
+/* cmd_neonserv_invite.c - NeonServ v5.4
  * Copyright (C) 2011-2012  Philipp Kreil (pk910)
  * 
  * This program is free software: you can redistribute it and/or modify
@@ -81,7 +81,7 @@ CMD_BIND(neonserv_cmd_invite) {
         cache->chan = chan;
         cache->event = event;
         cache->nick = strdup(argv[0]);
-        get_userauth(cuser, neonserv_cmd_invite_nick_lookup, cache);
+        get_userauth(cuser, module_id, neonserv_cmd_invite_nick_lookup, cache);
     }
 }
 
@@ -97,12 +97,17 @@ static USERAUTH_CALLBACK(neonserv_cmd_invite_nick_lookup) {
 }
 
 static void neonserv_cmd_invite_async1(struct ClientSocket *client, struct ClientSocket *textclient, struct UserNode *user, struct ChanNode *chan, struct Event *event, char *nick, char *auth) {
-    if(auth) {
+    if(auth && (!(user->flags & USERFLAG_ISAUTHED) || stricmp(auth, user->auth))) {
         MYSQL_RES *res;
         MYSQL_ROW row;
-        printf_mysql_query("SELECT `user_id` FROM `users` WHERE `user_user` = '%s'", escape_string(auth));
+        printf_mysql_query("SELECT `user_id`, `user_block_invites` FROM `users` WHERE `user_user` = '%s'", escape_string(auth));
         res = mysql_use();
         if ((row = mysql_fetch_row(res)) != NULL) {
+            //check if the user has blocked invites globally
+            if(!strcmp(row[1], "1")) {
+                reply(textclient, user, "NS_INVITE_GLOBALLY_BLOCKED", nick);
+                return;
+            }
             //check if the user has set noinvite
             printf_mysql_query("SELECT `id` FROM `noinvite` WHERE `uid` = '%s' AND `cid` = '%d'", row[0], chan->channel_id);
             res = mysql_use();
@@ -113,7 +118,7 @@ static void neonserv_cmd_invite_async1(struct ClientSocket *client, struct Clien
         }
     }
     struct neonserv_cmd_invite_timeout *timeout = neonserv_cmd_invite_add_timeout(nick, chan->name);
-    timeq_add(INVITE_TIMEOUT, neonserv_cmd_invite_timeout_timeout, timeout);
+    timeq_add(INVITE_TIMEOUT, module_id, neonserv_cmd_invite_timeout_timeout, timeout);
     putsock(client, "INVITE %s %s", nick, chan->name);
     struct UserNode *tmpu = getUserByNick(nick);
     if(!tmpu) {