Скрипт для сохранения ip-адреса.

Решение вопросов при работе с TCL скриптами.

Модератор: Модераторы

Скрипт для сохранения ip-адреса.

Сообщение ayaal_86 » 28 дек 2011 08:19

Есть очень хороший скрипт по по поиску ip по команде !ип. Раньше проблем не было когда бот сидел на 1м канале, потом появился 2й канал. И посадил бота на 2-м канале и тоже работает команда !ип т.е. показывает тот же ip который был на 1м канале. Хотелось бы на каналах он показывал свои ip которые были на канале.
ВОт так выглядит сам скрипт:
namespace eval ipparser {

setudef flag ipparser

bind pubm - * ::ipparser::parser
proc ::ipparser::parser {nick uhost hand chan text} {
if {[channel get $chan ipparser]} {
if {[regexp -nocase -- {^[0-9\.]{7,20}$} [join [list [lindex [split $text] 0]]]] && [string match "*\.*" [join [list [lindex [split $text] 0]]]]} {
variable ipvrem [clock format [unixtime] -format "%H:%M:%S"]
variable iptext $text
}
}
}

bind pub - !ип ::ipparser::pubcom
proc ::ipparser::pubcom {nick uhost hand chan text} {
variable ipvrem; variable iptext
if {[info exists ipvrem] && [info exists iptext]} {putserv "PRIVMSG $chan :$nick, последний ip был записан в $ipvrem -> [join [lrange [split $iptext] 0 0]] [join [lrange [split $iptext] 1 end]]"} {putserv "PRIVMSG $chan :$nick, во время моего присутствия ip не было :("}
}
}
ayaal_86
 
Сообщения: 29
Зарегистрирован: 28 дек 2011 08:12
Благодарил (а): 6 раз.
Поблагодарили: 0 раз.
Версия бота: Eggdrop 1.6.21+suzi

Re: Помогите чуток переделать пожалуйста

Сообщение tvrsh » 28 дек 2011 10:49

TCL: [ Скачать ] [ Скрыть ]
namespace eval ipparser {

setudef flag ipparser

bind pubm - * ::ipparser::parser
proc ::ipparser::parser {nick uhost hand chan text} {
if {[channel get $chan ipparser]} {
    if {[regexp -nocase -- {^[0-9\.]{7,20}$} [join [list [lindex [split $text] 0]]]] && [string match "*\.*" [join [list [lindex [split $text] 0]]]]} {
        variable ipvrem [clock format [unixtime] -format "%H:%M:%S"]
        variable iptext $text
        variable ipchan $chan
    }
}
}

bind pub - !ип ::ipparser::pubcom
proc ::ipparser::pubcom {nick uhost hand chan text} {
variable ipvrem; variable iptext; variable ipchan
if {[channel get $chan ipparser]} {
    if {[info exists ipvrem] && [info exists iptext] && $ipchan == $chan} {
        putserv "PRIVMSG $chan :$nick, последний ip на канале $chan был записан в $ipvrem -> [join [lrange [split $iptext] 0 0]] [join [lrange [split $iptext] 1 end]]"} {
        putserv "PRIVMSG $chan :$nick, во время моего присутствия на канале $chan ip не было"
    }
}
}
}
Have fun.
-
Получить помощь можно на каналах #egghelp в сети IrcNet.ru и #eggdrop в сети RusNet(Ключ канала eggdrop).
Перед созданием новой темы внимательно читайте Правила оформления топиков.

За это сообщение автора tvrsh поблагодарил:
ayaal_86 (29 дек 2011 04:15)
Аватара пользователя
tvrsh
 
Сообщения: 1230
Зарегистрирован: 19 авг 2008 16:55
Откуда: Russian Federation, Podolsk
Благодарил (а): 6 раз.
Поблагодарили: 130 раз.
Версия бота: Eggdrop 1.6.20+suzi

Re: Помогите чуток переделать пожалуйста

Сообщение ayaal_86 » 30 дек 2011 05:21

