Jump to content
chain

Channel Top10

Recommended Posts

  • Administrators
; =======================================
; Nienqster - 03 May 2021
; Top10 Channel Stats Script
;; Downloaded from www.PremiumChat.ro
; =======================================

/*
Commands:
!stats [nick] => Overall stats for $nick|$2 in $network@#Channel
!top10 => Overall top 10 chatters in $network@channel
!tstats [nick] => Today's stats about $nick|$2
!ttop10 => Today's top 10 chatters in $network@#Channel
!delstats <nick> => Removing statistics about $2 in $network@#Channel
!clearstats => Removing all statistics collected for $network@#Channel
*/

; Binding all channel text to the parsing routine
; NB! No more "on text" events

/*
Version history:
21.02.2007 v1.2 bugfix release. (Fixed output bug resulting top9 instead of top10)
*/

ON *:TEXT:*:#: {
  if %stats_module == On {
    IF ($1 == %c $+ top10) {
      IF (%stats_floodpro >= 3) {
        halt
      }
      inc -u30 %stats_floodpro 1
      msg $chan $maketop10($network $+ @ $+ $chan)
      unset %stats_top10_*
      window -c @top10source
    }
    IF ($1 == %c $+ ttop10) {
      IF (%stats_floodpro >= 3) {
        halt
      }
      inc -u30 %stats_floodpro 1
      msg $chan $maketodaytop10($network $+ @ $+ $chan)
      unset %stats_top10_*
      window -c @top10source
    }
    IF ($1 == %c $+ stats) {
      IF (%stats_floodpro >= 3) {
        halt
      }
      inc -u30 %stats_floodpro 1
      IF ($2) {
        msg $chan $getstats($network $+ @ $+ $chan $+ @ $+ $2)
      }
      IF (!$2) {
        msg $chan $getstats($network $+ @ $+ $chan $+ @ $+ $nick)
      }
    }
    IF ($1 == %c $+ tstats) {
      IF (%stats_floodpro >= 3) {
        halt
      }
      inc -u30 %stats_floodpro 1
      IF ($2) {
        msg $chan $gettodaystats($network $+ @ $+ $chan $+ @ $+ $2)
      }
      IF (!$2) {
        msg $chan $gettodaystats($network $+ @ $+ $chan $+ @ $+ $nick)
      }
    }
    IF ($1 == %c $+ delstats) && ($2) &&  ($level($address($nick,2)) == 500) {
      remove-stats-nick $network $+ @ $+ $chan $+ @ $+ $2
      .msg $chan Erasing entries for nick $2
    }
    IF ($1 == %c $+ clearstats) &&  ($level($address($nick,2)) == 500) {
      remove-stats-channel $network $+ @ $+ $chan
      .msg $chan Channelstats erased.
    }
    IF ($left($1,1) == %c) {

      hinc -m totalcommands $network $+ @ $+ $chan $+ @ $+ $nick 1
      hinc -m todaytotalcommands $network $+ @ $+ $chan $+ @ $+ $nick 1
    }
    hinc -m totalwords $network $+ @ $+ $chan $+ @ $+ $nick $numtok($1-,32)
    hinc -m totalletters $network $+ @ $+ $chan $+ @ $+ $nick $len($1-)
    hinc -m totallines $network $+ @ $+ $chan $+ @ $+ $nick 1

    hinc -m todaytotalwords $network $+ @ $+ $chan $+ @ $+ $nick $numtok($1-,32)
    hinc -m todaytotalletters $network $+ @ $+ $chan $+ @ $+ $nick $len($1-)
    hinc -m todaytotallines $network $+ @ $+ $chan $+ @ $+ $nick 1
  }
}
; Action counting
; Will add all used words in action to the total spoken words as well

ON *:ACTION:*:#: {
  if %stats_module == on {
    hinc -m totalactions $network $+ @ $+ $chan $+ @ $+ $nick 1
    hinc -m totalwords $network $+ @ $+ $chan $+ @ $+ $nick $numtok($1-,32)
    hinc -m totalletters $network $+ @ $+ $chan $+ @ $+ $nick $len($1-)
    ;--
    hinc -m todaytotalactions $network $+ @ $+ $chan $+ @ $+ $nick 1
    hinc -m todaytotalwords $network $+ @ $+ $chan $+ @ $+ $nick $numtok($1-,32)
    hinc -m todaytotalletters $network $+ @ $+ $chan $+ @ $+ $nick $len($1-)
  }
}
ALIAS statsave {
  hsave -i totalwords chanstats.dat totalwords
  hsave -i totalletters chanstats.dat totalletters
  hsave -i totalcommands chanstats.dat totalcommands
  hsave -i totalactions chanstats.dat totalactions
  hsave -i totallines chanstats.dat totallines
}

