]> jfr.im git - irc/quakenet/newserv.git/blob - chanserv/chancmds/chanstat.c
Merge.
[irc/quakenet/newserv.git] / chanserv / chancmds / chanstat.c
1 /* Automatically generated by refactor.pl.
2 *
3 *
4 * CMDNAME: chanstat
5 * CMDLEVEL: QCMD_AUTHED
6 * CMDARGS: 1
7 * CMDDESC: Displays channel activity statistics.
8 * CMDFUNC: csc_dochanstat
9 * CMDPROTO: int csc_dochanstat(void *source, int cargc, char **cargv);
10 * CMDHELP: Usage: CHANSTAT <channel>
11 * CMDHELP: Shows some statistics about a channel, including total number of joins and
12 * CMDHELP: maximum channel size. Two sets of statistics are displayed, a lifetime
13 * CMDHELP: counter, and a trip meter counter which can be reset. Where:
14 * CMDHELP: channel - channel to display statistics for.
15 * CMDHELP: CHANSTAT requires master (+m) access on the named channel.
16 */
17
18 #include "../chanserv.h"
19 #include "../../nick/nick.h"
20 #include "../../lib/flags.h"
21 #include "../../lib/irc_string.h"
22 #include "../../channel/channel.h"
23 #include "../../parser/parser.h"
24 #include "../../irc/irc.h"
25 #include "../../localuser/localuserchannel.h"
26 #include <string.h>
27 #include <stdio.h>
28
29 int csc_dochanstat(void *source, int cargc, char **cargv) {
30 nick *sender=source;
31 chanindex *cip;
32 regchan *rcp;
33 char timebuf[30];
34
35 if (cargc<1) {
36 chanservstdmessage(sender, QM_NOTENOUGHPARAMS, "chanstat");
37 return CMD_ERROR;
38 }
39
40 if (!(cip=cs_checkaccess(sender, cargv[0], CA_MASTERPRIV,
41 NULL, "chanstat", QPRIV_VIEWFULLCHANLEV, 0)))
42 return CMD_ERROR;
43
44 rcp=cip->exts[chanservext];
45
46 chanservstdmessage(sender, QM_STATSHEADER, cip->name->content);
47
48 strftime(timebuf, 30, "%d/%m/%y %H:%M", localtime(&(rcp->created)));
49 chanservstdmessage(sender, QM_STATSADDED, timebuf);
50
51 /* Show opers founder/addedby/type info */
52 if (cs_privcheck(QPRIV_VIEWFULLCHANLEV, sender)) {
53 reguser *founder=NULL, *addedby=NULL;
54
55 strftime(timebuf, 30, "%d/%m/%y %H:%M", localtime(&(rcp->lastactive)));
56 chanservstdmessage(sender, QM_STATSLASTACTIVE, timebuf);
57
58
59 addedby=findreguserbyID(rcp->addedby);
60 chanservstdmessage(sender, QM_ADDEDBY, addedby ? addedby->username : "(unknown)");
61 founder=findreguserbyID(rcp->founder);
62 chanservstdmessage(sender, QM_FOUNDER, founder ? founder->username : "(unknown)");
63 chanservstdmessage(sender, QM_CHANTYPE, chantypes[rcp->chantype]->content);
64 }
65
66 strftime(timebuf, 30, "%d/%m/%y %H:%M", localtime(&(rcp->created)));
67
68 chanservstdmessage(sender, QM_STATSJOINS, timebuf, rcp->maxusers, rcp->totaljoins,
69 (float)rcp->totaljoins/ ((time(NULL)-rcp->created)/(3600*24)));
70
71 strftime(timebuf, 30, "%d/%m/%y %H:%M", localtime(&(rcp->statsreset)));
72
73 chanservstdmessage(sender, QM_STATSJOINS, timebuf, rcp->tripusers, rcp->tripjoins,
74 (float)rcp->tripjoins / ((time(NULL)-rcp->statsreset)/(3600*24)));
75
76 return CMD_OK;
77 }