]> git.netwichtig.de Git - user/henk/code/inspircd.git/blob - src/channels.cpp
2b2e5963e8efeb9857c1d03558bf03151fdd72e7
[user/henk/code/inspircd.git] / src / channels.cpp
1 #include "inspircd_config.h" 
2 #include "channels.h"
3 #include "inspircd.h"
4 #include <stdio.h>
5 #include <string>
6
7 chanrec::chanrec()
8 {
9         strcpy(name,"");
10         strcpy(custom_modes,"");
11         strcpy(topic,"");
12         strcpy(setby,"");
13         strcpy(key,"");
14         created = topicset = limit = 0;
15         topiclock = noexternal = inviteonly = moderated = secret = c_private = false;
16 }
17
18 void chanrec::SetCustomMode(char mode,bool mode_on)
19 {
20         if (mode_on) {
21                 char m[3];
22                 m[0] = mode;
23                 m[1] = '\0';
24                 if (!strchr(this->custom_modes,mode))
25                 {
26                         strncat(custom_modes,m,MAXMODES);
27                 }
28                 log(DEBUG,"Custom mode %c set",mode);
29         }
30         else {
31                 char temp[MAXMODES];
32                 int count = 0;
33                 for (int q = 0; q < strlen(custom_modes); q++) {
34                         if (custom_modes[q] != mode) {
35                                 temp[count++] = mode;
36                         }
37                 }
38                 temp[count] = '\0';
39                 strncpy(custom_modes,temp,MAXMODES);
40                 log(DEBUG,"Custom mode %c removed",mode);
41                 this->SetCustomModeParam(mode,"",false);
42         }
43 }
44
45 vector<ModeParameter> custom_mode_params;
46
47 void chanrec::SetCustomModeParam(char mode,char* parameter,bool mode_on)
48 {
49
50         log(DEBUG,"SetCustomModeParam called");
51         ModeParameter M;
52         M.mode = mode;
53         strcpy(M.channel,this->name);
54         strcpy(M.parameter,parameter);
55         if (mode_on)
56         {
57                 log(DEBUG,"Custom mode parameter %c %s added",mode,parameter);
58                 custom_mode_params.push_back(M);
59         }
60         else
61         {
62                 if (custom_mode_params.size())
63                 {
64                         for (vector<ModeParameter>::iterator i = custom_mode_params.begin(); i < custom_mode_params.end(); i++)
65                         {
66                                 if ((i->mode == mode) && (!strcasecmp(this->name,i->channel)))
67                                 {
68                                         log(DEBUG,"Custom mode parameter %c %s removed",mode,parameter);
69                                         custom_mode_params.erase(i);
70                                         return;
71                                 }
72                         }
73                 }
74                 log(DEBUG,"*** BUG *** Attempt to remove non-existent mode parameter!");
75         }
76 }
77
78 bool chanrec::IsCustomModeSet(char mode)
79 {
80         log(DEBUG,"Checking ISCustomModeSet: %c %s",mode,this->custom_modes);
81         return (strchr(this->custom_modes,mode) != 0);
82 }
83
84 std::string chanrec::GetModeParameter(char mode)
85 {
86         if (custom_mode_params.size())
87         {
88                 for (vector<ModeParameter>::iterator i = custom_mode_params.begin(); i < custom_mode_params.end(); i++)
89                 {
90                         if ((i->mode == mode) && (!strcasecmp(this->name,i->channel)))
91                         {
92                                 return std::string(i->parameter);
93                         }
94                 }
95         }
96         return std::string("");
97 }