ALIAS todaystatclear {
  hfree -w todaytotal*
  hmake todaytotalwords 10
  hmake todaytotalletters 10
  hmake todaytotalcommands 10
  hmake todaytotalactions 10
  hmake todaytotallines 10
}

ALIAS statload {
  hmake totalwords 10
  hmake totalletters 10
  hmake totalcommands 10
  hmake totalactions 10
  hmake totallines 10
  hload -i totalwords chanstats.dat totalwords
  hload -i totalletters chanstats.dat totalletters
  hload -i totalcommands chanstats.dat totalcommands
  hload -i totalactions chanstats.dat totalactions
  hload -i totallines chanstats.dat totallines
}

alias clearstats {
  var %stats_clearconfirm = $input(Are you sure you want to completely clear the statistics database?,yvqd,Channelstats :: Dreambot 5.6)
  IF (%stats_clearconfirm == $yes) {
    hfree -sw total*
    hmake totalwords 10
    hmake totalletters 10
    hmake totalcommands 10
    hmake totalactions 10
    hmake totallines 10
    todaystatclear
  }
}

ALIAS remove-stats-nick {
  var %stats-remnick = $1 $+ *
  hdel -w totalwords %stats-remnick
  hdel -w totalletters %stats-remnick
  hdel -w totalcommands %stats-remnick
  hdel -w totalactions %stats-remnick
  hdel -w totallines %stats-remnick
  hdel -w todaytotalwords %stats-remnick
  hdel -w todaytotalletters %stats-remnick
  hdel -w todaytotalcommands %stats-remnick
  hdel -w todaytotalactions %stats-remnick
  hdel -w todaytotallines %stats-remnick
  statsave
}

ALIAS remove-stats-channel {
  var %stats-remchan = $1 $+ *
  hdel -w totalwords %stats-remchan
  hdel -w totalletters %stats-remchan
  hdel -w totalcommands %stats-remchan
  hdel -w totalactions %stats-remchan
  hdel -w totallines %stats-remchan
  hdel -w todaytotalwords %stats-remchan
  hdel -w todaytotalletters %stats-remchan
  hdel -w todaytotalcommands %stats-remchan
  hdel -w todaytotalactions %stats-remchan
  hdel -w todaytotallines %stats-remchan
  statsave
}

ALIAS getstats {
  IF ($hget(totalwords, $1) != $null) {
    IF ($hget(totalwords, $1) != $null) {
      var %t.words = $hget(totalwords, $1)
    }
    ELSE {
      var %t.words = 0
    }
    IF ($hget(totalletters, $1) != $null) {
      var %t.letters = $hget(totalletters, $1)
    }
    ELSE {
      var %t.letters = 0
    }
    IF ($hget(totalcommands, $1) != $null) {
      var %t.commands = $hget(totalcommands, $1)
    }
    ELSE {
      var %t.commands = 0
    }
    IF ($hget(totallines, $1) != $null) {
      var %t.lines = $hget(totallines, $1)
    }
    ELSE {
      var %t.lines = 0
    }
    IF ($hget(totalactions, $1)) {
      var %t.actions = $hget(totalactions, $1)
    }
    ELSE {
      var %t.actions = 0
    }
    return [ $+ $gettok($1,3,64) $+ ] Spoken words: %t.words ( $+ %t.letters letters) Commands used %t.commands $+ . %t.lines lines and %t.actions actions.
    halt
  }
  return I have no stats about $gettok($1,3,64)
  halt
}

ALIAS gettodaystats {
  IF ($hget(todaytotalwords, $1) != $null) {
    IF ($hget(todaytotalwords, $1) != $null) {
      var %t.words = $hget(todaytotalwords, $1)
    }
    ELSE {
      var %t.words = 0
    }
    IF ($hget(todaytotalletters, $1) != $null) {
      var %t.letters = $hget(todaytotalletters, $1)
    }
    ELSE {
      var %t.letters = 0
    }
    IF ($hget(todaytotalcommands, $1) != $null) {
      var %t.commands = $hget(todaytotalcommands, $1)
    }
    ELSE {
      var %t.commands = 0
    }
    IF ($hget(todaytotallines, $1) != $null) {
      var %t.lines = $hget(todaytotallines, $1)
    }
    ELSE {
      var %t.lines = 0
    }
    IF ($hget(todaytotalactions, $1)) {
      var %t.actions = $hget(todaytotalactions, $1)
    }
    ELSE {
      var %t.actions = 0
    }
    return [ $+ $gettok($1,3,64) $+ ] Spoken words today: %t.words ( $+ %t.letters letters) Commands used today %t.commands $+ . %t.lines lines and %t.actions actions.
    halt
  }
  return I have no stats about $gettok($1,3,64)
  halt
}

