BT.GuestNick.tcl 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221
  1. #########################################################################
  2. ## BlackTools - The Ultimate Channel Control Script ##
  3. ## One TCL. One smart Eggdrop ##
  4. #########################################################################
  5. ########################### GUESTNICK TCL ###########################
  6. #########################################################################
  7. ## ##
  8. ## BlackTools : http://blacktools.tclscripts.net ##
  9. ## Bugs report : http://www.tclscripts.net/ ##
  10. ## GitHub page : https://github.com/tclscripts/BlackToolS-TCL-script ##
  11. ## Online Help : irc://irc.undernet.org/tcl-help ##
  12. ## #TCL-HELP / UnderNet ##
  13. ## You can ask in english or romanian ##
  14. ## ##
  15. #########################################################################
  16. proc guestnick:process {nick host hand chan chan1 who gnick type number modul} {
  17. global black
  18. set num 0
  19. set temp_num 0
  20. set cmd_status [btcmd:status $chan $hand "guestnick" 0]
  21. if {$cmd_status == "1"} {
  22. return
  23. }
  24. if {[matchattr $hand q]} {
  25. blacktools:tell $nick $host $hand $chan $chan1 gl.glsuspend none
  26. return
  27. }
  28. if {[matchattr $hand -|q $chan]} {
  29. blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
  30. return
  31. }
  32. if {![validchan $chan]} {
  33. blacktools:tell $nick $host $hand $chan $chan1 gl.instr $modul
  34. return
  35. }
  36. switch $who {
  37. on {
  38. setting:set $chan +guestnick ""
  39. blacktools:tell $nick $host $hand $chan $chan1 guestnick.1 none
  40. }
  41. off {
  42. setting:set $chan -guestnick ""
  43. blacktools:tell $nick $host $hand $chan $chan1 guestnick.2 none
  44. }
  45. add {
  46. if {$gnick == ""} {
  47. switch $type {
  48. 0 {
  49. blacktools:tell $nick $host $hand $chan $chan1 gl.instr "guestnick"
  50. }
  51. 1 {
  52. blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "guestnick"
  53. }
  54. 2 {
  55. blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "guestnick"
  56. }
  57. }
  58. return
  59. }
  60. set findword [prot:findword $chan "GUESTNICK" $gnick]
  61. if {$findword == "1"} {
  62. blacktools:tell $nick $host $hand $chan $chan1 gl.wordexists $gnick
  63. return
  64. }
  65. while {$temp_num == 0} {
  66. set get [find:num $num $chan "GUESTNICK"]
  67. if {$get == "$num"} {
  68. set num [expr $num + 1]
  69. } else { set temp_num 1 }
  70. }
  71. set file [open $black(add_file) a]
  72. set enc_chan [encoding convertto utf-8 $chan]
  73. puts $file "$enc_chan GUESTNICK $num $gnick"
  74. close $file
  75. blacktools:tell $nick $host $hand $chan $chan1 guestnick.3 "$gnick $num"
  76. }
  77. del {
  78. if {![regexp {^[0-9]} $number]} {
  79. switch $type {
  80. 0 {
  81. blacktools:tell $nick $host $hand $chan $chan1 gl.instr "guestnick"
  82. }
  83. 1 {
  84. blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "guestnick"
  85. }
  86. 2 {
  87. blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "guestnick"
  88. }
  89. }
  90. return
  91. }
  92. set ret [find:num $number $chan "GUESTNICK"]
  93. if {$ret == 0} {
  94. blacktools:tell $nick $host $hand $chan $chan1 guestnick.5 $number
  95. return
  96. }
  97. set file [open $black(add_file) "r"]
  98. set timestamp [clock format [clock seconds] -format {%Y%m%d%H%M%S}]
  99. set temp "$black(tempdir)/bt_temp.$timestamp"
  100. set tempwrite [open $temp w]
  101. while {[gets $file line] != -1} {
  102. set read_num [lindex [split $line] 2]
  103. set read_type [lindex [split $line] 1]
  104. set read_chan [lindex [split $line] 0]
  105. set enc_chan [encoding convertfrom utf-8 $read_chan]
  106. if {[string equal $number $read_num] && [string equal $read_type "GUESTNICK"] && [string equal $enc_chan $chan]} {
  107. continue
  108. } else {
  109. puts $tempwrite $line
  110. }
  111. }
  112. close $tempwrite
  113. close $file
  114. file rename -force $temp $black(add_file)
  115. blacktools:tell $nick $host $hand $chan $chan1 guestnick.4 $number
  116. }
  117. list {
  118. array set nicklist [list]
  119. set timestamp [clock format [clock seconds] -format {%Y%m%d%H%M%S}]
  120. set temp "$black(tempdir)/nick_temp.$timestamp"
  121. set file [open $black(add_file) "r"]
  122. set w [read -nonewline $file]
  123. close $file
  124. set data [split $w "\n"]
  125. foreach line $data {
  126. set read_chan [lindex [split $line] 0]
  127. set enc_chan [encoding convertfrom utf-8 $read_chan]
  128. set read_type [lindex [split $line] 1]
  129. if {[string match -nocase $enc_chan $chan] && [string match -nocase $read_type "GUESTNICK"]} {
  130. set msg_num [lindex [split $line] 2]
  131. set message [lrange [split $line] 3 end]
  132. lappend nicklist($msg_num) $message
  133. }
  134. }
  135. set tempwrite [open $temp w]
  136. foreach msg [lsort -integer -increasing [array names nicklist]] {
  137. puts $tempwrite "$msg [join $nicklist($msg)]"
  138. }
  139. close $tempwrite
  140. set file [open $temp "r"]
  141. set w [read -nonewline $file]
  142. close $file
  143. set data [split $w "\n"]
  144. file delete $temp
  145. module:getinfo $nick $host $hand $chan $chan1 $type $data "guestnick" "0" $number
  146. }
  147. default {
  148. switch $type {
  149. 0 {
  150. blacktools:tell $nick $host $hand $chan $chan1 gl.instr "guestnick"
  151. }
  152. 1 {
  153. blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "guestnick"
  154. }
  155. 2 {
  156. blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "guestnick"
  157. }
  158. }
  159. }
  160. }
  161. }
  162. proc guestnick:module {nick host hand chan} {
  163. global black
  164. if {![validchan $chan]} {
  165. return
  166. }
  167. if {[setting:get $chan guestnick]} {
  168. if {[info exists black(turnOnFlood:$chan)]} {
  169. return
  170. }
  171. set getlang [string tolower [setting:get $chan lang]]
  172. if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
  173. set method [setting:get $chan guestnick-msgmethod]
  174. if {$method == ""} {
  175. set method $black(guestnick:msgmethod)
  176. }
  177. set file [open $black(add_file) r]
  178. while {[gets $file line] != -1} {
  179. set read_chan [lindex [split $line] 0]
  180. set read_type [lindex [split $line] 1]
  181. set read_msg [lrange [split $line] 3 end]
  182. if {[string equal -nocase $read_chan $chan] && [string equal -nocase $read_type "GUESTNICK"] && [string match -nocase $read_msg $nick]} {
  183. set replace(%nick%) $nick
  184. set replace(%chan%) $chan
  185. set message [setting:get $chan guestnick-message]
  186. if {$message == ""} {
  187. set message $black(say.$getlang.guestnick.10)
  188. }
  189. set text [black:color:set "" $message]
  190. set reply [join $text]
  191. set message [string map [array get replace] $reply]
  192. switch [string tolower $method] {
  193. chan {
  194. putserv "PRIVMSG $chan :$message"
  195. }
  196. privmsg {
  197. putserv "PRIVMSG $nick :$message"
  198. }
  199. notice {
  200. putserv "NOTICE $nick :$message"
  201. }
  202. }
  203. }
  204. }
  205. close $file
  206. }
  207. }
  208. ##############
  209. #########################################################################
  210. ## END ##
  211. #########################################################################