cmdsserv.c 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  1. /*
  2. * cmdsserv.c -- part of server.mod
  3. * handles commands from a user via dcc that cause server interaction
  4. *
  5. */
  6. static void cmd_servers(int idx, char *par)
  7. {
  8. struct server_list *x = serverlist;
  9. int i;
  10. char s[1024] = "";
  11. putlog(LOG_CMDS, "*", "#%s# servers", dcc[idx].nick);
  12. if (!x) {
  13. dprintf(idx, "There are no servers in the server list.\n");
  14. } else {
  15. dprintf(idx, "Server list:\n");
  16. i = 0;
  17. for (; x; x = x->next) {
  18. simple_snprintf(s, sizeof s, " %s:%d %s", x->name,
  19. x->port ? x->port : default_port,
  20. (i == curserv) ? "<- I am here" : "");
  21. dprintf(idx, "%s\n", s);
  22. i++;
  23. }
  24. dprintf(idx, "End of server list.\n");
  25. }
  26. }
  27. static void cmd_dump(int idx, char *par)
  28. {
  29. putlog(LOG_CMDS, "*", "#%s# dump %s", dcc[idx].nick, par);
  30. if (!isowner(dcc[idx].nick)) {
  31. putlog(LOG_WARN, "*", "%s attempted 'dump' %s", dcc[idx].nick, par);
  32. dprintf(idx, "dump is only available to permanent owners.\n");
  33. return;
  34. }
  35. if (!par[0]) {
  36. dprintf(idx, "Usage: dump <server stuff>\n");
  37. return;
  38. }
  39. dprintf(DP_DUMP, "%s\n", replace_vars(par));
  40. }
  41. static void cmd_umode(int idx, char *par)
  42. {
  43. putlog(LOG_CMDS, "*", "#%s# umode %s", dcc[idx].nick, par);
  44. if (!par[0]) {
  45. dprintf(idx, "Usage: umode <+flags>\n");
  46. return;
  47. }
  48. dprintf(DP_SERVER, "MODE %s %s\n", botname, par);
  49. }
  50. static void cmd_jump(int idx, char *par)
  51. {
  52. char *other = NULL, *p = NULL;
  53. int port;
  54. if (par[0]) {
  55. other = newsplit(&par);
  56. port = atoi(newsplit(&par));
  57. if ((p = strchr(other, ':'))) {
  58. *p = 0;
  59. p++;
  60. if (!port)
  61. port = atoi(p);
  62. }
  63. if (!port)
  64. port = default_port;
  65. putlog(LOG_CMDS, "*", "#%s# jump %s %d %s", dcc[idx].nick, other, port, par);
  66. strlcpy(newserver, other, sizeof newserver);
  67. newserverport = port;
  68. strlcpy(newserverpass, par, sizeof newserverpass);
  69. } else
  70. putlog(LOG_CMDS, "*", "#%s# jump", dcc[idx].nick);
  71. dprintf(idx, "Jumping servers...\n");
  72. nuke_server("changing servers");
  73. cycle_time = 0;
  74. }
  75. static void cmd_clearqueue(int idx, char *par)
  76. {
  77. int msgs;
  78. putlog(LOG_CMDS, "*", "#%s# clearqueue %s", dcc[idx].nick, par);
  79. if (!par[0]) {
  80. dprintf(idx, "Usage: clearqueue <mode|server|help|all>\n");
  81. return;
  82. }
  83. if (!egg_strcasecmp(par, "all")) {
  84. msgs = modeq.tot + mq.tot + hq.tot;
  85. msgq_clear(&modeq);
  86. msgq_clear(&mq);
  87. msgq_clear(&hq);
  88. burst = 0;
  89. double_warned = 0;
  90. dprintf(idx, "Removed %d message%s from all queues.\n", msgs,
  91. (msgs != 1) ? "s" : "");
  92. } else if (!egg_strcasecmp(par, "mode")) {
  93. msgs = modeq.tot;
  94. msgq_clear(&modeq);
  95. if (mq.tot == 0)
  96. burst = 0;
  97. double_warned = 0;
  98. dprintf(idx, "Removed %d message%s from the mode queue.\n", msgs,
  99. (msgs != 1) ? "s" : "");
  100. } else if (!egg_strcasecmp(par, "help")) {
  101. msgs = hq.tot;
  102. msgq_clear(&hq);
  103. double_warned = 0;
  104. dprintf(idx, "Removed %d message%s from the help queue.\n", msgs,
  105. (msgs != 1) ? "s" : "");
  106. } else if (!egg_strcasecmp(par, "server")) {
  107. msgs = mq.tot;
  108. msgq_clear(&mq);
  109. if (modeq.tot == 0)
  110. burst = 0;
  111. double_warned = 0;
  112. dprintf(idx, "Removed %d message%s from the server queue.\n", msgs,
  113. (msgs != 1) ? "s" : "");
  114. } else {
  115. dprintf(idx, "Usage: clearqueue <mode|server|help|all>\n");
  116. return;
  117. }
  118. }
  119. /* Function call should be:
  120. * int cmd_whatever(idx,"parameters");
  121. *
  122. * As with msg commands, function is responsible for any logging.
  123. */
  124. static cmd_t C_dcc_serv[] =
  125. {
  126. {"clearqueue", "m", (Function) cmd_clearqueue, NULL, LEAF},
  127. {"dump", "a", (Function) cmd_dump, NULL, LEAF},
  128. {"jump", "m", (Function) cmd_jump, NULL, LEAF},
  129. {"servers", "m", (Function) cmd_servers, NULL, LEAF},
  130. {"umode", "m", (Function) cmd_umode, NULL, LEAF},
  131. {NULL, NULL, NULL, NULL, 0}
  132. };