Guest User

Untitled

a guest
Feb 28th, 2018
128
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
TCL 9.94 KB | None | 0 0
  1. namespace eval wallet {
  2. #    Sets the public command trigger used in channel to access bank account.
  3. #                      +------+
  4.     variable trigger    !wallet
  5. #                      +------+
  6. #
  7.     variable intrate    .001
  8. #   INTEREST TIMER INTERVAL
  9. #    Number of minutes between timer intervals.
  10. #                          +--+
  11.     variable timerint    180
  12. #                          +--+
  13. #
  14. #   LOG INTEREST PAYOUTS
  15. #    Uses putlog to log interest amounts paid each interval.
  16. #    1=on 0=off
  17. #                         +-+
  18.     variable logtransfers   1
  19. #                         +-+
  20. #
  21. #   BACKUP LOCATION/FILE
  22. #    Relative pathname starting from eggdrop dir. The location/filename of
  23. #    the backup file used to save bank information.
  24. #                         +----------------------+
  25.     variable backupfile    "scripts/walletdb.tcl"
  26. #                         +----------------------+
  27. #
  28. ################################################################################
  29. #   Experts only below.
  30. ################################################################################
  31. }
  32.  
  33. bind pub - [set ::wallet::trigger] ::wallet::pub_handler
  34. bind dcc n wallet ::wallet::dcc_admin
  35. setudef flag wallet
  36.  
  37. namespace eval wallet {
  38.     variable walletb
  39.     variable ver "0.0.1"
  40.     if {[file exist [set ::wallet::backupfile]]} {
  41.         source [set ::wallet::backupfile]
  42.     }
  43.     if {![info exists ::wallet::timer_running]} {
  44.        # start new timer.
  45.        timer [set ::wallet::logtransfers] [list ::wallet::interest_timer]
  46.        set ::wallet::timer_running 1
  47.     }
  48.  
  49.  
  50. proc deposit {amount payee} {
  51.         # deposit funds.
  52.         set ::wallet::walletb($payee) [expr [set ::wallet::walletb($payee)] + $amount]
  53.         ::wallet::backupdb
  54.         return 1
  55.     }
  56.  
  57.  
  58. proc withdraw {amount debtor} {
  59.         # withraw bank funds.
  60.         if {$amount <= [set ::wallet::walletb($debtor)]} {
  61.             # amount is less than account balance.
  62.             set ::wallet::walletb($debtor) [expr [set ::wallet::walletb($debtor)] - $amount]
  63.             ::wallet::backupdb
  64.             return 1
  65.         }
  66.     }
  67.  
  68. proc interest_timer {args} {
  69.         # call self at timed intervals. do backup
  70.         foreach {name value} [array get ::wallet::walletb] {
  71.             set interest [expr {int($value * [set ::wallet::intrate])}]
  72.             set ::wallet::walletb($name) [expr $value + $interest]
  73.             if {[set ::wallet::logtransfers]} {
  74.                 # log interest payment.
  75.                 putlog "Paid $name $interest in interest."
  76.             }
  77.         }
  78.         ::wallet::backupdb
  79.         timer [set ::wallet::logtransfers] [list ::wallet::interest_timer]
  80.         return 1
  81. }
  82.  
  83. proc backupdb {args} {
  84.         # backup walletdb to file.
  85.         variable ::wallet::walletb
  86.         set fs [open [set ::wallet::backupfile] w+]
  87.         puts $fs "variable ::wallet::walletb"
  88.         puts $fs "array set walletb [list [array get walletb]]"
  89.         close $fs;
  90. }
  91.  
  92. proc account {args} {
  93.         # add/remove/edit accounts.
  94.         set textarr [split $args]
  95.         set action [string tolower [lindex $textarr 0]]
  96.         set name [string tolower [lindex $textarr 1]]
  97.         set amount [lindex $textarr 2]
  98.         switch $action {
  99.             "add" {
  100.                 set ::wallet::walletb($name) 100
  101.                 ::wallet::backupdb
  102.             }
  103.             "remove" {
  104.                 unset ::wallet::walletb($name)
  105.                 ::wallet::backupdb
  106.             }
  107.             "edit" {
  108.                 set ::wallet::walletb($name) $amount
  109.                 ::wallet::backupdb
  110.             }
  111.         }
  112.     }
  113.  
  114.  
  115. proc pub_handler {nick userhost handle channel text} {
  116.         set capnick [string totitle $nick]
  117.         if {[channel get $channel wallet]} {
  118.             set textarr [split $text]
  119.             set first [string tolower [lindex $textarr 0]]
  120.             set nick [string tolower $nick]
  121.             switch $first {
  122.                 "" {
  123.                     putserv "PRIVMSG $channel :\0034usage:\00312 [set ::wallet::trigger] cash|pay|gamble ?args?"
  124.                 }
  125.         "cash" {
  126.                     if {[info exists ::wallet::walletb($nick)]} {
  127.                         putserv "PRIVMSG $channel :\00312$capnick, your wallet has:\0039\$[set ::wallet::walletb($nick)]"
  128.                     } else {
  129.                         putserv "PRIVMSG $channel :\00312$capnick, you don't even have an account."
  130.                     }
  131.                 }
  132.                 "gamble" {
  133.                     set amt [lindex $textarr 1]
  134.             if {[string is integer $amt]} {
  135.                         if {$amt == ""} {
  136.                             putserv "PRIVMSG $channel :\0034usage:\00312 !gamble <amount>"
  137.                         } elseif {[info exists ::wallet::walletb($nick)]} {
  138.  
  139.                             set coh [set ::wallet::walletb($nick)]
  140.                             if { $amt > $coh } {
  141.                                     putserv "PRIVMSG $channel :\00312$capnick, you don't even have enough cash:\0039\$$coh"
  142.                                     } else {
  143.                                             if {[expr int(rand() * 2 + 1)] == 2} {
  144.                                                 set winnings [expr $amt + $amt]
  145.                                                 if {[::wallet::deposit $winnings $nick] == 1} {
  146.                                 putserv "PRIVMSG $channel :\00312Here..."
  147.                             }
  148.                                                 putserv "PRIVMSG $channel :\00312$capnick, you just won:\0039\$$winnings"
  149.                                                 } else {
  150.                                                     putserv "PRIVMSG $channel :\00312$capnick, you lost:\0039\$$amt"
  151.                                                     if {[::wallet::withdraw $amt $nick] == 1} { putserv "PRIVMSG $channel :\00312Thanks $capnick!" }
  152.                                             }
  153.                                     }
  154.                             } else {
  155.                             putserv "PRIVMSG $channel :\00312 Wow, $capnick, you don't even have a wallet..."
  156.                         }
  157.                 }
  158.     }
  159.     "pay" {
  160.                     set payee [lindex $textarr 1]
  161.             set lowpayee [string tolower $payee]
  162.                     set amount [lindex $textarr 2]
  163.             set capnick [string totitle $nick]
  164.             set pnick [string totitle $payee]
  165.                     if {$payee == ""} {
  166.                         putserv "PRIVMSG $channel :\00312usage: !wallet pay <payee> \0039<amount>"
  167.                     } elseif {[info exists ::wallet::walletb($nick)]} {
  168.                         if {[info exists ::wallet::walletb($lowpayee)]} {
  169.                             if {[string is integer $amount]} {
  170.                                 if {[::wallet::withdraw $amount $nick] == 1} {
  171.                                     if {[::wallet::deposit $amount $lowpayee] == 1} {
  172.  
  173.                                         putserv "PRIVMSG $channel :\00312Paid $pnick \0039\$$amount"
  174.  
  175.                                     } else { putserv "PRIVMSG $channel :\00312Can't do it right now..." }
  176.                                 } else { putserv "PRIVMSG $channel :\00312Not enough cash!" }
  177.                             } else { putserv "PRIVMSG $channel :\00312cannot use '$amount' as an amount." }
  178.                         } else { putserv "PRIVMSG $channel :\00312$pnick does not even have a wallet." }
  179.                     } else { putserv "PRIVMSG $channel :\00312$capnick, you don't even have a wallet."}
  180.                 }
  181.             }
  182.         }
  183.    }
  184.     proc dcc_admin {handle idx text} {
  185.         set textarr [split $text]
  186.         set text [string tolower [lindex $textarr 0]]
  187.         set name [string tolower [lindex $textarr 1]]
  188.         switch $text {
  189.             "" {
  190.                 putdcc $idx "\0034usage:\00312 .wallet ?add|remove|check|list|edit? ?args?"
  191.             }
  192.             "list" {
  193.                 foreach {name value} [array get ::wallet::walletb] {
  194.                     putdcc $idx "$name has $value coins."
  195.                 }
  196.             }
  197.             "add" {
  198.                 if {$name == ""} {
  199.                     putdcc $idx "\0034usage:\00312 .wallet add <name>"
  200.                 } elseif {![info exists ::wallet::walletb($name)]} {
  201.                     ::wallet::account add $name
  202.                     putdcc $idx "Wallet created."
  203.                 } else {
  204.                     putdcc $idx "Wallet already exists. Nothing to create."
  205.                 }
  206.             }
  207.             "check" {
  208.                 if {$name == ""} {
  209.                     putdcc $idx "\0034usage:\00312 .wallet check <name>"
  210.                 } elseif {[info exists ::wallet::walletb($name)]} {
  211.                     putdcc $idx "balance check: $name has [set ::wallet::walletb($name)] coins."
  212.                 } else {
  213.                     putdcc $idx "$name doesn't have an account to check."
  214.                 }
  215.             }
  216.             "remove" {
  217.                 if {$name == ""} {
  218.                     putdcc $idx "\0034usage:\00312 .wallet remove <name>"
  219.                 } elseif {[info exists ::wallet::walletb($name)]} {
  220.                     ::wallet::account remove $name
  221.                     putdcc $idx "account removed."
  222.                 } else {
  223.                     putdcc $idx "account doesn't exist. nothing to remove."
  224.                 }
  225.             }
  226.             "edit" {
  227.                 set amount [lindex $textarr 2]
  228.                 if {$name == ""} {
  229.                     putdcc $idx "\0034usage:\00312 .wallet edit <name> <amount>"
  230.                 } elseif {[info exists ::wallet::walletb($name)]} {
  231.                     if {[string is integer $amount]} {
  232.                         ::wallet::account edit $name $amount
  233.                         putdcc $idx "account edited."
  234.                     } else {
  235.                         putdcc $idx "cannot use '$amount' for an amount."
  236.                     }
  237.                 } else {
  238.                     putdcc $idx "account doesn't exist."
  239.                 }
  240.             }
  241.         }
  242.     }
  243. }
  244. putlog "wallet [set ::wallet::ver] Loaded"
Add Comment
Please, Sign In to add comment