fixed colors in cmd_neonserv_nicklist.c
[NeonServV5.git] / src / modules / NeonServ.mod / cmd_neonserv_nicklist.c
index d8fe67a0bc3c52a1a08db348a55bf92867f53666..5043f42fc653fe338c4bba74c5a38d85053762a4 100644 (file)
@@ -1,4 +1,4 @@
-/* cmd_neonserv_nicklist.c - NeonServ v5.5
+/* cmd_neonserv_nicklist.c - NeonServ v5.6
  * Copyright (C) 2011-2012  Philipp Kreil (pk910)
  * 
  * This program is free software: you can redistribute it and/or modify
@@ -122,12 +122,13 @@ static void neonserv_cmd_nicklist_async1(struct ClientSocket *client, struct Cli
     char *content[4];
     int userlistlen, i, j;
     int db_enfops, db_enfvoice;
-    int caccess, synced_user;
+    int caccess, synced_user, accessbufpos;
     struct ChanUser *chanusers[chan->usercount];
     struct ChanUser *chanuser;
+    struct ClientSocket *bot;
     int chanuser_count;
     char statebuf[5];
-    char accessbuf[9];
+    char accessbuf[50];
     char viscountbuf[5];
     int uaccess;
     
@@ -199,20 +200,20 @@ static void neonserv_cmd_nicklist_async1(struct ClientSocket *client, struct Cli
                                 uaccess = db_enfvoice;
                             } else {
                                 //fail...
-                                sprintf(accessbuf, "\00307%d\003", uaccess);
+                                accessbufpos = sprintf(accessbuf, "\00307%d\003", uaccess);
                                 break;
                             }
                             neonserv_cmd_nicklist_synchronize_user(chan, chanuser->user, uaccess);
-                            sprintf(accessbuf, "\00309%d\003", uaccess);
+                            accessbufpos = sprintf(accessbuf, "\00309%d\003", uaccess);
                             synced_user = 1;
                         } else {
                             synced_user = 1;
-                            sprintf(accessbuf, "\00307%d\003", uaccess);
+                            accessbufpos = sprintf(accessbuf, "\00307%d\003", uaccess);
                         }
                     } else if((uaccess >= db_enfops && !(chanuser->flags & CHANUSERFLAG_OPPED)) || (uaccess >= db_enfvoice && !(chanuser->flags & CHANUSERFLAG_OPPED_OR_VOICED)))
-                        sprintf(accessbuf, "\00303%d\003", uaccess);
+                        accessbufpos = sprintf(accessbuf, "\00303%d\003", uaccess);
                     else
-                        sprintf(accessbuf, "%d", uaccess);
+                        accessbufpos = sprintf(accessbuf, "%d", uaccess);
                     break;
                 }
             }
@@ -229,21 +230,52 @@ static void neonserv_cmd_nicklist_async1(struct ClientSocket *client, struct Cli
                     uaccess = db_enfvoice;
                 } else {
                     uaccess = 0;
-                    sprintf(accessbuf, "\003040\003");
+                    accessbufpos = sprintf(accessbuf, "\003040\003");
                 }
                 if(uaccess && (chanuser->user->flags & USERFLAG_ISAUTHED)) {
                     neonserv_cmd_nicklist_synchronize_user(chan, chanuser->user, uaccess);
-                    sprintf(accessbuf, "\00309%d\003", uaccess);
+                    accessbufpos = sprintf(accessbuf, "\00309%d\003", uaccess);
                     synced_user = 1;
                 } else if(uaccess) {
-                    sprintf(accessbuf, "\003040\003");
+                    accessbufpos = sprintf(accessbuf, "\003040\003");
                 }
             } else {
                 synced_user = 1;
-                sprintf(accessbuf, "\003040\003");
+                if(((chanuser->flags & CHANUSERFLAG_OPPED) && db_enfops > caccess) || ((chanuser->flags & CHANUSERFLAG_VOICED) && db_enfvoice > caccess))
+                    accessbufpos = sprintf(accessbuf, "\003040\003");
+                else
+                    accessbufpos = sprintf(accessbuf, "0");
             }
         } else if(!uaccess)
-            sprintf(accessbuf, "0");
+            accessbufpos = sprintf(accessbuf, "0");
+        j = 0;
+        if(isBot(chanuser->user)) {
+            //check if bot is secret
+            for(bot = getBots(SOCKET_FLAG_READY, NULL); bot; bot = getBots(SOCKET_FLAG_READY, bot)) {
+                if(bot->user == chanuser->user)
+                    break;
+            }
+            if(bot && !(bot->flags & SOCKET_FLAG_SECRET_BOT)) {
+                if(j)
+                    accessbufpos += sprintf(accessbuf+accessbufpos, ", ");
+                else {
+                    accessbufpos += sprintf(accessbuf+accessbufpos, " (");
+                    j = 1;
+                }
+                accessbufpos += sprintf(accessbuf+accessbufpos, "%s", get_language_string(user, "NS_NICKLIST_ACCESS_BOT"));
+            }
+        }
+        if(chanuser->user->flags & USERFLAG_ISIRCOP) {
+            if(j)
+                accessbufpos += sprintf(accessbuf+accessbufpos, ", ");
+            else {
+                accessbufpos += sprintf(accessbuf+accessbufpos, " (");
+                j = 1;
+            }
+            accessbufpos += sprintf(accessbuf+accessbufpos, "%s", get_language_string(user, "NS_NICKLIST_ACCESS_OPER"));
+        }
+        if(j)
+            accessbufpos += sprintf(accessbuf+accessbufpos, ")");
         content[2] = accessbuf;
         if(flags & NEONSERV_CMD_NICKLIST_FLAG_VISCOUNT) {
             sprintf(viscountbuf, "%d", chanuser->visCount);