This required separate plugin directories for both pluginized executables.
		
			
				
	
	
		
			129 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			Tcl
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			129 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			Tcl
		
	
	
		
			Executable File
		
	
	
	
	
| #!/usr/bin/env tclsh
 | |
| #
 | |
| # ZyklonB coin plugin, random number-based utilities
 | |
| #
 | |
| # Copyright 2012, 2014 Přemysl Janouch
 | |
| # See the file LICENSE for licensing information.
 | |
| #
 | |
| 
 | |
| # This is a terrible excuse for a programming language and I feel dirty.
 | |
| 
 | |
| proc parse {line} {
 | |
| 	global msg
 | |
| 	unset -nocomplain msg
 | |
| 
 | |
| 	if [regexp {^:([^ ]*) *(.*)} $line -> prefix rest] {
 | |
| 		set msg(prefix) $prefix
 | |
| 		set line $rest
 | |
| 	}
 | |
| 	if [regexp {^([^ ]*) *(.*)} $line -> command rest] {
 | |
| 		set msg(command) $command
 | |
| 		set line $rest
 | |
| 	}
 | |
| 	while {1} {
 | |
| 		set line [string trimleft $line " "]
 | |
| 		set i [string first " " $line]
 | |
| 		if {$i == -1} { set i [string length $line] }
 | |
| 		if {$i == 0} { break }
 | |
| 
 | |
| 		if {[string index $line 0] == ":"} {
 | |
| 			lappend msg(param) [string range $line 1 end]
 | |
| 			break
 | |
| 		}
 | |
| 		lappend msg(param) [string range $line 0 [expr $i - 1]]
 | |
| 		set line [string range $line $i end]
 | |
| 	}
 | |
| }
 | |
| 
 | |
| proc get_config {key} {
 | |
| 	global msg
 | |
| 	puts "ZYKLONB get_config :$key"
 | |
| 	gets stdin line
 | |
| 	parse $line
 | |
| 	return [lindex $msg(param) 0]
 | |
| }
 | |
| 
 | |
| proc pmrespond {text} {
 | |
| 	global ctx
 | |
| 	global ctx_quote
 | |
| 	puts "PRIVMSG $ctx :$ctx_quote$text"
 | |
| }
 | |
| 
 | |
| fconfigure stdin -translation crlf -encoding iso8859-1
 | |
| fconfigure stdout -translation crlf -encoding iso8859-1
 | |
| 
 | |
| set prefix [get_config prefix]
 | |
| puts "ZYKLONB register"
 | |
| 
 | |
| set eightball [list \
 | |
| 	"It is certain" \
 | |
| 	"It is decidedly so" \
 | |
| 	"Without a doubt" \
 | |
| 	"Yes - definitely" \
 | |
| 	"You may rely on it" \
 | |
| 	"As I see it, yes" \
 | |
| 	"Most likely" \
 | |
| 	"Outlook good" \
 | |
| 	"Yes" \
 | |
| 	"Signs point to yes" \
 | |
| 	"Reply hazy, try again" \
 | |
| 	"Ask again later" \
 | |
| 	"Better not tell you now" \
 | |
| 	"Cannot predict now" \
 | |
| 	"Concentrate and ask again" \
 | |
| 	"Don't count on it" \
 | |
| 	"My reply is no" \
 | |
| 	"My sources say no" \
 | |
| 	"Outlook not so good" \
 | |
| 	"Very doubtful"]
 | |
| 
 | |
| while {[gets stdin line] != -1} {
 | |
| 	parse $line
 | |
| 
 | |
| 	if {! [info exists msg(prefix)] || ! [info exists msg(command)]
 | |
| 		|| $msg(command) != "PRIVMSG" || ! [info exists msg(param)]
 | |
| 		|| [llength $msg(param)] < 2} { continue }
 | |
| 
 | |
| 	regexp {^[^!]*} $msg(prefix) ctx
 | |
| 	if [regexp {^[#&+!]} [lindex $msg(param) 0]] {
 | |
| 		set ctx_quote "$ctx: "
 | |
| 		set ctx [lindex $msg(param) 0]
 | |
| 	} else { set ctx_quote "" }
 | |
| 
 | |
| 	set input [lindex $msg(param) 1]
 | |
| 	set first_chars [string range $input 0 \
 | |
| 		[expr [string length $prefix] - 1]]
 | |
| 	if {$first_chars != $prefix} { continue }
 | |
| 	set input [string range $input [string length $prefix] end]
 | |
| 
 | |
| 	if {$input == "coin"} {
 | |
| 		if {rand() < 0.5} {
 | |
| 			pmrespond "Heads."
 | |
| 		} else {
 | |
| 			pmrespond "Tails."
 | |
| 		}
 | |
| 	} elseif {[regexp {^dice( +|$)(.*)} $input -> _ args]} {
 | |
| 		if {! [string is integer -strict $args] || $args <= 0} {
 | |
| 			pmrespond "Invalid or missing number."
 | |
| 		} else {
 | |
| 			pmrespond [expr {int($args * rand()) + 1}]
 | |
| 		}
 | |
| 	} elseif {[regexp {^(choose|\?)( +|$)(.*)} $input -> _ _ args]} {
 | |
| 		if {$args == ""} {
 | |
| 			pmrespond "Nothing to choose from."
 | |
| 		} else {
 | |
| 			set c [split $args ",|"]
 | |
| 			pmrespond [string trim [lindex $c \
 | |
| 				[expr {int([llength $c] * rand())}]]]
 | |
| 		}
 | |
| 	} elseif {[regexp {^eightball( +|$)(.*)} $input -> _ args]} {
 | |
| 		if {$args == ""} {
 | |
| 			pmrespond "You should, you know, ask something."
 | |
| 		} else {
 | |
| 			pmrespond [lindex $eightball \
 | |
| 				[expr {int([llength $eightball] * rand())}]].
 | |
| 		}
 | |
| 	}
 | |
| }
 | |
| 
 |