From b4eeb074cc66c9ca0843424b52e0fb5cb435abe2 Mon Sep 17 00:00:00 2001
From: Horscchtey <eva.dengler@fau.de>
Date: Mon, 13 Jul 2020 01:29:53 +0000
Subject: [PATCH] update files

---
 src/boddle.db | Bin 110592 -> 131072 bytes
 src/bot.go    | 243 ++++++++++++++++++++++++++++++++++++++++++--------
 2 files changed, 207 insertions(+), 36 deletions(-)

diff --git a/src/boddle.db b/src/boddle.db
index c68bb08cdb3af69e5f08e528e0c83da0c4d58b6a..4aa0804767f195347b79f931cf817c77f8e97e81 100644
GIT binary patch
delta 17623
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
DQkWoq

delta 161
zcmZo@;AnWjHbGjDi-CbbngIb=C+Zl>b1~@Y1n}~&V&LSR#lXLbpO3$uZ#v&&K4rcF
z-dVg~HY*Cq@NS;Po2A6u!!mC(yMZM0#))-|o9CINMKgD?Y}(8|L6mvp#A%G1H%$q8
zEx^WS&cHvHKZak9?<!vvpZR7*0cF1J=6#H31^HO{mND=j;IHC0<NL<9Y_p=k6u#}t
J)-gsg0suTTE0h2L

diff --git a/src/bot.go b/src/bot.go
index 4ff1568..b04e183 100644
--- a/src/bot.go
+++ b/src/bot.go
@@ -12,6 +12,7 @@ import "database/sql"
 import _ "github.com/mattn/go-sqlite3"
 
 var dead = true
