[-]
PasteIt Eintrag #98
Autor: Balmung
Titel: XML-Profil-Script 1.0b
Beschreibung: Profil-Script mit XML-Datenbank
XML-Muster: http://chaozzbubi.byto.de/quote.php?q=443
 

Code
  1. '# @Name: XML-Profil-Script 1.0b
  2. '# @Author: Balmung
  3. '# @Desc
  4. '# @ Profil-Script mit XML-Datenbank
  5. '# @ XML-Muster: http://chaozzbubi.byto.de/quote.php?q=443
  6. '# @Desc
  7.  
  8. 'Bitte nur Daten in der Konfigurationsdatei ändern:
  9. Const xml = "profiles.xml"
  10. 'Ein Beispiel findet ihr hier: http://chaozzbubi.byto.de/quote.php?q=443
  11. '(Kommentare aus der XML Datei am besten entfernen)
  12.  
  13.  
  14. 'Möglichkeit, die Ausgabe des Profils ein bisschen zu ändern
  15. Const AusgabeFelder = "7%FELD%:14 %INHALT%"
  16.  
  17.  
  18. 'Ab hier nichts mehr ändern
  19. '##################################
  20.  
  21.  
  22.  
  23. Dim AllowedChans()
  24. Dim ProfilFields()
  25. Dim ProfilValue()
  26. Dim RegLines()
  27.  
  28. Dim Admin
  29. Dim NeedAuth
  30. Dim AuthServ
  31. Dim MustBeOnChan
  32.  
  33. 'Dim StatusCmd
  34. 'Dim StatusMask
  35. 'Dim IdentStatus
  36.  
  37. Const ScriptName = "XML-Profil-Script 1.0b © by ChaozZBubi"
  38. Sub Init()
  39.   Script ScriptName
  40.   'Hook "Nick"
  41.   Hook "Chan_MSG"
  42.   Hook "Priv_MSG"
  43.   Hook "Priv_Notice"
  44.  
  45.   Redim RegLines(0)
  46.  
  47.   Dim XMLobj
  48.  
  49.   Set XMLobj = CreateObject("microsoft.xmldom")
  50.  
  51.   XMLobj.async = False
  52.   XMLobj.Load xml
  53.  
  54.   Set XMLRoot = XMLobj.documentElement 'inhalt des <root></root> elements
  55.  
  56.   If XMLRoot.nodeName <> "root" Then
  57.     Info "XML-Dokumentwurzel ist nicht <root> ... </root>"
  58.     Exit Sub
  59.   End If
  60.  
  61.   '<settings>
  62.   '<channels>
  63.   '<fields>
  64.   '<profiles>
  65.  
  66.   Set SettingNode = XMLRoot.getElementsByTagName("settings")
  67.   Set ChanNode = XMLRoot.getElementsByTagName("channels")
  68.   Set FieldNode = XMLRoot.getElementsByTagName("fields")
  69.   Set ProfileNode = XMLRoot.getElementsByTagName("profiles")
  70.  
  71.   Admin = ""
  72.   NeedAuth = False
  73.   AuthServ = ""
  74.  
  75.   If SettingNode.Length = 1 Then
  76.     For n = 0 To SettingNode(0).childNodes.Length - 1
  77.       Select Case SettingNode(0).childNodes.Item(n).nodeName
  78.         case "admin"
  79.           Admin = SettingNode(0).childNodes.Item(n).getAttribute("nick")
  80.         case "needauth"
  81.           NeedAuth = IIf(LCase(SettingNode(0).childNodes.Item(n).getAttribute("value")) = "yes", True, False)
  82.         case "authserv"
  83.           AuthServ = SettingNode(0).childNodes.Item(n).getAttribute("value")
  84.          
  85.         case "onchan"
  86.           MustBeOnChan = IIf(LCase(SettingNode(0).childNodes.Item(n).getAttribute("value")) = "yes", True, False)
  87.          
  88.         'case "statuscmd"
  89.         '  StatusCmd = SettingNode(0).childNodes.Item(n).getAttribute("value")
  90.         'case "statusmask"
  91.         '  StatusMask = SettingNode(0).childNodes.Item(n).getAttribute("value")
  92.         'case "identstatus"
  93.         '  IdentStatus = SettingNode(0).childNodes.Item(n).getAttribute("value")
  94.       End Select
  95.     Next
  96.   End If
  97.  
  98.   'AllowedChans()
  99.   If ChanNode.Length = 1 Then
  100.     If ChanNode(0).childNodes.Length > 0 Then
  101.       Redim AllowedChans(ChanNode(0).childNodes.Length - 1)
  102.       For n = 0 to ChanNode(0).childNodes.Length - 1
  103.         If ChanNode(0).childNodes.Item(n).nodeName = "chan" Then
  104.           AllowedChans(n) = ChanNode(0).childNodes.Item(n).getAttribute("name")
  105.         Else
  106.           AllowedChans(n) = ""
  107.         End If
  108.       Next
  109.     End If
  110.   Else
  111.     Info "Keine Chans angegeben..."
  112.   End If
  113.  
  114.  
  115.   'ProfilFields()
  116.   'ProfilValue()
  117.   If FieldNode.Length = 1 Then
  118.     If FieldNode(0).childNodes.Length > 0 Then
  119.       Redim ProfilFields(FieldNode(0).childNodes.Length - 1)
  120.       Redim ProfilValue(FieldNode(0).childNodes.Length - 1)
  121.       Info "• Formularfelder: " & FieldNode(0).childNodes.Length
  122.       For n = 0 to FieldNode(0).childNodes.Length - 1
  123.         ProfilFields(n) = FieldNode(0).childNodes.Item(n).nodeName
  124.         ProfilValue(n) = FieldNode(0).childNodes.Item(n).getAttribute("name")
  125.         'Info ProfilFields(n) & ": " & ProfilValue(n)
  126.       Next
  127.     End If
  128.   End If
  129.  
  130.   If ProfileNode.Length = 1 Then
  131.     Set xyz = ProfileNode(0).getElementsByTagName("userlist")
  132.     Set xyz2 = xyz(0).getElementsByTagName("user")
  133.     Info "• Profile: " & xyz2.Length
  134.   End If
  135.  
  136.   Info ScriptName & " running..."
  137.  
  138. End Sub
  139.  
  140. 'ReadINIString(Nick, "ID", "", ini)
  141. 'WriteINIString "Aktiv", Nick, "1", ini
  142. Sub Chan_msg(Chan, Nick, RegUser, Line)
  143.   Select Case LCase(Param(Line,1))
  144.     Case "!profil"
  145.       SendNot Nick, "Um Ein Profil anzulegen, tippe 7/msg " & MyNick & " !profilset"
  146.       SendNot Nick, "Um Infos zum ändern Deines Profils zu erhalte, tippe 7/msg " & MyNick & " !set help"
  147.       SendNot Nick, "Um dein Eigenes Profil zu sehen, tippe 7/msg " & MyNick & " !profil"
  148.       SendNot Nick, "Und um das Profil von jemand anderem zu sehen, tippe 7/msg " & MyNick & " !profil <nickname>"
  149.   End Select
  150. End Sub
  151.  
  152. '-> irc.animexx.de PRIVMSG nickserv :status ChaozZBubi
  153. '<- :NickServ!services@services.animexx.de NOTICE ChaozZBubi :STATUS ChaozZBubi 3
  154.  
  155. Sub Priv_Msg(Nick, RegUser, Line)
  156.   If Left(Line,1) = "!" Then
  157.     xID = GetNew
  158.     RegLines(xID) = Nick & " " & Line
  159.     If NeedAuth Then
  160.       'status request an service schicken
  161.       Sendline "PRIVMSG " & AuthServ & " :STATUS " & Nick, 3
  162.     Else
  163.       'kein status request an Service schicken
  164.       'sondern ein "gültiges" Request simulieren
  165.       strRequest = "STATUS " & Nick & " 3"
  166.       Priv_Notice AuthServ, "", strRequest
  167.     End If
  168.   End If
  169. End Sub
  170.  
  171.  
  172.  
  173. Sub Priv_Notice(Nick, RegUser, Line)
  174.   If LCase(Nick) = LCase(AuthServ) Then
  175.     If LCase(Param(Line,1)) = "status" Then
  176.      
  177.       rNick = Param(Line, 2)
  178.       rStatus = Param(Line, 3)
  179.       rLine = GetNickLine(rNick)
  180.       DelNickLine rNick
  181.      
  182.       IsRegistered = IIf(rStatus = "3", True, False)
  183.      
  184.       Dim XMLobj
  185.       Set XMLobj = CreateObject("microsoft.xmldom")
  186.       XMLobj.async = False
  187.       XMLobj.Load xml
  188.      
  189.       Set XMLRoot = XMLobj.documentElement
  190.       Select Case LCase(Param(rLine, 1))
  191.         Case "!profil"
  192.           Set ProfileNode = XMLRoot.getElementsByTagName("profiles")
  193.           If OnMyChans(rNick) Then
  194.             If IsRegistered And Param(rLine, 2) = "" Then
  195.               Info rNick & " requested his/her profile"
  196.               If ProfileNode.Length = 1 Then
  197.                 If ProfileNode(0).childNodes.Length > 0 Then
  198.                   Set UserList = ProfileNode(0).getElementsByTagName("userlist")
  199.                   If UserList.Length = 1 Then
  200.                     For n = 0 To UserList(0).childNodes.Length - 1
  201.                       Set UserNode = UserList(0).childNodes.Item(n)
  202.                       If LCase(rNick) = LCase(UserNode.getAttribute("nick")) Then
  203.                         NickId = UserNode.getAttribute("id")
  204.                        
  205.                         Set NickNode = ProfileNode(0).getElementsByTagName(NickId)
  206.                         Set FieldNode = XMLRoot.getElementsByTagName("fields")
  207.                        
  208.                         If NickNode.Length = 1 And FieldNode.Length = 1 Then
  209.                           For i = 0 to NickNode(0).childNodes.Length - 1
  210.                             xField = NickNode(0).childNodes.Item(i).nodeName
  211.                             Set pField = FieldNode(0).getElementsByTagName(xField)
  212.                             If pField.Length = 1 Then
  213.                               Value = NickNode(0).childNodes.Item(i).getAttribute("value")
  214.                               xFieldText = pField(0).getAttribute("name")
  215.                               If Trim(Value) <> "" Then
  216.                                 SendMsg rNick, Replace(Replace(AusgabeFelder,"%FELD%",xFieldText),"%INHALT%",Value)
  217.                               End If
  218.                             End If
  219.                           Next
  220.                         End If
  221.                         Exit For
  222.                       End If
  223.                     Next
  224.                   End If
  225.                 End If
  226.               End If
  227.             Else
  228.               If Param(rLine, 2) <> "" Then
  229.                 Info rNick & " requested the profile of " & Param(rLine, 2)
  230.                 'nickname raussuchen und auflisten
  231.                 Set UserList = ProfileNode(0).getElementsByTagName("userlist")
  232.                 If UserList.Length = 1 Then
  233.                   For n = 0 To UserList(0).childNodes.Length - 1
  234.                     Set UserNode = UserList(0).childNodes.Item(n)
  235.                     If LCase(Param(rLine, 2)) = LCase(UserNode.getAttribute("nick")) Then
  236.                       NickId = UserNode.getAttribute("id")
  237.                      
  238.                       Set NickNode = ProfileNode(0).getElementsByTagName(NickId)
  239.                       Set FieldNode = XMLRoot.getElementsByTagName("fields")
  240.                      
  241.                       If NickNode.Length = 1 And FieldNode.Length = 1 Then
  242.                         For i = 0 to NickNode(0).childNodes.Length - 1
  243.                           xField = NickNode(0).childNodes.Item(i).nodeName
  244.                           Set pField = FieldNode(0).getElementsByTagName(xField)
  245.                           If pField.Length = 1 Then
  246.                             Value = NickNode(0).childNodes.Item(i).getAttribute("value")
  247.                             xFieldText = pField(0).getAttribute("name")
  248.                             If Trim(Value) <> "" Then
  249.                               SendMsg rNick, Replace(Replace(AusgabeFelder,"%FELD%",xFieldText),"%INHALT%",Value)
  250.                             End If
  251.                           End If
  252.                         Next
  253.                       End If
  254.                       Exit For
  255.                     End If
  256.                   Next
  257.                   'Set UserNode = UserList(0)
  258.                   'NickId = UserNode.getAttribute("id")
  259.                   'Set NickNode = ProfileNode(0).getElementsByTagName(NickId)
  260.                 End If
  261.               Else
  262.                 Info rNick & " requested his/her Profile, but isn't authed"
  263.                 SendMsg rNick, "Du musst dei NickServ registriert und identifiziert sein um dein eigenes Profil zu sehen. /msg NickServ HELP REGISTER"
  264.                 SendMsg rNick, "Wenn du das Profil von jemand anderen sehen möchtest, tippe !profil <nickname>"
  265.               End If
  266.             End If
  267.           Else
  268.             SendMsg rNick, "Du musst in einem meiner Chans sein!"
  269.           End If
  270.         case "!profilset"
  271.           Set ProfileNode = XMLRoot.getElementsByTagName("profiles")
  272.           If OnMyChans(rNick) Then
  273.             If IsRegistered Then
  274.               'überprüfen ob user ein profil hat
  275.               Set UserList = ProfileNode(0).getElementsByTagName("userlist")
  276.               NickID = "nick0"
  277.               hID = 0
  278.               For n = 0 to UserList(0).childNodes.Length - 1
  279.                 If UserList(0).childNodes.Item(n).nodeName = "user" Then
  280.                   nNick = UserList(0).childNodes.Item(n).getAttribute("nick")
  281.                   if LCase(nNick) = LCase(rNick) Then
  282.                     NickID = UserList(0).childNodes.Item(n).getAttribute("id")
  283.                   End If
  284.                 ElseIf UserList(0).childNodes.Item(n).nodeName = "hid" Then
  285.                   hID = UserList(0).childNodes.Item(n).getAttribute("value")
  286.                   If Not NickID = "nick0" Then Exit For
  287.                 End If
  288.               Next
  289.               If Not NickID = "nick0" Then
  290.                 Info rNick & " requested to Change his/her Profile"
  291.                
  292.                 SendMsg rNick, "Willkommen im Profil Setup, um Daten in deinem Profil zu ändern, musst du jedesmal den Befehl 4!set benutzen"
  293.                 SendMsg rNick, "Tippe 4!set help um dir Informationen zur Bedienung anzeigen zu lassen."
  294.               Else
  295.                 'keine id gefunden, user muss erstellt werden
  296.                 info rNick & " Profil wird erstellt"
  297.                 hID = hID + 1
  298.                 Set HighNode = UserList(0).getElementsByTagName("hid")
  299.                 HighNode(0).setAttribute "value", hID
  300.                
  301.                
  302.                 Set NewNode = XMLobj.createElement("user")
  303.                 NewNode.setAttribute "nick", rNick
  304.                 NewNode.setAttribute "id", "nick" & hID
  305.                 UserList(0).appendChild NewNode
  306.                
  307.                 Set NewNode = XMLobj.createElement("nick" & hID)
  308.                
  309.                 Set FieldNode = XMLRoot.getElementsByTagName("fields")
  310.                 For n = 0 To FieldNode(0).childNodes.Length - 1
  311.                   Set Field = FieldNode(0).childNodes.Item(n)
  312.                   Set NewFieldNode = XMLobj.createElement(Field.nodeName)
  313.                   NewFieldNode.setAttribute "value", ""
  314.                   NewNode.appendChild NewFieldNode
  315.                 Next
  316.                
  317.                 ProfileNode(0).appendChild NewNode
  318.                
  319.                
  320.                 info rNick & " Profil wird gespeichert"
  321.                 XMLobj.Save xml
  322.                
  323.                 SendMsg rNick, "Willkommen im Profil Setup, um Daten in deinem Profil zu ändern, musst du jedesmal den Befehl 4!set benutzen"
  324.                 SendMsg rNick, "Tippe 4!set help um dir Informationen zur Bedienung anzeigen zu lassen."
  325.               End If
  326.             Else
  327.               SendMsg rNick, "Du musst dei NickServ registriert und identifiziert sein um dein Profil ändern zu können. /msg NickServ HELP REGISTER"
  328.             End If
  329.           Else
  330.             SendMsg rNick, "Du musst in einem meiner Chans sein!"
  331.           End If
  332.         Case "!set"
  333.           Set ProfileNode = XMLRoot.getElementsByTagName("profiles")
  334.           If OnMyChans(rNick) Then
  335.             If IsRegistered Then
  336.               Select Case LCase(Param(rLine, 2))
  337.                 Case "help"
  338.                   Set FieldNode = XMLRoot.getElementsByTagName("fields")
  339.                   strFields = ""
  340.                   fCount = 0
  341.                  
  342.                   SendMsg rNick, "Um Daten deines Profils zu ändern Tippe 7!set Feld Text."
  343.                   SendMsg rNick, "7Feld: gebe bitte eine der Folgenden Namen ein:"
  344.                  
  345.                   For n = 0 To FieldNode(0).childNodes.Length - 1
  346.                     strFields = strFields & IIf(strFields = "", "", ", ") & "4" & FieldNode(0).childNodes.Item(n).nodeName & ""
  347.                     fCount = fCount + 1
  348.                     If fCount = 8 Then
  349.                       SendMsg rNick, strFields
  350.                       strFields = ""
  351.                       fCount = 0
  352.                     End If
  353.                   Next
  354.                   if fCount > 0 Then
  355.                     SendMsg rNick, strFields
  356.                   End If
  357.                  
  358.                   SendMsg rNick, "7Text: Als Text kannst du dann einen Beliebigen passenden Text eingeben, den du in Dieses Feld stehen haben willst."
  359.                   SendMsg rNick, "Um ein Beispiel zu sehen, tippe: 4!set beispiel"
  360.                  
  361.                 Case "beispiel", "beispiele", "example"
  362.                   Set FieldNode = XMLRoot.getElementsByTagName("fields")
  363.                   Randomize
  364.                   z = Int(Rnd * FieldNode(0).childNodes.Length)
  365.                   nName = FieldNode(0).childNodes.Item(z).nodeName
  366.                   'Desc = FieldNode(0).childNodes.Item(z).getAttribute("name")
  367.                   Select Case nName
  368.                     case "name"
  369.                       Value = "Hans Peter"
  370.                     case "email"
  371.                       Value = "hans@beispiel.de"
  372.                     case "icq"
  373.                       Value = "123-456-789"
  374.                     case "www"
  375.                       Value = "www.beispiel.de"
  376.                     case Else
  377.                       Value = "Irgendein Text, der hier hin passt"
  378.                   End Select
  379.                   SendMsg rNick, "!set " & nName & " " & Value
  380.                   SendMsg rNick, "Dieser Befehl würde den Profil-Eintrag """ & nName & """ mit dem Text """ & Value & """ füllen"
  381.                 Case else
  382.                   sField = LCase(Param(rLine, 2))
  383.                   Set FieldNode = XMLRoot.getElementsByTagName("fields")
  384.                  
  385.                   Found = False
  386.                   For n = 0 To FieldNode(0).childNodes.Length
  387.                     Set xField = FieldNode(0).childNodes.Item(n)
  388.                     If xField.nodeName = sField Then
  389.                       Found = True
  390.                       FieldName = xField.getAttribute("name")
  391.                       Exit For
  392.                     End If
  393.                   Next
  394.                  
  395.                   If Not Found Then
  396.                     SendMsg rNick, "Das angegebene Feld """ & sField & """ existiert nicht, oder wurde gelöscht!"
  397.                   Else
  398.                    
  399.                     Set UserList = ProfileNode(0).getElementsByTagName("userlist")
  400.                     NickID = "nick0"
  401.                     For n = 0 to UserList(0).childNodes.Length - 1
  402.                       If UserList(0).childNodes.Item(n).nodeName = "user" Then
  403.                         nNick = UserList(0).childNodes.Item(n).getAttribute("nick")
  404.                         if LCase(nNick) = LCase(rNick) Then
  405.                           NickID = UserList(0).childNodes.Item(n).getAttribute("id")
  406.                           Exit For
  407.                         End If
  408.                       End If
  409.                     Next
  410.                     If Not NickID = "nick0" Then
  411.                       Set NickNode = ProfileNode(0).getElementsByTagName(NickID)
  412.                      
  413.                       'falls node <nickX> (X steht für eine Zahl) nicht existiert, wird der Node erstellt
  414.                       If NickNode.Length = 0 Then
  415.                         Set NewNode = XMLobj.createElement(NickID)
  416.                         Set FieldNode = XMLRoot.getElementsByTagName("fields")
  417.                         For n = 0 To FieldNode(0).childNodes.Length - 1
  418.                           Set Field = FieldNode(0).childNodes.Item(n)
  419.                           Set NewFieldNode = XMLobj.createElement(Field.nodeName)
  420.                           NewFieldNode.setAttribute "value", ""
  421.                           NewNode.appendChild NewFieldNode
  422.                         Next
  423.                         ProfileNode(0).appendChild NewNode
  424.                        
  425.                         '<nickx> den profiles hinzufügen
  426.                         Set NickNode = ProfileNode(0).getElementsByTagName(NickID)
  427.                         NewNode = Nothing
  428.                       End If
  429.                      
  430.                       'NickNode ist jetzt der Node des users
  431.                      
  432.                       'überprüfen ob node "sField" im NickNode existiert
  433.                       Set nField = NickNode(0).getElementsByTagName(sField)
  434.                       If nField.Length = 1 Then
  435.                         nField(0).setAttribute "value", GetRest(rLine, 3)
  436.                       Else
  437.                         Set NewNode = XMLobj.createElement(sField)
  438.                         NewNode.setAttribute "value", GetRest(rLine, 3)
  439.                         NickNode(0).appendChild NewNode
  440.                       End If
  441.                      
  442.                       SendMsg rNick, "7" & Fieldname & " wurde in 7""" & GetRest(rLine, 3) & """ geändert!"
  443.                       'FieldName geändert
  444.                      
  445.                      
  446.                       XMLobj.Save xml
  447.                       Info "Daten Speichern!"
  448.                     Else
  449.                       SendMsg rNick, "Für dich ist noch kein Profil angelegt. Bitte gib zuerst 4!profilset ein, um fortfahren zu können."
  450.                     End If
  451.                   End IF
  452.                  
  453.                  
  454.               End Select
  455.             Else
  456.               SendMsg rNick, "Du musst dei NickServ registriert und identifiziert sein um dein Profil ändern zu können. /msg NickServ HELP REGISTER"
  457.             End If
  458.           Else
  459.             SendMsg rNick, "Du musst in einem meiner Chans sein!"
  460.           End If
  461.         Case "!fields"
  462.           Set FieldNode = XMLRoot.getElementsByTagName("fields")
  463.           strOut = ""
  464.           If Param(rLine, 2) <> "" Then
  465.             For n = 0 To FieldNode(0).childNodes.Length - 1
  466.               If FieldNode(0).childNodes.Item(n).nodeName = LCase(Param(rLine, 2)) Then
  467.                 SendMsg rNick, """4" & FieldNode(0).childNodes.Item(n).nodeName & """ 7Beschreibung: " & FieldNode(0).childNodes.Item(n).getAttribute("name")
  468.               End If
  469.             Next
  470.           Else
  471.             For n = 0 To FieldNode(0).childNodes.Length - 1
  472.               SendMsg rNick, """4" & FieldNode(0).childNodes.Item(n).nodeName & """ 7Beschreibung: " & FieldNode(0).childNodes.Item(n).getAttribute("name")
  473.             Next
  474.           End If
  475.         Case "!addfield"
  476.           if LCase(rNick) = LCase(Admin) then
  477.             'mindestens zwei zusätzliche angaben?
  478.             If Param(rLine,3) <> "" Then
  479.               'nicht erlaubte felder überprüfen
  480.               Select Case LCase(Param(rLine,2))
  481.                 Case "fields", "settings", "channels", "profiles", "userlist", "admin"
  482.                   SendMsg rNick, "Das Feld """ & LCase(Param(rLine,2)) & """ ist nicht erlaubt"
  483.                 Case Else
  484.                   Set FieldNode = XMLRoot.getElementsByTagName("fields")
  485.                   Set AddNode = FieldNode(0).getElementsByTagName(LCase(Param(rLine,2)))
  486.                   If AddNode.Length = 0 Then
  487.                     'wird erstellt
  488.                     Set NewNode = XMLobj.createElement(LCase(Param(rLine,2)))
  489.                     FieldNode(0).appendChild NewNode
  490.                   Else
  491.                     'existiert bereits
  492.                     Set NewNode = AddNode(0)
  493.                   End If
  494.                  
  495.                   NewNode.setAttribute "name", GetRest(rLine,3)
  496.                  
  497.                   SendMsg rNick, "Das Feld """ & NewNode.nodeName & """ wurde mit der Beschreibung: """ & GetRest(rLine,3) & """ hinzugefügt!"
  498.                  
  499.                   XMLobj.save xml
  500.                   Info "Daten Speichern!"
  501.               End Select
  502.             Else
  503.               SendMsg rNick, "Nicht genügend Angaben, Syntax: !addfield <Feldname> <Beschreibung>"
  504.             End If
  505.           Else
  506.             SendNot rNick, "Du bist nicht Mein Meister"
  507.           End If
  508.         Case "!deletefield", "!delfield"
  509.           if LCase(rNick) = LCase(Admin) then
  510.             If Param(rLine,2) <> "" Then
  511.               Set FieldNode = XMLRoot.getElementsByTagName("fields")
  512.               Set RemNodes = FieldNode(0).getElementsByTagName(LCase(Param(rLine,2)))
  513.               If RemNodes.Length > 0 Then
  514.                 Set RemElement = RemNodes(0)
  515.                 Set NodeResult = FieldNode(0).removeChild(RemElement)
  516.                 If NodeResult Is Nothing Then
  517.                   SendMsg rNick, LCase(Param(rLine,2)) & " konnte nicht gelöscht werden!"
  518.                 Else
  519.                   SendMsg rNick, LCase(Param(rLine,2)) & " wurde gelöscht!"
  520.                 End If
  521.                
  522.                 'Set ProfileNode = XMLRoot.getElementsByTagName("profiles")
  523.                 'müsste dann noch, das entfernen der felder aus den user-profilen
  524.                
  525.                
  526.                 XMLobj.Save xml
  527.                 Info "Daten Speichern!"
  528.               Else
  529.                 SendMsg rNick, LCase(Param(rLine,2)) & " konnte nicht gelöscht werden! (nicht gefunden)"
  530.               End If
  531.             Else
  532.               SendMsg rNick, "Nicht genügend Angaben, Syntax: !deletefield <Feldname> <Beschreibung>"
  533.             End If
  534.           Else
  535.             SendNot rNick, "Du bist nicht Mein Meister"
  536.           End If
  537.          
  538.       End Select
  539.     End If
  540.   End If
  541. End Sub
  542.  
  543.  
  544. Sub SendMsg(Target, Line)
  545.   SendLine "PRIVMSG " & Target & " :" & line, 3
  546. End Sub
  547. Sub SendNot(Target, Line)
  548.   SendLine "NOTICE " & Target & " :" & line, 3
  549. End Sub
  550. Sub Info(Line)
  551.   SpreadFlagMessage 0, "+m", "14***7 " & Line
  552. end Sub
  553.  
  554.  
  555. 'Dient dem Überprüfen, ob ein User beim NickServ registriert und identifiziert ist
  556. Function GetNickLine(Nick)
  557.   For n = 0 To UBound(RegLines)
  558.     If LCase(Param(RegLines(n), 1)) = LCase(Nick) Then
  559.       GetNickLine = GetRest(RegLines(n), 2)
  560.       Exit Function
  561.     End If
  562.   Next
  563.   GetNickLine = ""
  564. End Function
  565.  
  566. Function GetNew()
  567.   For n = 0 To UBound(RegLines)
  568.     If RegLines(n) = "" Then
  569.       GetNew = n
  570.       Exit Function
  571.     End If
  572.   Next
  573.   n = UBound(RegLines) + 1
  574.   Redim Preserve RegLines(n)
  575.   RegLines(n) = ""
  576.   GetNew = n
  577. End Function
  578.  
  579. Sub DelNickLine(Nick)
  580.   For n = 0 To UBound(RegLines)
  581.     If LCase(Param(RegLines(n), 1)) = LCase(Nick) Then
  582.       RegLines(n) = ""
  583.     End If
  584.   Next
  585. End Sub
  586.  
  587.  
  588. Function MakeValidRegExp(strRegExp)
  589.   Dim L
  590.   strOut = ""
  591.   For n = 1 To Len(strRegExp)
  592.     L = Mid(strRegExp,n,1)
  593.     Select Case L
  594.       case ".", "-", "(", ")", "[", "]", "{", "}", "\", "+", "|", "^", "$"
  595.         L = "\" & L
  596.       case "*"
  597.         L = "(.*)" 'beliebige zeichen
  598.       case "?"
  599.         L = "(.)" 'ein einzelnes zeichen
  600.     End Select
  601.     strOut = strOut & L
  602.   Next
  603.   MakeValidRegExp = strOut
  604. End Function
  605.  
  606.  
  607. Function OnMyChans(Nick)
  608.   If MustBeOnChan Then
  609.     For n = 0 to UBound(AllowedChans)
  610.       If IsOn(Nick, AllowedChans(n)) Then
  611.         OnMyChans = True
  612.         Exit Function
  613.       End If
  614.     Next
  615.     OnMyChans = False
  616.   Else
  617.     OnMyChans = True
  618.   end If
  619. End Function