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.

Needed help with !rep

Requests for complete scripts or modifications/fixes for scripts you didn't write. Response not guaranteed, and no thread bumping!
Post Reply
L
LinkinPark
Voice
Posts: 7
Joined: Tue Apr 26, 2011 7:03 am
Location: Cambodia

Needed help with !rep

Post by LinkinPark »

Can anyone edit the access to use this.. I was an op'ed but can not check !rep but voiced people can do it as well..

Code: Select all

## Rep.tcl-v.1.1.0
## Author: Luminous
## Support: pm on egghelp.org

## This is a public script for voiced and opped users to add or remove reputation points to/from users. Its intended use is to keep track of positively and negatively contributing users, similar to forums with reputation systems. Points will be logged to the file "~/eggdrop/reps.txt". Note that everyone starts off at 0 or "neutral" points and does not show up as having reputation via !rep or !rep NICK until they reach negative or positive points. If points are removed from a user not in the file, they are automatically given -1. If rep is added to a user not in the file, they are automatically given 1. The plus/minus increments work normally from there unless the user reaches 0, or neutral, again.

## Commands

# All commands are public

# To add a reputation point to a user, use "NICK++" 

# To remove a reputation point, use "NICK--"

# To view the reputation points of a specific user, use "!rep NICK"

# To view all reputation, use "!rep". A list will be noticed you slowly to avoid flooding.

# Set below the char you want to trigger the "rep" functions with:

set bchar "!"

## Code starts, edit beyond here at your own risk

bind pubm * * rep
proc rep {nick host hand chan text} {
 global bchar
    if {[regexp -nocase {^\S+\+\+$} $text] || [regexp -nocase {^\S+--$} $text] || [regexp "^${bchar}rep.*" $text]} {
        if {![isvoice $nick $chan] && ![matchattr $hand |o $chan]} {
            return
        }
        if {![file exists "reps.txt"]} {
            close [open "reps.txt" w]
        }
        set fs [open "reps.txt"]
        set data [split [read -nonewline $fs] \n]
        close $fs
        if {[regexp -nocase {^\S+\+\+$} $text]} {
            set whom [join [lindex [split $text +] 0]]
            if {[string equal -nocase "[string map {"\[" "\\\[" "\]" "\\\]" "\}" "\\\}"} $whom]" "[string map {"\[" "\\\[" "\]" "\\\]" "\}" "\\\}"} $nick]"]} {
                putserv "NOTICE $nick :You can not rep yourself."
                return
            }
            set match [lsearch $data "[string map {"\[" "\\\[" "\]" "\\\]" "\}" "\\\}"} $whom] *"]   
            if {$match == -1} {
                if {![llength $data]} {
                    set fs [open "reps.txt" w]
                } else {
                    set fs [open "reps.txt" a]
                }
                puts $fs "$whom 1"
                close $fs
                putserv "PRIVMSG $chan :$whom now has 1 reputation point."
                return 0
            } else {
                set line [lindex $data $match]
                set rep [lindex $line 1]
                  incr rep
		if {$rep == 0} {
                    set lines [lreplace $data $match $match]
		} else {
                    set newline "$whom $rep"
                    set lines [lreplace $data $match $match $newline]
                }
                set fs [open "reps.txt" w]
                puts $fs [join $lines "\n"]
                close $fs
		if {$rep == 0} {
                    putserv "PRIVMSG $chan :$whom now has neutral reputation points."
		} elseif {$rep == -1} {
                    putserv "PRIVMSG $chan :$whom now has $rep reputation point."
		} else {
                    putserv "PRIVMSG $chan :$whom now has $rep reputation points."
		}
	    }
        } elseif {[regexp -nocase {^\S+--$} $text]} {
            set whom [join [lindex [split $text -] 0]]
            set match [lsearch $data "[string map {"\[" "\\\[" "\]" "\\\]" "\}" "\\\}"} $whom] *"]
            if {$match == -1} {
                if {![llength $data]} {
                    set fs [open "reps.txt" w]
                } else {
                    set fs [open "reps.txt" a]
                }
                puts $fs "$whom -1"
                close $fs
                putserv "PRIVMSG $chan :$whom now has -1 reputation point."
                return
            }
            set line [lindex $data $match]
            set rep [lindex $line 1]
            incr rep -1
            set newline "$whom $rep"
            if {$rep == 0} {
                set lines [lreplace $data $match $match]
                set check 0
            } elseif {$rep == 1} {
                set lines [lreplace $data $match $match $newline]
                set check 1
            } else {
                set lines [lreplace $data $match $match $newline]
                set check 2   
	    }
            set fs [open "reps.txt" w]
            puts $fs [join $lines "\n"]
            close $fs
            if {$check == 0} {
                putserv "PRIVMSG $chan :$whom now has neutral reputation points."
            } elseif {$check == 1} {
		putserv "PRIVMSG $chan :$whom now has 1 reputation point."
            } else {
         	putserv "PRIVMSG $chan :$whom now has $rep reputation points." 
	    }
	} elseif {[string equal "${bchar}rep" $text]} {
            if {![llength $data]} {
		putserv "PRIVMSG $chan :No one currently has any reputation points."
                return 0
	    }
            putserv "NOTICE $nick :   The reputation list is as follows:"
            set fs [open "reps.txt"]
            while {[gets $fs line] >= 0} {
                set rep [join [lindex [split $line] 1]]
                if {$rep == 1 || $rep == -1} {
                    puthelp "NOTICE $nick :[join [lindex [split $line] 0]] has $rep reputation point."
                } else {
                    puthelp "NOTICE $nick :[join [lindex [split $line] 0]] has $rep reputation points."
                }
            }
            puthelp "NOTICE $nick :   End of reputation list"
            close $fs
        } elseif {[string match -nocase "${bchar}rep *" $text]} {
            if {[llength [split $text]] != 2} {
              return
            }
        set whom [string map {"\[" "\\\[" "\]" "\\\]" "\}" "\\\}"} [join [lindex [split $text] end]]]
	    regsub -all {\s} $whom ""
        set line [lsearch $data "$whom *"]
        if {$line != -1} {
        set line [lindex $data $line]
        set whom [string map {"\\\]" "\]" "\\\[" "\[" "\\\{" "\{" "\\\}" "\}"} $whom]
            if {[lindex [split $line] 1] == 1 || [lindex [split $line] 1] == -1} {
           putserv "PRIVMSG $chan :$whom has [lindex [split $line] 1] reputation point."
            } else {
           putserv "PRIVMSG $chan :$whom has [lindex [split $line] 1] reputation points."
            }
        } else {
           putserv "PRIVMSG $chan :$whom has no reputation points"
        }
	}
    }	      
  return
}

