This is the new home of the egghelp.org community forum.
All data has been migrated (including user logins/passwords) to a new phpBB version.


For more information, see this announcement post. Click the X in the top right-corner of this box to dismiss this message.

Reports Users

Requests for complete scripts or modifications/fixes for scripts you didn't write. Response not guaranteed, and no thread bumping!
Post Reply
O
ORATEGOD
Voice
Posts: 39
Joined: Mon Jun 08, 2020 5:50 pm

Reports Users

Post by ORATEGOD »

Greetings friends ... I was testing this TCL to inform users ...

But I don't know how to end ...

As always I thank you for all your help.


public command

ORATEGOD: !report
Bot: ERROR! Enter a bot and info to report. Format: !report <user> <description>

ORATEGOD: !report <user> <description>
Bot: ORATEGOD: Your report has been received. (Thanks)..
Bot: ORATEGOD: Ihr Bericht wurde erhalten. (Vielen Dank)..
Bot: ORATEGOD: Se ha recibido su informe. (Gracias)..

command for bot owner

!report list (shows list of reports (if there are any)
Bot: 1. user1 description of the problem.
Bot: 2. user2 description of the problem.
Bot: 3. user3 description of the problem.
Bot: 4. user4 description of the problem.

!report del
Bot: Houston, we have a problem

!report del 3
Bot: report number 3 has been deleted
set report(file) "report.txt"
set report(us.thanks) "Your report has been received. (Thanks)."
set report(de.thanks) "Ihr Bericht wurde erhalten. (Vielen Dank)."
set report(es.thanks) "Se ha recibido su reporte. (Gracias)."

bind pub -|- !report report:tofile

proc report:tofile {nk uh hn ch tx} {
global report
set date [strftime %d/%m/%y]
set open [open $report(file) a]
puts $open "- $nk reported: $tx"
close $open
puthelp "PRIVMSG $ch :${nk}: $report(us.thanks)."
puthelp "PRIVMSG $ch :${nk}: $report(de.thanks)."
puthelp "PRIVMSG $ch :${nk}: $report(es.thanks)."
}

putlog "************************************"
putlog "* REPORT ***** LOADED ***** REPORT *"
putlog "************************************"
Sorry my bad english (:
User avatar
CrazyCat
Revered One
Posts: 1215
Joined: Sun Jan 13, 2002 8:00 pm
Location: France
Contact:

Post by CrazyCat »

I did this little script:

Code: Select all

set report(file) "report.txt"
set report(us.thanks) "Your report has been received. (Thanks)."
set report(de.thanks) "Ihr Bericht wurde erhalten. (Vielen Dank)."
set report(es.thanks) "Se ha recibido su reporte. (Gracias)."

bind pub -|- !report report

# main procedure: controler for actions
proc report {nick uhost handle chan text} {
	if {[llength [split $text]] == 0 } {
		report::error $nick $chan
		return 0
	}
	switch [join [lindex [split $text] 0]] {
		list {
			if {![report:hasrights $nick $chan $handle]} { return 0 }
			report:list $nick $uhost $handle $chan $text
		del {
			if {![report:hasrights $nick $chan $handle]} { return 0 }
			report:del $nick $uhost $handle $chan $text
		}
		default {
			report:save $nick $uhost $chan $text
		}
}

# Check if user can list/del
proc report:hasrights {nick chan handle} {
	if {($handle == "*") || ![matchattr $handle +n]} {
		report:error $nick $chan
		return 0
	} else {
		return 1
	}
}

# Send generic error message
proc report:error {nick chan} {
	putserv "PRIVMSG $chan :\002HOUSTON!\002 We've had a problem"
}

# Saves a report
proc report:save {nick uhost chan text} {
	if {[llength [split $text]] < 2 } {
		putserv "PRIVMSG $nick :\002ERROR!\002 Enter a bot and info to report. Format: \002!report <user> <description>\002"
		return 0
	}
	set date [strftime %d/%m/%y]
	set fo [open $::report(file) a]
	set vbot [join [lindex [split $text] 0]]
	set desc [join [lrange [split $text] 1 end]]
	report:save $nick $uhost $chan $vbot $desc
	puthelp "PRIVMSG $nick :$::report(us.thanks)"
	puthelp "PRIVMSG $nick :$::report(de.thanks)"
	puthelp "PRIVMSG $nick :$::report(es.thanks)"
	puts $fo "\[$date\] <$nick@$uhost> on $chan reported $vbot :$desc"
	close $fo
}

# Checks if report file exists and is not empty
proc report:getfile {nick} {
	if {![file exists $::report(file)]} {
		putserv "PRIVMSG $nick :No report"
		return 0
	}
	set fi [open $::report(file) r]
	set lines [read -nonewline $fi]
	if {$lines == ""} {
		putserv "PRIVMSG $nick :No report"
		return 0
	}
	close $fi
	return $lines
}

# list content of report file to user
proc report:list {nick uhost handle chan text} {
	if {![report:hasrights $nick $chan $handle]} { return 0 }
	set lines report:getfile $nick
	if {$lines == 0} { return 0 }
	set cpt 0
	foreach line [split $lines "\n"] {
		incr cpt
		putserv "PRIVMSG $nick :#$cpt $line"
	}
}

# delete a line in the report file
proc report:del {nick uhost handle chan text} {
	if {![report:hasrights $nick $chan $handle]} { return 0 }
	set args [split $text]
	if {[llength $args]!=2 || [join [lindex $args] 0]!="del"} {
		report:error $nick $chan
		return 0
	}
	set ln [join [lindex $args 1]]
	if {![string is integer -strict $ln]} {
		report:error $nick $chan
		return 0
	}
	set fo [open ${::report(file).tmp} w]
	set lines report:getfile $nick
	if {$lines == 0} { return 0 }
	set cpt 0
	foreach line [split $lines "\n"] {
		incr cpt
		if {$cpt == $ln} { continue }
		puts $fo $line
	}
	close $fo
	file rename -force -- ${::report(file).tmp} $::report(file)
}

putlog "************************************"
putlog "* REPORT ***** LOADED ***** REPORT *"
putlog "************************************" 
It can seem complex because I separated functionalities to allow their reuse.

Note that I don't check if the reported user exists on chan, and I double-check if user is allowed to list/del reports (check in controler and in dedicated proc).
This is to allow to add binds to directly run proc, like bind pub n !rdel report:del

I didn't test the script, just made it on the fly :)
Post Reply