View previous topic :: View next topic |
Author |
Message |
piggy Voice

Joined: 21 Aug 2005 Posts: 14 Location: London
|
Posted: Fri Aug 25, 2006 10:30 am Post subject: Latest Urban Dictionary tcl |
|
|
If anyone can help me out with this it would be most appreciated.
Alternatively if i should be contacting the author directly for this please let me know.
1) Is it possible to make it that the script below can be set for specific channels, eg: .chanset #channel +urbandictionary or any otherway of specifying what channels it should respond in?
2) Is there something that can be added that it prevents two users from issueing the same command within say 3 minutes.
eg:
<nick1> -ud irc
<nick2> -ud irc
Because as it is now when <nick1> issues "-ud irc" the bot displays the result and if <nick2> where to issue the same "-ud irc" 5 seconds later the bot would then display the result again.
Code: | # Urban Dictionary
# Copyright (C) 2006 perpleXa
# http://perplexa.ugug.co.uk / #perpleXa on QuakeNet
#
# Redistribution, with or without modification, are permitted provided
# that redistributions retain the above copyright notice, this condition
# and the following disclaimer.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE.
#
# Usage:
# -ud [id] <term>
# fsck is available at http://perplexa.ugug.co.uk
package require fsck 1.10;
package require http;
namespace eval urbandict {
variable version 1.7;
variable encoding "utf-8";
variable client "Mozilla/5.0 (compatible; Y!J; for robot study; keyoshid)";
bind pub -|- "-ud" [namespace current]::pub;
namespace export pub;
}
proc urbandict::getdefinition {definition} {
variable client;
http::config -useragent $client;
set url "http://www.urbandictionary.com/define.php?term=[urlencode $definition]";
if {[catch {http::geturl $url -timeout 20000} token]} {
return [list 0 "Warning: Couldn't connect to \[$url\]"];
}
upvar 0 $token state;
if {![string equal -nocase $state(status) "ok"]} {
return [list 0 "Warning: Couldn't connect to \[$url\] (connection $state(status))."];
}
set data [http::data $token];
http::cleanup $token;
set matches [regexp -all -inline {<div class=\"def_p\">.*?<p>(.*?)<\/p>} $data];
set list [list];
foreach {null definition} $matches {
regsub -all {<[^>]*?>} [decode $definition] "" definition;
regsub -all {[\r\n\s\t]+} $definition " " definition;
lappend list $definition;
}
return [concat [llength $list] $list];
}
proc urbandict::urlencode {i} {
variable encoding
set index 0;
set i [encoding convertto $encoding $i]
set length [string length $i]
set n ""
while {$index < $length} {
set activechar [string index $i $index]
incr index 1
if {![regexp {^[a-zA-Z0-9]$} $activechar]} {
append n %[format "%02X" [scan $activechar %c]]
} else {
append n $activechar
}
}
return $n
}
proc urbandict::pub {nick host hand chan argv} {
if {![string compare $argv ""]} {
puthelp "NOTICE $nick :Usage: !ud \[id\] <definition>";
return 1;
}
if {[string is digit -strict [getword $argv 0]]} {
if {[splitline $argv cargv 2]!=2} {
puthelp "NOTICE $nick :Usage: !ud \[id\] <definition>";
return 1;
}
set id [lindex $cargv 0];
set argv [lindex $cargv 1];
if {!$id} {
set id 1;
}
} else {
set id 1;
}
set definitions [getdefinition $argv];
set count [lindex $definitions 0];
if {!$count} {
puthelp "PRIVMSG $chan :Nothing found for \"$argv\".";
return 1;
} elseif {$id > $count} {
puthelp "PRIVMSG $chan :Only $count results found for \"$argv\".";
return 1;
}
set definition [lindex $definitions $id];
if {[string length $definition] <= 400} {
puthelp "PRIVMSG $chan :\[$id/$count\] $definition";
return 0;
}
foreach line [splitmsg $definition] {
puthelp "PRIVMSG $chan :\[$id/$count\] $line";
}
return 0;
}
proc urbandict::decode {content} {
if {![string match *&* $content]} {
return $content;
}
set escapes {
\x20 " \x22 & \x26 ' \x27 – \x2D
< \x3C > \x3E ˜ \x7E € \x80 ¡ \xA1
¢ \xA2 £ \xA3 ¤ \xA4 ¥ \xA5 ¦ \xA6
§ \xA7 ¨ \xA8 © \xA9 ª \xAA « \xAB
¬ \xAC ­ \xAD ® \xAE &hibar; \xAF ° \xB0
± \xB1 ² \xB2 ³ \xB3 ´ \xB4 µ \xB5
¶ \xB6 · \xB7 ¸ \xB8 ¹ \xB9 º \xBA
» \xBB ¼ \xBC ½ \xBD ¾ \xBE ¿ \xBF
À \xC0 Á \xC1 Â \xC2 Ã \xC3 Ä \xC4
Å \xC5 Æ \xC6 Ç \xC7 È \xC8 É \xC9
Ê \xCA Ë \xCB Ì \xCC Í \xCD Î \xCE
Ï \xCF Ð \xD0 Ñ \xD1 Ò \xD2 Ó \xD3
Ô \xD4 Õ \xD5 Ö \xD6 × \xD7 Ø \xD8
Ù \xD9 Ú \xDA Û \xDB Ü \xDC Ý \xDD
Þ \xDE ß \xDF à \xE0 á \xE1 â \xE2
ã \xE3 ä \xE4 å \xE5 æ \xE6 ç \xE7
è \xE8 é \xE9 ê \xEA ë \xEB ì \xEC
í \xED î \xEE ï \xEF ð \xF0 ñ \xF1
ò \xF2 ó \xF3 ô \xF4 õ \xF5 ö \xF6
÷ \xF7 ø \xF8 ù \xF9 ú \xFA û \xFB
ü \xFC ý \xFD þ \xFE ÿ \xFF
};
set content [string map $escapes $content];
set content [string map [list "\]" "\\\]" "\[" "\\\[" "\$" "\\\$" "\\" "\\\\"] $content];
regsub -all -- {&#([[:digit:]]{1,5});} $content {[format %c [string trimleft "\1" "0"]]} content;
regsub -all -- {&#x([[:xdigit:]]{1,4});} $content {[format %c [scan "\1" %x]]} content;
regsub -all -- {&#?[[:alnum:]]{2,7};} $content "?" content;
return [subst $content];
}
putlog "Script loaded: Urban Dictionary v$urbandict::version by perpleXa";
|
|
|
Back to top |
|
 |
rosc2112 Revered One

Joined: 19 Feb 2006 Posts: 1454 Location: Northeast Pennsylvania
|
Posted: Fri Aug 25, 2006 12:36 pm Post subject: |
|
|
Yep. That's a mod I did to this script myself, too:
Code: |
Near the top add:
set udchans "#mychan #chan2 #etc"
Then at the top of "proc urbandict::pub" add:
if {[lsearch -exact $::udchans $chan] == -1} {return}
|
That's it! Nice script by the way, thank you perplexa!
Opps I missed the 2nd part of your question. I did not add a timer, I changed the responses from $chan to $nick, since the responses can be really long and I don't need it spamming the channel. Someone else might be able to post a timer for you tho. |
|
Back to top |
|
 |
piggy Voice

Joined: 21 Aug 2005 Posts: 14 Location: London
|
Posted: Fri Aug 25, 2006 12:57 pm Post subject: |
|
|
rosc2112
Thanks for the help on that one, your solution works perfectly
Quote: | I did not add a timer, I changed the responses from $chan to $nick, |
I will keep that in mind if i allow -ud to be used in other channels, but for now i have one channel specificly for urban dictionary requests.
Thanks again. |
|
Back to top |
|
 |
piggy Voice

Joined: 21 Aug 2005 Posts: 14 Location: London
|
Posted: Sat Sep 02, 2006 11:23 am Post subject: |
|
|
rosc2112:
You wouldnt perhaps know what i can add to the code of this tcl to make it that a user can /msg <botnick> -ud <search string> and the bot will then display the result in private to that user that msg'd the bot?
Thanks |
|
Back to top |
|
 |
rosc2112 Revered One

Joined: 19 Feb 2006 Posts: 1454 Location: Northeast Pennsylvania
|
Posted: Sat Sep 02, 2006 5:55 pm Post subject: |
|
|
Add this somewhere above where the proc's begin:
Code: |
bind msg - !ud udmsg
proc udmsg {nick uhost hand text} {
urbandict::pub $nick $uhost $hand privmsg $text
}
And in proc urbandict::pub
Change:
if {[lsearch -exact $::udchans $chan] == -1} {return}
to:
if {([lsearch -exact $::udchans $chan] == -1) && ($chan != "privmsg")} {return}
And add:
if {$chan == "privmsg"} {set chan $nick}
|
Should do the trick. |
|
Back to top |
|
 |
piggy Voice

Joined: 21 Aug 2005 Posts: 14 Location: London
|
Posted: Sun Sep 03, 2006 2:31 am Post subject: |
|
|
rosc2112: You right, that does do the trick.
Thanks alot for your help  |
|
Back to top |
|
 |
teeone Voice
Joined: 30 Jun 2007 Posts: 2
|
Posted: Sat Jun 30, 2007 12:34 am Post subject: fsck package |
|
|
# fsck is available at http://perplexa.ugug.co.uk
package require fsck 1.10;
does anybody have this package available to download? That website has been dead for the last few weeks now :(
thx |
|
Back to top |
|
 |
speechles Revered One

Joined: 26 Aug 2006 Posts: 1398 Location: emerald triangle, california (coastal redwoods)
|
Posted: Sat Jun 30, 2007 12:57 am Post subject: Re: fsck package |
|
|
teeone wrote: | # fsck is available at http://perplexa.ugug.co.uk
package require fsck 1.10;
does anybody have this package available to download? That website has been dead for the last few weeks now
thx | Here is perplexa's package:
* fsck package 1.14+
Here is the latest urban dictionary script:
* urbandict.tcl [v1.8] |
|
Back to top |
|
 |
teeone Voice
Joined: 30 Jun 2007 Posts: 2
|
Posted: Sat Jun 30, 2007 7:51 am Post subject: |
|
|
Thank you thank you thank you! UD is hilarious ;) |
|
Back to top |
|
 |
doubleu Voice
Joined: 10 Feb 2008 Posts: 11
|
Posted: Fri May 02, 2008 1:15 pm Post subject: |
|
|
is anyone else having problems with this script now? |
|
Back to top |
|
 |
speechles Revered One

Joined: 26 Aug 2006 Posts: 1398 Location: emerald triangle, california (coastal redwoods)
|
Posted: Fri May 02, 2008 2:50 pm Post subject: |
|
|
replace: Code: | set matches [regexp -all -inline {<div class=\"def_p\">.*?<p>(.*?)<\/p>} $data]; |
with: Code: | set matches [regexp -all -inline {<div class='definition'>(.*?)</div} $data]; |
|
|
Back to top |
|
 |
shadrach Halfop
Joined: 14 Dec 2007 Posts: 74
|
Posted: Mon May 05, 2008 2:17 pm Post subject: |
|
|
Appears not to be working again. |
|
Back to top |
|
 |
speechles Revered One

Joined: 26 Aug 2006 Posts: 1398 Location: emerald triangle, california (coastal redwoods)
|
Posted: Wed May 07, 2008 2:55 am Post subject: |
|
|
http://forum.egghelp.org/viewtopic.php?t=15715
issues like this should really go thru the ears of the original author first...
contact info for perplexa can be found at the above link. |
|
Back to top |
|
 |
shadrach Halfop
Joined: 14 Dec 2007 Posts: 74
|
Posted: Thu May 08, 2008 1:57 pm Post subject: |
|
|
It's come back to life. |
|
Back to top |
|
 |
doubleu Voice
Joined: 10 Feb 2008 Posts: 11
|
Posted: Sun May 11, 2008 11:22 pm Post subject: |
|
|
and dead again!
Last edited by doubleu on Wed May 21, 2008 3:18 pm; edited 1 time in total |
|
Back to top |
|
 |
|