ALIAS maketop10 {
  ; Save the hash table into .dat
  ; I know that this will make answer delayed especially in bigger channels... but well.... i dont care.
  ; This is about the best way to ensure that we will get the most recent result and also to ensure that we have backup of the hashtables.
  statsave
  ; Loading total spoken words into window
  window -hk0n @top10source
  clear @top10source
  var %stats_findbegin = $read(chanstats.dat, s, [totalwords])
  var %stats_looppoint = $calc($readn + 1 )
  WHILE (!%stats_loophalt) {
    var %stats_putline = $read(chanstats.dat, %stats_looppoint)
    IF ($left(%stats_putline,1) != $chr(91)) && ($left(%stats_putline,$len($1)) == $1) {
      var %statscleanline = $gettok($read(chanstats.dat, %stats_looppoint),3,64)
      aline @top10source %statscleanline
    }
    ELSEIF ($left(%stats_putline,1) == $chr(91)) {
      var %stats_loophalt = true
    }
    inc %stats_looppoint
  }
  ; Filtering the window
  filter -cetuww 2 61 @top10source @top10source *
  ; Now lets read the first 10 lines and store it to variables (%stats_top10_xx)
  ; Thats it if we have 10 lines of course
  ; If we have less then we will output only existing numbers of lines.
  var %stats_loop10 = 1
  WHILE (!%statssecondloophalt) {
    IF ($line(@top10source, %stats_loop10)) {
      set -e %stats_top10_ [ $+ [ %stats_loop10 ] ] $gettok($line(@top10source, %stats_loop10),1,61) ( $+ $gettok($line(@top10source, %stats_loop10),2,61) $+ )
      inc %stats_loop10
    }
    IF (!$line(@top10source, %stats_loop10)) || (%stats_loop10 >= 11) {
      var %statssecondloophalt = true
    }
  }
  IF (%stats_loop10 != 12) {
    var %stats_loop10 = $calc(%stats_loop10 - 1)
  }
  return Top %stats_loop10 chatters by total spoken words: %stats_top10_1 %stats_top10_2 %stats_top10_3 %stats_top10_4 %stats_top10_5 %stats_top10_6 %stats_top10_7 %stats_top10_8 %stats_top10_9 %stats_top10_10
}

ALIAS maketodaytop10 {
  window -hk0n @top10source
  clear @top10source
  hsave -i todaytotalwords tempstats.dat totalwords
  var %stats_loopline = 1
  WHILE (%stats_loopline <= $lines(tempstats.dat)) {
    IF ($gettok($read(tempstats.dat,%stats_loopline),1,64) == $gettok($1,1,64)) && ($gettok($read(tempstats.dat,%stats_loopline),2,64) == $gettok($1,2,64)) {
      aline -p @top10source $gettok($read(tempstats.dat,%stats_loopline),3,64)
    }
    inc %stats_loopline
  }
  filter -cetuww 2 61 @top10source @top10source *
  var  %stats_loop10 = 1
  WHILE (!%statssecondloophalt) {
    IF ($line(@top10source, %stats_loop10)) {
      set -e %stats_top10_ [ $+ [ %stats_loop10 ] ] $gettok($line(@top10source, %stats_loop10),1,61) ( $+ $gettok($line(@top10source, %stats_loop10),2,61) $+ )
      inc  %stats_loop10
    }
    IF (!$line(@top10source, %stats_loop10)) || (%stats_loop10 >= 11) {
      var  %statssecondloophalt = true
    }
  }
  IF (%stats_loop10 != 12) {
    var %stats_loop10 = $calc(%stats_loop10 - 1)
  }
  .remove tempstats.dat
  return Todays top %stats_loop10 chatters by total spoken words: %stats_top10_1 %stats_top10_2 %stats_top10_3 %stats_top10_4 %stats_top10_5 %stats_top10_6 %stats_top10_7 %stats_top10_8 %stats_top10_9 %stats_top10_10
}

ON *:CONNECT: timerresettodaystats -o {
  statload
  if %stats_module == $null { set %stats_module on }
  timerresettodaystats 23:59 1 60 dailystatsflush}

  ON *:EXIT: {
    echo -a ::: Stats ::: Storing stats.
    statsave
  }

  ALIAS dailystatsflush: disconnect server {
    timerresettodaystats 23:59 0 60 /todaystatclear
    todaystatclear
    /MSG $chan todaystats cleared when the bot resets}

This script is to view a monthly and daily Top10 chatters of a channel. !stats [nick], !top10, !tstats [nick], !clearstats, !delstats

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...


×
×
  • Create New...