Спасибо, tvrsh!
Тут тоже проблемка есть, например:
я вожу ip на 1м канале, и выходит
•(11:07:07)• <NeiLL> 10.161.234.12 проверка команды
•(11:07:12)• <NeiLL> !ип
•(11:07:12)• <NeObot> NeiLL, последний ip на канале #honlan был записан в 11:07:07 -> 10.161.234.12 проверка команды

после этого проверяю на 2м канале, и выходит:
•(11:07:19)• <NeiLL> !ип
•(11:07:19)• <NeObot> NeiLL, во время моего присутствия на канале #zombie_master ip не было

ранее я ввел ip на канале но вышло такое сообшение что ип не было.
далее на 2м канале проверяю, и выходит:
•(11:07:38)• <NeiLL> 10.163.36.152 проверка команды !ип
•(11:07:41)• <NeiLL> !ип
•(11:07:41)• <NeObot> NeiLL, последний ip на канале #zombie_master был записан в 11:07:38 -> 10.163.36.152 проверка команды !ип

после этого иду на 1й канал и ввожу команду !ип, и выходит:
•(11:07:51)• <NeiLL> !ип
•(11:07:51)• <NeObot> NeiLL, во время моего присутствия на канале #honlan ip не было

вот такая вот проблемка вышла. Еще раз посмотрите пожалуйста. Спасибо вам.
ayaal_86
 
Сообщения: 29
Зарегистрирован: 28 дек 2011 08:12
Благодарил (а): 6 раз.
Поблагодарили: 0 раз.
Версия бота: Eggdrop 1.6.21+suzi

Re: Помогите чуток переделать пожалуйста

Сообщение ayaal_86 » 09 янв 2012 14:14

tvrsh жду с надеждой, что вы решите проблему с командой.
Спасибо вам.
ayaal_86
 
Сообщения: 29
Зарегистрирован: 28 дек 2011 08:12
Благодарил (а): 6 раз.
Поблагодарили: 0 раз.
Версия бота: Eggdrop 1.6.21+suzi

Re: Помогите чуток переделать пожалуйста

Сообщение tvrsh » 09 янв 2012 16:45

Попробуй это.

TCL: [ Скачать ] [ Скрыть ]
namespace eval ipparser {

setudef flag ipparser

bind pubm - * ::ipparser::parser
proc ::ipparser::parser {nick uhost hand chan text} {
global iplist
if {[channel get $chan ipparser]} {
    if {[regexp -nocase -- {^[0-9\.]{7,20}$} [join [list [lindex [split $text] 0]]]] && [string match "*\.*" [join [list [lindex [split $text] 0]]]]} {
        set ipvrem [clock format [unixtime] -format "%H:%M:%S"]
        set iptext $text
        set ipchan $chan

        if {[info exists iplist] && $iplist != ""} {
            set index [lsearch $iplist "$chan*"]
        } else {
            set index "-1"
        }

        if {$index == "-1"} {
            lappend iplist "$ipchan|$iptext|$ipvrem"
        } else {
            lreplace $iplist $index $index "$ipchan|$iptext|$ipvrem"
        }
    }
}
}

bind pub - !ip ::ipparser::pubcom
proc ::ipparser::pubcom {nick uhost hand chan text} {
global iplist
if {[channel get $chan ipparser]} {
    set index [lsearch -inline $iplist "$chan*"]
    if {[string is space $index]} {
        putserv "PRIVMSG $chan :$nick, во время моего присутствия на канале $chan ip не было"
    } else {
        putserv "PRIVMSG $chan :$nick, последний ip на канале [lindex [split $index "|"] 0] был записан в [lindex [split $index "|"] 2] -> [join [lrange [split [lindex [split $index "|"] 1]] 0 0]] [join [lrange [split [lindex [split $index "|"] 1]] 1 end]]"
    }
}
}
}


Добавлено спустя 42 минуты 50 секунд:
Обновил, пробуй.
Have fun.
-
Получить помощь можно на каналах #egghelp в сети IrcNet.ru и #eggdrop в сети RusNet(Ключ канала eggdrop).
Перед созданием новой темы внимательно читайте Правила оформления топиков.
Аватара пользователя
tvrsh
 
