Attribute VB_Name = "modOperators"

Option Explicit
    
Public Channel(1 To 10) As New frmChannel
Public ChannelName(1 To 10) As String

Public Messages(1 To 100) As New frmPrivate
Public messagesName As String

Public server As String

Public Function AllIsOp(strNick As String) As Boolean
    Dim lngCounter As Long
    Dim intCounter As Integer
    Dim strTemp As String
    Dim strTag As String
    
    For lngCounter = 0 To Forms.Count - 1
        strTag = LCase(Forms(lngCounter).Tag)
        If Len(strTag) <> 0 Then
            If Left(strTag, 1) = "#" Then
                If SearchList(Forms(lngCounter).lstNick, "@" & strNick) Then
                    AllIsOp = True
                    Exit Function
                End If
            End If
        End If
    Next
    AllIsOp = False
End Function

Public Function AllIsVoice(strNick As String) As Boolean
    Dim lngCounter As Long
    Dim intCounter As Integer
    Dim strTemp As String
    Dim strTag As String
    
    For lngCounter = 0 To Forms.Count - 1
        strTag = LCase(Forms(lngCounter).Tag)
        If Len(strTag) <> 0 Then
            If Left(strTag, 1) = "#" Then
                If SearchList(Forms(lngCounter).lstNick, "+" & strNick) Then
                    AllIsVoice = True
                    Exit Function
                End If
            End If
        End If
    Next
    AllIsVoice = False
End Function

'Check for op in given channel
Public Function IsOp(strChannel As String, strNick As String) As Boolean
    If FindNameAll(strChannel, "@" & strNick) Then
        IsOp = True
    Else
        IsOp = False
    End If
End Function

'Check for voice in given channel
Public Function IsVoice(strChannel As String, strNick As String) As Boolean
    If FindNameAll(strChannel, "+" & strNick) = True Then
        IsVoice = True
    Else
        IsVoice = False
    End If
End Function

'Give regular user a +
Public Sub Voice(strChannel As String, strNick As String)
'only voice when no voiced or no opped
    If Not IsOp(strChannel, strNick) Then
        If Not IsVoice(strChannel, strNick) Then
            RemoveName strChannel, strNick
            AddToList strChannel, "+" & strNick
        End If
    End If
End Sub

'Take away the + from user
Public Sub DeVoice(strChannel As String, strNick As String)
'only devoice when only voiced
    If IsVoice(strChannel, strNick) Then
        RemoveName strChannel, "+" & strNick
        AddToList strChannel, strNick
    End If
End Sub

'Give regular/voice user a @
Public Sub Op(strChannel As String, strNick As String)
'if voiced, then remove voiced then add @
    If IsOp(strChannel, strNick) = False Then
        If IsVoice(strChannel, strNick) Then
            RemoveName strChannel, "+" & strNick
        Else
            RemoveName strChannel, strNick
        End If
        
            AddToList strChannel, "@" & strNick
    End If
End Sub

'Take away the @ from user
Public Sub DeOp(strChannel As String, strNick As String)
'only when opped
    If IsOp(strChannel, strNick) Then
        RemoveName strChannel, "@" & strNick
        AddToList strChannel, strNick
    End If
End Sub

Public Sub SetNickMode(strChannel As String, strReceiver As String, strMode As String)
    Dim strSign As String
    Dim strChar As String
    
    strSign = Left(strMode, 1)
    strChar = Right(strMode, 1)
    
    If strSign = "+" Then
        If LCase(strChar) = "o" Then
            Op strChannel, strReceiver
        ElseIf LCase(strChar) = "v" Then
            Voice strChannel, strReceiver
        ElseIf LCase(strChar) = "b" Then
            RemoveName LCase(strChannel), strReceiver
        End If
    ElseIf strSign = "-" Then
        If LCase(strChar) = "o" Then
            DeOp strChannel, strReceiver
        ElseIf LCase(strChar) = "v" Then
            DeVoice strChannel, strReceiver
        End If
    End If
End Sub