putlog " -rep.tcl loaded"
Thank you for reading and helping this out..

Moderated: Changed the quote-tags to code-tags. Preserves the indenting of the code, and eases readability.

/NML_375
w
willyw
Revered One
Posts: 1202
Joined: Thu Jan 15, 2009 12:55 am

Re: Needed help with !rep

Post by willyw »

LinkinPark wrote:Can anyone edit the access to use this.. I was an op'ed but can not check !rep but voiced people can do it as well..
I'm not 100% sure of what you are asking. But I think I may have the idea.

Find this line:

Code: Select all

if {![isvoice $nick $chan] && ![matchattr $hand |o $chan]} {
 
and change it to this:

Code: Select all

if {![isvoice $nick $chan] || ![isop $nick $chan]} {
Rehash, and see if that does what you want.
I have not tested it.
The idea is to have it work, if the user is EITHER voiced or op'd.

Here is reference for isvoice and isop:
http://www.eggheads.org/support/egghtml ... mands.html


side note - see this line:

Code: Select all

bind pubm * * rep 
perhaps it is ok, and works fine as-is.
But it seems to me that it should be:

Code: Select all

bind pubm - "* *" rep
Again, see above link for tcl-commands.doc for reference.


I hope this helps.
L
LinkinPark
Voice
Posts: 7
Joined: Tue Apr 26, 2011 7:03 am
Location: Cambodia

Post by LinkinPark »

Hi willyw,

Thanks for understand .. You're right that what I meant.. sorry for my bad English.. but it still not working..

it's only work with voice'ed users to check !rep and nick++

for op'ed users can not check it..
w
willyw
Revered One
Posts: 1202
Joined: Thu Jan 15, 2009 12:55 am

Post by willyw »

LinkinPark wrote: ...
it's only work with voice'ed users to check !rep and nick++

for op'ed users can not check it..

Try this:

Code: Select all

## Rep.tcl-v.1.1.0
## Author: Luminous
## Support: pm on egghelp.org

## This is a public script for voiced and opped users to add or remove reputation points to/from users. Its intended use is to keep track of positively and negatively contributing users, similar to forums with reputation systems. Points will be logged to the file "~/eggdrop/reps.txt". Note that everyone starts off at 0 or "neutral" points and does not show up as having reputation via !rep or !rep NICK until they reach negative or positive points. If points are removed from a user not in the file, they are automatically given -1. If rep is added to a user not in the file, they are automatically given 1. The plus/minus increments work normally from there unless the user reaches 0, or neutral, again.

## Commands

# All commands are public

# To add a reputation point to a user, use "NICK++"

# To remove a reputation point, use "NICK--"

# To view the reputation points of a specific user, use "!rep NICK"

# To view all reputation, use "!rep". A list will be noticed you slowly to avoid flooding.

# Set below the char you want to trigger the "rep" functions with:

set bchar "!"

## Code starts, edit beyond here at your own risk

### bind pubm * * rep
bind pubm - "* *" rep 
proc rep {nick host hand chan text} {
 global bchar
    if {[regexp -nocase {^\S+\+\+$} $text] || [regexp -nocase {^\S+--$} $text] || [regexp "^${bchar}rep.*" $text]} {
           if { ( ![isvoice $nick $chan] ) && ( ![isop $nick $chan] ) } { 
            return
        }
        if {![file exists "reps.txt"]} {
            close [open "reps.txt" w]
        }
        set fs [open "reps.txt"]
        set data [split [read -nonewline $fs] \n]
        close $fs
        if {[regexp -nocase {^\S+\+\+$} $text]} {
            set whom [join [lindex [split $text +] 0]]
            if {[string equal -nocase "[string map {"\[" "\\\[" "\]" "\\\]" "\}" "\\\}"} $whom]" "[string map {"\[" "\\\[" "\]" "\\\]" "\}" "\\\}"} $nick]"]} {
                putserv "NOTICE $nick :You can not rep yourself."
                return
            }
            set match [lsearch $data "[string map {"\[" "\\\[" "\]" "\\\]" "\}" "\\\}"} $whom] *"]   
            if {$match == -1} {
                if {![llength $data]} {
                    set fs [open "reps.txt" w]
                } else {
                    set fs [open "reps.txt" a]
                }
                puts $fs "$whom 1"
                close $fs
                putserv "PRIVMSG $chan :$whom now has 1 reputation point."
                return 0
            } else {
                set line [lindex $data $match]
                set rep [lindex $line 1]
                  incr rep
      if {$rep == 0} {
                    set lines [lreplace $data $match $match]
      } else {
                    set newline "$whom $rep"
                    set lines [lreplace $data $match $match $newline]
                }
                set fs [open "reps.txt" w]
                puts $fs [join $lines "\n"]
                close $fs
      if {$rep == 0} {
                    putserv "PRIVMSG $chan :$whom now has neutral reputation points."
      } elseif {$rep == -1} {
                    putserv "PRIVMSG $chan :$whom now has $rep reputation point."
      } else {
                    putserv "PRIVMSG $chan :$whom now has $rep reputation points."
      }
       }
        } elseif {[regexp -nocase {^\S+--$} $text]} {
            set whom [join [lindex [split $text -] 0]]
            set match [lsearch $data "[string map {"\[" "\\\[" "\]" "\\\]" "\}" "\\\}"} $whom] *"]
            if {$match == -1} {
                if {![llength $data]} {
                    set fs [open "reps.txt" w]
                } else {
                    set fs [open "reps.txt" a]
                }
                puts $fs "$whom -1"
                close $fs
                putserv "PRIVMSG $chan :$whom now has -1 reputation point."
                return
            }
            set line [lindex $data $match]
            set rep [lindex $line 1]
            incr rep -1
            set newline "$whom $rep"
            if {$rep == 0} {
                set lines [lreplace $data $match $match]
                set check 0
            } elseif {$rep == 1} {
                set lines [lreplace $data $match $match $newline]
                set check 1
            } else {
                set lines [lreplace $data $match $match $newline]
                set check 2   
       }
            set fs [open "reps.txt" w]
            puts $fs [join $lines "\n"]
            close $fs
            if {$check == 0} {
                putserv "PRIVMSG $chan :$whom now has neutral reputation points."
            } elseif {$check == 1} {
      putserv "PRIVMSG $chan :$whom now has 1 reputation point."
            } else {
            putserv "PRIVMSG $chan :$whom now has $rep reputation points."
       }
   } elseif {[string equal "${bchar}rep" $text]} {
            if {![llength $data]} {
      putserv "PRIVMSG $chan :No one currently has any reputation points."
                return 0
       }
            putserv "NOTICE $nick :   The reputation list is as follows:"
            set fs [open "reps.txt"]
            while {[gets $fs line] >= 0} {
                set rep [join [lindex [split $line] 1]]
                if {$rep == 1 || $rep == -1} {
                    puthelp "NOTICE $nick :[join [lindex [split $line] 0]] has $rep reputation point."
                } else {
                    puthelp "NOTICE $nick :[join [lindex [split $line] 0]] has $rep reputation points."
                }
            }
            puthelp "NOTICE $nick :   End of reputation list"
            close $fs
        } elseif {[string match -nocase "${bchar}rep *" $text]} {
            if {[llength [split $text]] != 2} {
              return
            }
        set whom [string map {"\[" "\\\[" "\]" "\\\]" "\}" "\\\}"} [join [lindex [split $text] end]]]
       regsub -all {\s} $whom ""
        set line [lsearch $data "$whom *"]
        if {$line != -1} {
        set line [lindex $data $line]
        set whom [string map {"\\\]" "\]" "\\\[" "\[" "\\\{" "\{" "\\\}" "\}"} $whom]
            if {[lindex [split $line] 1] == 1 || [lindex [split $line] 1] == -1} {
           putserv "PRIVMSG $chan :$whom has [lindex [split $line] 1] reputation point."
            } else {
           putserv "PRIVMSG $chan :$whom has [lindex [split $line] 1] reputation points."
            }
        } else {
           putserv "PRIVMSG $chan :$whom has no reputation points"
        }
   }
    }        
  return
}

putlog " -rep.tcl loaded"


You can find my previous error in the line that I directed you to earlier.
I used || instead of && as the original scripter had it.

The above has been tested - but only briefly.
In that it responds to the public command !rep if the user is either op'd or voiced.
L
LinkinPark
Voice
Posts: 7
Joined: Tue Apr 26, 2011 7:03 am
Location: Cambodia

Post by LinkinPark »

Thank to willyw.. it's working now..
Post Reply