]> jfr.im git - irc/evilnet/x3.git/blobdiff - src/helpfile.c
Upgrading to GPL v3
[irc/evilnet/x3.git] / src / helpfile.c
index 071b27227c33b29deae8e5df3946cc53a5a3d0aa..b46d24a04d7d21b180780bc3692c451d57f1eeda 100644 (file)
@@ -5,7 +5,7 @@
  *
  * x3 is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
+ * the Free Software Foundation; either version 3 of the License, or
  * (at your option) any later version.
  *
  * This program is distributed in the hope that it will be useful,
@@ -308,10 +308,18 @@ table_send(struct userNode *from, const char *to, unsigned int size, irc_send_fu
 
     if (irc_send)
         {} /* use that function */
-    else if (hi)
+    else if(IsChannelName(to)) {
+        irc_send = irc_privmsg;
+    }
+    else if (message_dest->no_notice) {
+        irc_send = irc_privmsg;
+    }
+    else if (hi) {
         irc_send = HANDLE_FLAGGED(hi, USE_PRIVMSG) ? irc_privmsg : irc_notice;
-    else
-        irc_send = IsChannelName(to) ? irc_privmsg : irc_notice;
+    }
+    else {
+        irc_send = irc_notice;
+    }
 
     /* Limit size to how much we can show at once */
     if (size > sizeof(line))
@@ -444,6 +452,8 @@ vsend_message(const char *dest, struct userNode *src, struct handle_info *handle
     unsigned int size, ipos, pos, length, chars_sent, use_color;
     unsigned int expand_pos, expand_ipos, newline_ipos;
     char line[MAX_LINE_SIZE];
+    struct service *service;
+    static char* trigger = NULL;
 
     if (IsChannelName(dest) || *dest == '$') {
         message_dest = NULL;
@@ -481,7 +491,10 @@ vsend_message(const char *dest, struct userNode *src, struct handle_info *handle
         size = DEFAULT_LINE_SIZE;
     switch (msg_type & 3) {
         case 0:
-            irc_send = irc_notice;
+            if(message_dest && message_dest->no_notice)
+               irc_send = irc_privmsg;
+            else
+               irc_send = irc_notice;
             break;
         case 2:
             irc_send = irc_wallchops;
@@ -499,7 +512,7 @@ vsend_message(const char *dest, struct userNode *src, struct handle_info *handle
     expand_pos = pos = 0;
     chars_sent = 0;
     while (input.list[ipos]) {
-       char ch, *value, *free_value;
+       char ch, *value = NULL, *free_value;
 
         while ((ch = input.list[ipos]) && (ch != '$') && (ch != '\n') && (pos < size)) {
            line[pos++] = ch;
@@ -553,6 +566,9 @@ vsend_message(const char *dest, struct userNode *src, struct handle_info *handle
        case 'b':
            value = use_color ? "\002" : "";
            break;
+       case 'k':
+           value = use_color ? "\003" : "";
+           break;
        case 'o':
            value = use_color ? "\017" : "";
            break;
@@ -584,9 +600,23 @@ vsend_message(const char *dest, struct userNode *src, struct handle_info *handle
         case 's':
             value = self->name;
             break;
+#ifdef HAVE_HELPSERV
+        case 'i':
+            value = strdup(get_helpserv_id(dest, src));
+            break;
+#endif
        case 'H':
            value = handle ? handle->handle : "Account";
            break;
+        case '!':  /* Command Char for chanserv */
+            if(!trigger)
+               trigger = calloc(sizeof(*trigger), 2);
+            if(chanserv && (service = service_find(chanserv->nick)))
+                trigger[0] = service->trigger;
+            else
+                trigger[0] = '!';
+            value = trigger;
+            break;
 #define SEND_LINE(TRUNCED) do { \
     line[pos] = 0; \
     if (pos > 0) { \