+var arsch = false
 
 type irc_msg struct {
 	channel	string
@@ -52,7 +53,7 @@ func scanline_privmsg (msg string) irc_msg {
 	t = strings.Split(irc.channel, " :")
 	irc.channel, irc.msg = t[0], t[1]
 	t = strings.Split(irc.msg, "\r\n")
-	irc.msg = t[0]
+	irc.msg = strings.TrimSpace(t[0])
 	if ! strings.HasPrefix(irc.channel, "#") {
 		irc.channel = irc.author
 	}
@@ -79,26 +80,6 @@ func parsemsg(line string, foo bot) bool {
 		"zinn_des_lebens": true,
 	}
 
-/*
-	if strings.HasPrefix(ircmsg.msg, ">") {
-		if strings.Compare(ircmsg.author, "cody") == 0 {
-			sendmsg(foo.conn, ircmsg.channel, "klein cody möchte bitte von mama mute aus dem bällebad abgeholt werden!")
-			return true
-		} else if strings.Compare(ircmsg.author, "mute") == 0 {
-			bloederspruch := []string{"awwwww mal wieder auf der Suche nach Liebe?",
-						  "Hallo kleiner :)",
-						  "Du suchst was lustiges oder? hamma ned",
-						  "Kääääääääääääääääääsebrot!",
-						  "Ja, das sind nur endlich viele dumme Sprüche...",
-						  "lalallalaallaalaaaaaa",
-						  "Bist du ein Blobfisch?",
-						  "Erst haten und dann doch nutzen...."}
-
-			sendmsg(foo.conn, ircmsg.channel, bloederspruch[rand.Int()%len(bloederspruch)])
-		}
-	}
-*/
-
 	if strings.HasPrefix(ircmsg.msg, ">help") {
 		// help
 		input := strings.Split(ircmsg.msg, " ")
@@ -128,10 +109,14 @@ func parsemsg(line string, foo bot) bool {
 					helpmsg = "get your personalized database-related nickname by calling >idb or get one for your friend with >idb <name>"
 				case "flirt":
 					helpmsg = "get flirt messages with >flirt or flirt with your best friend using >flirt <your love>"
+				case "hate":
+					helpmsg = "get hate messages with >hate or hate with your best friend using >hate <your love>"
 				case "add jokes":
 					helpmsg = "type >add jokes for more information"
 				case "add flirt":
 					helpmsg = "add your best pick up line using >add flirt <pickup line>"
+				case "add hate":
+					helpmsg = "add your best break up line using >add hate <breakup line>"
 				case "geh schlafen":
 					helpmsg = "send the bot to sleep until the next reconnect"
 				case "deutsch":
@@ -147,6 +132,14 @@ func parsemsg(line string, foo bot) bool {
 				fmt.Sprintf(strings.Join(functs, ", "))))
 
 		}
+	} else if strings.Compare(ircmsg.msg, ">arsch on") == 0 && strings.Compare(ircmsg.author, "horscchtey") == 0 {
+		// info
+		arsch = true
+		sendmsg(foo.conn, ircmsg.channel, "OH YEAH BABY")
+	} else if strings.Compare(ircmsg.msg, ">arsch off") == 0 && strings.Compare(ircmsg.author, "horscchtey") == 0 {
+		// info
+		arsch = false
+		sendmsg(foo.conn, ircmsg.channel, "dis not gud")
 	} else if strings.Compare(ircmsg.msg, ">info") == 0 {
 		// info
 		sendmsg(foo.conn, ircmsg.channel, "created in golang with love, cats and tears >:)")
@@ -268,26 +261,41 @@ func parsemsg(line string, foo bot) bool {
 		if err != nil {
 			fmt.Printf("nargh")
 		}
-		fmt.Printf(joke)
 		_, err = statement.Exec(count, curr, joke);
 		if err != nil {
 			panic(err)
 			return true
 		}
 		sendmsg(foo.conn, ircmsg.channel, "i guess that worked")
-	} else if strings.HasPrefix(ircmsg.msg, ">flirt preisi") {
-		sendmsg(foo.conn, ircmsg.channel, "~PREISI IST SEXY~ - deine Verehrer von dem neuen Ecksofa.")
-	} else if strings.HasPrefix(ircmsg.msg, ">flirt") || strings.Contains(ircmsg.msg, " liebe ") || strings.Contains(ircmsg.msg, " Liebe ") || strings.Contains(ircmsg.msg, " love ") || strings.Contains(ircmsg.msg, " Love ") {
+	} else if strings.HasPrefix(ircmsg.msg, ">wisdom") {
+		// wisdom
+		db, err := sql.Open("sqlite3", "./boddle.db")
+		if err != nil {
+			panic(err)
+			return true
+		}
+
+		rows, err := db.Query("select e.wisdom from wisdom e ORDER BY RANDOM() LIMIT 1")
+		if err != nil {
+			panic(err)
+			return true
+		}
+		var wisdom string
+		for rows.Next() {
+			var curr string
+			rows.Scan(&curr)
+			wisdom = curr
+		}
+		rows.Close()
+
+		sendmsg(foo.conn, ircmsg.channel, wisdom)
+	} else if strings.HasPrefix(ircmsg.msg, ">flirt") {
 		// flirt
-		var ppl []string
-		if strings.HasPrefix(ircmsg.msg, ">flirt") {
-			for _, v := range strings.Split(ircmsg.msg, " ") {
-				if ! strings.HasPrefix(v, ">flirt") {
-					ppl = append(ppl, v)
-				}
-			}
+		var ppl string
+		if len(ircmsg.msg) > 7 {
+			ppl = string(([]rune(ircmsg.msg))[7:len(ircmsg.msg)])
 		} else {
-			ppl = append(ppl,ircmsg.author)
+			ppl = ircmsg.author
 		}
 
 		db, err := sql.Open("sqlite3", "./boddle.db")
@@ -309,12 +317,77 @@ func parsemsg(line string, foo bot) bool {
 		}
 		rows.Close()
 
-		if (len(ppl) == 0) {
-			sendmsg(foo.conn, ircmsg.channel, flirt)
+		endstring := len(flirt)-1
+
+		for endstring > 0 {
+			curr := int(flirt[endstring])
+			if (curr > 64 && curr < 91) || (curr > 96 && curr < 123) {
+				break;
+			}
+			endstring = endstring - 1
+		}
+		endstring = endstring + 1
+		var outstr string
+		if (endstring > 0) && (endstring < len(flirt)) {
+			outstr = fmt.Sprintf("%s, %s%s <3",
+				string(flirt[0:endstring]),
+				ppl,
+				string(flirt[endstring:len(flirt)]) )
+		} else {
+			outstr = fmt.Sprintf("%s, %s <3",
+				flirt, ppl )
+		}
+
+		sendmsg(foo.conn, ircmsg.channel, outstr)
+	} else if strings.HasPrefix(ircmsg.msg, ">hate") {
+		// hate
+		var ppl string
+		if len(ircmsg.msg) > 6 {
+			ppl = string(([]rune(ircmsg.msg))[6:len(ircmsg.msg)])
+		} else {
+			ppl = ircmsg.author
+		}
+
+		db, err := sql.Open("sqlite3", "./boddle.db")
+		if err != nil {
+			panic(err)
+			return true
+		}
+
+		rows, err := db.Query("select e.hate from hate e ORDER BY RANDOM() LIMIT 1")
+		if err != nil {
+			panic(err)
 			return true
+		}
+		var hate string
+		for rows.Next() {
+			var curr string
+			rows.Scan(&curr)
+			hate = curr
+		}
+		rows.Close()
+
+		endstring := len(hate)-1
+
+		for endstring > 0 {
+			curr := int(hate[endstring])
+			if (curr > 64 && curr < 91) || (curr > 96 && curr < 123) {
+				break;
+			}
+			endstring = endstring - 1
+		}
+		endstring = endstring + 1
+		var outstr string
+		if (endstring > 0) && (endstring < len(hate)) {
+			outstr = fmt.Sprintf("%s, %s%s :/",
+				string(hate[0:endstring]),
+				ppl,
+				string(hate[endstring:len(hate)]) )
 		} else {
-			sendmsg(foo.conn, ircmsg.channel, fmt.Sprintf("%s, %s <3", flirt, fmt.Sprintf(strings.Join(ppl, ", "))))
+			outstr = fmt.Sprintf("%s, %s :/",
+				hate, ppl )
 		}
+		sendmsg(foo.conn, ircmsg.channel, outstr)
 	} else if strings.HasPrefix(ircmsg.msg, "horscchtey: fix") {
 		sendmsg(foo.conn, ircmsg.channel, "Hat mich denn hier niemand so lieb, wie ich bin? :(")
 	} else if strings.HasPrefix(ircmsg.msg, ">add flirt") {
@@ -353,6 +426,95 @@ func parsemsg(line string, foo bot) bool {
 			return true
 		}
 		sendmsg(foo.conn, ircmsg.channel, "congrats, no woman will ever like you")
+	} else if strings.HasPrefix(ircmsg.msg, ">add flirt") {
+		if ! jokeusers[ircmsg.author] {
+			sendmsg(foo.conn, ircmsg.channel, "ur a cum-puter sciene student, learn how to flirt!")
+		}
+		t := strings.SplitN(ircmsg.msg, "add flirt ",2)
+		if len(t) != 2 {
+			sendmsg(foo.conn, ircmsg.channel, fmt.Sprintf("usage: add flirt <really romantic stuff here>"))
+			return true
+		}
+		flirt := t[1]
+
+		// open database
+		db, err := sql.Open("sqlite3", "./boddle.db")
+		if err != nil {
+			panic(err)
+			return true
+		}
+
+		// get number of jokes
+		var count int
+		row := db.QueryRow("SELECT COUNT(*) FROM flirt")
+		err = row.Scan(&count)
+		if err != nil {
+			fmt.Printf("num failed\n")
+		}
+		// insert ...
+		statement, err := db.Prepare ("insert into flirt (id, flirt) values (?,?)")
+		if err != nil {
+			fmt.Printf("nargh")
+		}
+		_, err = statement.Exec(count, flirt);
+		if err != nil {
+			panic(err)
+			return true
+		}
+		sendmsg(foo.conn, ircmsg.channel, "congrats, no woman will ever like you")
+	} else if strings.HasPrefix(ircmsg.msg, ">add hate") {
+		if ! jokeusers[ircmsg.author] {
+			sendmsg(foo.conn, ircmsg.channel, "ur a cum-puter sciene student, learn how to hate!")
+		}
+		t := strings.SplitN(ircmsg.msg, "add hate ",2)
+		if len(t) != 2 {
+			sendmsg(foo.conn, ircmsg.channel, fmt.Sprintf("usage: add hate <really romantic stuff here>"))
+			return true
+		}
+		hate := t[1]
+
+		// open database
+		db, err := sql.Open("sqlite3", "./boddle.db")
+		if err != nil {
+			panic(err)
+			return true
+		}
+		// insert ...
+		statement, err := db.Prepare ("insert into hate (hate) values (?)")
+		if err != nil {
+			fmt.Printf("nargh")
+		}
+		_, err = statement.Exec(hate);
+		if err != nil {
+			panic(err)
+			return true
+		}
+		sendmsg(foo.conn, ircmsg.channel, "congrats, no woman will ever like you")
+	} else if strings.HasPrefix(ircmsg.msg, ">add wisdom") {
+		t := strings.SplitN(ircmsg.msg, "add wisdom ",2)
+		if len(t) != 2 {
+			sendmsg(foo.conn, ircmsg.channel, fmt.Sprintf("usage: add wisdom <really romantic stuff here>"))
+			return true
+		}
+		wisdom := t[1]
+
+		// open database
+		db, err := sql.Open("sqlite3", "./boddle.db")
+		if err != nil {
+			panic(err)
+			return true
+		}
+		// insert ...
+		statement, err := db.Prepare ("insert into wisdom (wisdom) values (?)")
+		if err != nil {
+			fmt.Printf("nargh")
+		}
+		_, err = statement.Exec(wisdom);
+		if err != nil {
+			panic(err)
+			return true
+		}
+		sendmsg(foo.conn, ircmsg.channel, "wise words added")
 	} else if strings.HasPrefix(ircmsg.msg, ">idb") {
 		// idb
 		t := strings.SplitN(ircmsg.msg, " ", 2)
@@ -451,6 +613,15 @@ func parsemsg(line string, foo bot) bool {
 		sorrybro := "Sorry bro I did not understand that..."
 		helpingoffer := "you can type >help for more information on my skills"
 		sendmsg(foo.conn, ircmsg.channel, fmt.Sprintf("%s %s", sorrybro, helpingoffer))
+	} else if (rand.Int()%50) == 0 && arsch == true {
+		var words []string
+		for _, v := range strings.Split(ircmsg.msg, " ") {
+			words = append(words, v)
+		}
+		if len(words) > 2 {
+			words[rand.Int()%len(words)] = "arsch"
+		}
+		sendmsg(foo.conn, ircmsg.channel, fmt.Sprintf(strings.Join(words, " ")))
 	}
 	return true
 }
-- 
GitLab