From d51641ee3654d5576daa8c107af5d90f4056d035 Mon Sep 17 00:00:00 2001 From: Horscchtey Date: Thu, 21 Jan 2021 00:42:01 +0000 Subject: [PATCH] add new version of bot to raspi \o/ --- boddle.db | Bin 0 -> 180224 bytes boddle.go | 315 +++++++++++++++++++++++++++++++++++++++++++++++++ bot.go | 53 +++++++++ bot.py | 85 +++++++++++++ forraspidothis | 9 ++ ircfoo.go | 98 +++++++++++++++ logging.go | 24 ++++ 7 files changed, 584 insertions(+) create mode 100644 boddle.db create mode 100644 boddle.go create mode 100644 bot.go create mode 100644 bot.py create mode 100755 forraspidothis create mode 100644 ircfoo.go create mode 100644 logging.go diff --git a/boddle.db b/boddle.db new file mode 100644 index 0000000000000000000000000000000000000000..25ec74e363db551aae3a7cc48f986c65c5f00a67 GIT binary patch literal 180224 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 z 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 m 0 { + task = fmt.Sprintf("%s, groups g", task) + } + task = fmt.Sprintf("%s where l.id = b.line_id and t.id = b.tag_id", task) + task = fmt.Sprintf("%s and t.id = %s", task, c.cmd) + if len(c.groups) > 0 { + task = fmt.Sprintf("%s and g.id = b.group_id and (", task) + for i, group := range c.groups { + task = fmt.Sprintf("%sg.id = %d", task, group) + if i < (len(c.groups) - 1) { + task = fmt.Sprintf("%s or ", task) + } else { + task = fmt.Sprintf("%s)", task) + } + } + } + return fmt.Sprintf("%s ORDER BY RANDOM() LIMIT 1", task) +} + +// line: +// >befehl <[groups]> +// befehl ist genau ein wort +func parsemsg(msg irc_msg, foo bot) bool { + if len(msg.msg) <= 0 { + return false + } + if !in(msg.msg[0], begin_char) { + return false + } + msg.msg = msg.msg[1:] + + c := filter(msg.msg) + if !c.valid { + LOG_WARN.Printf("non valid input found.\n") + return false + } + if c.cmd == "" { + LOG_WARN.Printf("no command provided.\n") + return false + } + + sorter_row, err := db.Query(fmt.Sprintf("select id, tag_id, groups_allow, name_allow, has_groups from sorter where name = '%s'", c.cmd)) + checkErr(err) + if sorter_row.Next() { + var sorter_id string + var tag_id string + var groups_allow int + var name_allow int + var has_groups int + sorter_row.Scan(&sorter_id, &tag_id, &groups_allow, &name_allow, &has_groups) + + if groups_allow != 0 { + // warning: not allowed + c.groups = nil // use c.groups[:0] to keep allocated space + } + if name_allow != 0 && !c.add { + // warning: not allowed + c.suffix = "" + } + + c.cmd = tag_id + + if has_groups == 0 { + sorter_groups_row, err := db.Query(fmt.Sprintf("select group_id from sorter_groups where sorter_id = '%s'", sorter_id)) + checkErr(err) + if sorter_groups_row.Next() { + var group_id int + sorter_groups_row.Scan(&group_id) + c.groups = append(c.groups, group_id) + } + sorter_groups_row.Close() + } + c.groups = unique(c.groups) + sorter_row.Close() + } else { + LOG_WARN.Printf("no sorter entry, no translation possible\n") + return false + } + + if c.add { + if (len(c.suffix) <= 0) { + return false; + } + // insert into database + statement, err := db.Prepare("insert into line (content, author) values (?,?)") + checkErr(err) + _, err = statement.Exec(c.suffix, msg.author) + checkErr(err) + defer statement.Close() + + // get ID of content... + task := fmt.Sprintf("select l.id from line l where l.content = '%s'", c.suffix) + row, err := db.Query(task) + checkErr(err) + line_id := 0 + if row.Next() { row.Scan(&line_id) } + row.Close() + LOG_INFO.Printf(c.cmd) + if line_id == 0 { + LOG_WARN.Printf("no entry for adding") + return false + } + + // for tag and all groups + if len(c.groups) == 0 { + stat, err := db.Prepare("insert into brain(line_id, tag_id) values (?,?)") + checkErr(err) + _, err = stat.Exec(line_id, c.cmd) + checkErr(err) + LOG_INFO.Printf("inserted foo! \n") + defer stat.Close() + } else { + stat, err := db.Prepare("insert into brain(line_id, tag_id, group_id) values (?,?,?)") + checkErr(err) + for _, group := range c.groups { + _, err = stat.Exec(line_id, c.cmd, group) + checkErr(err) + } + LOG_INFO.Printf("inserted foo! \n") + defer stat.Close() + } + return true + } + + task := getRandomEntry(c) + + LOG_INFO.Printf(task) + row, err := db.Query(task) + checkErr(err) + res := "" + if row.Next() { + row.Scan(&res) + } + row.Close() + + if len(res) <= 0 { + LOG_WARN.Printf("no entry found\n") + res = "No matching entry found :(" + } else if len(c.suffix) > 0 { + res = fmt.Sprintf("%s... %s", c.suffix, res) + } + sendmsg(foo.conn, msg.channel, res) + + return true +} + +/* +func test() { + db, err = sql.Open("sqlite3", "./boddle.db") + checkErr(err) + var msg irc_msg + msg.channel = "testchannel" + msg.author = "max mustermann" + + // == invalid commands == + // empty cmd + msg.msg = ">add [test me bro hahahaha] blob" + parsemsg(msg) + msg.msg = "> [test me bro hahahaha]" + parsemsg(msg) + msg.msg = ">[test me bro hahahaha] meow " + parsemsg(msg) + msg.msg = ">add [test me bro hahahaha] meow " + parsemsg(msg) + + // non-existent groups + msg.msg = ">ohai [test me bro hahahaha]" + parsemsg(msg) + + // add command...? not implemented yet! + msg.msg = ">add jokes blob" + parsemsg(msg) + msg.msg = ">add test [test me bro hahahaha] meow " + parsemsg(msg) + + // ok command \o/ + msg.msg = ">flirt [sweet] meow " + parsemsg(msg) + msg.msg = ">jokes [flach] meow " + parsemsg(msg) + msg.msg = ">hate [sweet] blobfisch " + parsemsg(msg) + msg.msg = ">radschlag [science]" + parsemsg(msg) +} +*/ diff --git a/bot.go b/bot.go new file mode 100644 index 0000000..2559d02 --- /dev/null +++ b/bot.go @@ -0,0 +1,53 @@ +package main + +import ( + "os" + "fmt" + "net" + "time" + _ "github.com/mattn/go-sqlite3" +) + +var dead = true + +type bot struct { + name string + channel []string + port int + server string + conn net.Conn +} + +func main() { + LOG_init() + + boddle := bot { + name: "boddle", + channel: []string{"#faui2k16", "#fau", "#sigbike", "#sigfreibad", "#faui2k17"}, + port: 6667, + server: "irc.fau.de", + } + + LOG_INFO.Println("bot started!") + + var botchan <-chan []byte + var line []byte + dead = true + + for { + if dead { + LOG_WARN.Println("died.") + for { + botchan = connect(boddle) + if botchan != nil { + break + } + time.Sleep(10 * time.Second) + } + LOG_INFO.Println("reconnected.") + dead = false + } + line = <-botchan + fmt.Fprintf(os.Stderr, string(line)) + } +} diff --git a/bot.py b/bot.py new file mode 100644 index 0000000..d623236 --- /dev/null +++ b/bot.py @@ -0,0 +1,85 @@ +from telegram.ext import Updater +from telegram.ext import CommandHandler +from telegram.ext import MessageHandler +from telegram.ext import Filters +from telegram import InlineQueryResultArticle, InputTextMessageContent +import random +import logging + +import sqlite3 as sql + +# updater +updater = Updater(token='935673062:AAH4By1EMqAUaD9wgnV3lZQRRBX6e5Lve6g', use_context=True) + +# sqlite database +connection = sql.connect("/home/horscchtey/bots/boddle/src/v2/boddle.db", check_same_thread=False) +cursor = connection.cursor() + +dispatcher = updater.dispatcher + +# enable logging +logging.basicConfig(format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', + level=logging.INFO) + +########### routinen ########## +def start(update, context): + context.bot.send_message(chat_id=update.effective_chat.id, text="I am your new source of bad jokes") + +def kaffee(update, context): + cursor.execute("select distinct l.content from line l, brain b, tag t where l.id = b.line_id and t.id = b.tag_id and t.id = 8 ORDER BY RANDOM() LIMIT 1") + selection = [] + result = cursor.fetchall() + for r in result: + selection.append(r[0]) + context.bot.send_message(chat_id=update.effective_chat.id, text=str(selection[0])) + +def radschlag(update, context): + cursor.execute("select distinct l.content from line l, brain b, tag t where l.id = b.line_id and t.id = b.tag_id and t.id = 3 ORDER BY RANDOM() LIMIT 1") + selection = [] + result = cursor.fetchall() + for r in result: + selection.append(r[0]) + context.bot.send_message(chat_id=update.effective_chat.id, text=str(selection[0])) + +def flirt(update, context): + cursor.execute("select distinct l.content from line l, brain b, tag t where l.id = b.line_id and t.id = b.tag_id and t.id = 1 ORDER BY RANDOM() LIMIT 1") + selection = [] + result = cursor.fetchall() + for r in result: + selection.append(r[0]) + context.bot.send_message(chat_id=update.effective_chat.id, text=str(selection[0])) + +def jokes(update, context): + cursor.execute("select distinct l.content from line l, brain b, tag t where l.id = b.line_id and t.id = b.tag_id and t.id = 4 ORDER BY RANDOM() LIMIT 1") + selection = [] + result = cursor.fetchall() + for r in result: + selection.append(r[0]) + context.bot.send_message(chat_id=update.effective_chat.id, text=str(selection[0])) + +def unknown(update, context): + context.bot.send_message(chat_id=update.effective_chat.id, text="Sorry, I didn't understand that command.") + +#inline + +start_handler = CommandHandler('start', start) +dispatcher.add_handler(start_handler) + +flirt_handler = CommandHandler('flirt', flirt) +dispatcher.add_handler(flirt_handler) + +radschlag_handler = CommandHandler('radschlag', radschlag) +dispatcher.add_handler(radschlag_handler) + +kaffee_handler = CommandHandler('kaffee', kaffee) +dispatcher.add_handler(kaffee_handler) +coffee_handler = CommandHandler('coffee', kaffee) +dispatcher.add_handler(coffee_handler) + +jokes_handler = CommandHandler('jokes', jokes) +dispatcher.add_handler(jokes_handler) + +unknown_handler = MessageHandler(Filters.command, unknown) +dispatcher.add_handler(unknown_handler) + +updater.start_polling() diff --git a/forraspidothis b/forraspidothis new file mode 100755 index 0000000..3c8aefb --- /dev/null +++ b/forraspidothis @@ -0,0 +1,9 @@ +#!/bin/bash + +export GOPATH=/home/horscchtey/go + +env CC=arm-linux-gnueabihf-gcc CXX=arm-linux-gnueabihf-g++ \ + CGO_ENABLED=1 GOOS=linux GOARCH=arm GOARM=7 \ + go build bot.go boddle.go logging.go ircfoo.go + +mv bot boddle_executable diff --git a/ircfoo.go b/ircfoo.go new file mode 100644 index 0000000..6af8c30 --- /dev/null +++ b/ircfoo.go @@ -0,0 +1,98 @@ +package main + +import ( + "fmt" + "net" + "os" + "bufio" + "bytes" + "strings" + "database/sql" + _ "github.com/mattn/go-sqlite3" +) + +func sendmsg (conn net.Conn, channel string, msg string) { + mesg := fmt.Sprintf("PRIVMSG %s :%s\r\n", channel, msg) + fmt.Printf(mesg) + conn.Write([]byte(mesg)) +} + +func scanline_privmsg (msg string) irc_msg { + var irc irc_msg + + msg = msg[1:] + t := strings.Split(msg, "!") + irc.author, irc.channel = t[0], t[1] + t = strings.Split(irc.channel, "PRIVMSG ") + irc.channel = t[1] + t = strings.Split(irc.channel, " :") + irc.channel, irc.msg = t[0], t[1] + t = strings.Split(irc.msg, "\r\n") + irc.msg = strings.TrimSpace(t[0]) + if ! strings.HasPrefix(irc.channel, "#") { + irc.channel = irc.author + } + return irc +} + +func listenToIRC (foo bot) <-chan []byte { + c := make(chan []byte) + reader := bufio.NewReader(foo.conn) + db, err = sql.Open("sqlite3", "./boddle.db") + if err != nil { + LOG_ERR.Printf("opening database failed") + return nil + } + + var line []byte + var err error + + go func() { + for { + line, err = reader.ReadBytes('\n') + if err != nil { + LOG_ERR.Printf("Error while reading bytes from connection.\n") + dead = true + c <- []byte("killed it") + return + } + + c <- line + + if bytes.Contains([]byte(line), []byte("PING :")) { + v := []byte(bytes.Replace([]byte(line), []byte("PING"), []byte("PONG"), 1)) + fmt.Printf(string(v[:])) + foo.conn.Write(v) + continue + } + + if !bytes.Contains([]byte(line), []byte("PRIVMSG")) { + continue + } + + parsemsg(scanline_privmsg(string(line)), foo) + } + } () + return c +} + +func connect(boddle bot) <-chan []byte { + conn, err := net.Dial("tcp", fmt.Sprintf("%s:%d", boddle.server, boddle.port)) + + if err != nil { + fmt.Fprintf(os.Stderr, "Error while dialing server.") + LOG_ERR.Printf("Error while connecting to server.") + return nil + } + + boddle.conn = conn + + /* connect to irc */ + fmt.Fprintf(boddle.conn, "NICK %s\r\n", boddle.name) + fmt.Fprintf(boddle.conn, "USER %s 1 1 1:%s\r\n", boddle.name, boddle.name) + for _, channel := range(boddle.channel) { + fmt.Fprintf(boddle.conn, "JOIN %s\r\n", channel) + } + + return listenToIRC(boddle) +} diff --git a/logging.go b/logging.go new file mode 100644 index 0000000..3a905d1 --- /dev/null +++ b/logging.go @@ -0,0 +1,24 @@ +package main + +import ( + "log" + "os" +) + +var ( + LOG_WARN *log.Logger + LOG_INFO *log.Logger + LOG_ERR *log.Logger +) + +func LOG_init() { + file, err := os.OpenFile("logs.txt", os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0666) + if err != nil { + log.Fatal(err) + } + defer file.Close() + + LOG_INFO = log.New(file, "INFO: ", log.Ldate|log.Ltime|log.Lshortfile) + LOG_WARN = log.New(file, "WARNING: ", log.Ldate|log.Ltime|log.Lshortfile) + LOG_ERR = log.New(file, "ERROR: ", log.Ldate|log.Ltime|log.Lshortfile) +}