Сообщения: 1230
Зарегистрирован: 19 авг 2008 16:55
Откуда: Russian Federation, Podolsk
Благодарил (а): 6 раз.
Поблагодарили: 130 раз.
Версия бота: Eggdrop 1.6.20+suzi

Re: Помогите чуток переделать пожалуйста

Сообщение Vertigo » 09 янв 2012 18:44

lsearch с ключом -inline возвращает список. В случае ненахождения, вернется пустой список. Логичнее проверять на
 if {[string is space $index]} {

За это сообщение автора Vertigo поблагодарил:
tvrsh (09 янв 2012 20:29)
Аватара пользователя
Vertigo
 
Сообщения: 107
Зарегистрирован: 20 авг 2008 23:49
Откуда: Москва
Благодарил (а): 0 раз.
Поблагодарили: 37 раз.
Версия бота: Eggdrop 1.8

Re: Помогите чуток переделать пожалуйста

Сообщение tvrsh » 09 янв 2012 20:29

Vertigo, спасибо.
Подправил скрипт.
Have fun.
-
Получить помощь можно на каналах #egghelp в сети IrcNet.ru и #eggdrop в сети RusNet(Ключ канала eggdrop).
Перед созданием новой темы внимательно читайте Правила оформления топиков.
Аватара пользователя
tvrsh
 
Сообщения: 1230
Зарегистрирован: 19 авг 2008 16:55
Откуда: Russian Federation, Podolsk
Благодарил (а): 6 раз.
Поблагодарили: 130 раз.
Версия бота: Eggdrop 1.6.20+suzi

Re: Помогите чуток переделать пожалуйста

Сообщение ayaal_86 » 10 янв 2012 01:51

Спасибо вам. но все равно есть проблемка, вот логи:

•(07:44:30)• <neill> 10.0.0.01 проверка команды !ип
•(07:44:50)• <neill> !ип
•(07:44:50)• <BotNet> neill, последний ip на канале #cod4mw2_promod был записан в 07:43:41 -> 10.0.0.01 проверка команды !ип
•(07:46:41)• <neill> 10.0.0.111 проверка команды !ип
•(07:46:43)• <neill> !ип
•(07:46:43)• <BotNet> neill, последний ip на канале #cod4mw2_promod был записан в 07:43:41 -> 10.0.0.01 проверка команды !ип
•(07:47:54)• <neill> 94.0.01.2
•(07:47:58)• <neill> !ип
•(07:47:58)• <BotNet> neill, последний ip на канале #cod4mw2_promod был записан в 07:43:41 -> 10.0.0.01 проверка команды !ип

Мы видим тут, что он сохраняет себе токо 1 ip след после первого он не видит. а по идее должен же менять и выводит последний ip. а так на обеих канал выводит свои ip.
ayaal_86
 
Сообщения: 29
Зарегистрирован: 28 дек 2011 08:12
Благодарил (а): 6 раз.
Поблагодарили: 0 раз.
Версия бота: Eggdrop 1.6.21+suzi

Re: Помогите чуток переделать пожалуйста

Сообщение tvrsh » 10 янв 2012 17:30

Проверь с другими ипом, а то 94.0.01.2 какой-то странный. Может его регэксп не ловит.
Have fun.
-
Получить помощь можно на каналах #egghelp в сети IrcNet.ru и #eggdrop в сети RusNet(Ключ канала eggdrop).
Перед созданием новой темы внимательно читайте Правила оформления топиков.
Аватара пользователя
tvrsh
 
Сообщения: 1230
Зарегистрирован: 19 авг 2008 16:55
Откуда: Russian Federation, Podolsk
Благодарил (а): 6 раз.
Поблагодарили: 130 раз.
Версия бота: Eggdrop 1.6.20+suzi

Re: Помогите чуток переделать пожалуйста

Сообщение ayaal_86 » 10 янв 2012 18:25

проверил другие ip вводить, результат тот же. опять же выдает первый ip который был введенн на канале, а текушего не выводит.
ayaal_86
 
Сообщения: 29
Зарегистрирован: 28 дек 2011 08:12
Благодарил (а): 6 раз.
Поблагодарили: 0 раз.
Версия бота: Eggdrop 1.6.21+suzi

Re: Скрипт для сохранения ip-адреса.

Сообщение ayaal_86 » 23 янв 2012 18:13

tvrsh, еще раз посмотришь скрипт? а то жду жду. сделаешь пожалуйста. прошу очень.
ayaal_86
 
Сообщения: 29
Зарегистрирован: 28 дек 2011 08:12
Благодарил (а): 6 раз.
Поблагодарили: 0 раз.
Версия бота: Eggdrop 1.6.21+suzi

Re: Скрипт для сохранения ip-адреса.

Сообщение tvrsh » 23 янв 2012 21:05

Теперь точно работает.
TCL: [ Скачать ] [ Скрыть ]
namespace eval ipparser {

set iplist "";

setudef flag ipparser

bind pubm - * ::ipparser::parser
proc ::ipparser::parser {nick uhost hand chan text} {
global iplist
if {[channel get $chan ipparser]} {
    if {[regexp -nocase -- {^[0-9\.]{7,20}$} [join [list [lindex [split $text] 0]]]] && [string match "*\.*" [join [list [lindex [split $text] 0]]]]} {
        set ipvrem [clock format [unixtime] -format "%H:%M:%S"]
        set iptext $text
        set ipchan $chan

        if {[info exists iplist] && $iplist != ""} {
            set index [lsearch $iplist "$chan*"]
        } else {
            set index "-1"
        }


        if {$index == "-1"} {
            lappend iplist "$ipchan|$iptext|$ipvrem"
        } else {
           set iplist [lreplace $iplist $index $index "$ipchan|$iptext|$ipvrem"]
        }

    }
}
}

bind pub - !ip ::ipparser::pubcom
proc ::ipparser::pubcom {nick uhost hand chan text} {
global iplist
if {[channel get $chan ipparser]} {

    set index [lsearch -inline $iplist "$chan*"]
    if {$index == "-1"} {
        putserv "PRIVMSG $chan :$nick, во время моего присутствия на канале $chan ip не было"
    } else {
        putserv "PRIVMSG $chan :$nick, последний ip на канале [lindex [split $index "|"] 0] был записан в [lindex [split $index "|"] 2] -> [join [lrange [split [lindex [split $index "|"] 1]] 0 0]] [join [lrange [split [lindex [split $index "|"] 1]] 1 end]]"
    }
}
}
}


Почему-то при использовании Lreplace не работает
lreplace $iplist $index $index "$ipchan|$iptext|$ipvrem"
, а
set iplist [lreplace $iplist $index $index "$ipchan|$iptext|$ipvrem"]
отлично изменяет список.
А с Lappend все нормально.
Have fun.
-
Получить помощь можно на каналах #egghelp в сети IrcNet.ru и #eggdrop в сети RusNet(Ключ канала eggdrop).
Перед созданием новой темы внимательно читайте Правила оформления топиков.

За это сообщение автора tvrsh поблагодарил:
ayaal_86 (24 янв 2012 02:07)
Аватара пользователя
tvrsh
 
Сообщения: 1230
Зарегистрирован: 19 авг 2008 16:55
Откуда: Russian Federation, Podolsk
Благодарил (а): 6 раз.
Поблагодарили: 130 раз.
Версия бота: Eggdrop 1.6.20+suzi

Re: Скрипт для сохранения ip-адреса.

Сообщение ayaal_86 » 24 янв 2012 02:05

спасибо. очень даже хорошо.
1 проблемка не большая, если не было ип то сообщение не выводит почему то.
putserv "PRIVMSG $chan :$nick, во время моего присутствия на канале $chan ip не было"

сможешь это еще пожалуйста пересмотреть.
ayaal_86
 
Сообщения: 29
Зарегистрирован: 28 дек 2011 08:12
Благодарил (а): 6 раз.
Поблагодарили: 0 раз.
Версия бота: Eggdrop 1.6.21+suzi

Re: Скрипт для сохранения ip-адреса.

Сообщение tvrsh » 24 янв 2012 19:19

В процедуре ::ipparser::pubcom замени
if {$index == "-1"} {
на
if {$index == ""} {
Have fun.
-
Получить помощь можно на каналах #egghelp в сети IrcNet.ru и #eggdrop в сети RusNet(Ключ канала eggdrop).
Перед созданием новой темы внимательно читайте Правила оформления топиков.
Аватара пользователя
tvrsh
 
Сообщения: 1230
Зарегистрирован: 19 авг 2008 16:55
Откуда: Russian Federation, Podolsk
Благодарил (а): 6 раз.
Поблагодарили: 130 раз.
Версия бота: Eggdrop 1.6.20+suzi

Re: Скрипт для сохранения ip-адреса.

Сообщение ayaal_86 » 26 янв 2012 09:20

пробовал так же, не выводит сообщение.
ayaal_86
 
Сообщения: 29
Зарегистрирован: 28 дек 2011 08:12
Благодарил (а): 6 раз.
Поблагодарили: 0 раз.
Версия бота: Eggdrop 1.6.21+suzi

Re: Скрипт для сохранения ip-адреса.

Сообщение tvrsh » 04 фев 2012 12:16

Замени
    set index [lsearch -inline $iplist "$chan*"]
на
TCL: [ Скачать ] [ Скрыть ]
if {[info exist iplist] && $iplist != ""} {
    set index [lsearch -inline $iplist "$chan*"]
} else {
    set index ""
}


Весь скрипт:
TCL: [ Скачать ] [ Скрыть ]
namespace eval ipparser {

set iplist "";

setudef flag ipparser

bind pubm - * ::ipparser::parser
proc ::ipparser::parser {nick uhost hand chan text} {
global iplist
if {[channel get $chan ipparser]} {
    if {[regexp -nocase -- {^[0-9\.]{7,20}$} [join [list [lindex [split $text] 0]]]] && [string match "*\.*" [join [list [lindex [split $text] 0]]]]} {
        set ipvrem [clock format [unixtime] -format "%H:%M:%S"]
        set iptext $text
        set ipchan $chan

        if {[info exists iplist] && $iplist != ""} {
            set index [lsearch $iplist "$chan*"]
        } else {
            set index "-1"
        }


        if {$index == "-1"} {
            lappend iplist "$ipchan|$iptext|$ipvrem"
        } else {
           set iplist [lreplace $iplist $index $index "$ipchan|$iptext|$ipvrem"]
        }

    }
}
}

bind pub - !ip ::ipparser::pubcom
proc ::ipparser::pubcom {nick uhost hand chan text} {
global iplist
if {[channel get $chan ipparser]} {

if {[info exist iplist] && $iplist != ""} {
    set index [lsearch -inline $iplist "$chan*"]
} else {
    set index ""
}

    if {$index == ""} {
        putserv "PRIVMSG $chan :$nick, во время моего присутствия на канале $chan ip не было"
    } else {
        putserv "PRIVMSG $chan :$nick, последний ip на канале [lindex [split $index "|"] 0] был записан в [lindex [split $index "|"] 2] -> [join [lrange [split [lindex [split $index "|"] 1]] 0 0]] [join [lrange [split [lindex [split $index "|"] 1]] 1 end]]"
    }
}
}
}
Have fun.
-
Получить помощь можно на каналах #egghelp в сети IrcNet.ru и #eggdrop в сети RusNet(Ключ канала eggdrop).
Перед созданием новой темы внимательно читайте Правила оформления топиков.

За это сообщение автора tvrsh поблагодарил:
ayaal_86 (05 фев 2012 13:38)
Аватара пользователя
tvrsh
 
Сообщения: 1230
Зарегистрирован: 19 авг 2008 16:55
Откуда: Russian Federation, Podolsk
Благодарил (а): 6 раз.
Поблагодарили: 130 раз.
Версия бота: Eggdrop 1.6.20+suzi

Re: Скрипт для сохранения ip-адреса.

Сообщение SuSpeCT » 09 янв 2013 18:03

помогите взял я этот скрипт сделал все хорошо но только вот
проблема в том что он напрочь отказывается записывать порт игры
т.е я например пишу на канале
127.0.0.1 проверка
!ип
он выводит то что я написал
но как только пишу
127.0.0.1:27015
он выводит мне
127.0.0.1 проверка прошу помочь что надо сделать в процедуре?
SuSpeCT
 
Сообщения: 2
Зарегистрирован: 09 янв 2013 17:58
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Версия бота: Windrop 1.6.21

Re: Скрипт для сохранения ip-адреса.

Сообщение SuSpeCT » 09 янв 2013 18:16

помогите
скрипт не записывет ипы с портом
т.е
я пишу
127.0.0.1 проверка
он записывает
а как только пишу
127.0.0.1:27015
все он не записывает и выводит мне
127.0.0.1 проверка
помогите пожалуйста
SuSpeCT
 
Сообщения: 2
Зарегистрирован: 09 янв 2013 17:58
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Версия бота: Windrop 1.6.21

Re: Скрипт для сохранения ip-адреса.

Сообщение tvrsh » 09 янв 2013 23:39

Тут регэксп для ip-адреса очень неточный.
Попробуй такой скрипт:
TCL: [ Скачать ] [ Скрыть ]
namespace eval ipparser {

set iplist "";

setudef flag ipparser

bind pubm - * ::ipparser::parser
proc ::ipparser::parser {nick uhost hand chan text} {
global iplist
if {[channel get $chan ipparser]} {
    if {[::ipparser::findgameserver [join [list [lindex [split $text] 0]]]]} {
        set ipvrem [clock format [unixtime] -format "%H:%M:%S"]
        set iptext $text
        set ipchan $chan

        if {[info exists iplist] && $iplist != ""} {
            set index [lsearch $iplist "$chan*"]
        } else {
            set index "-1"
        }


        if {$index == "-1"} {
            lappend iplist "$ipchan|$iptext|$ipvrem"
        } else {
           set iplist [lreplace $iplist $index $index "$ipchan|$iptext|$ipvrem"]
        }

    }
}
}

bind pub - !ip ::ipparser::pubcom
proc ::ipparser::pubcom {nick uhost hand chan text} {
global iplist
if {[channel get $chan ipparser]} {

if {[info exist iplist] && $iplist != ""} {
    set index [lsearch -inline $iplist "$chan*"]
} else {
    set index ""
}

    if {$index == ""} {
        putserv "PRIVMSG $chan :$nick, во время моего присутствия на канале $chan ip не было"
    } else {
        putserv "PRIVMSG $chan :$nick, последний ip на канале [lindex [split $index "|"] 0] был записан в [lindex [split $index "|"] 2] -> [join [lrange [split [lindex [split $index "|"] 1]] 0 0]] [join [lrange [split [lindex [split $index "|"] 1]] 1 end]]"
    }
}
}

# Взято из http://tclhelp.net/unb/71,1#235
proc ::ipparser::findgameserver {str} {
    global re_gameserver;
    set re_port {([1-9]\d{0,4}|(((([0-5]\d|6[0-4])\d|65[0-4])\d|655[0-2])\d|6553[0-5]))} # port 1-65535
    set re_ipblk_m {([1-9]|(\d|1\d|2[0-4])\d|25[0-5])} # all but last ip block 0-255
    set re_ipblk_e {((\d?|1\d|2[0-4])\d|25[0-4])} # last ip block 1-254
    if {![info exists re_gameserver]} { # cache compiled re globally
        set re_gameserver "\[\[:<:]]($re_ipblk_m\.){3}($re_ipblk_e):($re_port)\[\[:>:]]" }
    if {regexp -- $re_gameserver $str} {
        return 1
    } else {
        return 0
    }
}

}
Have fun.
-
Получить помощь можно на каналах #egghelp в сети IrcNet.ru и #eggdrop в сети RusNet(Ключ канала eggdrop).
Перед созданием новой темы внимательно читайте Правила оформления топиков.
Аватара пользователя
tvrsh
 
Сообщения: 1230
Зарегистрирован: 19 авг 2008 16:55
Откуда: Russian Federation, Podolsk
Благодарил (а): 6 раз.
Поблагодарили: 130 раз.
Версия бота: Eggdrop 1.6.20+suzi


Вернуться в TCL скрипты

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 23

cron