ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2
Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей. Здесь обсуждаются безопасность, программирование, технологии и многое другое. Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
Вернуться   Форум АНТИЧАТ > Оффтоп > Болталка
   
 
 
Опции темы Поиск в этой теме Опции просмотра

Последние темы с форума | IRC
  #1  
Старый 18.09.2009, 16:54
Аватар для ReanimatoR
ReanimatoR
Участник форума
Регистрация: 27.08.2006
Сообщений: 223
Провел на форуме:
2154209

Репутация: 341
Отправить сообщение для ReanimatoR с помощью ICQ
По умолчанию Последние темы с форума | IRC

Каждую минуту проверяет есть ли новая тема на античате, если есть выводит на канал в таком виде:
[16:36:03] <Info> (как подменить порт? - http://forum.antichat.ru/showthread.php?t=142169&)
[16:43:05] <Info> (Что с почтой Вэб-точка-де? - http://forum.antichat.ru/showthread.php?t=142171&)



Сейчас этот бот живет на irc.antichat.net #cyberpunk. Настраивайте под свою ирк-сеть и пользуйтесь
Собственно вод код скрипта для eggdrop'a(попозже оптимизурую, так как есть мусор)

Разбил на три куска, ибо глючит=\\
Код:
## 
## edited ReanimatoR
## RSS bot 
## 
## GHhost - Georgiewskiy Yuriy <bottleman@icf.bofh.ru> http://icf.bofh.ru (C) GHhost 
## 
## additional thx to mrBuG <mrbug@eggdrop.org.ru> and Drakon <drakon@eggdrop.org.ru> for help with egglib and for 
## answers on my question (sometime stupid:) ) 
## 
## based on rssnews.tcl by perpleXa - http://perpleXa.net | http://dev.perpleXa.net #perpleXa on QuakeNet (C) 2004 
## Внимание!!! Данный скрипт требует установленную eggglib.tcl c http://www.eggdrop.org.ru/scripts/ 
## Changelog: 
## 2004-09-08   	rewriten using egglib by Shrike <shrike@eggdrop.org.ru> and mrBuG <mrbug@eggdrop.org.ru> to awoid  
##              	blocked socket problems, added support to recoding feeds from different codepages.
## 2004-09-08 15:36:30	misc bug fixex, don't store colours in cache.
## 2004-09-17 15:55:41  added flood protections, added http user agent, added destination encoding var, fixed some
##			charasters in html parse.
## 2004-09-20 11:18:41  added VIANOTICE feed flag to allow switch betwen post type - to channel or user via notice,
##			added rss(defaultposttype) var to switch it globaly for feed which not have VIANOTICE flag
##			set, added checks if egglib present.
## 2004-09-27 5:58:47  fixed bug with post news vian msg, fixed out of file decriptors bug.
## 2004-11-30 16:37:30  added proxy support, thx to <admin@lubimez.tomsk.ru>.
## 2005-09-15 20:46:00 translate to Russian by MMS <MMS@xaker.ru>
## 2005-09-15 20:53:02 fixed and optimized for WeNet
## 2009-09-XX optimized ONLY for forum.antichat.ru

###########################################
## Не изменять!
array unset feed
##
###########################################
###### Setup ##############################

set feed(antichat) {
  URL=http://forum.antichat.ru/news.rss
  DATABASE=rssnews/antichat.ru
  CHANNELS=#cyberpunk
  POSTNEWS=1
  POSTLIMIT=1
  PUBLIMIT=1
  MSGLIMIT=1
  ENCODINGFROM=cp1251
  VIANOTICE=0
  POSTLAYOUT= 4(10<news> 04- 07<link>04)
  TRIGLAYOUT=  4(10<news> 04- 07<link>04)
}

set rss(encoding_to) cp1251
set rss(httptimeout) 150
set rss(defaultposttype) 0
set rss(client) {Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.7) Gecko/20040803 Firefox/0.9.3}
set rss(use_proxy) 0
set rss(proxy_host) ""
set rss(proxy_port) 8080


###### End of Setup #######################
###########################################
Код:
# Debug mode (to display status messages on the partyline, better don't touch those lines)

set rss(debug) 1
set rss(v_major) 3
set rss(v_minor) 0
set rss(v_build) 005

if { ![info exists egglib(ver)] } {
    putlog "***********************************************"
    putlog "             egglib_pub NOT FOUND !"
    putlog "   Download last version of egglib_pub here:"
    putlog "  http://eggdrop.org.ru/scripts/egglib_pub.zip"
    putlog "***********************************************"
    die
}

if { [expr {$egglib(ver) < 1.4}] } {
    putlog "***********************************************"
    putlog " YOUR VERSION OF egglib_pub IS TOO OLD !"
    putlog "   Download last version of egglib_pub here:"
    putlog "  http://eggdrop.org.ru/scripts/egglib_pub.zip"
    putlog "***********************************************"
    putlog " version installed : $egglib(ver)"
    putlog " version required: 1.4"
    die
}

# Binds
bind PUB  -|-  {last}       rsspublic
bind MSG  -|-  {--news}        rssprivate
bind TIME -|-  {?? * * * *}  rsscheck
bind PUB  -|-  {-cache}      rsscheck

proc rsscheck {min hour day week year} {
    global feed rssnews rss
    foreach id [array names feed] {
	set url          "0"
	set database     "0"
	set channels     "0"
	set postnews     "1"
	set postlimit    "3"
	set publimit     "3"
	set msglimit     "5"
	set postlayout   "<news> <link>"
	set colour ""
	foreach item [split $feed($id) \n] {
	    regsub -all -- {/\*.*\*/} $item {} item
	    regexp -nocase -- {^\s*URL=(.+?)\s*$} $item tmp url
	    regexp -nocase -- {^\s*DATABASE=(.+?)\s*$} $item tmp database
	    regexp -nocase -- {^\s*CHANNELS=(.+?)\s*$} $item tmp channels
	    regexp -nocase -- {^\s*POSTNEWS=(.+?)\s*$} $item tmp postnews
	    regexp -nocase -- {^\s*POSTLIMIT=(.+?)\s*$} $item tmp postlimit
	    regexp -nocase -- {^\s*PUBLIMIT=(.+?)\s*$} $item tmp publimit
	    regexp -nocase -- {^\s*MSGLIMIT=(.+?)\s*$} $item tmp msglimit
	    regexp -nocase -- {^\s*ENCODINGFROM=(.+?)\s*$} $item tmp encodingfrom
	    regexp -nocase -- {^\s*POSTLAYOUT=(.+?)\s*$} $item tmp postlayout
	    regexp -nocase -- {^\s*COLOUR=(.+?)\s*$} $item tmp colour
	    
	}
	
    if {($url == 0) || ($database == 0) || ($channels == 0)} {
	putlog "RSS: Warning: Couldn't load configuration for feed '$id'"
	continue
    }
	if {$postnews == 0} {
	    continue
	}
	#regexp -nocase -- {^(http://)?(\S*\.[a-zA-Z]{2,3})(/.*?)(\:([0-9]+))?$} $url tmp tmp host get tmp port
	#if {$port == ""} {
	#    set port 80
	#}
	set latestnews "iddqd"
	regexp -- {^(\S+/)?.*$} $database tmp directory
	if {$directory != ""} {
	    if {![file isdirectory $directory]} {
		file mkdir $directory
		if {$rss(debug) == 1} {
          putlog "RSS: created directory for feed '$id': $directory"
		}
	    }
	}
	if {[file exists $database]} {
	    set temp [open $database r]
	    set latestnews [gets $temp]
	    if {$latestnews == ""} {
		set latestnews "iddqd"
	    }
	    close $temp
	}
	set count 0
	set data {}
	set limit $postlimit
	if {$limit < $publimit} {
	    set limit $publimit
	}
	if {$limit < $msglimit} {
	    set limit $msglimit
	}
	puthelp "PING :[unixtime]"
	set http_id [::egglib::http_init "rsscheck_"]
	::egglib::http_set_agent $http_id $rss(client)
	::egglib::http_set_timeout $http_id $rss(httptimeout)
	if { $rss(use_proxy) } { ::egglib::http_set_proxy $http_id $rss(proxy_host) $rss(proxy_port) }
	::egglib::http_get $http_id $url[list $encodingfrom $limit $database $postlayout $postlimit $channels $id $latestnews $colour]
    }
}

proc rsscheck_on_error {http_id encodingfrom limit database postlayout postlimit channels id latestnews colour} {
    putlog "RSSNEWS::connect timeout while getting data for feed $id"
}
Код:
proc rsscheck_on_data {http_id html encodingfrom limit database postlayout postlimit channels id latestnews colour} {
    global fedd rssnews rss
    set count 0
    foreach line [split $html \n] {
	append data $line
	incr count [regexp -all -nocase -- {</item>} $line]
	if {([regexp -nocase -- {</rss>} $line]) || ($count >= $limit)} {
	    break
	}
    }
    ::egglib::http_cleanup $http_id
    
    set temp [open $database w]
    set data [rsshtmlspecialchars $data]
    set publisher [rsspublisher $data]
    set data [rssparse $data]
    foreach {rssitem} [lsort -dictionary $data] {
	regsub -all -- {<id>} $postlayout $rssitem output
	regsub -all -- {<publisher>} $output $publisher output
	regsub -all -- {<news>} $output [lindex $rssnews($rssitem) 1] output
	regsub -all -- {<link>} $output [lindex $rssnews($rssitem) 0] output
	if {$encodingfrom != $rss(encoding_to)} {
	    set output [encoding convertfrom $encodingfrom $output]
	    set output [encoding convertto $rss(encoding_to) $output]
	}
	puts $temp $output
    }
    close $temp
    set count 0
    set temp [open $database r]
    while {![eof $temp]} {
	gets $temp headline
	set line [join $headline]
	if {($latestnews == $headline) || ($latestnews == "iddqd") || ($line == "") || ($count == $postlimit)} {
	    break
	    close $temp
	}
	incr count
	foreach channel [channels] {
	    set coloredline $line
	    set colour 
	    if {[string equal -nocase $channels "ALL"]} {
		if {[regexp -- {c} [getchanmode $channel]]} {
		    putserv "PRIVMSG $channel ${colour}[rssnocols $coloredline]"
		} else {
		    putserv "PRIVMSG $channel ${colour}$coloredline"
		}
	    } else {
		if {[lsearch -exact [string tolower $channels] [string tolower $channel]] != -1} {
		    if {[regexp -- {c} [getchanmode $channel]]} {
			putserv "PRIVMSG $channel ${colour}[rssnocols $coloredline]"
		    } else {
			putserv "PRIVMSG $channel ${colour}$coloredline"
		    }
		}
	    }
	}
    }
    close $temp
}

proc rssnews {target fid type nickname} {
    putlog "!rss $fid"
    global feed rss rssnews
    set url          "0"
    set publimit     "3"
    set msglimit     "5"
    set triglayout   "<id> <news> <link>"
    set vianotice $rss(defaultposttype)
    
    foreach item [split $feed($fid) \n] {
	regsub -all -- {/\*.*\*/} $item {} item
	regexp -nocase -- {^\s*URL=(.+?)\s*$} $item tmp url
	regexp -nocase -- {^\s*PUBLIMIT=(.+?)\s*$} $item tmp publimit
	regexp -nocase -- {^\s*MSGLIMIT=(.+?)\s*$} $item tmp msglimit
	regexp -nocase -- {^\s*TRIGLAYOUT=(.+?)\s*$} $item tmp triglayout
	regexp -nocase -- {^\s*ENCODINGFROM=(.+?)\s*$} $item tmp encodingfrom
	regexp -nocase -- {^\s*VIANOTICE=(.+?)\s*$} $item tmp vianotice
    }
    
    if {($url == 0)} {
	putserv "PRIVMSG $target :Внимание: Невозможно загрузить конфигурацию для '$id'"
	return 0
    }
    #regexp -nocase -- {^(http://)?(\S*\.[a-zA-Z]{2,3})(/.*?)(\:([0-9]+))?$} $url tmp tmp host get tmp port
    #if {$port == ""} {
	#set port 80
    #}
    if {$type == 1} {
	set limit $msglimit
    } elseif {$type == 2} {
	set limit $publimit
    } else {
	return 0
    }
    
    set http_id [::egglib::http_init "rssnews_"]
    ::egglib::http_set_timeout $http_id $rss(httptimeout)
    ::egglib::http_set_agent $http_id $rss(client)
    if { $rss(use_proxy) } { ::egglib::http_set_proxy $http_id $rss(proxy_host) $rss(proxy_port) }
    ::egglib::http_get $http_id $url[list $target $fid $type $encodingfrom $limit $triglayout $vianotice $nickname]
}

proc rssnews_on_error {http_id target fid type encodingfrom limit triglayout vianotice nickname} {
if {($vianotice == 0)} {putserv "PRIVMSG $target :$fid: При получении информации произошла ошибка"}
if {($vianotice == 1)} {putserv "NOTICE $nickname :$fid: При получении информации произошла ошибка"}
putlog "RSSNEWS::connect timeout while getting data for feed $fid"
}

proc rssnews_on_data {http_id html target fid type encodingfrom limit triglayout vianotice nickname} {
    global feed rss rssnews
    set count 0
    foreach line [split $html \n] {
	append data $line
	incr count [regexp -all -nocase -- {</item>} $line]
	if {([regexp -nocase -- {</rss>} $line]) || ($count >= $limit)} {
	    break
	}
    }
    ::egglib::http_cleanup $http_id
    set data [rsshtmlspecialchars $data]
    set publisher [rsspublisher $data]
    set data [rssparse $data]
    set count 0
    foreach {id} [lsort -dictionary $data] {
	incr count
	regsub -all -- {<id>} $triglayout $id output
	regsub -all -- {<publisher>} $output $publisher output
	regsub -all -- {<news>} $output [lindex $rssnews($id) 1] output
	regsub -all -- {<link>} $output [lindex $rssnews($id) 0] output
	set output [join $output]
	if {$type == 2} {
	    if {[regexp -- {c} [getchanmode $target]]} {
    		set output [rssnocols $output]
	    }
	}
	
	if {$encodingfrom != $rss(encoding_to)} {
	    
	    set output [encoding convertfrom $encodingfrom $output]
	    set output [encoding convertto $rss(encoding_to) $output]
	}
	if {($vianotice == 0)} {putserv "PRIVMSG $target :$output"}
	if {($vianotice == 1)} {putserv "NOTICE $nickname :$fid:\00300$output"}
	if {($count == $limit)} {
	    break
	}
    }
}

proc rsspublisher {content} {
    set publisher {n/a}
    regsub -all -- {\n+|\s+|\t+|\r+} $content { } content
    regsub -all -- {\&} $content {\\\&} content
    regexp -nocase -- {<title>(.+?)</title>} $content tmp publisher
    regsub -nocase -- {<title>(.+?)</title>} $content {} content
    return $publisher
}

proc rssparse {content} {
    global rssnews
    array unset rssnews
    regsub -all -- {\n+|\s+|\t+|\r+} $content { } content
    regsub -all -- {\&} $content {\\\&} content
    set item 0
    while {[regexp -nocase -- {<item(\s[^>]*?)?>(.+?)</item>} $content tmp tmp value]} {
	incr item
	set title  {n/a}
	regexp -nocase -- {<title>(.+?)</title>} $value tmp title
	set link {n/a}
	regexp -nocase -- {<link>(.+?)goto=newpost</link>} $value tmp link
	regsub -nocase -- {<item.*?>.+?</item>} $content {} content
	set rssnews($item) "{$link} {$title}"
    }
    return [array names rssnews]
}

proc rsshtmlspecialchars {content} {
set t [string map { &nbsp; \x20 &quot; \x22 &apos; \x27 &ndash; \x2D &lt; \x3C &gt; \x3E &amp; \x26 &tilde; \x7E &euro; \x80 &brvbar; \xA6 &copy; \xA9 &Auml; \xC4 &Ouml; \xD6 &Uuml; \xDC &szlig; \xDF &auml; \xE4 &ouml; \xF6 &uuml; \xFC &laquo; \\" &raquo; \\" } $content]
regsub -all -- {&\#8211;} $t {.} t
return $t
}

proc rssprivate {nickname hostname handle arguments} {
    global feed rss
    regsub -all {\\} $arguments {\\\\} arguments
    set spewfeed [lindex $arguments 0]
    if {![isvalidfeed $spewfeed 1]} {
	puthelp "NOTICE $nickname :Выберите одну из доступных рассылок: [lsort -dictionary [array names feed]]"
	return 0
    }
    set spewfeed [isvalidfeed $spewfeed 2]
    rssnews $nickname $spewfeed 1 $nickname
}

proc rsspublic {nickname hostname handle channel arguments} {
    global feed rss
    regsub -all {\\} $arguments {\\\\} arguments
    set protect 15
    if {([info exists rss(flood)]) && (![isop $nickname $channel])} {
	set spam [expr [clock seconds] - $rss(flood)]
	if {$spam < $protect} {
	    putserv "NOTICE $nickname :Скрипт в данный момент используется! Пожалуйста ждите [expr $protect - $spam] секунд."
	    return 0
	}
    }
    set rss(flood) [clock seconds]
    set spewfeed [lindex antichat 0]
    if {![isvalidfeed $spewfeed 1]} {
	puthelp "NOTICE $nickname :Выберите одну из доступных рассылок: [lsort -dictionary [array names feed]]"
	return 0
    }
    set spewfeed [isvalidfeed $spewfeed 2]
    set channels 0
    foreach item [split $feed($spewfeed) \n] {
	regsub -all -- {/\*.*\*/} $item {} item
	regexp -nocase -- {^\s*CHANNELS=(.+?)\s*$} $item tmp channels
    }
    if {([lsearch -exact [string tolower $channels] [string tolower $channel]] == -1) && (![string equal -nocase $channels "ALL"])} {
	puthelp "NOTICE $nickname :Эта рассылка недоступна на данном канале."
	return 0
    }
    rssnews $channel $spewfeed 2 $nickname
}

proc isvalidfeed {keyword type} {
    global feed
    foreach id [array names feed] {
	if {[string equal -nocase $id $keyword]} {
	    switch -exact -- $type {
		{1} {
		    return 1
		}
		{2} {
		    return $id
		}
	    }
	}
    }
    return 0
}

proc rssnocols {string} {
    regsub -all -- {\003[\d]{0,2}(,[\d]{0,2})?} $string {} string
    return $string
}

putlog "Script loaded: RSS feed parser $rss(v_major).$rss(v_minor).$rss(v_build) (C) 2004 GHhost."
putlog "RSS feed parser translated to Russian by MMS <MMS@xaker.ru , /server irc.wenet.ru #37>"
putlog "Antichat's Announcements loader edited by ReanimatoR>"
CHANNELS=#cyberpunk заменить на нужный вам канал.

Последний раз редактировалось ReanimatoR; 18.09.2009 в 17:05..
 
Ответить с цитированием
 



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Раскрутка форума. GrinGoO Статьи 0 29.03.2009 09:17
А нафига публиковать инфу о том как ломать чаты. Егорыч+++ Чаты 52 14.11.2005 20:23



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