aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristine Dodrill <me@christine.website>2017-03-13 11:38:10 -0700
committerChristine Dodrill <me@christine.website>2017-03-13 11:38:45 -0700
commit8b7cc7f0abf7fa883f2ec9bdaf6ae4e7d5eef5a0 (patch)
tree68953711ce873a92f00e2f2d74c01b0070188334
parent730cb636a3fa26155ec1b1b5f3c43af84afbf5c3 (diff)
downloadx-8b7cc7f0abf7fa883f2ec9bdaf6ae4e7d5eef5a0.tar.xz
x-8b7cc7f0abf7fa883f2ec9bdaf6ae4e7d5eef5a0.zip
t pushAdd heristics chatbot to find cleveland brown spammer
-rw-r--r--irc/clevelandbrown/main.go103
1 files changed, 103 insertions, 0 deletions
diff --git a/irc/clevelandbrown/main.go b/irc/clevelandbrown/main.go
new file mode 100644
index 0000000..c818a57
--- /dev/null
+++ b/irc/clevelandbrown/main.go
@@ -0,0 +1,103 @@
+package main
+
+import (
+ "crypto/tls"
+ "log"
+ "os"
+ "strings"
+ "sync"
+ "time"
+
+ "github.com/AllenDang/simhash"
+
+ irc "gopkg.in/irc.v1"
+
+ _ "github.com/joho/godotenv/autoload"
+)
+
+var (
+ addr = os.Getenv("SERVER")
+ password = os.Getenv("PASSWORD")
+ monitorChan = os.Getenv("MONITOR_CHAN")
+
+ sclock sync.Mutex
+ scores map[string]float64
+)
+
+func main() {
+ scores = map[string]float64{}
+
+ conn, err := tls.Dial("tcp", addr, &tls.Config{
+ InsecureSkipVerify: true,
+ })
+ if err != nil {
+ log.Fatal(err)
+ }
+
+ cli := irc.NewClient(conn, irc.ClientConfig{
+ Handler: irc.HandlerFunc(scoreCleveland),
+ Nick: "Xena",
+ User: "xena",
+ Name: "cleveland brown termination bot",
+ Pass: password,
+ })
+
+ go func() {
+ for {
+ time.Sleep(30 * time.Second)
+
+ sclock.Lock()
+ defer sclock.Unlock()
+
+ scores = map[string]float64{}
+
+ sclock.Unlock()
+ }
+ }()
+
+ cli.Run()
+}
+
+func scoreCleveland(c *irc.Client, m *irc.Message) {
+ sclock.Lock()
+ defer sclock.Unlock()
+
+ if m.Command != "PRIVMSG" {
+ return
+ }
+
+ /*
+ if !strings.HasSuffix(m.Params[0], monitorChan) {
+ return
+ }
+ */
+
+ log.Printf("%#v", m)
+
+ sc, ok := scores[m.Prefix.Name]
+ if !ok {
+ sc = 0
+ }
+
+ lv := simhash.GetLikenessValue(strings.ToLower(m.Params[1]), showLyrics)
+ log.Printf("%s: %v", m.Params[1], lv)
+
+ sc += lv
+
+ scores[m.Prefix.Name] = sc
+
+ log.Printf("%s: %v", m.Prefix.Name, sc)
+
+ if sc >= 8.0 {
+ c.Writef("PRIVMSG #opers :%s has cleveland themeshow similarity score %v", m.Prefix.Name, sc)
+ }
+}
+
+const showLyrics = `my name is cleveland brown and I am proud to be
+right back in my hometown with my new family.
+there's old friends and new friends and even a bear.
+through good times and bad times it's true love we share.
+and so I found a place
+where everyone will know
+my happy mustache face
+this is the cleveland show! haha!`