[more=Очередная версия]
Код: @echo off
color 1F
title Chat v 1.1
cls
if /i "%~1" equ "talk_widget" call:talker %2 %3 & exit /b
echo.
echo Введите номер комнаты для чата в числовом формате (1-999):
set /p "chat=>"
if not defined chat echo Вы ввели не правильный номер комнаты. & exit /b
set "chatpath=%~dp0\%chat%"
1>nul 2>&1 md "%chatpath%"
set "skiprow=0"
setlocal ENABLEDELAYEDEXPANSION
if exist "%chat%_history" (
call:getpass
if defined pass1 (
call:setpass "Введите пароль для доступа в приватный чат:"
if "!pass!" neq "!pass1!" echo Вы ввели не правильный пароль для приватного чата. & pause & exit /b
)
) else (
call:setpass "Введите пароль (пустой пароль - публичный чат):"
if defined pass (
echo.!pass!>"%chat%_history"
attrib +h "%chat%_history"
attrib +h "%chatpath%"
)
)
setlocal DISABLEDELAYEDEXPANSION
if defined pass set "privat= [приватная]" & set "skiprow=1"
if /i "%1" equ "talk_auto" (set "auto=[Автомат]") else (
echo.
echo Придумайте свое имя для чата ^(А-Я \ A-Z^):
set /p "nick=>"
if not defined nick echo Вы не ввели имя. & exit /b
)
set "msgflist=%TEMP%\chatlist.txt"
set cs_in=0
cls
title "| Комната чата: %chat%%privat% | Пользователь: %nick%%auto% |"
>"%msgflist%" 2>nul dir /b /a-d /od /tw "%chatpath%\*" || >"%msgflist%" echo BatChat
if exist "%chat%_history" more +%skiprow% "%chat%_history" | findstr /r ".*"
start call %0 talk_widget %*
:listener_loop
for /f "tokens=*" %%a in ('dir /b /a-d /od /tw "%chatpath%\*" 2^>nul ^| findstr /v /G:"%msgflist%" 2^>nul') do (
echo %%~a>>"%msgflist%"&type "%chatpath%\%%~a"
)
call:dustman || call:wait 1000
goto:listener_loop
:talker
setlocal ENABLEDELAYEDEXPANSION
cls
title "| Комната чата: %chat%%privat% | Пользователь: %nick%%auto%|"
call:getmsgfname
echo [%time:~0,-3%] пользователь "%nick%%auto%" присоединился к чату.>"%msgfname%"
echo. >>"%msgfname%"
call:cs_in
echo [%time:~0,-3%] пользователь "%nick%%auto%" присоединился к чату.>>"%chat%_history"
echo. >>"%chat%_history"
call:cs_out
:talker_loop
cls
echo.
echo Ваш текст сообщения:
echo.
set "msg="
if /i "%1" neq "talk_auto" (set /p msg=^>) else (set msg=%RANDOM% & echo.^>!msg!)
if not defined msg goto:talker_loop
call:getmsgfname
echo [%time:~0,-3%] - %nick%%auto%:>"%msgfname%"
echo - %msg%>>"%msgfname%"
echo.>>"%msgfname%"
call:cs_in
start /min sndRec32.exe /play /close c:\WINDOWS\Media\chimes.wav 1>nul 2>nul
echo [%time:~0,-3%] - %nick%%auto%:>>"%chat%_history"
echo - %msg%>>"%chat%_history"
echo.>>"%chat%_history"
call:cs_out
if /i "%1" equ "talk_auto" (if "%2" equ "" (call:wait 1000) else call:wait %2)
goto talker_loop
:cs_in
if exist "%chat%_cs" (
call:wait 1000
set /a cs_in+=1
if !cs_in! lss 5 goto:cs_in
)
set cs_in=0
echo %RANDOM% >%chat%_cs
exit /b
:cs_out
1>nul 2>&1 del /f /q %chat%_cs
exit /b
:wait
1>nul 2>&1 ping -n 1 -w %1 127.255.255.255
exit /b
:dustman
set "cleanborder=6553"
if %RANDOM% gtr %cleanborder% exit /b 1
if %time:~3,2% lss 30 exit /b 2
if exist "%chat%_dust.lck" exit /b 3
echo dustman >"%chat%_dust.lck"
for /f "skip=4 tokens=1,4" %%a in ('dir /-c /a-d /od /tw "%chatpath%\*" 2^>nul ^| findstr /b /v /c:"%date% %time:~0,3%" 2^>nul') do if exist "%chatpath%\%%~b" 1>nul 2>&1 del /f /q "%chatpath%\%%~b"
1>nul 2>&1 del /f /q "%chat%_dust.lck"
exit /b
:getmsgfname
set "msgfname=%chatpath%\%date:.=%%time::=%%RANDOM%"
if exist "%msgfname%" goto:getmsgfname
exit /b
:setpass
echo.&echo.%~1
set "pass="
set /p "pass=>"
exit /b
:getpass
set "pass1="
if not exist "%chat%_history" exit /b
for /f "tokens=* delims=" %%a in ('attrib "%chat%_history" ') do (
set "att=%%a"
if /i "!att:~4,1!" equ "H" (set /p pass1=<"%chat%_history")
)
set "att="
exit /b
Код: @echo off
color 1F
title Chat v 1.1
cls
if /i "%~1" equ "talk_widget" call:talker %2 %3 & exit /b
echo.
echo Введите номер комнаты для чата в числовом формате (1-999):
set /p "chat=>"
if not defined chat echo Вы ввели не правильный номер комнаты. & exit /b
set "chatpath=%~dp0\%chat%"
1>nul 2>&1 md "%chatpath%"
set "skiprow=0"
setlocal ENABLEDELAYEDEXPANSION
if exist "%chat%_history" (
call:getpass
if defined pass1 (
call:setpass "Введите пароль для доступа в приватный чат:"
if "!pass!" neq "!pass1!" echo Вы ввели не правильный пароль для приватного чата. & pause & exit /b
)
) else (
call:setpass "Введите пароль (пустой пароль - публичный чат):"
if defined pass (
echo.!pass!>"%chat%_history"
attrib +h "%chat%_history"
attrib +h "%chatpath%"
)
)
setlocal DISABLEDELAYEDEXPANSION
if defined pass set "privat= [приватная]" & set "skiprow=1"
if /i "%1" equ "talk_auto" (set "auto=[Автомат]") else (
echo.
echo Придумайте свое имя для чата ^(А-Я \ A-Z^):
set /p "nick=>"
if not defined nick echo Вы не ввели имя. & exit /b
)
set "msgflist=%TEMP%\chatlist.txt"
set cs_in=0
cls
title "| Комната чата: %chat%%privat% | Пользователь: %nick%%auto% |"
>"%msgflist%" 2>nul dir /b /a-d /od /tw "%chatpath%\*" || >"%msgflist%" echo BatChat
if exist "%chat%_history" more +%skiprow% "%chat%_history" | findstr /r ".*"
start call %0 talk_widget %*
:listener_loop
for /f "tokens=*" %%a in ('dir /b /a-d /od /tw "%chatpath%\*" 2^>nul ^| findstr /v /G:"%msgflist%" 2^>nul') do (
echo %%~a>>"%msgflist%"&type "%chatpath%\%%~a"
)
call:dustman || call:wait 1000
goto:listener_loop
:talker
setlocal ENABLEDELAYEDEXPANSION
cls
title "| Комната чата: %chat%%privat% | Пользователь: %nick%%auto%|"
call:getmsgfname
echo [%time:~0,-3%] пользователь "%nick%%auto%" присоединился к чату.>"%msgfname%"
echo. >>"%msgfname%"
call:cs_in
echo [%time:~0,-3%] пользователь "%nick%%auto%" присоединился к чату.>>"%chat%_history"
echo. >>"%chat%_history"
call:cs_out
:talker_loop
cls
echo.
echo Ваш текст сообщения:
echo.
set "msg="
if /i "%1" neq "talk_auto" (set /p msg=^>) else (set msg=%RANDOM% & echo.^>!msg!)
if not defined msg goto:talker_loop
call:getmsgfname
echo [%time:~0,-3%] - %nick%%auto%:>"%msgfname%"
echo - %msg%>>"%msgfname%"
echo.>>"%msgfname%"
call:cs_in
start /min sndRec32.exe /play /close c:\WINDOWS\Media\chimes.wav 1>nul 2>nul
echo [%time:~0,-3%] - %nick%%auto%:>>"%chat%_history"
echo - %msg%>>"%chat%_history"
echo.>>"%chat%_history"
call:cs_out
if /i "%1" equ "talk_auto" (if "%2" equ "" (call:wait 1000) else call:wait %2)
goto talker_loop
:cs_in
if exist "%chat%_cs" (
call:wait 1000
set /a cs_in+=1
if !cs_in! lss 5 goto:cs_in
)
set cs_in=0
echo %RANDOM% >%chat%_cs
exit /b
:cs_out
1>nul 2>&1 del /f /q %chat%_cs
exit /b
:wait
1>nul 2>&1 ping -n 1 -w %1 127.255.255.255
exit /b
:dustman
set "cleanborder=6553"
if %RANDOM% gtr %cleanborder% exit /b 1
if %time:~3,2% lss 30 exit /b 2
if exist "%chat%_dust.lck" exit /b 3
echo dustman >"%chat%_dust.lck"
for /f "skip=4 tokens=1,4" %%a in ('dir /-c /a-d /od /tw "%chatpath%\*" 2^>nul ^| findstr /b /v /c:"%date% %time:~0,3%" 2^>nul') do if exist "%chatpath%\%%~b" 1>nul 2>&1 del /f /q "%chatpath%\%%~b"
1>nul 2>&1 del /f /q "%chat%_dust.lck"
exit /b
:getmsgfname
set "msgfname=%chatpath%\%date:.=%%time::=%%RANDOM%"
if exist "%msgfname%" goto:getmsgfname
exit /b
:setpass
echo.&echo.%~1
set "pass="
set /p "pass=>"
exit /b
:getpass
set "pass1="
if not exist "%chat%_history" exit /b
for /f "tokens=* delims=" %%a in ('attrib "%chat%_history" ') do (
set "att=%%a"
if /i "!att:~4,1!" equ "H" (set /p pass1=<"%chat%_history")
)
set "att="
exit /b