]> jfr.im git - irc/quakenet/newserv.git/blobdiff - noperserv/noperserv_commands.c
Dynamic help for newsearch, and permissions on terms/output functions
[irc/quakenet/newserv.git] / noperserv / noperserv_commands.c
index 9f2987f378dc6fe8295421ffcbb227958228586d..4c41f44e1b9238183218749c890e877101aaea08 100644 (file)
@@ -7,11 +7,13 @@
 
 #include "../control/control.h"
 #include "../nick/nick.h"
+#include "../newsearch/newsearch.h"
 #include "../lib/irc_string.h"
 #include "../lib/strlfunc.h"
 #include "../localuser/localuserchannel.h"
 #include "../geoip/geoip.h"
 #include "../lib/version.h"
+#include "../core/modules.h"
 
 MODULE_VERSION("");
 
@@ -33,9 +35,10 @@ void _init() {
 
   registercontrolhelpcmd("spewchan", NO_OPER, 1, &controlspewchan, "Usage: spewchan <pattern>\nShows all channels which are matched by the given pattern");
 
-/*  registercontrolhelpcmd("spew", NO_OPER, 1, &controlspew, "Usage: spewchan <pattern>\nShows all userss which are matched by the given pattern"); */
+  registercontrolhelpcmd("spew", NO_OPER, 1, &controlspew, "Usage: spew <pattern>\nShows all userss which are matched by the given pattern");
 
-  registercontrolhelpcmd("resync", NO_OPER, 1, &controlresync, "Usage: resync <channel>\nResyncs a desynched channel");
+  /* doesnt seem to work for me + pointless command?(paul) 
+  registercontrolhelpcmd("resync", NO_OPER, 1, &controlresync, "Usage: resync <channel>\nResyncs a desynched channel"); */
 
   registercontrolhelpcmd("broadcast", NO_OPER, 1, &controlbroadcast, "Usage: broadcast <text>\nSends a message to all users.");
   registercontrolhelpcmd("obroadcast", NO_OPER, 1, &controlobroadcast, "Usage: obroadcast <text>\nSends a message to all IRC operators.");
@@ -50,8 +53,8 @@ void _fini() {
   deregistercontrolcmd("mbroadcast", controlmbroadcast);
   deregistercontrolcmd("broadcast", controlbroadcast);
 
-  deregistercontrolcmd("resync", controlresync);
-/*   deregistercontrolcmd("spew", controlspew); */
+  /* deregistercontrolcmd("resync", controlresync); */
+  deregistercontrolcmd("spew", controlspew);
   deregistercontrolcmd("spewchan", controlspewchan);
 
 /*  deregistercontrolcmd("kill", controlkill); */
@@ -149,11 +152,16 @@ int controlresync(void *sender, int cargc, char **cargv) {
 }
 
 int controlspew(void *sender, int cargc, char **cargv) {
-/*  nick *np = (nick *)sender; */
+  searchASTExpr *tree;
 
-  return CMD_OK;
+  if(cargc < 1)
+    return CMD_USAGE;
+
+  tree = NSASTNode(match_parse, NSASTNode(hostmask_parse), NSASTLiteral(cargv[0]));
+  return ast_nicksearch(tree, controlreply, sender, controlnswall, printnick, NULL, NULL, 500);
 }
 
+/* this function is the definition of horrible */
 int controlspewchan(void *sender, int cargc, char **cargv) {
   nick *np = (nick*)sender;
   nick *np2;
@@ -291,11 +299,10 @@ int controlobroadcast(void *sender, int cargc, char **cargv) {
   return CMD_OK;
 }
 
-const char GeoIP_country_code[247][3] = { "--","AP","EU","AD","AE","AF","AG","AI","AL","AM","AN","AO","AQ","AR","AS","AT","AU","AW","AZ","BA","BB","BD","BE","BF","BG","BH","BI","BJ","BM","BN","BO","BR","BS","BT","BV","BW","BY","BZ","CA","CC","CD","CF","CG","CH","CI","CK","CL","CM","CN","CO","CR","CU","CV","CX","CY","CZ","DE","DJ","DK","DM","DO","DZ","EC","EE","EG","EH","ER","ES","ET","FI","FJ","FK","FM","FO","FR","FX","GA","GB","GD","GE","GF","GH","GI","GL","GM","GN","GP","GQ","GR","GS","GT","GU","GW","GY","HK","HM","HN","HR","HT","HU","ID","IE","IL","IN","IO","IQ","IR","IS","IT","JM","JO","JP","KE","KG","KH","KI","KM","KN","KP","KR","KW","KY","KZ","LA","LB","LC","LI","LK","LR","LS","LT","LU","LV","LY","MA","MC","MD","MG","MH","MK","ML","MM","MN","MO","MP","MQ","MR","MS","MT","MU","MV","MW","MX","MY","MZ","NA","NC","NE","NF","NG","NI","NL","NO","NP","NR","NU","NZ","OM","PA","PE","PF","PG","PH","PK","PL","PM","PN","PR","PS","PT","PW","PY","QA","RE","RO","RU","RW","SA","SB","SC","SD","SE","SG","SH","SI","SJ","SK","SL","SM","SN","SO","SR","ST","SV","SY","SZ","TC","TD","TF","TG","TH","TJ","TK","TM","TN","TO","TP","TR","TT","TV","TW","TZ","UA","UG","UM","US","UY","UZ","VA","VC","VE","VG","VI","VN","VU","WF","WS","YE","YT","YU","ZA","ZM","ZR","ZW","A1","A2","O1"};
-
 int controlcbroadcast(void *sender, int cargc, char **cargv) {
   nick *np = (nick *)sender, *nip;
   int i, ext, target;
+  GeoIP_LookupCode l;
 
   if(cargc < 2)
     return CMD_USAGE;
@@ -306,13 +313,8 @@ int controlcbroadcast(void *sender, int cargc, char **cargv) {
     return CMD_ERROR;
   }
 
-  target = COUNTRY_MIN - 1;
-  for(i=COUNTRY_MIN;i<COUNTRY_MAX;i++) {
-    if(!strcasecmp(cargv[0], GeoIP_country_code[i])) {
-      target = i;
-      break;
-    }
-  }
+  l = ndlsym("geoip", "geoip_lookupcode");
+  target = l(cargv[0]);
 
   if(target == -1) {
     controlreply(np, "Invalid country.");