slang_stats_commands.c 8.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339
  1. static void slang_send_nick()
  2. {
  3. if (glob_nick)
  4. strncat(slang_text_buf, glob_nick, sizeof(slang_text_buf));
  5. }
  6. static void slang_send_bot()
  7. {
  8. strncat(slang_text_buf, botnetnick, sizeof(slang_text_buf));
  9. }
  10. static void slang_send_topnr()
  11. {
  12. char buf[10];
  13. snprintf(buf, sizeof(buf), "%d", webnr);
  14. strncat(slang_text_buf, buf, sizeof(slang_text_buf));
  15. }
  16. static void slang_send_graphnr()
  17. {
  18. char buf[10];
  19. snprintf(buf, sizeof(buf), "%d", graphnr);
  20. strncat(slang_text_buf, buf, sizeof(slang_text_buf));
  21. }
  22. static void slang_send_peak()
  23. {
  24. char buf[10];
  25. if (glob_globstats && (glob_timerange != T_ERROR)) {
  26. snprintf(buf, sizeof(buf), "%d", glob_globstats->peak[glob_timerange]);
  27. strncat(slang_text_buf, buf, sizeof(slang_text_buf));
  28. }
  29. }
  30. static void slang_send_totalusers()
  31. {
  32. char buf[10];
  33. if (glob_globstats) {
  34. snprintf(buf, sizeof(buf), "%d", countstatmembers(glob_globstats));
  35. strncat(slang_text_buf, buf, sizeof(slang_text_buf));
  36. }
  37. }
  38. static void slang_send_chanstarted()
  39. {
  40. time_t tt, ttbuf;
  41. char sbuf[61];
  42. if (glob_globstats) {
  43. ttbuf = now;
  44. tt = glob_globstats->started;
  45. strftime(sbuf, 60, "%d.%m. %Y %H:%M", localtime(&tt));
  46. ctime(&ttbuf); /* workaround for eggdrop bug */
  47. strncat(slang_text_buf, sbuf, sizeof(slang_text_buf));
  48. }
  49. }
  50. static void slang_send_chan()
  51. {
  52. if (glob_globstats)
  53. strncat(slang_text_buf, glob_globstats->chan, sizeof(slang_text_buf));
  54. }
  55. static void slang_send_user()
  56. {
  57. if (glob_locstats)
  58. strncat(slang_text_buf, glob_locstats->user, sizeof(slang_text_buf));
  59. else if (glob_user)
  60. strncat(slang_text_buf, glob_user->user, sizeof(slang_text_buf));
  61. }
  62. static void slang_send_sorting()
  63. {
  64. if (glob_sorting != T_ERROR)
  65. strncat(slang_text_buf, itotype(glob_sorting), sizeof(slang_text_buf));
  66. }
  67. static void slang_send_range()
  68. {
  69. char buf[10];
  70. snprintf(buf, sizeof(buf), "%d", glob_range);
  71. strncat(slang_text_buf, buf, sizeof(slang_text_buf));
  72. }
  73. static void slang_send_active_users()
  74. {
  75. char buf[10];
  76. if (glob_globstats && (glob_timerange != T_ERROR)) {
  77. snprintf(buf, sizeof(buf), "%d",
  78. countactivestatmembers(glob_globstats, 1, glob_timerange,
  79. (glob_sorting >= 0) ? glob_sorting : T_LINES, 1)
  80. );
  81. strncat(slang_text_buf, buf, sizeof(slang_text_buf));
  82. }
  83. }
  84. static void slang_send_word()
  85. {
  86. if (glob_word)
  87. strncat(slang_text_buf, glob_word, sizeof(slang_text_buf));
  88. }
  89. static void slang_send_place()
  90. {
  91. char buf[10];
  92. snprintf(buf, sizeof(buf), "%d", glob_place);
  93. strncat(slang_text_buf, buf, sizeof(slang_text_buf));
  94. }
  95. static void slang_send_password()
  96. {
  97. if (glob_user && glob_user->password)
  98. strncat(slang_text_buf, glob_user->password, sizeof(slang_text_buf));
  99. }
  100. static void slang_send_botnick()
  101. {
  102. strncat(slang_text_buf, botname, sizeof(slang_text_buf));
  103. }
  104. static void slang_send_server_host()
  105. {
  106. char s[121];
  107. char *p;
  108. #ifndef NO_EGG
  109. s[0] = 0;
  110. gethostname(s, 120);
  111. if (!s[0]) {
  112. p = strchr(botuserhost, '@');
  113. if (p) {
  114. strncpy(s, p, sizeof(s));
  115. s[120] = 0;
  116. }
  117. }
  118. strncat(slang_text_buf, s, sizeof(slang_text_buf));
  119. #endif
  120. }
  121. static void slang_send_server_port()
  122. {
  123. int i;
  124. char buf[10];
  125. #ifndef NO_EGG
  126. for (i = 0; i < dcc_total; i++) {
  127. if (dcc[i].type == &MHTTPD_CON_HTTPD) {
  128. snprintf(buf, sizeof(buf), "%d", dcc[i].port);
  129. strncat(slang_text_buf, buf, sizeof(slang_text_buf));
  130. return;
  131. }
  132. }
  133. #endif
  134. }
  135. static void slang_send_topic_by()
  136. {
  137. if (glob_topic) {
  138. Assert(glob_topic->by);
  139. strncat(slang_text_buf, glob_topic->by, sizeof(slang_text_buf));
  140. }
  141. }
  142. static void slang_send_topic_when()
  143. {
  144. char buf[20];
  145. if (glob_topic) {
  146. strftime(buf, 19, "%H:%M", localtime(&glob_topic->when));
  147. strncat(slang_text_buf, buf, sizeof(slang_text_buf));
  148. }
  149. }
  150. static void slang_send_url_by()
  151. {
  152. if (glob_url) {
  153. Assert(glob_url->by);
  154. strncat(slang_text_buf, glob_url->by, sizeof(slang_text_buf));
  155. }
  156. }
  157. static void slang_send_url_when()
  158. {
  159. char buf[20];
  160. if (glob_url) {
  161. strftime(buf, 19, "%H:%M", localtime(&glob_url->when));
  162. strncat(slang_text_buf, buf, sizeof(slang_text_buf));
  163. }
  164. }
  165. static void slang_send_random_urls()
  166. {
  167. char buf[3];
  168. static struct stats_url *url;
  169. int nr = 0;
  170. if (!glob_globstats)
  171. return;
  172. for (url = glob_globstats->urls; url; url = url->next)
  173. nr++;
  174. if (nr > log_urls)
  175. nr = log_urls;
  176. snprintf(buf, sizeof(buf), "%d", nr);
  177. strncat(slang_text_buf, buf, sizeof(slang_text_buf));
  178. }
  179. static void slang_send_random_kicks()
  180. {
  181. char buf[3];
  182. struct stats_kick *kick;
  183. int nr = 0;
  184. if (!glob_globstats)
  185. return;
  186. for (kick = glob_globstats->kicks; kick; kick = kick->next)
  187. nr++;
  188. if (nr > display_kicks)
  189. nr = display_kicks;
  190. snprintf(buf, sizeof(buf), "%d", nr);
  191. strncat(slang_text_buf, buf, sizeof(slang_text_buf));
  192. }
  193. static void slang_send_chanwords()
  194. {
  195. static wordstats *ws;
  196. char buf[6];
  197. int nr = 0;
  198. if (!glob_globstats)
  199. return;
  200. do_globwordstats(glob_globstats);
  201. for (ws = glob_globstats->words; ws; ws = ws->next)
  202. nr++;
  203. snprintf(buf, sizeof(buf), "%d", nr);
  204. strncat(slang_text_buf, buf, sizeof(slang_text_buf));
  205. }
  206. static void slang_send_userwords()
  207. {
  208. wordstats *ws;
  209. char buf[6];
  210. int nr = 0;
  211. if (!glob_locstats)
  212. return;
  213. for (ws = glob_locstats->words; ws; ws = ws->next)
  214. nr++;
  215. snprintf(buf, sizeof(buf), "%d", nr);
  216. strncat(slang_text_buf, buf, sizeof(slang_text_buf));
  217. }
  218. static void slang_send_value()
  219. {
  220. int i, nr;
  221. char buf[30];
  222. wordstats *ws;
  223. if (!glob_locstats || (glob_timerange == T_ERROR) || !glob_toptype)
  224. return;
  225. i = typetoi(glob_toptype);
  226. if (i == T_MINUTES)
  227. snprintf(buf, sizeof(buf), "%s", stats_duration(glob_locstats->values[glob_timerange][i] * 60, 2));
  228. else if (i >= 0)
  229. snprintf(buf, sizeof(buf), "%li", glob_locstats->values[glob_timerange][i]);
  230. else if (i == T_WPL) {
  231. if (glob_locstats->values[glob_timerange][T_LINES])
  232. snprintf(buf, sizeof(buf), "%.2f",
  233. ((float) glob_locstats->values[glob_timerange][T_WORDS])
  234. / ((float) glob_locstats->values[glob_timerange][T_LINES]));
  235. } else if (i == T_IDLE) {
  236. if (glob_locstats->values[glob_timerange][T_LINES])
  237. snprintf(buf, sizeof(buf), "%.2f",
  238. ((float) glob_locstats->values[glob_timerange][T_MINUTES])
  239. / ((float) glob_locstats->values[glob_timerange][T_LINES]));
  240. } else if (i == T_VOCABLES) {
  241. nr = 0;
  242. for (ws = glob_locstats->words; ws; ws = ws->next)
  243. nr++;
  244. snprintf(buf, sizeof(buf), "%d", nr);
  245. } else {
  246. debug1("invalid type: %s", glob_toptype);
  247. snprintf(buf, sizeof(buf), "ERROR: '%s'", glob_toptype);
  248. }
  249. strncat(slang_text_buf, buf, sizeof(slang_text_buf));
  250. }
  251. static void slang_send_lastspoke()
  252. {
  253. char buf[20];
  254. if (glob_locstats) {
  255. debug1("%d", glob_locstats->lastspoke);
  256. snprintf(buf, sizeof(buf), "%s", stats_duration(now - glob_locstats->lastspoke, 2));
  257. strncat(slang_text_buf, buf, sizeof(slang_text_buf));
  258. }
  259. }
  260. static struct slang_text_commands slang_text_stats_command_table[] =
  261. {
  262. {"nick", slang_send_nick},
  263. {"bot", slang_send_bot},
  264. {"topnr", slang_send_topnr},
  265. {"graphnr", slang_send_graphnr},
  266. {"peak", slang_send_peak},
  267. {"totalusers", slang_send_totalusers},
  268. {"chanstarted", slang_send_chanstarted},
  269. {"chan", slang_send_chan},
  270. {"user", slang_send_user},
  271. {"nick", slang_send_nick},
  272. {"sorting", slang_send_sorting},
  273. {"range", slang_send_range},
  274. {"active_users", slang_send_active_users},
  275. {"word", slang_send_word},
  276. {"place", slang_send_place},
  277. {"password", slang_send_password},
  278. {"botnick", slang_send_botnick},
  279. {"server_host", slang_send_server_host},
  280. {"server_port", slang_send_server_port},
  281. {"topic_by", slang_send_topic_by},
  282. {"topic_when", slang_send_topic_when},
  283. {"url_by", slang_send_url_by},
  284. {"url_when", slang_send_url_when},
  285. {"random_urls", slang_send_random_urls},
  286. {"random_kicks", slang_send_random_kicks},
  287. {"chanwords", slang_send_chanwords},
  288. {"userwords", slang_send_userwords},
  289. {"value", slang_send_value},
  290. {"lastspoke", slang_send_lastspoke},
  291. {0, 0}
  292. };