'PNF
'1.11
'&Project Neglected Fury:ShadoW and Vector:Mimics Neglected Fury's as closely as scripting will allow
'& Lockdown [on/off]; PNFVersion; Limit <User> <Access To Give Out>; stopcmds; Halt <User>
'&
'& Users must be safelisted or have Access to enter channel.:Can be toggled using .Lockdown On to turn it on, or .Lockdown off to turn it off.
'&
'*Stealthbot Enhancement
'// Define the debugger variable
Dim Debug
'// Is global debugging enabled?
Private PNFDebugGlobal
PNFDebugGlobal = False
'// Move "Passwords" to PNFSettings.ini
'// DO NOT EDIT THE SETTING BELOW!
PNF_Clan = "Private"
Const PNFSettingsPath = "PNFSettings.ini"
'// Is Access Limitation enabled?
Private PNFAccessLimitBool
PNFAccessLimitBool = True
Private isHalted
Private arrHaltFlags
arrHaltFlags = Array("a", "m", "o")
Private PNFAddSetCommand, PNFLimitUsersAcc
'// Default PNF Setting for "add" and "set" commands
PNFAddSetCommand = 70
'// access for limit command
PNFLimitUsersAcc = 100
Private PNFPass
Sub PNF_event_load()
AddChat VBOrange, "Project Neglected Fury Version " & psVersions.Item("pnf") & " by ShadoW and Vector is loaded"
SetSetting "PNF", "Active", True, "", True
'// This setting determines whether the bot answers the user whispering or not.
SetSetting "PNF", "Spam", True, "", True
'// The timer being used for allowing users to join the clan channel.
TimerInterval "PNF", "Close", 15
TimerEnabled "PNF", "Close", False
SetSetting "PNF", "Lockdown", False, "", True
SetSetting "PNF", "IW", False, "", True
SetSetting "PNF", "CP", False, "", True
SetSetting "PNF", "CPMembers", False, "", True
TimerEnabled "PNF", "Reset", False
TimerInterval "PNF", "Reset", 5
PNFLW = VBNullstring
If GetConfigEntry ("halt", "stoppedCmds", PNFSettingsPath) = "" Then
WriteConfigEntry "Halt", "stoppedCmds", False, PNFSettingsPath
isHalted = GetConfigEntry("halt", "stoppedCmds", PNFSettingsPath)
End If
If InStr(Lcase(GetBotVersion), "beta") Then
AddChat vbRed, "?cb[PNF]?cb StealthBot beta detected."
AddChat vbRed, "?cb[PNF]?cb Access limitation feature will have to be manulay overwritten in commands.xml..."
Exit Sub
Else
Debug.Write vbYellow, "Access limitation status: " & PNFAccessLimitBool
If PNFAccessLimitBool Then
Debug.Write vbYellow, "Checking limitations of ""add"" and ""set"" commands..."
If GetConfigEntry("numeric", "add", "access.ini") = "" Or _
GetConfigEntry("numeric", "set", "access.ini") = "" Then
Debug.Write vbYellow, "Changing access of ""add"" and ""set"" to 1000..."
WriteConfigEntry "numeric", "add", 1000, "access.ini"
WriteConfigEntry "numeric", "set", 1000, "access.ini"
Debug.Write vbGreen, "Done correcting limitations."
End If
Else
If GetConfigEntry("numeric", "add", "access.ini") <> 70 Or _
GetConfigEntry("numeric", "set", "access.ini") <> 70 Then
WriteConfigEntry "numeric", "add", 70, "access.ini"
WriteConfigEntry "numeric", "set", 70, "access.ini"
Debug.Write vbYellow, "Set both ""add"" and ""set"" commands to default values."
End If
End If
Debug.Write vbGreen, "Done checking PNF Limitation function."
End If
End Sub
Sub PNF_Event_PressedEnter(Text)
If LCase(Text) = "/" & LCase("PNFVarcheck") OR LCase(Text) = "//" & LCase("PNFVarcheck") Then
VetoThisMessage
If PNFPass = VBNullstring Then
AddChat VBRed, "The PNF Password is not set. Please set one using the CP command"
Else
AddChat VBGreen, PNFPass
End If
End If
Call PNF_ProcessInput(BotVars.Username, Text, 4)
End Sub
Sub PNF_Event_WhisperFromUser(Username, Flags, Message, Ping)
GetDBEntry Username, a, f
If Message = PNFPass Then
If GetSetting("PNF", "CP") AND GetSetting("PNF", "CPMembers") AND a > 0 Then AddQ "/c pub"
If GetSetting("PNF", "CP") AND Not GetSetting("PNF", "CPMembers") Then AddQ "/c pub"
Else
If GetSetting("PNF", "IW") Then Exit Sub
Call PNF_ProcessInput(Username, Mesage, 3)
End If
End Sub
Sub PNF_Event_UserTalk(Username, Flags, Message, Ping)
Call PNF_ProcessInput(Username, Message, 1)
End Sub
Sub PNF_ProcessInput(Username, Message, Origin)
If Left(Message, Len(BotVars.Trigger)) <> BotVars.Trigger AND Left(Message, 1) <> "/" Then Exit Sub
GetDBEntry Username, a, f
cmd = Split(Mid(Lcase(Trim(Message)), Len(BotVars.Trigger) + 1))
ucmd = Ubound(cmd)
Select Case cmd(0)
'// Lockdown
Case "lockdown"
If ucmd = 0 Then
If a < 40 Then Exit Sub
If GetSetting("PNF", "Lockdown") Then
DSP Origin, "[PNF] Lockdown is active.", Username, vbWhitename, vbGreen
Else
DSP Origin, "[PNF] Lockdown is inactive.", Username, vbWhitename, vbWhite
End If
Else
Select Case cmd(1)
Case "on"
SetSetting "PNF", "Lockdown", True, "", True
DSP Origin, "[PNF] Lockdown Enabled", Username, vbWhitename, vbGreen
Case "off"
SetSetting "PNF", "Lockdown", False, "", True
DSP Origin, "[PNF] Lockdown Disabled", Username, vbWhitename, vbGreen
End Select
End If
'// True Neglected Fury Commands
Case "IW", "Ignorewhispers"
If a < 90 Then Exit Sub
If GetSetting("PNF", "IW") Then
SetSetting "PNF", "IW", False, "", True
Else
SetSetting "PNF", "IW", True, "", True
End If
Case "cp"
GetInternalDataByUsername
If a < 60 Then Exit Sub
Select Case cmd(1)
Case "0"
SetSetting "PNF", "CP", False, "", True
SetSetting "PNF", "CPMembers", False, "", True
PNFPass = VBNullstring
AddQ "/c pub"
Case "1"
If NOT BotFlags = 2 Then AddQ "/c pub"
SetSetting "PNF", "CP", True, "", True
SetSetting "PNF", "CPMembers", False, "", True
PNFPass = Split(Message, " ")(2)
AddQ "/c priv"
Case "2"
If NOT BotFlags = 2 Then AddQ "/c pub"
SetSetting "PNF", "CPMembers", True, "", True
SetSetting "PNF", "CP", True, "", True
PNFPass = Split(Message, " ")(2)
AddQ "/c priv"
End Select
'// Limit Related
'Case "halt"
'If ucmd = 0 Then Exit Sub
'Case "nohalt"
'Case "stopcmds"
'isHalted = True
'SetSetting "halt", "stoppedCmds", True, PNFSettingsPath
'DSP Origin, "[PNF] All commands temporarily blocked.", Username, vbWhite
Case "add", "set"
If Not PNFAccessLimitBool Then Exit Sub
If a < PNFAddSetCommand Then Exit Sub
'// prevent two "add" or "set" events from occuring
If InStr(Lcase(uFlags), "a") Then Exit Sub
If Not IsNumeric(cmd(2)) Then Exit Sub
getLim = GetConfigEntry("limit", Username, PNFSettingsPath)
If getLim <> "" Then
If cmd(2) > getLim Then
DSP Origin, "[PNF] You have been limited to handing out [ " & getLim & " ] access.", Username, vbWhite
Exit Sub
End If
If cInt(cmd(2)) > a Then Exit Sub
Command BotVars.Username, "/" & cmd(0) & " " & cmd(1) & " " & cmd(2), True
DSP Origin, "[PNF] Set " & cmd(1) & "'s access to " & cmd(2) & ".", Username, vbWhite
Else
If cInt(cmd(2)) > a Then Exit Sub
Command BotVars.Username, "/" & cmd(0) & " " & cmd(1) & " " & cmd(2), True
DSP Origin, "[PNF] Set " & cmd(1) & "'s access to " & cmd(2) & ".", Username, vbWhite
End If
Case "limit"
If a < PNFLimitUsersAcc Then Exit Sub
GetDBEntry cmd(1), uNum, f
getLim = GetConfigEntry("limit", cmd(1), PNFSettingsPath)
'// Query limits
If Ubound(cmd) = 1 Then
If getLim = "" And a <> -1 Then
DSP Origin, "[PNF] " & cmd(1) & " has no limitation.", Username, vbWhite
ElseIf getLim <> "" And uNum <> - 1 Then
DSP Origin, "[PNF] " & cmd(1) & " has an access limit of " & getLim & ".", Username, vbWhite
Else
DSP Origin, "[PNF[ User not found.", Username, vbWhite
End If
Exit Sub
End If
If Not IsNumeric(cmd(2)) Then
DSP Origin, "[PNF] The limitation cmdument must be a numeric value.", Username, vbWhite
Exit Sub
End If
'// User exists?
If uNum = -1 Then
DSP Origin, "[PNF] That user doesn't exist. Cannot limit.", Username, vbWhite
Exit Sub
End If
'// Trying to limit a user who has higher access than you?
If cInt(a) < cInt(uNum) Then
DSP Origin, "[PNF] " & cmd(1) & " (" & a & " access) has higher access than you (" & a & " access). Unable to limit.", Username, vbWhite
Exit Sub
End If
'// Limiting user to their access level?
If cInt(cmd(2)) = cInt(uNum) Then
DSP Origin, "[PNF] Limit is ambiguous to user's access.", Username, vbWhite
Exit Sub
End If
'// Limiting someone to higher access than they currently have?
If cInt(cmd(2)) > cInt(uNum) Then
DSP Origin, "[PNF] Unable to limit " & cmd(1) & "'s access. Limit (" & cmd(2) & ") too high for his access (" & a & ").", Username, vbWhite
Exit Sub
End If
WriteConfigEntry "limit", cmd(1), cmd(2), PNFSettingsPath
DSP Origin, "[PNF] Limited " & cmd(1) & " to giving out " & cmd(2) & " access.", Username, vbWhite
Case "nolimit"
If uNum < PNFLimitUsersAcc Then Exit Sub
If GetConfigEntry("limit", cmd(1), PNFSettingsPath) = "" Then
DSP Origin, "[PNF] " & cmd(1) & " has no limitations.", Username, vbWhite
Exit Sub
End If
WriteConfigEntry "limit", cmd(1), "", PNFSettingsPath
DSP Origin, "[PNF] Removed " & cmd(1) & "'s add restrictions.", Username, vbWhite
'// Other Commands
Case"pnfversion"
If a >= 5 Then
DSP Origin, "Project Neglected Fury Version " & psVersions.Item("pnf") & " by ShadoW", Username, vbWhitename, vbWhite
End If
End Select
'// Call Lockdown Procedure
If PNFBan = 0 Then
Call PNF_Lockdown(Username, Access, Flags)
End If
End Sub
Sub PNF_Close_Timer()
AddQ "/C priv"
TimerEnabled "PNF", "Close", False
End Sub
Sub PNF_Event_UserJoins(Username, Flags, Message, Ping, Product, Level, OriginalStatString, Banned)
If IsSafelisted(Username) Then Exit Sub
If PNFBan = 0 Then
Call PNF_Lockdown(Username, Access, Flags)
End If
End Sub
Sub PNF_Event_UserEmote(Username, Flags, Message)
If PNFBan = 0 Then
Call PNF_Lockdown(Username, Access, Flags)
End If
End Sub
Sub PNF_Lockdown(Username, Access, Flags)
If GetSetting("PNF", "Lockdown") Then
GetDBEntry Username, Access, Flags
If IsSafelisted(Username) Then
Exit Sub
End If
If Access > 0 Then
Exit Sub
End If
PNFBan = 1
If PNFBan = 1 Then
Command BotVars.Username, "//ban " & Username & " [PNF] Lockdown Active", True
TimerEnabled "PNF", "Reset", True
End If
Else
Exit Sub
End If
End Sub
Sub PNF_Reset_Timer()
PNFBan = 0
TimerEnabled "PNF", "Reset", False
End Sub
Function InArray(Arr, Item)
ReDim elems(Len(Item) - 1)
For i=0 To Ubound(elems)
elems(i) = Mid(Item, i+1, 1)
Next
For a = 0 To Ubound(Arr)
For i = LBound(elems) To UBOund(elems)
If LCase(Arr(a)) = LCase(elems(i)) Then
InArray = True
Exit Function
End If
Next
Next
End Function
Function encrypt(text)
Dim arrSeed, arrIndex
ReDim chars(Len(text)-1)
arrSeed = Array(58, 64, 29, 75, 96, 23, 63)
For i=0 to Ubound(chars)
getChar = Mid(text, i+1, 1)
For ii=0 to arrSeed(arrIndex)
If i mod 2 = 0 Then
getChar = Chr(Asc(getChar) + 1)
If Asc(getChar) = 255 Then getChar = Chr(32)
Else
getChar = Chr(Asc(getChar) - 1)
If Asc(getChar) = 32 Then getChar = Chr(255)
End If
arrIndex = arrIndex + 1
If arrIndex = Ubound(arrSeed) Then arrIndex = 0
Next
chars(i) = getChar
Next
encrypt = Join(getChar, "")
End Function
Function decrypt(text)
Dim arrSeed, arrIndex
ReDim chars(Len(text)-1)
arrSeed = Array(58, 64, 29, 75, 96, 23, 63)
For i=0 to Ubound(chars)
getChar = Mid(text, i+1, 1)
For ii=0 to arrSeed(arrIndex)
If i mod 2 = 0 Then
getChar = Chr(Asc(getChar) - 1)
If Asc(getChar) = 32 Then getChar = Chr(255)
Else
getChar = Chr(Asc(getChar) + 1)
If Asc(getChar) = 255 Then getChar = Chr(32)
End If
arrIndex = arrIndex + 1
If arrIndex = Ubound(arrSeed) Then arrIndex = 0
Next
chars(i) = getChar
Next
decrypt = Join(chars, "")
End Function