summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--main.go4
-rw-r--r--wat/bot.go14
-rw-r--r--wat/game.go54
3 files changed, 43 insertions, 29 deletions
diff --git a/main.go b/main.go
index dd7ec6f..bc203d8 100644
--- a/main.go
+++ b/main.go
@@ -1,15 +1,17 @@
package main
import "fmt"
+import "crypto/tls"
+
import "github.com/go-irc/irc"
import "github.com/namsral/flag"
-import "crypto/tls"
import "git.circuitco.de/self/watbot/wat"
func main() {
pass := flag.String("pass", "", "password")
flag.Parse()
+ fmt.Printf("PASS len %d\n", len(*pass))
config := irc.ClientConfig {
Nick: "watt",
Pass: *pass,
diff --git a/wat/bot.go b/wat/bot.go
index c2a1d14..dbb16b2 100644
--- a/wat/bot.go
+++ b/wat/bot.go
@@ -35,7 +35,6 @@ func CleanNick(nick string) string {
}
func (w *WatBot) HandleIrcMsg(c *irc.Client, m *irc.Message) {
- fmt.Println(m)
switch cmd := m.Command; cmd {
case "PING":
w.write("PONG", m.Params[0])
@@ -64,11 +63,12 @@ func (w *WatBot) Msg(m *irc.Message) {
return
}
+ // make sure there's actually some text to process
if len(m.Params[1]) == 0 {
return
}
-
+ // fieldsfunc allows you to obtain rune separated fields/args
args := strings.FieldsFunc(m.Params[1], func(c rune) bool {return c == ' '})
if len(args) == 0 {
@@ -76,9 +76,13 @@ func (w *WatBot) Msg(m *irc.Message) {
}
if w.Admin(m) {
- // Do a special admin command and return, or continue
+ // allow impersonation of the robot from anywhere
if args[0] == "imp" && len(args) > 2 {
- w.write(args[1], args[2:]...)
+ if args[1] == "PRIVMSG" {
+ w.write(args[1], strings.Join(args[2:], " "))
+ } else {
+ w.write(args[1], args[2:]...)
+ }
return
}
}
@@ -108,7 +112,7 @@ func (w *WatBot) Run() {
defer w.conn.Close()
err := w.client.Run()
if err != nil {
- fmt.Println(err.Error())
+ fmt.Println("Error returned while running client: " + err.Error())
}
}
diff --git a/wat/game.go b/wat/game.go
index 4ccf24a..b1acc5d 100644
--- a/wat/game.go
+++ b/wat/game.go
@@ -23,12 +23,13 @@ func NewWatGame(bot *WatBot, db *WatDb) *WatGame {
g.commands = map[string](func(*Player,[]string)(string)) {
"wat": g.megaWat,
"watch": g.Watch,
- "watcoin": g.Balance,
+ "coins": g.Balance,
"send": g.Send,
"rest": g.Rest,
"leech": g.Leech,
"roll": g.Roll,
"dice": g.Dice,
+ "mine": g.Mine,
}
g.lifeCommands = map[string](func(*Player, []string)(string)) {
"steal": g.Steal,
@@ -53,6 +54,7 @@ func (g *WatGame) Msg(m *irc.Message, player *Player, fields []string) {
if g.commands[fields[0]] != nil {
reply = g.commands[fields[0]](player, fields)
} else {
+ // one liners
switch strings.ToLower(fields[0]) {
case "rules":
reply = rules
@@ -60,12 +62,9 @@ func (g *WatGame) Msg(m *irc.Message, player *Player, fields []string) {
reply = helpText
case "topten":
reply = fmt.Sprintf("%s holders: %s", currency, g.TopTen())
- case "mine":
- reply = g.Mine(player)
}
}
if g.lifeCommands[fields[0]] != nil {
- // Nothing was handled. Maybe this is an action that requires consciousness.
if !player.Conscious() {
reply = unconscious
} else {
@@ -104,7 +103,7 @@ func (g *WatGame) Roll(player *Player, fields []string) string {
}
amount, e := g.Int(fields[1])
if e != nil {
- return "wat kinda numba is that"
+ return "wat kinda number is that"
}
if amount > player.Coins {
return "wat? brokeass"
@@ -132,15 +131,17 @@ func (g *WatGame) Punch(player *Player, fields []string) string {
}
chance := rand.Int63n(6)+1
dmg := rand.Int63n(6)+1
- ret := fmt.Sprintf("%s rolls a d6 to punch %s: It's a %d! %s ", player.Nick, target.Nick, chance, player.Nick)
- if chance <3 {
+ ret := fmt.Sprintf("%s rolls a d6... %s ", player.Nick, player.Nick)
+ if chance > 3 {
dmg += player.Level(player.Anarchy)
- ret += fmt.Sprintf("hits %s right in the torso for %d points of damage!", target.Nick, dmg)
+ ret += fmt.Sprintf("hits %s for %d points of damage!", target.Nick, dmg)
target.Health -= dmg
g.db.Update(target)
+ if target.Health <= 0 {
+ ret += target.Nick + " has fallen unconscious."
+ }
} else {
- dmg += target.Anarchy
- ret += fmt.Sprintf("fumbles, and punches themselves in confusion! %d self-damage! ", dmg)
+ ret += fmt.Sprintf("fumbles, and punches themselves in confusion! %d self-damage. ", dmg)
player.Health -= dmg
if player.Health <= 0 {
ret += player.Nick + " has fallen unconscious."
@@ -174,7 +175,6 @@ func (g *WatGame) Frame(player *Player, fields []string) string {
ret += fmt.Sprintf("You frame %s for a minor crime. They pay me %d.", target.Nick, amount)
player.Anarchy += 1
target.Coins -= amount
- // bot gets coins
} else {
ret += fmt.Sprintf("You were caught and pay them %d. %s gets the rest.", (amount/2), g.bot.Nick)
player.Coins -= amount
@@ -203,19 +203,21 @@ func (g *WatGame) Steal(player *Player, fields []string) string {
return err
}
if target.Coins < amount {
- return fmt.Sprintf("wat? %s is a poor fuck and doesn't have that much to steal.", target.Nick)
+ 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
ret := fmt.Sprintf("%s is trying to steal %d %s from %s... ", player.Nick, amount, currency, target.Nick)
if n < 3 {
- ret += "! You snuck it! Sneaky bastard!"
+ ret += "You did it! Sneaky bastard!"
player.Coins += amount
player.Anarchy += 1
target.Coins -= amount
g.db.Update(target)
} else {
- ret += fmt.Sprintf("... You were caught and I took %d %s from your pocket.", (amount*2), currency)
+ ret += fmt.Sprintf("You were caught and I took %d %s from your pocket.", (amount*2), currency)
player.Coins -= amount*2
+ g.me.Coins += amount*2
+ g.db.Update(g.me)
}
g.db.Update(player)
return ret
@@ -227,7 +229,7 @@ func (g *WatGame) GetTarget(player, target string) (*Player, string) {
return nil, "Who? wat?"
}
if t.Nick == player {
- return nil, "You can't do that to yourself, dummy."
+ return nil, "You can't do that to yourself, silly."
}
return &t, ""
}
@@ -235,11 +237,11 @@ func (g *WatGame) GetTarget(player, target string) (*Player, string) {
func (g *WatGame) Leech(player *Player, fields []string) string {
divisor := int64(10)
if len(fields) < 3 {
- return fmt.Sprintf("leech <nick> <%s> - using your wealth, you steal the life force of another player. this will probably backfire and kill you.", currency)
+ return fmt.Sprintf("leech <nick> <%s> - using your wealth, you steal the life force of another player", currency)
}
amount, er := g.Int(fields[2])
if amount < divisor {
- return fmt.Sprintf("wat?? can't try to leech with less than %d %s, what do you think this is, free?", divisor, currency)
+ return fmt.Sprintf("wat? its %d %s for 1 hp", divisor, currency)
}
if player.Coins < amount || er != nil {
return "wat great fortune do you think you have? poor wats shouldn't be doing this, wat a waste..."
@@ -255,7 +257,8 @@ func (g *WatGame) Leech(player *Player, fields []string) string {
if r < 5 {
target.Health -= hpDown
player.Health += hpDown
- reply += fmt.Sprintf("The deal is done, you schlorped %d HP from %s. They now have %d HP, you have %d.", hpDown, target.Nick, target.Health, player.Health)
+ player.Anarchy += 1
+ reply += fmt.Sprintf("The deal is done, you took %d HP from %s. They now have %d HP, you have %d.", hpDown, target.Nick, target.Health, player.Health)
} else {
reply += "The gods do not smile upon you this waturday. Your money vanishes and nothing happens."
}
@@ -263,7 +266,7 @@ func (g *WatGame) Leech(player *Player, fields []string) string {
}
func (g *WatGame) Rest(player *Player, fields []string) string {
- minRest := int64(86400)
+ minRest := int64(43200)
delta := time.Now().Unix() - player.LastRested
ret := ""
if player.LastRested == 0 {
@@ -272,7 +275,7 @@ func (g *WatGame) Rest(player *Player, fields []string) string {
} 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(20)+1
+ value := rand.Int63n(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()
@@ -294,7 +297,7 @@ func (g *WatGame) Send(player *Player, fields []string) string {
return fields[2] + " is not an integer, wat?"
}
if int64(amount) > player.Coins {
- return "wat? you poor fuck, you don't have enough!"
+ return "wat? you're too poor!"
}
target, str := g.GetTarget(player.Nick, fields[1])
if target == nil {
@@ -304,10 +307,10 @@ 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", player.Nick, target.Nick, amount, currency)
+ 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)
}
-func (g *WatGame) Mine(player *Player) string {
+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)
@@ -375,6 +378,7 @@ 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
reply := ""
if mega == 23 {
player.Coins += 1000000
@@ -384,6 +388,10 @@ func (g *WatGame) megaWat(player *Player, _ []string) string {
player.Coins += 1000
reply = fmt.Sprintf("OMGWAT! %s has won the KiloWat lottery and gains 1000 %s!", player.Nick, currency)
}
+ if ten == 10 {
+ player.Coins += 10
+ reply = fmt.Sprintf("%s won the regular wattery. This one only pays 10 %s.", player.Nick, currency)
+ }
player.Watting += 1
g.db.Update(player)
return reply