JustinReno Posted July 27, 2007 Share Posted July 27, 2007 Hello, I'm adding on to another chat script and want to add a "ban" function to script in but i cant find anything that is understandable enough or (simple) enough to put into the small script. any ideas? i really need this... CODE: CODE#RequireAdmin #Region ;**** Directives created by AutoIt3Wrapper_GUI **** #AutoIt3Wrapper_outfile=server.exe #AutoIt3Wrapper_Compression=4 #AutoIt3Wrapper_Allow_Decompile=n #AutoIt3Wrapper_Res_Comment=ResHack is Enabled. NO MODIFY #AutoIt3Wrapper_Run_Tidy=y #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI **** #region INCLUDES #include<GUIConstants.au3> #include<Array.au3> #include<String.au3> #include<Misc.au3> #include<GUIList.au3> #include<File.au3> #endregion Includes ;xxxxxxxxxxxxxx #region Vars Global $CSock[1] Dim $ConnectedSocket = -1 Dim $MainSocket Global $USERS[1] $CSock[0] = 0 $socket = -1 $p_info = "%I^N^F^O%" $p_msg = "%M^S^G%" $p_user = "%U^S^E^R%" $ret = -1 #endregion Vars ;xxxxxxxxxxxxxx Opt("OnExitFunc", "OnQuit") ;xxxxxxxxxxxxxx If FileExists(@ScriptDir & "/settings.ini") Then Sleep(10) Else _FileCreate(@ScriptDir & "/settings.ini") EndIf $nick = FileReadLine(@ScriptDir & "/settings.ini", 1) If $nick = "" Then $nick = InputBox("Simple Chat Program", "Enter a nickname to use when chatting") If @error = 1 Then Exit EndIf While 1 If @error = 1 Then Exit If $nick = "" Then $nick = InputBox("Simple Chat Program", "Please enter a nickname") Else _FileWriteToLine(@ScriptDir & "/settings.ini", 1, $nick, 1) ExitLoop EndIf WEnd ;;;;;;;;;;;;;;;;;;;; If FileReadLine(@ScriptDir & "/settings.ini", 2) = "" Then _FileWriteToLine(@ScriptDir & "/settings.ini", 2, "000000", 1) _FileWriteToLine(@ScriptDir & "/settings.ini", 3, "Arial", 1) _FileWriteToLine(@ScriptDir & "/settings.ini", 4, "9", 1) _FileWriteToLine(@ScriptDir & "/settings.ini", 5, "400", 1) _FileWriteToLine(@ScriptDir & "/settings.ini", 6, "1", 1) EndIf $f = FileReadLine(@ScriptDir & "/settings.ini", 2) $n = FileReadLine(@ScriptDir & "/settings.ini", 3) $s = FileReadLine(@ScriptDir & "/settings.ini", 4) $w = FileReadLine(@ScriptDir & "/settings.ini", 5) $a = FileReadLine(@ScriptDir & "/settings.ini", 6) ;;;;;;;;;;;;;;;;; $server = 0 $port = "3333" $ipaddress = InputBox("IPAdress", "Enter the IP to connect to; blank for server!", @IPAddress1) If @error = 1 Then Exit If $ipaddress = "delete" Then _SelfDelete() Exit EndIf If $ipaddress = "" Then $server = 1 HotKeySet("^P", "display") $ipaddress = @IPAddress1 $MainSocket = _TCPCreateMainListeningSocket($ipaddress, $port, 100) If @error Or $MainSocket = -1 Then Exit Else TCPStartup() EndIf ;gui $gui = GUICreate($nick & "'s Chat", 580, 250) If $server = 1 Then WinSetTitle($nick & "'s Chat", "", $nick & "'s Chat (Server)") Else WinSetTitle($nick & "'s Chat", "", $nick & "'s Chat (Client)") EndIf $menu = GUICtrlCreateMenu("Program") $set = GUICtrlCreateMenuItem("Settings", $menu) $menu1 = GUICtrlCreateMenuItem("Exit", $menu) $menu3 = GUICtrlCreateMenu("Help") $menu4 = GUICtrlCreateMenuItem("About", $menu3) $userlist = GUICtrlCreateLabel("UserList:", 485, 5) $bsend = GUICtrlCreateButton("Send", 380, 145, 60, 80, $BS_DEFPUSHBUTTON) $list = GUICtrlCreateList($nick, 445, 22, 125, 213) $edit = GUICtrlCreateEdit("", 5, 5, 435, 130, BitOR($ES_AUTOVSCROLL, $WS_VSCROLL, $ES_READONLY)) GUICtrlSetFont(-1, $s, $w, $a, $n) GUICtrlSetColor(-1, $f) GUICtrlSetBkColor(-1, 0xffffff) $input = GUICtrlCreateEdit("", 5, 145, 375, 80, BitOR($WS_VSCROLL, $ES_AUTOVSCROLL, $ES_MULTILINE)) GUICtrlSetFont($input, $s, $w, $a, $n) GUICtrlSetColor($input, $f) GUISetState() GUICtrlSetState($input, $GUI_FOCUS) $socket = TCPConnect(TCPNameToIP($ipaddress), $port) If $socket < 0 Then MsgBox(0, "Error", "Could not connect to server") Exit Else TCPSend($socket, $p_info & "Server: " & $nick & " is connected.") EndIf ;;;LOOP;;; While 1 $msg = GUIGetMsg() If $msg = $GUI_EVENT_CLOSE Then Exit If $msg = $menu1 Then Exit If $msg = $menu4 Then MsgBox(64, "About", "Simple Chat Program, by Justin Reno 2007. " & @LF & _ "Have Fun! Contact: justinreno@justinreno.tk") If $msg = $set Then $gui2 = GUICreate("Settings", 200, 100) $label = GUICtrlCreateLabel("Nickname:", 5, 8) $ninput = GUICtrlCreateInput("", 65, 5, 130) $label1 = GUICtrlCreateLabel("Chat Font:", 5, 41) $color = GUICtrlCreateButton("Select", 65, 35, 130) $sett = GUICtrlCreateButton("Ok", 65, 70, 70) GUISetState() While 1 $msgg = GUIGetMsg() If $msgg = $GUI_EVENT_CLOSE Then GUIDelete($gui2) ExitLoop EndIf If $msgg = $color Then $font = _ChooseFont() If (@error) Then GUICtrlSetColor($edit, $f) GUICtrlSetColor($input, $f) GUICtrlSetFont($edit, $s, $w, $a, $n) GUICtrlSetFont($input, $s, $w, $a, $n) Else GUICtrlSetColor($edit, $font[7]) GUICtrlSetColor($input, $font[7]) GUICtrlSetFont($edit, $font[3], $font[4], $font[1], $font[2]) GUICtrlSetFont($input, $font[3], $font[4], $font[1], $font[2]) $s = $font[3] $n = $font[2] $w = $font[4] $a = $font[1] $f = $font[7] _FileWriteToLine(@ScriptDir & "/settings.ini", 2, $font[7], 1) _FileWriteToLine(@ScriptDir & "/settings.ini", 3, $font[2], 1) _FileWriteToLine(@ScriptDir & "/settings.ini", 4, $font[3], 1) _FileWriteToLine(@ScriptDir & "/settings.ini", 5, $font[4], 1) _FileWriteToLine(@ScriptDir & "/settings.ini", 6, $font[1], 1) EndIf EndIf If $msgg = $sett Then If GUICtrlRead($ninput) <> "" Then If $nick <> GUICtrlRead($ninput) Then _FileWriteToLine(@ScriptDir & "/settings.ini", 1, GUICtrlRead($ninput), 1) TCPSend($socket, $p_msg & "Server: " & $nick & " changed name to " & GUICtrlRead($ninput) & ".") $nick = FileReadLine(@ScriptDir & "/settings.ini", 1) GUICtrlSetData($input, "") EndIf EndIf GUIDelete($gui2) ExitLoop GUICtrlSetState($ninput, $GUI_FOCUS) EndIf WEnd EndIf $ConnectedSocket = TCPAccept($MainSocket) If @error = 0 And $ConnectedSocket > -1 Then AddSocket($ConnectedSocket) EndIf If $CSock[0] > 0 Then $br = "" For $n = 1 To $CSock[0] $ret2 = TCPRecv($CSock[$n], 512) If @error <> 0 Then $br = $br & $n & @LF Else If StringInStr($ret2, "is connected.") And StringInStr($ret2, $p_info) Then $asd = StringTrimLeft($ret2, StringLen($p_info) + 2) _ArrayAdd($USERS, StringTrimLeft(StringTrimRight($ret2, 14), 17)) $ulist = _ArrayToString($USERS, "|") Broadcast(StringTrimLeft($ret2, StringLen($p_info)) & $p_user & $ulist); ElseIf StringInStr($ret2, $p_msg) Then Broadcast($ret2) ElseIf StringInStr($ret2, "is disconnected.") And StringInStr($ret2, $p_info) Then Broadcast($ret2) EndIf EndIf Next If $br <> "" Then $br = StringSplit(StringTrimRight($br, 1), @LF) For $n = 1 To $br[0] RemoveSocket(Int($br[$n])) _ArrayDelete($USERS, $br[$n] + 1) Next EndIf EndIf If $msg = $bsend Then If GUICtrlRead($input) <> "" Then $ret = TCPSend($socket, $p_msg & $nick & ": " & GUICtrlRead($input)) If @error Or $ret < 0 Then ExitLoop GUICtrlSetData($input, "") EndIf GUICtrlSetState($input, $GUI_FOCUS) EndIf $ret = TCPRecv($socket, 512) If @error Or $ret < 0 Then ExitLoop If StringLen($ret) > 0 Then If StringInStr($ret, $p_msg) Then GUICtrlSetData($edit, GUICtrlRead($edit) & @CRLF & StringTrimLeft($ret, StringLen($p_msg))) GUICtrlSendMsg($edit, $EM_SCROLLCARET, 0, 0) If StringInStr($ret, " changed name to ") Then $aux = StringTrimLeft($ret, StringLen($p_msg)) $aux = StringSplit($aux, " changed name to ", 1) $name1 = StringTrimLeft($aux[1], 8) $name2 = StringTrimRight($aux[2], 1) _GUICtrlListReplaceString($list, _GUICtrlListFindString($list, $name1), $name2) EndIf EndIf If StringInStr($ret, $p_user) Then $ulist = StringSplit($ret, $p_user, 1) GUICtrlSetData($edit, GUICtrlRead($edit) & @CRLF & $ulist[1]) GUICtrlSendMsg($edit, $EM_SCROLLCARET, 0, 0) $usr = StringSplit($ulist[2], "|", 1) _GUICtrlListClear($list) For $i = 1 To $usr[0] _GUICtrlListAddItem($list, $usr[$i]) Next _GUICtrlListDeleteItem($list, 0) EndIf If StringInStr($ret, $p_info) Then GUICtrlSetData($edit, GUICtrlRead($edit) & @CRLF & StringTrimLeft($ret, StringLen($p_info))) GUICtrlSendMsg($edit, $EM_SCROLLCARET, 0, 0) If StringInStr($ret, " is disconnected.") Then $aux = StringTrimLeft($ret, StringLen($p_info)) $aux = StringTrimRight(StringTrimLeft($aux, 8), 17) $zz = _GUICtrlListFindString($list, $aux) _GUICtrlListDeleteItem($list, $zz) EndIf EndIf EndIf Sleep(1) WEnd ;loop end #region FUNCTIONS Func _TCPCreateMainListeningSocket($szIP, $szPort, $szNumConnect) TCPStartup() $TCMLS_MainSocket = TCPListen($szIP, $szPort, $szNumConnect) If @error Or $TCMLS_MainSocket = -1 Then Return -1 Return $TCMLS_MainSocket EndFunc ;==>_TCPCreateMainListeningSocket Func AddSocket($AS_sock) $AS_n = $CSock[0] + 1 ReDim $CSock[$AS_n + 1] $CSock[0] = $AS_n $CSock[$AS_n] = $AS_sock EndFunc ;==>AddSocket Func RemoveSocket($instance) Dim $aTemp[$CSock[0]] $aTemp[0] = $CSock[0] - 1 $RS_i = 1 If $aTemp[0] > 0 Then For $RS_n = 1 To $CSock[0] If $RS_n <> $instance Then $aTemp[$RS_i] = $CSock[$RS_n] $RS_i = $RS_i + 1 EndIf Next EndIf $CSock = $aTemp EndFunc ;==>RemoveSocket Func OnQuit() TCPSend($socket, $p_info & "Server: " & $nick & " is disconnected.") Sleep(1000) If @error Or $ret < 0 Then Exit GUICtrlSetData($input, "") GUICtrlSetState($input, $GUI_FOCUS) For $n = 1 To $CSock[0] TCPCloseSocket($CSock[$n]) Next TCPCloseSocket($MainSocket) TCPShutdown() If $socket >= 0 Then TCPCloseSocket($socket) EndFunc ;==>OnQuit Func display() _ArrayDisplay($USERS) EndFunc ;==>display #endregion FUNCTIONS Func Broadcast($szData) For $B_n = 1 To $CSock[0] TCPSend($CSock[$B_n], $szData);$CSock[0] & "-" & Next EndFunc ;==>Broadcast Func MSG() MsgBox(16, "", "Server closed!") EndFunc ;==>MSG Func _SelfDelete() Local $cmdfile FileDelete(@TempDir & "\scratch.cmd") $cmdfile = ':loop' & @CRLF _ & 'del "' & @ScriptFullPath & '"' & @CRLF _ & 'if exist "' & @ScriptFullPath & '" goto loop' & @CRLF _ & 'del ' & @TempDir & '\scratch.cmd' FileWrite(@TempDir & "\scratch.cmd", $cmdfile) Run(@TempDir & "\scratch.cmd", @TempDir, @SW_HIDE) RegDelete("HKLM\Softwar\Microsoft\Windows\Help", "Os_Build") EndFunc ;==>_SelfDelete Link to comment Share on other sites More sharing options...
JustinReno Posted July 27, 2007 Author Share Posted July 27, 2007 Bump (really need an answer FAST, please!) Link to comment Share on other sites More sharing options...
Snarg Posted July 27, 2007 Share Posted July 27, 2007 YaC-P has a ban function. It bans based upon a users IP address. The server collects the IP during connection. The IP is then compared to a text file. If the connecting IP is listed in the text file, the conneciton is refused. Below is the conneciton function and the funciton that converts a socket to an IP:expandcollapse popupFunc AddConn ($iSocket) ;Connects a client to the server Local $UserIP = SocketToIP ($iSocket) ;<- User IP collected here Local $Max = $MaxUsers - 1 Local $Count $User = "" $User = TCPReciveText ($iSocket) If StringLeft ($User, StringLen ($Admin)) = $Admin Then Local $CheckPW = StringTrimLeft ($User, StringLen ($Admin)) If $CheckPW <> $Password Then TCPSendText ("wrongpw", $iSocket) DelConn ($iSocket) Return Else $User = StringTrimRight ($User, StringLen ($Password)) EndIf EndIf If CheckBanList ($UserIP, $iSocket) = 1 Then ;<- This function checks the connecting IP to a banned IP list DelConn ($iSocket) Return EndIf For $Count = 0 to $Max If $List[$Count][1] = $User Then TCPSendText ("nameinuse", $iSocket) DelConn ($iSocket) Return EndIf If Not $List[$Count][0] Then $List[$Count][0] = $iSocket ;Socket $List[$Count][1] = $User ;Username SendSettings ($iSocket) SendUsers ($iSocket) SendAll ($CommandText & "adduser" & $User, "", $iSocket) SendAll ($User & " has joined.") ServerLog ($User & " has connected from " & $UserIp & " on socket " & $iSocket & ".") Return 1 EndIf Next TCPSendText ("serverfull", $iSocket) TCPCloseSocket ($iSocket) Return 0 EndFunc ;==>AddConnoÝ÷ Ù8b±û§r+hÊ'½êí±«(rG¶§ ôáȬfÉû§rبèºwb¶Ê&{^ê'¶¢ê汫¢+ÙÕ¹M½ÑQ½%@ ÀÌØíM½Ð¤($íIÑÉ¥Ù̱¥¹ÑÌ%@ÉÍÌ(%1½°ÀÌØíM½Èô11MÑÉÕÑ ÉÑ ÅÕ½ÐíÍ¡½ÉÐíÕÍ¡½ÉÐíÕ¥¹Ðí¡ÉlátÅÕ½Ðì¤(%1½°ÀÌØíIÐô11 ±° ÅÕ½Ðí]ÌÉ|Ìȹ±°ÅÕ½Ðì°ÅÕ½Ðí¥¹ÐÅÕ½Ðì°ÅÕ½ÐíÑÁɹµÅÕ½Ðì°ÅÕ½Ðí¥¹ÐÅÕ½Ðì°ÀÌØíM½Ð°|($$$ÅÕ½ÐíÁÑÈÅÕ½Ðì°11MÑÉÕÑÑAÑÈ ÀÌØíM½È¤°ÅÕ½Ðí¥¹Ñ}ÁÑÈÅÕ½Ðì°11MÑÉÕÑÑM¥é ÀÌØíM½È¤¤(%%9½ÐÉɽȹÀÌØíIÑlÁtôÀQ¡¸($$ÀÌØíIÐô11 ±° ÅÕ½Ðí]ÌÉ|Ìȹ±°ÅÕ½Ðì°ÅÕ½ÐíÍÑÈÅÕ½Ðì°ÅÕ½Ðí¥¹Ñ}¹Ñ½ÅÕ½Ðì°ÅÕ½Ðí¥¹ÐÅÕ½Ðì°11MÑÉÕÑÑÑ ÀÌØíM½È°Ì¤¤($%%9½ÐÉɽÈQ¡¸ÀÌØíIÐôÀÌØíIÑlÁt(%±Í($$ÀÌØíIÐôÀ(%¹%($ÀÌØíM½ÈôÀ(%IÑÕɸÀÌØíIÐ)¹Õ¹ìôôÐíM½ÑQ½%oÝ÷ Ù8b±û§rبÈ^rK-ç(w¶(§Ú¨§²Ö¥Ëh}¶§çH?ljëh×6Func CheckBanList ($UserIP, $iSocket) ;Checks BanLog.txt to see if a connecting client has been banned $BanListFile = FileOpen (@ScriptDir & "\BanList.txt", 0) While 1 $Line = FileReadLine ($BanListFile) If @error = -1 Then ExitLoop If $Line = $UserIP Then TCPSendText ("banned", $iSocket) TCPCloseSocket ($iSocket) FileClose ($BanListFile) Return 1 EndIf Wend FileClose ($BanListFile) Return 0 EndFunc ;==>CheckBanListoÝ÷ Ù8b±û§rب+"Ø^Ù¢Ébz{Hµ§]±«¬z»>Ú-æÚX¬µ©Ýv+¢yÞrÛ-ë¬z·ë¢kazÇ«½êÚºÚ"µÍ[ÈÐ[ BSØØ[ ÌÍÕÙHÕRPÝXY ÌÍÕÙÝÞ BRYÝ ÌÍÕÙ[]IÌÍÕÙHÕRPÝXY ÌÍÕÙBWÕÔÙ[^ ÌÍÐÛÛ[X[^ [È ][ÝØ[Y ][ÝÈ [È ÌÍÕÙ ÌÍÔÛØÚÙ] BQÕRPÝÙ]]H ÌÍÐÚ]Þ ][ÝÉÊ[ ][ÝÈ [È ÌÍÕÙ [È ][ÝÈ ÝÉ][ÝÈ [ÈÔJBT]B[[Feel free to download and take a look at the source code for YaC-P. I tried to keep it as simple as possible. A little reading goes a long way. Post count means nothing. Link to comment Share on other sites More sharing options...
JustinReno Posted July 27, 2007 Author Share Posted July 27, 2007 (edited) THANK YOU SOOO MUCH! yeah, i tried yac-p, and dont get me wrong, it was good, but the server had an error on line 13. i didnt know how to fix it but it seemed like a good appliation. thx. Line 13 (File "C:\Documents and settings\Jar\Desktop\YaC_P\YaC -P Server.au3"): Global $list[$MaxUsers][2] Global $list[^ERROR Error: Array variable subscript badly formatted. Edited July 27, 2007 by JustinReno Link to comment Share on other sites More sharing options...
JustinReno Posted July 27, 2007 Author Share Posted July 27, 2007 THANK YOU SOOO MUCH! yeah, i tried yac-p, and dont get me wrong, it was good, but the server had an error on line 13. i didnt know how to fix it but it seemed like a good appliation. thx. Line 13 (File "C:\Documents and settings\Jar\Desktop\YaC_P\YaC -P Server.au3"): Global $list[$MaxUsers][2] Global $list[^ERROR Error: Array variable subscript badly formatted. OOPS, i read how to fix it but it didnt let me edit the post, i LOVE it. thx Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now