}
}
-static void destroy_support_request(struct ClientSocket *client, struct NeonHelpNode *helpnode, int do_reply) {
+void neonhelp_destroy_support_request(struct ClientSocket *client, struct NeonHelpNode *helpnode, int do_reply) {
//write buffer to database
char logbuff[MAXLEN * LOGBUFFERLINES];
int len = 0;
support = getChanByName(row[0]);
public = (row[1] ? getChanByName(row[1]) : NULL);
if(target->chan == support || !((support && isUserOnChan(target->user, support)) || (public && isUserOnChan(target->user, public)))) {
+ if(helpnode->status == 1 && target->chan != support) {
+ putsock(client, "MODE %s -i", support->name); //clear invite list
+ if(isModeSet(support->modes, 'i'))
+ putsock(client, "MODE %s +i", support->name);
+ }
//free the user's support request
if(prev_helpnode)
prev_helpnode->next = helpnode->next;
else
client->botclass_helpnode = helpnode->next;
- destroy_support_request(client, helpnode, 1);
+ neonhelp_destroy_support_request(client, helpnode, 1);
}
}
}
support = getChanByName(row[0]);
public = (row[1] ? getChanByName(row[1]) : NULL);
if(target->chan == support || !((support && isUserOnChan(target->user, support)) || (public && isUserOnChan(target->user, public)))) {
+ if(helpnode->status == 1 && target->chan != support) {
+ putsock(client, "MODE %s -i", support->name); //clear invite list
+ if(isModeSet(support->modes, 'i'))
+ putsock(client, "MODE %s +i", support->name);
+ }
//free the user's support request
if(prev_helpnode)
prev_helpnode->next = helpnode->next;
else
client->botclass_helpnode = helpnode->next;
- destroy_support_request(client, helpnode, 1);
+ neonhelp_destroy_support_request(client, helpnode, 1);
}
}
}
prev_helpnode->next = helpnode->next;
else
client->botclass_helpnode = helpnode->next;
- destroy_support_request(client, helpnode, 0);
+ neonhelp_destroy_support_request(client, helpnode, 0);
}
}
}
struct UserNode;
struct ChanNode;
+struct NeonHelpNodeUser {
+ struct UserNode *user;
+ struct NeonHelpNodeUser *next;
+};
+
struct NeonHelpNode {
- struct UserNode *user;
+ struct NeonHelpNodeUser *user;
int suppid;
char status:6;
char announce:2;
void loop_NeonHelp();
void free_NeonHelp(int type);
+void neonhelp_destroy_support_request(struct ClientSocket *client, struct NeonHelpNode *helpnode, int do_reply);
+
#endif
\ No newline at end of file
reply(textclient, user, "NH_NEXT_NONE");
return;
}
- struct NeonHelpNode *helpnode, *next_helpnode = NULL, *prev_helpnode = NULL;
+ struct NeonHelpNode *helpnode, *prev_helpnode = NULL;
for(helpnode = client->botclass_helpnode; helpnode; helpnode = helpnode->next) {
- if(atoi(argv[0]) == helpnode->suppid) {
- next_helpnode = helpnode;
+ if(atoi(argv[0]) == helpnode->suppid)
break;
- } else
+ else
prev_helpnode = helpnode;
}
- if(!next_helpnode) {
+ if(!helpnode) {
reply(textclient, user, "NH_NEXT_NOT_FOUND");
return;
}
- reply(client, next_helpnode->user, "NH_DELETED", next_helpnode->suppid);
- printf_mysql_query("UPDATE `helpserv_requests` SET `status` = '2' WHERE `id` = '%d'", next_helpnode->suppid);
+ if(helpnode->status == 1) {
+ struct ChanNode *support, *public;
+ support = getChanByName(row[0]);
+ public = (row[1] ? getChanByName(row[1]) : NULL);
+ if(isUserOnChan(helpnode->user, support)) {
+ if(public)
+ putsock(client, "KICK %s %s :your request has been closed", support->name, helpnode->user->nick);
+ else
+ putsock(client, "MODE %s -v %s", support->name, helpnode->user->nick);
+ } else {
+ putsock(client, "MODE %s -i", support->name); //clear invite list
+ if(isModeSet(support->modes, 'i'))
+ putsock(client, "MODE %s +i", support->name);
+ }
+ }
if(prev_helpnode)
- prev_helpnode->next = next_helpnode->next;
+ prev_helpnode->next = helpnode->next;
else
- client->botclass_helpnode = next_helpnode->next;
- reply(textclient, user, "NH_DELETED_STAFF", next_helpnode->suppid, next_helpnode->user->nick);
- free(next_helpnode);
+ client->botclass_helpnode = helpnode->next;
+ reply(textclient, user, "NH_DELETED_STAFF", helpnode->suppid, helpnode->user->nick);
+ neonhelp_neonhelp_destroy_support_request(client, helpnode, 1);
}