]>
jfr.im git - irc/quakenet/newserv.git/blob - helpmod2/huser.c
15 huser
*huser_add(nick
*nck
)
19 assert(huser_get(nck
) == NULL
);
21 tmp
= malloc(sizeof(huser
));
23 tmp
->last_activity
= time(NULL
);
24 tmp
->flags
= H_USRFLAGS_DEFAULT
;
25 tmp
->state
= helpmod_base
;
26 tmp
->hchannels
= NULL
;
29 tmp
->account
= haccount_get_by_name(nck
->authname
);
33 tmp
->hchannels
= NULL
;
38 tmp
->last_line_repeats
= 0;
39 tmp
->last_line
[0] = '\0';
52 void huser_del(huser
*husr
)
54 huser
**ptr
= &husers
;
58 for (;*ptr
;ptr
= &(*ptr
)->next
)
61 huser
*tmp
= (*ptr
)->next
;
63 hed_close(husr
->editor
);
72 void huser_del_all(void)
74 huser
**ptr
= &husers
;
80 huser
*huser_get(nick
*nck
)
87 for (tmp
= husers
;tmp
;tmp
= tmp
->next
)
88 if (tmp
->real_user
== nck
)
93 void huser_activity(huser
*husr
, hchannel
*hchan
)
95 huser_channel
*huserchan
;
97 husr
->last_activity
= time(NULL
);
99 husr
->account
->last_activity
= time(NULL
);
101 if ((huserchan
= huser_on_channel(husr
, hchan
)) != NULL
)
102 huserchan
->last_activity
= time(NULL
);
105 huser_channel
*huser_add_channel(huser
*husr
, hchannel
*hchan
)
108 assert(huser_on_channel(husr
, hchan
) == NULL
);
110 tmp
= (huser_channel
*)malloc(sizeof(huser_channel
));
112 tmp
->next
= husr
->hchannels
;
114 tmp
->responsible_oper
= NULL
;
115 tmp
->last_activity
= time(NULL
);
118 husr
->hchannels
= tmp
;
120 assert(huser_on_channel(husr
, hchan
) != NULL
);
125 void huser_del_channel(huser
*husr
, hchannel
*hchan
)
127 huser_channel
**tmp
= &husr
->hchannels
;
128 assert(huser_on_channel(husr
, hchan
) != NULL
);
130 for (;*tmp
;tmp
= &(*tmp
)->next
)
131 if ((*tmp
)->hchan
== hchan
)
133 huser_channel
*ptr
= (*tmp
)->next
;
140 assert(huser_on_channel(husr
, hchan
) == NULL
);
143 huser_channel
*huser_on_channel(huser
*husr
, hchannel
*hchan
)
145 huser_channel
*tmp
= husr
->hchannels
;
147 for (;tmp
;tmp
= tmp
->next
)
148 if (tmp
->hchan
== hchan
)
153 void huser_clear_inactives(void)
155 huser
**ptr
= &husers
;
157 if (!(*ptr
)->hchannels
&& (time(NULL
) - (*ptr
)->last_activity
) > HELPMOD_USER_TIMEOUT
)
163 int huser_count(void)
168 for (;tmp
;tmp
= tmp
->next
)
174 void huser_reset_states(void)
178 for (;tmp
;tmp
= tmp
->next
)
179 tmp
->state
= helpmod_base
;
182 hlevel
huser_get_level(huser
*husr
)
184 if ((strlen(huser_get_nick(husr
))) == 1 && isalpha(huser_get_nick(husr
)[0]))
185 return H_SERVICE
; /* network services, keeps them out of harms way */
187 if (husr
->account
!= NULL
)
189 if (IsOper(husr
->real_user
) && (husr
->account
->level
< H_STAFF
))
191 else if (!IsOper(husr
->real_user
) && (husr
->account
->level
>= H_OPER
))
194 return husr
->account
->level
;
198 if (IsOper(husr
->real_user
) || IsXOper(husr
->real_user
))
205 int on_queue(huser
*husr
, huser_channel
*huserchan
)
207 if (huserchan
== NULL
|| huser_get_level(husr
) > H_PEON
)
209 if (!(huserchan
->hchan
->flags
& H_QUEUE
))
211 if (huserchan
->flags
& (HCUMODE_OP
| HCUMODE_VOICE
))
213 if (huserchan
->flags
& HQUEUE_DONE
)
218 int on_desk(huser
* husr
, huser_channel
*huserchan
)
220 if (huserchan
== NULL
|| huser_get_level(husr
) > H_PEON
)
222 if (!(huserchan
->hchan
->flags
& H_QUEUE
))
224 if (!(huserchan
->flags
& (HCUMODE_OP
| HCUMODE_VOICE
)))
226 if (!(huserchan
->flags
& HQUEUE_DONE
))
231 int huser_get_account_flags(huser
*husr
)
233 if (husr
->account
!= NULL
)
234 return husr
->account
->flags
;
236 return H_ACCFLAGS_DEFAULT
;
239 const char *huser_get_nick(huser
*husr
)
244 return husr
->real_user
->nick
;
247 const char *huser_get_ident(huser
*husr
)
252 return husr
->real_user
->ident
;
255 const char *huser_get_host(huser
*husr
)
260 return husr
->real_user
->host
->name
->content
;
263 const char *huser_get_auth(huser
*husr
)
265 if (husr
== NULL
|| !IsAccount(husr
->real_user
))
268 return husr
->real_user
->authname
;
271 const char *huser_get_realname(huser
*husr
)
276 return husr
->real_user
->realname
->name
->content
;
280 int huser_valid(huser
* husr
)
283 for (;ptr
;ptr
= ptr
->next
)
289 int huser_is_trojan(huser
*husr
)
294 if (IsOper(husr
->real_user
))
297 if (!IsAccount(husr
->real_user
))
298 if (strisupper(huser_get_nick(husr
)) && (strnumcount( huser_get_nick(husr
)) >= 2))
300 sprintf(buffer
, "*%s*", huser_get_nick(husr
));
301 if (hword_count(huser_get_realname(husr
)) == 1)
302 if (strregexp(huser_get_realname(husr
), buffer
))
307 if (!IsAccount(husr
->real_user
) && (huser_get_ident(husr
)[0] == '~'))
308 if (strislower(huser_get_nick(husr
)) && strisalpha( huser_get_nick(husr
)))
309 if (strislower(huser_get_ident(husr
)) && strisalpha(huser_get_ident(husr
)))
310 if (strislower(huser_get_realname(husr
)) && strisalpha(huser_get_realname(husr
)))
311 if (hword_count(huser_get_realname(husr
)) == 1)