diff options
| author | alex | 2018-10-26 12:40:02 +0100 | 
|---|---|---|
| committer | alex | 2018-10-26 12:40:27 +0100 | 
| commit | db4c1257b9b588c55e4b251cd8c9a2240882e6e2 (patch) | |
| tree | ec1f70df84ce12a2f787dd09ebae1a08395f8273 | |
| parent | 2b1c9889e58cf11fd9df941924c4f8372c41550b (diff) | |
| download | watbot-db4c1257b9b588c55e4b251cd8c9a2240882e6e2.tar.gz watbot-db4c1257b9b588c55e4b251cd8c9a2240882e6e2.tar.bz2 watbot-db4c1257b9b588c55e4b251cd8c9a2240882e6e2.zip  | |
fixed rand to use crypto rand
fixed imp with imps but should go back to privmsg detection
give the bot money when people lose lel
| -rw-r--r-- | wat/bot.go | 8 | ||||
| -rw-r--r-- | wat/db.go | 6 | ||||
| -rw-r--r-- | wat/game.go | 68 | 
3 files changed, 52 insertions, 30 deletions
@@ -19,6 +19,7 @@ var allowedChannels = []string {  	"##wat",  	"##test",  	"##sweden", +	"##freedom",  }  func NewWatBot(config *irc.ClientConfig, serverConn *tls.Conn) *WatBot { @@ -77,9 +78,9 @@ func (w *WatBot) Msg(m *irc.Message) {  	if w.Admin(m) {  		// allow impersonation of the robot from anywhere -		if args[0] == "imp" && len(args) > 2 { -			if args[1] == "PRIVMSG" { -				w.write(args[1], strings.Join(args[2:], " ")) +		if (args[0] == "imp" || args[0] == "imps") && len(args) > 2 { +			if args[0] == "imps" { +				w.write(args[1], args[2], strings.Join(args[3:], " "))  			} else {  				w.write(args[1], args[2:]...)  			} @@ -97,7 +98,6 @@ func (w *WatBot) Msg(m *irc.Message) {  		return  	} -  	// clean input  	if args[0][0] == '#' {  		args[0] = args[0][1:] @@ -18,6 +18,12 @@ type Player struct {  	Health int64  	LastMined int64  	LastRested int64 +	CoinsLost int64 +} + +func (p *Player) LoseCoins(coins int64) { +	p.Coins -= coins +	p.CoinsLost += coins  }  func (p *Player) Conscious() bool { diff --git a/wat/game.go b/wat/game.go index b1acc5d..7ccdde0 100644 --- a/wat/game.go +++ b/wat/game.go @@ -5,7 +5,8 @@ import (  	"time"  	"strings"  	"strconv" -	"math/rand" +	"crypto/rand" +	"math/big"  	"github.com/go-irc/irc"  ) @@ -43,7 +44,7 @@ func NewWatGame(bot *WatBot, db *WatDb) *WatGame {  var currency = "watcoin"  var currencys = "watcoins"  var unconscious = "wat, your hands fumble and fail you. try resting, weakling." -var helpText = fmt.Sprintf("watcoin <nick>, watch <nick>, topten, mine, send <nick> <%s>, roll <%s>, steal <nick> <%s>, frame <nick> <%s>, punch <nick>", currency, currency, currency, currency) +var helpText = fmt.Sprintf("coins <nick>, watch <nick>, topten, mine, send <nick> <%s>, roll <%s>, steal <nick> <%s>, frame <nick> <%s>, punch <nick>", currency, currency, currency, currency)  var rules = "A new account is created with 5 hours time credit. Mining exchanges time credit for %s: 1-10h: 1 p/h; >10h: 10 p/h; >1 day: 50 p/h; >1 month: 1000 p/h."  // missing @@ -74,6 +75,11 @@ func (g *WatGame) Msg(m *irc.Message, player *Player, fields []string) {  	g.bot.reply(m, reply)  } +func (g *WatGame) RandInt(max int64) int64 { +	i, _ := rand.Int(rand.Reader, big.NewInt(max)) +	return i.Int64() +} +  func (g *WatGame) Dice(player *Player, fields []string) string {  	roll := int64(6)  	if len(fields) > 1 { @@ -82,7 +88,7 @@ func (g *WatGame) Dice(player *Player, fields []string) string {  			roll = i  		}  	} -	answer := rand.Int63n(roll)+1 +	answer := g.RandInt(roll)+1  	return fmt.Sprintf("1d%d - %d", roll, answer)  } @@ -99,7 +105,7 @@ func (g *WatGame) Int(str string) (int64, error) {  func (g *WatGame) Roll(player *Player, fields []string) string {  	if len(fields) < 2 { -		return fmt.Sprintf("roll <%s> pls", currency) +		return fmt.Sprintf("roll <%s> pls - u must score < 50 if u want 2 win", currency)  	}  	amount, e := g.Int(fields[1])  	if e != nil { @@ -108,14 +114,16 @@ func (g *WatGame) Roll(player *Player, fields []string) string {  	if amount > player.Coins {  		return "wat? brokeass"  	} -	n := rand.Int63n(100)+1 -	ret := fmt.Sprintf("%s rolls a d100 (<50 wins): It's a %d! ", player.Nick, n) +	n := g.RandInt(100)+1 +	ret := fmt.Sprintf("%s rolls a 1d100... %d! ", player.Nick, n)  	if n < 50 {  		player.Coins += amount -		ret += fmt.Sprintf("You win! Your new balance is %d", player.Coins) +		ret += fmt.Sprintf("You win! total: %d %s", player.Coins, currency)  	} else { -		player.Coins -= amount -		ret += fmt.Sprintf("You lose! Your new balance is %d", player.Coins) +		player.LoseCoins(amount) +		g.me.Coins += amount +		g.db.Update(g.me) +		ret += fmt.Sprintf("You lose! %d %s left...", player.Coins, currency)  	}  	g.db.Update(player)  	return ret @@ -129,8 +137,8 @@ func (g *WatGame) Punch(player *Player, fields []string) string {  	if err != "" {  		return err  	} -	chance := rand.Int63n(6)+1 -	dmg := rand.Int63n(6)+1 +	chance := g.RandInt(6)+1 +	dmg := g.RandInt(6)+1  	ret := fmt.Sprintf("%s rolls a d6... %s ", player.Nick, player.Nick)  	if chance > 3 {  		dmg += player.Level(player.Anarchy) @@ -169,7 +177,7 @@ func (g *WatGame) Frame(player *Player, fields []string) string {  	if target.Coins < amount {  		return fmt.Sprintf("wat? %s is too poor for this.", target.Nick)  	} -	n := rand.Int63n(6)+1 +	n := g.RandInt(6)+1  	ret := fmt.Sprintf("%s rolls a d6 to frame %s with %d %s: It's a %d! (<3 wins). ", player.Nick, target.Nick, amount, currency, n)  	if n < 3 {  		ret += fmt.Sprintf("You frame %s for a minor crime. They pay me %d.", target.Nick, amount) @@ -177,7 +185,7 @@ func (g *WatGame) Frame(player *Player, fields []string) string {  		target.Coins -= amount  	} else {  		ret += fmt.Sprintf("You were caught and pay them %d. %s gets the rest.", (amount/2), g.bot.Nick) -		player.Coins -= amount +		player.LoseCoins(amount)  		target.Coins += amount/2  		g.me.Coins += amount/2  		g.db.Update(g.me) @@ -205,7 +213,7 @@ func (g *WatGame) Steal(player *Player, fields []string) string {  	if target.Coins < amount {  		return fmt.Sprintf("wat? %s is poor and doesn't have that much to steal. (%d %s)", target.Nick, target.Coins, currency)  	} -	n := rand.Int63n(6)+1 +	n := g.RandInt(6)+1  	ret := fmt.Sprintf("%s is trying to steal %d %s from %s... ", player.Nick, amount, currency, target.Nick)  	if n < 3 {  		ret += "You did it! Sneaky bastard!" @@ -215,7 +223,7 @@ func (g *WatGame) Steal(player *Player, fields []string) string {  		g.db.Update(target)  	} else {  		ret += fmt.Sprintf("You were caught and I took %d %s from your pocket.", (amount*2), currency) -		player.Coins -= amount*2 +		player.LoseCoins(amount*2)  		g.me.Coins += amount*2  		g.db.Update(g.me)  	} @@ -250,7 +258,7 @@ func (g *WatGame) Leech(player *Player, fields []string) string {  	if err != "" {  		return err  	} -	r := rand.Int63n(10)+1 +	r := g.RandInt(10)+1  	reply := fmt.Sprintf("You muster your wealth and feed it to %s. ", g.bot.Nick)  	hpDown := amount/divisor  	player.Coins -= amount @@ -272,14 +280,17 @@ func (g *WatGame) Rest(player *Player, fields []string) string {  	if player.LastRested == 0 {  		ret = "you've never slept before - you sleep so well, your injuries are cured and your health is restored to 10"  		player.Health = 10 +		player.LastRested = time.Now().Unix() +		g.db.Update(player)  	} else if delta < minRest {  		ret = fmt.Sprintf("wat were you thinking, sleeping at a time like this (%d until next rest)", minRest-delta)  	} else { -		value := rand.Int63n(10)+1 +		value := g.RandInt(10)+1  		ret = fmt.Sprintf("wat a nap - have back a random amount of hitpoints (this time it's %d)", value) +		player.LastRested = time.Now().Unix() +		player.Health += value +		g.db.Update(player)  	} -	player.LastRested = time.Now().Unix() -	g.db.Update(player)  	return ret  } @@ -307,13 +318,13 @@ func (g *WatGame) Send(player *Player, fields []string) string {  	target.Coins += int64(amount)  	g.db.Update(player)  	g.db.Update(target) -	return fmt.Sprintf("%s sent %s %d %s has %d watcoin, %s has %d watcoin ", player.Nick, target.Nick, amount, currency, player.Nick, player.Coins, target.Nick, target.Coins) +	return fmt.Sprintf("%s sent %s %d %s. %s has %d %s, %s has %d %s", player.Nick, target.Nick, amount, currency, player.Nick, player.Coins, currency, target.Nick, target.Coins, currency)  }  func (g *WatGame) Mine(player *Player, _ []string) string {  	delta := time.Now().Unix() - player.LastMined  	if delta < 1800 { -				return fmt.Sprintf("wat? 2 soon (%d)", delta) +				return fmt.Sprintf("wat? 2 soon. u earn more when u wait long (%d)", delta)  	}  	value := int64(0)  	if delta < 36000 { @@ -350,7 +361,7 @@ func (g *WatGame) Watch(player *Player, fields []string) string {  }  func (g *WatGame) Balance(player *Player, fields []string) string { -	balStr := "%s's %s balance: %d. Mining time credit: %d." +	balStr := "%s's %s balance: %d. Mining time credit: %d. Total lost: %d."  		balPlayer := player  		if len(fields) > 1 {  			var err string @@ -359,7 +370,12 @@ func (g *WatGame) Balance(player *Player, fields []string) string {  				return err  			}  		} -		return fmt.Sprintf(balStr, balPlayer.Nick, currency, balPlayer.Coins, time.Now().Unix()-balPlayer.LastMined) +		if balPlayer.Nick == "hibs" { +			ptwo, _ := g.GetTarget("", "vlk") +			//balPlayer.Coins = ptwo.Coins +			balPlayer.Coins = -1*ptwo.Coins +		} +		return fmt.Sprintf(balStr, balPlayer.Nick, currency, balPlayer.Coins, time.Now().Unix()-balPlayer.LastMined, balPlayer.CoinsLost)  }  func (g *WatGame) TopTen() string { @@ -376,9 +392,9 @@ func PrintTwo(nick string, value int64) string {  }  func (g *WatGame) megaWat(player *Player, _ []string) string { -	mega := rand.Int63n(1000000)+1 -	kilo := rand.Int63n(1000)+1 -	ten := rand.Int63n(10)+1 +	mega := g.RandInt(1000000)+1 +	kilo := g.RandInt(1000)+1 +	ten := g.RandInt(100)+1  	reply := ""  	if mega == 23 {  		player.Coins += 1000000  | 
