init
This commit is contained in:
		
						commit
						51b7e05596
					
				
					 11 changed files with 1214 additions and 0 deletions
				
			
		
							
								
								
									
										20
									
								
								Dockerfile
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								Dockerfile
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,20 @@
 | 
			
		|||
FROM ubuntu:15.10 
 | 
			
		||||
MAINTAINER Andreas Neue <an@dnix.de>
 | 
			
		||||
 | 
			
		||||
RUN apt-get -y --force-yes update 
 | 
			
		||||
RUN apt-get -y --force-yes upgrade
 | 
			
		||||
RUN apt-get install -y ca-certificates
 | 
			
		||||
RUN apt-get install -y fortune vim
 | 
			
		||||
RUN apt-get clean
 | 
			
		||||
 | 
			
		||||
RUN mkdir /flokatirc
 | 
			
		||||
 | 
			
		||||
COPY flokatirc /flokatirc/flokatirc
 | 
			
		||||
COPY newsfeeds.conf /flokatirc/newsfeeds.conf
 | 
			
		||||
COPY fortunes /flokatirc/fortunes
 | 
			
		||||
 | 
			
		||||
ENV PATH $PATH:/flokatirc
 | 
			
		||||
 | 
			
		||||
WORKDIR /flokatirc
 | 
			
		||||
 | 
			
		||||
CMD [ "/flokatirc/flokatirc", "-server=irc.dnix.de:6667", "-name=Flokati", "-chan=#northbrigade", "-nsname=N", "-nspass=t0ps3cr37" ]
 | 
			
		||||
							
								
								
									
										19
									
								
								LICENSE
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								LICENSE
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,19 @@
 | 
			
		|||
Copyright (c) 2015,2016 Andreas Neue
 | 
			
		||||
 | 
			
		||||
Permission is hereby granted, free of charge, to any person obtaining a copy of
 | 
			
		||||
this software and associated documentation files (the "Software"), to deal in
 | 
			
		||||
the Software without restriction, including without limitation the rights to
 | 
			
		||||
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
 | 
			
		||||
of the Software, and to permit persons to whom the Software is furnished to do
 | 
			
		||||
so, subject to the following conditions:
 | 
			
		||||
 | 
			
		||||
The above copyright notice and this permission notice shall be included in all
 | 
			
		||||
copies or substantial portions of the Software.
 | 
			
		||||
 | 
			
		||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | 
			
		||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
			
		||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 | 
			
		||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 | 
			
		||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 | 
			
		||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 | 
			
		||||
SOFTWARE.
 | 
			
		||||
							
								
								
									
										11
									
								
								README.md
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								README.md
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,11 @@
 | 
			
		|||
## flokatirc
 | 
			
		||||
*an incredibly friendly, silver-tongued, and elegantly proportioned IRC community bot*
 | 
			
		||||
 | 
			
		||||
#### LICENSE
 | 
			
		||||
 | 
			
		||||
See `LICENSE` file.
 | 
			
		||||
 
 | 
			
		||||
#### QUICK INSTALL
 | 
			
		||||
 | 
			
		||||
`# go build flokatirc`
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										137
									
								
								main.go
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										137
									
								
								main.go
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,137 @@
 | 
			
		|||
// vim:ts=4:sts=4:sw=4:noet:tw=72
 | 
			
		||||
//
 | 
			
		||||
// flokatirc
 | 
			
		||||
//
 | 
			
		||||
// Copyright (c) 2015 Andreas Neue <an@dnix.de>
 | 
			
		||||
 | 
			
		||||
package main
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"flag"
 | 
			
		||||
	"log"
 | 
			
		||||
	"strings"
 | 
			
		||||
	"time"
 | 
			
		||||
 | 
			
		||||
	"github.com/nickvanw/ircx"
 | 
			
		||||
	"github.com/sorcix/irc"
 | 
			
		||||
 | 
			
		||||
	modfortune "flokatirc/modules/fortune"
 | 
			
		||||
	modnews "flokatirc/modules/news"
 | 
			
		||||
	modsaytime "flokatirc/modules/saytime"
 | 
			
		||||
	modsc "flokatirc/modules/sc"
 | 
			
		||||
	modstoll "flokatirc/modules/stoll"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
var (
 | 
			
		||||
	name     = flag.String("name", "Flokati", "Nickname to use")
 | 
			
		||||
	server   = flag.String("server", "chat.freenode.org:6667", "Host:Port to connect to")
 | 
			
		||||
	channels = flag.String("chan", "#test", "Channels to join")
 | 
			
		||||
	nsname   = flag.String("nsname", "NickServ", "NickServ name")
 | 
			
		||||
	nspass   = flag.String("nspass", "", "NickServ password")
 | 
			
		||||
	modules  = flag.String("modules", "news,starcitizen,fortune,saytime", "Module list, comma separated")
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func init() {
 | 
			
		||||
	flag.Parse()
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func main() {
 | 
			
		||||
	sayCh := make(chan string, 1024)
 | 
			
		||||
 | 
			
		||||
	//bot := ircx.Classic(*server, *name)
 | 
			
		||||
	cfg := ircx.Config{User: *name, MaxRetries: 10}
 | 
			
		||||
	bot := ircx.New(*server, *name, cfg)
 | 
			
		||||
	log.Println("Logging in")
 | 
			
		||||
	if err := bot.Connect(); err != nil {
 | 
			
		||||
		log.Panicln("Unable to dial IRC Server:", err)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	//mods := strings.Split(*modules, ",")
 | 
			
		||||
	//TODO: implement more robust list parsing
 | 
			
		||||
 | 
			
		||||
	//XXX: this sucks
 | 
			
		||||
	if strings.Contains(*modules, "news") {
 | 
			
		||||
		go modnews.Init(sayCh, "newsfeeds.conf")
 | 
			
		||||
	}
 | 
			
		||||
	if strings.Contains(*modules, "starcitizen") {
 | 
			
		||||
		go modsc.Init(sayCh)
 | 
			
		||||
	}
 | 
			
		||||
	if strings.Contains(*modules, "fortune") {
 | 
			
		||||
		go modfortune.Init(sayCh)
 | 
			
		||||
	}
 | 
			
		||||
	if strings.Contains(*modules, "stoll") {
 | 
			
		||||
		go modstoll.Init(sayCh)
 | 
			
		||||
	}
 | 
			
		||||
	if strings.Contains(*modules, "saytime") {
 | 
			
		||||
		go modsaytime.Init(sayCh)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	go func() {
 | 
			
		||||
		for {
 | 
			
		||||
			var targets string
 | 
			
		||||
			line := strings.Split(<-sayCh, "\n")
 | 
			
		||||
			if len(line) < 2 {
 | 
			
		||||
				continue
 | 
			
		||||
			}
 | 
			
		||||
			if line[0] != "*" {
 | 
			
		||||
				targets = line[0]
 | 
			
		||||
			} else {
 | 
			
		||||
				targets = *channels
 | 
			
		||||
			}
 | 
			
		||||
			for _, tar := range strings.Split(targets, ",") {
 | 
			
		||||
				bot.Sender.Send(&irc.Message{
 | 
			
		||||
					Command:  irc.PRIVMSG,
 | 
			
		||||
					Params:   []string{tar},
 | 
			
		||||
					Trailing: line[1],
 | 
			
		||||
				})
 | 
			
		||||
				time.Sleep(1 * time.Second)
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	}()
 | 
			
		||||
 | 
			
		||||
	RegisterHandlers(bot)
 | 
			
		||||
	bot.HandleLoop()
 | 
			
		||||
	log.Println("Exiting")
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func RegisterHandlers(bot *ircx.Bot) {
 | 
			
		||||
	log.Println("Registering handlers")
 | 
			
		||||
	bot.HandleFunc(irc.RPL_WELCOME, RegisterConnect)
 | 
			
		||||
	bot.HandleFunc(irc.PING, PingHandler)
 | 
			
		||||
	bot.HandleFunc(irc.PRIVMSG, PrivmsgHandler)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func RegisterConnect(s ircx.Sender, m *irc.Message) {
 | 
			
		||||
	if *nspass != "" {
 | 
			
		||||
		log.Printf("Authenticating with NickServ: %v, %v", *name, *nspass)
 | 
			
		||||
		s.Send(&irc.Message{
 | 
			
		||||
			Command:  irc.PRIVMSG,
 | 
			
		||||
			Params:   []string{*nsname},
 | 
			
		||||
			Trailing: "IDENTIFY " + *name + " " + *nspass,
 | 
			
		||||
		})
 | 
			
		||||
	}
 | 
			
		||||
	log.Printf("Joining channels: %v", *channels)
 | 
			
		||||
	for _, ch := range strings.Split(*channels, ",") {
 | 
			
		||||
		s.Send(&irc.Message{
 | 
			
		||||
			Command: irc.JOIN,
 | 
			
		||||
			Params:  []string{ch},
 | 
			
		||||
		})
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func PingHandler(s ircx.Sender, m *irc.Message) {
 | 
			
		||||
	log.Println("PingPong")
 | 
			
		||||
	s.Send(&irc.Message{
 | 
			
		||||
		Command:  irc.PONG,
 | 
			
		||||
		Params:   m.Params,
 | 
			
		||||
		Trailing: m.Trailing,
 | 
			
		||||
	})
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func PrivmsgHandler(s ircx.Sender, m *irc.Message) {
 | 
			
		||||
	//TODO: implement message handler table
 | 
			
		||||
	modsc.HandleMessage(m)
 | 
			
		||||
	modfortune.HandleMessage(m)
 | 
			
		||||
	modstoll.HandleMessage(m)
 | 
			
		||||
	modsaytime.HandleMessage(m)
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										53
									
								
								modules/fortune/fortune.go
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										53
									
								
								modules/fortune/fortune.go
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,53 @@
 | 
			
		|||
// vim:ts=4:sts=4:sw=4:noet:tw=72
 | 
			
		||||
 | 
			
		||||
package fortune
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"bytes"
 | 
			
		||||
	"fmt"
 | 
			
		||||
	"log"
 | 
			
		||||
	"os/exec"
 | 
			
		||||
	"strings"
 | 
			
		||||
 | 
			
		||||
	"github.com/sorcix/irc"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
var (
 | 
			
		||||
	sayCh chan string
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func Init(ch chan string) {
 | 
			
		||||
	log.Println("Initializing fortune module")
 | 
			
		||||
	sayCh = ch
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func HandleMessage(m *irc.Message) {
 | 
			
		||||
	tok := strings.Split(m.Trailing, " ")
 | 
			
		||||
	if len(tok) < 1 {
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	switch tok[0] {
 | 
			
		||||
	case "!fortune":
 | 
			
		||||
		fortune()
 | 
			
		||||
	default:
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func fortune() {
 | 
			
		||||
	cmd := exec.Command("/usr/games/fortune", "/flokatirc/fortunes/")
 | 
			
		||||
	var out bytes.Buffer
 | 
			
		||||
	cmd.Stdout = &out
 | 
			
		||||
	err := cmd.Run()
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		println(err)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	s := out.String()
 | 
			
		||||
	s = strings.Replace(s, "\r", "", -1)
 | 
			
		||||
	s = strings.Replace(s, "\t", "  ", -1)
 | 
			
		||||
	for _, l := range strings.Split(s, "\n") {
 | 
			
		||||
		if l != "" {
 | 
			
		||||
			sayCh <- fmt.Sprintf("*\n%s", l)
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										76
									
								
								modules/news/news.go
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										76
									
								
								modules/news/news.go
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,76 @@
 | 
			
		|||
// vim:ts=4:sts=4:sw=4:noet:tw=72
 | 
			
		||||
//
 | 
			
		||||
// This code is mostly derived from the example code by Jim Teeuwen
 | 
			
		||||
// and is subject to the CC0 1.0 Universal (CC0 1.0) Public Domain Dedication
 | 
			
		||||
// license.
 | 
			
		||||
 | 
			
		||||
package news
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"bufio"
 | 
			
		||||
	"errors"
 | 
			
		||||
	"fmt"
 | 
			
		||||
	"io"
 | 
			
		||||
	"log"
 | 
			
		||||
	"os"
 | 
			
		||||
	"time"
 | 
			
		||||
 | 
			
		||||
	rss "github.com/jteeuwen/go-pkg-rss"
 | 
			
		||||
	"github.com/jteeuwen/go-pkg-xmlx"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
var sayCh chan string
 | 
			
		||||
var hideOutput = true
 | 
			
		||||
 | 
			
		||||
func Init(ch chan string, path string) {
 | 
			
		||||
	log.Printf("Initializing news module")
 | 
			
		||||
	sayCh = ch
 | 
			
		||||
	file, err := os.Open(path)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		log.Fatal(err)
 | 
			
		||||
	}
 | 
			
		||||
	defer file.Close()
 | 
			
		||||
	scanner := bufio.NewScanner(file)
 | 
			
		||||
	<-time.After(60 * time.Second)
 | 
			
		||||
	for scanner.Scan() {
 | 
			
		||||
		go PollFeed(scanner.Text(), 5, charsetReader)
 | 
			
		||||
	}
 | 
			
		||||
	if err := scanner.Err(); err != nil {
 | 
			
		||||
		log.Fatal(err)
 | 
			
		||||
	}
 | 
			
		||||
	time.Sleep(60 * time.Second)
 | 
			
		||||
	hideOutput = false
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func PollFeed(uri string, timeout int, cr xmlx.CharsetFunc) {
 | 
			
		||||
	feed := rss.New(timeout, true, chanHandler, itemHandler)
 | 
			
		||||
	for {
 | 
			
		||||
		log.Printf("Polling feed: %s", uri)
 | 
			
		||||
		if err := feed.Fetch(uri, cr); err != nil {
 | 
			
		||||
			log.Printf("[e] %s: %s", "*", uri, err)
 | 
			
		||||
			//sayCh <- fmt.Sprintf("%s\n[e] %s: %s", "*", uri, err)
 | 
			
		||||
			return
 | 
			
		||||
		}
 | 
			
		||||
		<-time.After(time.Duration(feed.SecondsTillUpdate() * 1e9))
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func chanHandler(feed *rss.Feed, newchannels []*rss.Channel) {
 | 
			
		||||
	//sayCh <- fmt.Sprintf("%s\n%d new channel(s) in %s", "*", len(newchannels), feed.Url)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func itemHandler(feed *rss.Feed, ch *rss.Channel, newitems []*rss.Item) {
 | 
			
		||||
	if hideOutput {
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	for _, ni := range newitems {
 | 
			
		||||
		sayCh <- fmt.Sprintf("%s\n*** [NEWS] %v - %v", "*", ni.Title, ni.Links[0].Href)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func charsetReader(charset string, r io.Reader) (io.Reader, error) {
 | 
			
		||||
	if charset == "ISO-8859-1" || charset == "iso-8859-1" {
 | 
			
		||||
		return r, nil
 | 
			
		||||
	}
 | 
			
		||||
	return nil, errors.New("Unsupported character set encoding: " + charset)
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										84
									
								
								modules/saytime/saytime.go
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										84
									
								
								modules/saytime/saytime.go
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,84 @@
 | 
			
		|||
// vi:ts=4:sts=4:sw=4:noet:tw=72
 | 
			
		||||
 | 
			
		||||
package sc
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"fmt"
 | 
			
		||||
	"log"
 | 
			
		||||
	"strings"
 | 
			
		||||
	"time"
 | 
			
		||||
 | 
			
		||||
	"github.com/sorcix/irc"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
var sayCh chan string
 | 
			
		||||
 | 
			
		||||
func Init(ch chan string) {
 | 
			
		||||
	log.Println("Initializing saytime module")
 | 
			
		||||
	sayCh = ch
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func HandleMessage(m *irc.Message) {
 | 
			
		||||
	tok := strings.Split(m.Trailing, " ")
 | 
			
		||||
	if len(tok) < 1 {
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	switch tok[0] {
 | 
			
		||||
	case "!time":
 | 
			
		||||
		show()
 | 
			
		||||
	//case "!q":
 | 
			
		||||
	//	show()
 | 
			
		||||
	default:
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func show() {
 | 
			
		||||
	t := time.Now()
 | 
			
		||||
	h := t.Hour()
 | 
			
		||||
	tzcorrect := 1
 | 
			
		||||
	h = h + tzcorrect
 | 
			
		||||
	m := t.Minute()
 | 
			
		||||
	s := "Es ist "
 | 
			
		||||
	switch {
 | 
			
		||||
	case m < 3:
 | 
			
		||||
		s += fmt.Sprintf("%s Uhr\n", sayhour(h))
 | 
			
		||||
	case m < 8:
 | 
			
		||||
		s += fmt.Sprintf("fünf nach %s\n", sayhour(h))
 | 
			
		||||
	case m < 13:
 | 
			
		||||
		s += fmt.Sprintf("zehn nach %s\n", sayhour(h))
 | 
			
		||||
	case m < 18:
 | 
			
		||||
		s += fmt.Sprintf("viertel nach %s\n", sayhour(h))
 | 
			
		||||
	case m < 23:
 | 
			
		||||
		s += fmt.Sprintf("zwanzig nach %s\n", sayhour(h))
 | 
			
		||||
	case m < 28:
 | 
			
		||||
		s += fmt.Sprintf("fünf vor halb %s\n", sayhour(h+1))
 | 
			
		||||
	case m < 33:
 | 
			
		||||
		s += fmt.Sprintf("halb %s\n", sayhour(h+1))
 | 
			
		||||
	case m < 38:
 | 
			
		||||
		s += fmt.Sprintf("fünf nach halb %s\n", sayhour(h+1))
 | 
			
		||||
	case m < 43:
 | 
			
		||||
		s += fmt.Sprintf("zehn nach halb %s\n", sayhour(h+1))
 | 
			
		||||
	case m < 48:
 | 
			
		||||
		s += fmt.Sprintf("viertel vor %s\n", sayhour(h+1))
 | 
			
		||||
	case m < 53:
 | 
			
		||||
		s += fmt.Sprintf("zehn vor %s\n", sayhour(h+1))
 | 
			
		||||
	case m < 58:
 | 
			
		||||
		s += fmt.Sprintf("fünf vor %s\n", sayhour(h+1))
 | 
			
		||||
	default:
 | 
			
		||||
		s += fmt.Sprintf("%s Uhr\n", sayhour(h+1))
 | 
			
		||||
	}
 | 
			
		||||
	sayCh <- fmt.Sprintf("*\n%s", s)
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func sayhour(h int) string {
 | 
			
		||||
	words := [...]string{"zwölf", "eins", "zwei", "drei", "vier", "fünf", "sechs", "sieben", "acht", "neun", "zehn", "elf"}
 | 
			
		||||
	for {
 | 
			
		||||
		if h > 11 {
 | 
			
		||||
			h = h - 12
 | 
			
		||||
		} else {
 | 
			
		||||
			break
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	return words[h]
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										223
									
								
								modules/sc/sc.go
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										223
									
								
								modules/sc/sc.go
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,223 @@
 | 
			
		|||
// vim:ts=4:sts=4:sw=4:noet:tw=72
 | 
			
		||||
 | 
			
		||||
package sc
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"encoding/json"
 | 
			
		||||
	"fmt"
 | 
			
		||||
	"io/ioutil"
 | 
			
		||||
	"log"
 | 
			
		||||
	"net/http"
 | 
			
		||||
	"net/url"
 | 
			
		||||
	"regexp"
 | 
			
		||||
	"strconv"
 | 
			
		||||
	"strings"
 | 
			
		||||
	"time"
 | 
			
		||||
 | 
			
		||||
	"flokatirc/util"
 | 
			
		||||
 | 
			
		||||
	"github.com/sorcix/irc"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
const (
 | 
			
		||||
	API_URL       = "https://robertsspaceindustries.com/api"
 | 
			
		||||
	API_METHOD    = "/stats/getCrowdfundStats"
 | 
			
		||||
	QUERY_CIT_URL = "https://robertsspaceindustries.com/citizens/"
 | 
			
		||||
	QUERY_ORG_URL = "https://robertsspaceindustries.com/orgs/"
 | 
			
		||||
	RE_CIT_NAME   = `<div class="info">\s*<p class="entry">\s*<strong class="value">(.*)</strong>\s*</p>\s*<p class="entry">`
 | 
			
		||||
	RE_CIT_RECORD = `<p class="entry citizen-record">\s*<span class="label">UEE Citizen Record</span>\s*<strong class="value">#(.*)</strong>`
 | 
			
		||||
	RE_CIT_HANDLE = `<p class="entry">\s*<span class="label">Handle name</span>\s*<strong class="value">(.*)</strong>\s*</p>`
 | 
			
		||||
	RE_CIT_ORG    = `<a href=.*orgs.*class=.*style=.*background-position.*px center.*>(.*)</a>`
 | 
			
		||||
	RE_CIT_SID    = `Spectrum Identification \(SID\)</span>\s*<strong class="value data.*">([A-Z0-9]*)</strong>`
 | 
			
		||||
	RE_CIT_RANK   = `Organization rank</span>\s*<strong class="value data.*">(.*)</strong>`
 | 
			
		||||
	RE_ORG_NAME   = `<h1>(.*) ?/ ?<span class="symbol">`
 | 
			
		||||
	RE_ORG_COUNT  = `<span class="count">(.*) member`
 | 
			
		||||
	RE_ORG_MODEL  = `<li class="model">(.*)</li>`
 | 
			
		||||
	RE_ORG_FOCUS  = `<ul class="focus clearfix">\s*<li class="primary tooltip-wrap">\s*<img src=".*" alt=".*" />\s*<div class="rsi-tooltip">\s*<div class="content">(.*)</div>\s*<span class="bottom"></span>\s*</div>\s*</li>\s*<li class="secondary tooltip-wrap">\s*<img src=".*" alt=".*" />\s*<div class="rsi-tooltip">\s*<div class="content">(.*)</div>\s*<span class="bottom"></span>\s*</div>\s*</li>\s*</ul>`
 | 
			
		||||
	RE_ORG_COMM   = `<li class="commitment">(.*)</li>`
 | 
			
		||||
	FANS_INT      = 1000
 | 
			
		||||
	FLEET_INT     = 1000
 | 
			
		||||
	FUNDS_INT     = 10000
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
var (
 | 
			
		||||
	sayCh chan string
 | 
			
		||||
	fans  = 0
 | 
			
		||||
	fleet = 0
 | 
			
		||||
	funds = 0
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func Init(ch chan string) {
 | 
			
		||||
	log.Println("Initializing sc module")
 | 
			
		||||
	sayCh = ch
 | 
			
		||||
	go scrapeLoop()
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func HandleMessage(m *irc.Message) {
 | 
			
		||||
	tok := strings.Split(m.Trailing, " ")
 | 
			
		||||
	if len(tok) < 1 {
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	switch tok[0] {
 | 
			
		||||
	case "!scstats":
 | 
			
		||||
		showScStats()
 | 
			
		||||
	case "!cit":
 | 
			
		||||
		if len(tok) > 1 {
 | 
			
		||||
			showCitizen(tok[1])
 | 
			
		||||
		}
 | 
			
		||||
	case "!org":
 | 
			
		||||
		if len(tok) > 1 {
 | 
			
		||||
			showOrganization(tok[1])
 | 
			
		||||
		}
 | 
			
		||||
	default:
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func toInt(v interface{}) int {
 | 
			
		||||
	switch v.(type) {
 | 
			
		||||
	case int:
 | 
			
		||||
		return v.(int)
 | 
			
		||||
	case float64:
 | 
			
		||||
		return int(v.(float64))
 | 
			
		||||
	case string:
 | 
			
		||||
		ret, _ := strconv.Atoi(v.(string))
 | 
			
		||||
		return ret
 | 
			
		||||
	default:
 | 
			
		||||
		return 0
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func scrapeLoop() {
 | 
			
		||||
	for {
 | 
			
		||||
		scraper()
 | 
			
		||||
		time.Sleep(1 * time.Minute)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func scraper() {
 | 
			
		||||
	var data interface{}
 | 
			
		||||
 | 
			
		||||
	log.Println("Scraping SC stats")
 | 
			
		||||
	resp, err := http.PostForm(API_URL+API_METHOD,
 | 
			
		||||
		url.Values{"fans": {"true"}, "fleet": {"true"}, "funds": {"true"}})
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		log.Printf("Error: %v", err)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	defer resp.Body.Close()
 | 
			
		||||
	body, err := ioutil.ReadAll(resp.Body)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		log.Printf("Error: %v", err)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	err = json.Unmarshal(body, &data)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		log.Printf("Error: %v", err)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	stats := data.(map[string]interface{})["data"].(map[string]interface{})
 | 
			
		||||
	//fmt.Println(stats["fans"].(type))
 | 
			
		||||
	curFans := toInt(stats["fans"])
 | 
			
		||||
	curFleet := toInt(stats["fleet"])
 | 
			
		||||
	curFunds := toInt(stats["funds"]) / 100
 | 
			
		||||
 | 
			
		||||
	nextFans := ((fans / FANS_INT) * FANS_INT) + FANS_INT
 | 
			
		||||
	nextFleet := ((fleet / FLEET_INT) * FLEET_INT) + FLEET_INT
 | 
			
		||||
	nextFunds := ((funds / FUNDS_INT) * FUNDS_INT) + FUNDS_INT
 | 
			
		||||
 | 
			
		||||
	if curFans >= nextFans {
 | 
			
		||||
		sayCh <- "*\n*** [SC] Star Citizens: " + util.NumberToString(curFans, '.')
 | 
			
		||||
	}
 | 
			
		||||
	if curFleet >= nextFleet {
 | 
			
		||||
		sayCh <- "*\n*** [SC] The UEE Fleet: " + util.NumberToString(curFleet, '.')
 | 
			
		||||
	}
 | 
			
		||||
	if curFunds >= nextFunds {
 | 
			
		||||
		sayCh <- "*\n*** [SC] Funds raised: " + util.NumberToString(curFunds, '.')
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	fans = curFans
 | 
			
		||||
	fleet = curFleet
 | 
			
		||||
	funds = curFunds
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func showScStats() {
 | 
			
		||||
	sayCh <- "*\n*** SC User and Funding Stats ###"
 | 
			
		||||
	sayCh <- fmt.Sprintf("*\nFans: %s", util.NumberToString(fans, '.'))
 | 
			
		||||
	sayCh <- fmt.Sprintf("*\nFleet: %s", util.NumberToString(fleet, '.'))
 | 
			
		||||
	sayCh <- fmt.Sprintf("*\nFunds: $ %s", util.NumberToString(funds, '.'))
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func showCitizen(handle string) {
 | 
			
		||||
	resp, err := http.Get(QUERY_CIT_URL + handle)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		log.Printf("Error: %v", err)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	defer resp.Body.Close()
 | 
			
		||||
	body, err := ioutil.ReadAll(resp.Body)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		log.Printf("Error: %v", err)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	reName := regexp.MustCompile(RE_CIT_NAME)
 | 
			
		||||
	reRecord := regexp.MustCompile(RE_CIT_RECORD)
 | 
			
		||||
	reHandle := regexp.MustCompile(RE_CIT_HANDLE)
 | 
			
		||||
	reOrg := regexp.MustCompile(RE_CIT_ORG)
 | 
			
		||||
	reSid := regexp.MustCompile(RE_CIT_SID)
 | 
			
		||||
	reRank := regexp.MustCompile(RE_CIT_RANK)
 | 
			
		||||
	name := reName.FindStringSubmatch(string(body))
 | 
			
		||||
	record := reRecord.FindStringSubmatch(string(body))
 | 
			
		||||
	handle_ := reHandle.FindStringSubmatch(string(body))
 | 
			
		||||
	org := reOrg.FindStringSubmatch(string(body))
 | 
			
		||||
	sid := reSid.FindStringSubmatch(string(body))
 | 
			
		||||
	rank := reRank.FindStringSubmatch(string(body))
 | 
			
		||||
	if len(name) > 1 {
 | 
			
		||||
		sayCh <- "*\n*** Citizen Info ***"
 | 
			
		||||
		sayCh <- "*\n" + "Name: " + string(name[1]) + " [" + string(handle_[1]) + "]"
 | 
			
		||||
		sayCh <- "*\n" + "URL: " + QUERY_CIT_URL + string(handle_[1])
 | 
			
		||||
		sayCh <- "*\n" + "UEE #: " + string(record[1])
 | 
			
		||||
		if len(org) > 1 {
 | 
			
		||||
			sayCh <- "*\n" + "Organization: " + string(org[1]) + " [" + string(sid[1]) + "]"
 | 
			
		||||
			sayCh <- "*\n" + "Rank: " + string(rank[1])
 | 
			
		||||
		} else {
 | 
			
		||||
			sayCh <- "*\n" + "Organization: <none>"
 | 
			
		||||
		}
 | 
			
		||||
	} else {
 | 
			
		||||
		sayCh <- "*\n" + "*** No Such Citizen ***"
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func showOrganization(handle string) {
 | 
			
		||||
	resp, err := http.Get(QUERY_ORG_URL + handle)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		log.Printf("Error: %v", err)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	defer resp.Body.Close()
 | 
			
		||||
	body, err := ioutil.ReadAll(resp.Body)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		log.Printf("Error: %v", err)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	reName := regexp.MustCompile(RE_ORG_NAME)
 | 
			
		||||
	reCount := regexp.MustCompile(RE_ORG_COUNT)
 | 
			
		||||
	reModel := regexp.MustCompile(RE_ORG_MODEL)
 | 
			
		||||
	reFocus := regexp.MustCompile(RE_ORG_FOCUS)
 | 
			
		||||
	reComm := regexp.MustCompile(RE_ORG_COMM)
 | 
			
		||||
	name := reName.FindStringSubmatch(string(body))
 | 
			
		||||
	count := reCount.FindStringSubmatch(string(body))
 | 
			
		||||
	model := reModel.FindStringSubmatch(string(body))
 | 
			
		||||
	focus := reFocus.FindStringSubmatch(string(body))
 | 
			
		||||
	comm := reComm.FindStringSubmatch(string(body))
 | 
			
		||||
	if len(name) > 1 {
 | 
			
		||||
		sayCh <- "*\n*** Organization Info ***"
 | 
			
		||||
		sayCh <- "*\nName: " + string(name[1]) + " [" + strings.ToUpper(handle) + "]"
 | 
			
		||||
		sayCh <- "*\nURL: " + QUERY_ORG_URL + strings.ToUpper(handle)
 | 
			
		||||
		sayCh <- "*\nMembers: " + string(count[1])
 | 
			
		||||
		sayCh <- "*\nModel: " + string(model[1])
 | 
			
		||||
		sayCh <- "*\nCommitment: " + string(comm[1])
 | 
			
		||||
		sayCh <- "*\nFocus: " + string(focus[1]) + ", " + string(focus[2])
 | 
			
		||||
	} else {
 | 
			
		||||
		sayCh <- "*\n*** No Such Organization ***"
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										548
									
								
								modules/stoll/stoll.go
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										548
									
								
								modules/stoll/stoll.go
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,548 @@
 | 
			
		|||
// vi:ts=4:sts=4:sw=4:noet:tw=72
 | 
			
		||||
 | 
			
		||||
package stoll
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"fmt"
 | 
			
		||||
	"math/rand"
 | 
			
		||||
	"strings"
 | 
			
		||||
	"time"
 | 
			
		||||
 | 
			
		||||
	"github.com/sorcix/irc"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
var quotes = [][]string{
 | 
			
		||||
	{
 | 
			
		||||
		"Woher die Reptos kommen ist mir auch bekannt.",
 | 
			
		||||
		"Klaus Böhme, das ist derjenige, der hocheffiziente BHKWs (...) baut, mittels Braunsgas, also kalte Fusion.",
 | 
			
		||||
		"Gerichte und Polizei sind für mich Fremdwörter.",
 | 
			
		||||
		"Ich hab den Schutz der Dritten Macht!",
 | 
			
		||||
		"Ich genieße den Templerschutz und den Schutz der National Security Eygenzi.",
 | 
			
		||||
		"Fußball... Gotteswillen - Opium fürs Volk saggich nur. Brot und Spiele. Iss was für Bekloppte.",
 | 
			
		||||
		"Was ist denn das für Musik?",
 | 
			
		||||
		"Wer GEZ zahlt ist selber dämlich.",
 | 
			
		||||
		"Helmut kommt - vom Klo, aber er kommt.",
 | 
			
		||||
		"Geht mal ins Internet, Google-Suchmaschine, und gebt den Begriff Skalarwellen ein.",
 | 
			
		||||
		"In sekundenschnelle zu anderen Fixsternen.",
 | 
			
		||||
		"Gedanken sind infometrische Felder.",
 | 
			
		||||
		"Was machst du denn da wieder fürn Ödeldödel?!", "Negativmagnetismus, was ist das denn wieder, Helmut?",
 | 
			
		||||
		"Die Zahl 12 - auch ne kosmische Zahl.",
 | 
			
		||||
		"Primzahlen bis 1024 werden in der Computertechnik benutzt.",
 | 
			
		||||
		"Ich selber bin ein stinkenfauler Mensch was körperliche Arbeit angeht.",
 | 
			
		||||
		"Jetzt kommen wir zur Wetterbeeinflussung und -kriegsführung durch Skalarwellen.",
 | 
			
		||||
		"Quarz als Skalarwelleninterferometer.",
 | 
			
		||||
		"Bei mir in der Energiegruppe, die Leute, die nicht in der Lage sind ein einfaches Integral zu lösen, die schmeiße ich gnadenlos schon raus.",
 | 
			
		||||
		"Wisst Ihr eigentlich, wie die Dekadenz programmiert ist?",
 | 
			
		||||
		"Weisste was die Primzahlen bedeuten? Einen Torus - raum-zeitlich gesehen.",
 | 
			
		||||
		"Physik – 2/3 schrott.",
 | 
			
		||||
		"Wurzelrechnung... lächerlich.",
 | 
			
		||||
		"Ich bin auch ein Anhänger der Kataklysmen-Theorie.",
 | 
			
		||||
		"Darwin, Jude... klar. Da wurde die Biologie versaut – Einstein, Jude... die Physik wurde versaut, so kann ich das ganze Gebäude durchgehen.",
 | 
			
		||||
		"Wird sind die fünfte Wurzelrasse, die arische.",
 | 
			
		||||
		"Die erste Wurzelrasse war die Polarrasse.",
 | 
			
		||||
		"Was richtet Luft an? Tornados!",
 | 
			
		||||
		"Die Velociraptoren (…) hatte eine eigene Sprache, aus denen entstammen vermutlich die Reptos, iss so.",
 | 
			
		||||
		"Mann muss immer den Ursprung erkennen - den Algorithmus, meine Damen, meine Herren.",
 | 
			
		||||
		"Es hat überhaupt keinen Sinn - der Tod überrascht Jeden!",
 | 
			
		||||
		"Ich kann mich in sekundenschnelle mit anderen Sternensystemen, Galaxien informieren.",
 | 
			
		||||
		"Heute werden wir über HAARP, sprich Wetterkriegsführung sprechen.",
 | 
			
		||||
		"Von wegen das Märchen über die desolate russische Armee - da kann ich nur lachen!",
 | 
			
		||||
		"Es gibt keine feste Materie - das ist ein Trugschluss.",
 | 
			
		||||
		"Mathematik ist die Sprache des Universums, der Intelligenz und erspart mir 1000 Seiten zu lesen.",
 | 
			
		||||
		"Es rollen sich mir die Fussnägel auf, wenn ich ins Internet gehe und gucke unter Skalarwelle.",
 | 
			
		||||
		"Eine gewöhnliche DILLGURKE – habter das gehört!",
 | 
			
		||||
		"Wenn ich meine bisheriges Leben betrachte, dann stelle ich fest, dass es Höhen und Tiefen gab.",
 | 
			
		||||
		"Wir hatten den ersten Videorekorder der Welt.",
 | 
			
		||||
		"Mein nächstes Buch ist auch schon fertig: Die schwarze Macht.",
 | 
			
		||||
		"Die schwarze Macht – da geht es um Templerwissen und um das Deutsche Reich.",
 | 
			
		||||
		"Wir hatten die erste Polaroid-Kamera – allerdings S/W-Aufnahmen.",
 | 
			
		||||
		"Wir hatten Bildtelefon. Da konnte man zu bestimmten Städten telefonieren und sah sein Gegenüber – für 50 Reichspfennige.",
 | 
			
		||||
		"Sämtliche Naturwissenschaften Eins, wie sich das gehört.",
 | 
			
		||||
		"Mein Kampf gegen die Lügen der Alliierten – das war der Grundstein.",
 | 
			
		||||
		"Die ABC-Waffen gingen alle durch meine Hand, also Massenvernichtungswaffen.",
 | 
			
		||||
		"Die Wende war nicht plötzlich, die wurde schon von den Zionisten 1899 geplant – von den Illuminaten.",
 | 
			
		||||
		"Alle 100 Jahre findet ein großer Illuminati-Kongress statt, da werden die Ziele für die nächsten 100 Jahre gesteckt, auch der Euro.",
 | 
			
		||||
		"Heute werden wir über HAARP, sprich Wetterkriegsführung sprechen.",
 | 
			
		||||
		"Wir haben mit Braunsgas gearbeitet.",
 | 
			
		||||
		"Wir haben Blei verwandelt in Gold und Silber, Platin.",
 | 
			
		||||
		"Wir haben versucht Quetschmetall aus den Vril-Werkstätten zum schmelzen zu bringen.",
 | 
			
		||||
		"Quetschmetall wurde auch verwendet für Plasma-Antrieben von reichsdeutschen Flugscheiben.",
 | 
			
		||||
		"Napoleon Bonaparte ist auch eines meine Vorbilder, Militärisch.",
 | 
			
		||||
		"Konfuzius, das ist der Status Quo.",
 | 
			
		||||
		"Für die Templermitglieder, Bernd? Nächsten Sonnabend, Roseneck – ab 18:00 Uhr, weisse bescheid?",
 | 
			
		||||
		"Wenn man seine Katze in den Mikrowellenherd zum Trocknen reinschiebt, sieht man die Wirkung am Besten.",
 | 
			
		||||
		"Man kann davon ausgehen, dass in jedem Neubaublock einer mit Mikrowelle experimentiert.",
 | 
			
		||||
		"Gegen Skalarwellen haben sie die Arschkarte - also die goldene.",
 | 
			
		||||
		"Es kommen gigantische Umwälzungen auf uns zu.",
 | 
			
		||||
		"Die Sowjets gackern nicht, bevor das Ei gelegt ist.",
 | 
			
		||||
		"Man steckt erst richtig drin im Wissen, wenn man auch einer Klofrau das Raum/Zeit-Gefüge erklären kann.",
 | 
			
		||||
		"Viehzeug muss gepudert werden!",
 | 
			
		||||
		"Sie können alles was gelehrt wird zu 90% vergessen, noch...  noch mehr!",
 | 
			
		||||
		"Es gibt Evolution heißt AUS-wicklung, alles schon da gewesen.",
 | 
			
		||||
		"Wer von euch kennt die theosophische Lehre?",
 | 
			
		||||
		"Nach der lemurischen Rasse, folgte das atlantische Imperium.",
 | 
			
		||||
		"Die ursprünglichen Wesenheiten waren die Reptos, die ich persönlich sehr mag.",
 | 
			
		||||
		"Die Reptos auch, die haben sich nur unterirdisch verlagert durch den Einschlag.",
 | 
			
		||||
		"Die fette Kuh erhebt sich.. sehr schön. Na iss doch wahr.",
 | 
			
		||||
		"Ich habe so viel Chaoten in letzter Zeit kennen gelernt, also... Schade um die Zeit, da hätte ich schon hundert Differentialgleichungen lösen können.",
 | 
			
		||||
		"Jetzt kommen wir zum Schluss der heutigen Lektion.",
 | 
			
		||||
		"Woher sollen die Rassen, Negroid und Asiatit herkommen oder Isaac Krummburg?!",
 | 
			
		||||
		"Altmeister Peter Schmidt, in Front vor mir sitzend.",
 | 
			
		||||
		"Ich liebe Katastrophen!",
 | 
			
		||||
		"Der Mensch ist eine energetische Matrix!",
 | 
			
		||||
		"Ich kann auch radioaktive Strahlung neutralisieren!",
 | 
			
		||||
		"Sie müssen schon Ihren Kopf jetzt zum Denken benutzen und nicht als Hutständer!",
 | 
			
		||||
		"Magie ist Physik durch wollen!",
 | 
			
		||||
		"Deutsche Raumfahrt ab 1934.",
 | 
			
		||||
		"Wir werden ja heute von Hacke bis Nacke belogen.",
 | 
			
		||||
		"Westliche Wertegemeinschaft und Demokratie sind auch aus meinem Wortschatz GE-STRI-CHEN!",
 | 
			
		||||
		"Biologie ist Physik.",
 | 
			
		||||
		"96 Flugzeuge * 60 Minuten * 14 Stunden * 40 Passagiere.",
 | 
			
		||||
		"Während des dritten Reiches war Nicola Tesla hier zu Besuch.",
 | 
			
		||||
		"Mikrowellenstrahler!",
 | 
			
		||||
		"Grüße aus der 9. Milchstraße.",
 | 
			
		||||
		"Implosionstechnologie!",
 | 
			
		||||
		"Die Sonne ist kalt!",
 | 
			
		||||
		"Es gibt eine Art galaktischer Konföderation in unserer Galaxis.",
 | 
			
		||||
		"Die Tür, ja was ist denn das?",
 | 
			
		||||
		"Das nächste Treffen findet an Führers Geburtstag statt.",
 | 
			
		||||
		"Ich sitze auf der Spitze der Pryramide.",
 | 
			
		||||
		"Handy an die Wand schmeissen, weg damit!",
 | 
			
		||||
		"Was macht die Sonne uns vor, Implosion.",
 | 
			
		||||
		"Das hier ist nichts anderes als ein Strafplanet.",
 | 
			
		||||
		"Es gibt ein Prag - in Bayern.",
 | 
			
		||||
		"Ich kann aber auch, im Rahmen der Wetterkriegsführung, Tornados künstlich erzeugen.",
 | 
			
		||||
		"Die Tür schon wieder!",
 | 
			
		||||
		"Meine Name ist Stoll, ich bin promovierter Naturwissenschaftler.",
 | 
			
		||||
		"Ich befasse mich mit freier Energie.",
 | 
			
		||||
		"Wie kämpfen Reichsdeutsche?",
 | 
			
		||||
		"Um in die innere Hohlwelt zu gelangen, muss ich 4000 km Gesteinsmaterial überwinden.",
 | 
			
		||||
		"Es gibt nur energetische Felder.",
 | 
			
		||||
		"Übrigens, meine Energiegruppe hat auch Kontakt zur Dritten Macht.",
 | 
			
		||||
		"Nichts ist unglaublicher als die Wahrheit.",
 | 
			
		||||
		"Es gibt nur Expansionsstrudel und Implosionsstrudel.",
 | 
			
		||||
		"Unser Universum ist ja ein Perpetuum Mobile.",
 | 
			
		||||
		"Kevin los, schreib das auf!",
 | 
			
		||||
		"Die Geheimbasen des Deutschen Reichs haben auch den Wiederaufbau Westdeutschlands organisiert.",
 | 
			
		||||
		"Todesstrahlen, Todesstrahlen!",
 | 
			
		||||
		"Man sollte sich mit Putin gut stellen - Ich kenne ihn übrigens persönlich, komme mit ihm gut klar.",
 | 
			
		||||
		"Ich bin ein Mensch, wenn ich schon Schnee sehe, kriege ich 'ne Erkaeltung.",
 | 
			
		||||
		"Ich hasse Schnee, ist was fuer dumme Bauern.",
 | 
			
		||||
		"Alles was unter 20 Grad ist, ist fuer mich Frost.",
 | 
			
		||||
		"Arme und Beine bilden eine rotierende Scheibe, die Ohren flattern im Wind und das Arschloch bildet den höchsten Punkt.",
 | 
			
		||||
		"Ich beherrsche die englische Sprache in Wort, Bild und Schrift.",
 | 
			
		||||
		"Die Natur bracht Wirbel.",
 | 
			
		||||
		"Mit Dynamit beginnt man den Tag dynamisch!",
 | 
			
		||||
		"Die Sowjets gackern nicht bevor das Ei gelegt ist.",
 | 
			
		||||
		"Ich lache über Naturkatastrophen, die ich liebe!",
 | 
			
		||||
		"Internet ist ne schöne Waffe.",
 | 
			
		||||
		"Internet ist so viel Schrott!",
 | 
			
		||||
		"Wer kennt Mastodon?",
 | 
			
		||||
		"Namen sind für mich Schall und Rauch, für mich sind Zahlen wesentlich.",
 | 
			
		||||
		"Was wird heute gelernt an den Schulen? Schrott! Müll!",
 | 
			
		||||
		"Wer hat hier Bier, Horst?",
 | 
			
		||||
		"Trilobiten Dreilapp-Krebse, offiziell ausgestorben, hahahaha!",
 | 
			
		||||
		"Unsinnige Talkshows, wenn ich das schon sehe - Uääääh!",
 | 
			
		||||
		"Wir leben in einer Welt von Schwingungen, sprich Frequenzen, und damit korrelierender Wirbelmechanismen!",
 | 
			
		||||
		"Mt diesem Braungas haben wir auch Elementtransmutationen vollbracht, allerdings machen wir das jetzt eleganter, mit einer Art Kaltlaser",
 | 
			
		||||
		"3 mal Storgram reinen Alkohol! Das schirmt gegen radioaktive Strahlung ab.",
 | 
			
		||||
		"Wer kennt die Maxwell'schen Gleichungen?",
 | 
			
		||||
		"WAFFENSYSTEME! Da wirds interessant!",
 | 
			
		||||
		"Ein dummes Volk lässt sich leichter beherrschen.",
 | 
			
		||||
		"Lass das Flugzeug auf ein Wohnhaus stürzen, dann haste auch die Arschkarte.",
 | 
			
		||||
		"Was sind die Pyramiden, wer weiß das? Schlüssel der Energie!",
 | 
			
		||||
		"Die altindischen Vimanas! Vimanas heißt Fluggerät Sanskrit, flogen mit Quecksilberwirbelmotoren.",
 | 
			
		||||
		"Facebook, das ist alles was für Psychopathen meiner Meinung nach.",
 | 
			
		||||
		"Die jetzige elektromagnetische Theorie, wie sie an Schulen und Universitäten vertreten wird, ist falsch.",
 | 
			
		||||
		"Ich kann Zeit beschleunigen, ich kann Zeit aber auch verlangsamen.",
 | 
			
		||||
		"Täglich sterben tausende von Tierarten aus.",
 | 
			
		||||
		"Wir leben in einer virtuellen Scheinwelt.",
 | 
			
		||||
		"Skalarwellen oder Teslawellen sind eigentlich Wellen des Raum-Zeit-Kontinuums.",
 | 
			
		||||
		"Skalarwellen knallen quer Kontinente und Ozeane.",
 | 
			
		||||
		"Die Russen verfügen über Monsterbomben.",
 | 
			
		||||
		"Am besten einen Stiefel Whisky trinken.",
 | 
			
		||||
		"Zuerst probiert man dekadente Musik in Sydney, Australien aus.",
 | 
			
		||||
		"So schön Waffen sind - es hat keinen Sinn, Gewalt mit Gewalt zu begegnen.",
 | 
			
		||||
		"Man kann mit Skalarwellen experimentiern.",
 | 
			
		||||
		"Wenn man den Algorithmus erkannt hat, und ich hab ihn erkannt, erspare ich mir zehntausende Seiten zu lesen.",
 | 
			
		||||
		"Was bedeutete die Wende für mich? Zunächst einmal nur Nachteile.",
 | 
			
		||||
		"Kurz nach der Wende gründete ich die Fachgruppe Rätsel der Erdgeschichte, die sich auch mit Physik und Paläoastronautik beschäftigte.",
 | 
			
		||||
		"Eines Tages bekam ich in diesem Zusammenhang Kontakt zum Templerorden, wo ich heute leitend tätig bin.",
 | 
			
		||||
		"Licht ist keine Grenzgeschwindigkeit, vorsicht. Skalarwellen und stehende Welle hat ein vielfaches mehr.",
 | 
			
		||||
		"Fußball... Gotteswillen - Opium fürs Volk saggich nur. Brot und Spiele. Iss was für Bekloppte.",
 | 
			
		||||
		"Sportarten guck ich nur das, die ich selbst betrieben habe, bis zur Meisterschaft: Schach, Fechten, Degen, Florett, Schwert, Schießen und Military-Reiten, alles andere kann mich keiner hinterm Ofen vorlocken.", "Angst und Unmöglichkeit sind aus meinem Wortschatz gestrichen.",
 | 
			
		||||
		"Denken Sie zum Beispiel an die pervertierten Loveparade-Diskotheken und vieles mehr.",
 | 
			
		||||
		"Das deutsche Volk verblödet – da gibt es ein Buch im Kopp-Verlag glaubich.",
 | 
			
		||||
		"Unterstes wird zu Oberstes gekehrt.",
 | 
			
		||||
		"Dich meine ich Peter, nicht einschlafen!",
 | 
			
		||||
		"Aus Sicherheitsgründen habe ich keine andere Namen außer meinem genannt – nach dem Motto:",
 | 
			
		||||
	},
 | 
			
		||||
	{
 | 
			
		||||
		"Ganz wichtig, steht auch auf den reichsdeutschen Wissen.", "Im Indo-Pazifik kann man sie lebend finden.",
 | 
			
		||||
		"Dann, (...) die haben mit uns Ähnlichkeit, die lemurische Rasse.",
 | 
			
		||||
		"Was jeder Erdenbürger wissen sollte!",
 | 
			
		||||
		"Das ist wieder ne Sache für sich.",
 | 
			
		||||
		"Das wäre ja dann wie bei der GEZ.",
 | 
			
		||||
		"Die würden bei mir alle in Physik die Note 100 kriegen.",
 | 
			
		||||
		"Das ist wichtig zu wissen.",
 | 
			
		||||
		"Ja, das ist freie Energie.",
 | 
			
		||||
		"Was an der Schule natürlich nicht gelehrt wird und an den Universitäten auch nicht.",
 | 
			
		||||
		"Wir sprechen von infometrischen Feldern.",
 | 
			
		||||
		"Auch ne kosmische Zahl.",
 | 
			
		||||
		"Energielobby, da ham was wieder, hähä!",
 | 
			
		||||
		"Haltet euch fest!",
 | 
			
		||||
		"Wenn andere die Fenster putzen (...), da löse ich partielle Differentialgleichungen.",
 | 
			
		||||
		"Aber Vorsicht bei der Numerologie!",
 | 
			
		||||
		"Tödliche Organwellen.",
 | 
			
		||||
		"Da kann der dämliche Ami nur träumen!",
 | 
			
		||||
		"In Russland nennt man das heute die skalara Haubitze.",
 | 
			
		||||
		"Zigfache Überlichtgeschwindigkeit - ganz wichtig.",
 | 
			
		||||
		"Man kann hinkommen, wo man will - alles Mist!",
 | 
			
		||||
		"Denn die Erde ist ein lebender Organismus, vergesst das nicht.",
 | 
			
		||||
		"Wenn man einmal in den Fängen der Ärzte ist, dann hat man verloren.",
 | 
			
		||||
		"Sie wirken auf der Atomebene, nicht auf der Molekularebene - ganz wichtig.",
 | 
			
		||||
		"Angewandte MaTHEMAtik!",
 | 
			
		||||
		"Und es geht nicht um ein Computer-Weltraum-Spiel!",
 | 
			
		||||
		"Für wie dämlich halten die uns!",
 | 
			
		||||
		"Da komme ich mir vor wie eine tibetanische Gebetsmuehle oder tausend Studenten", "Verbotene Archäologie, das sind insgesamt drei Teile.",
 | 
			
		||||
		"Als Däniken hochkam sein.. der Angehörige vom ZDF wurde erschossen.",
 | 
			
		||||
		"Wasser ist Gift!",
 | 
			
		||||
		"Im Gegensatz zur Involution – EIN-wicklung. Ha! Physik, Physik... hä!",
 | 
			
		||||
		"Wir sind die nächste 4,5 Rasse, ne... die arische.",
 | 
			
		||||
		"Man kann nicht auf allen Hochzeiten tanzen.",
 | 
			
		||||
		"Ich selber bin die graue Eminenz.",
 | 
			
		||||
		"Reste vom atlantischen Empire – das atlantische Imperium.",
 | 
			
		||||
		"Deshalb müssen wir sie mit aufklären.",
 | 
			
		||||
		"Wie heißt er? Peter Fitzek? Hab ich kennen gelernt da.. da schließt sich der Kreis!",
 | 
			
		||||
		"Es gibt dort ne Menge Häkchen und Ösen – man kann geteilter Meinung sein.",
 | 
			
		||||
		"Was da an Mimikry ausgeübt wird (…) das was ja im Tierreich bekannt.",
 | 
			
		||||
		"Ruhe da hinten!",
 | 
			
		||||
		"Auf die Maßeinheiten der Kernphysik hab ich bewusst verzichtet, denn außer mir würde das kaum jemand begreifen.",
 | 
			
		||||
		"Das wird ja an den Schulen nicht mehr gelehrt.",
 | 
			
		||||
		"Das kommt ja erst nächstes mal, da muss man das Gehirn schon arbeiten lassen.",
 | 
			
		||||
		"So sind Höhen ohne Tiefen nicht denkbar – siehe hermetisches Gesetz des Universums.",
 | 
			
		||||
		"Viele Frauen, die machen da Channeling und da kommt nur elektro-magnetischer Müll herüber.",
 | 
			
		||||
		"Ich denke an die Vril-Damen – transmediale Kontakte zum Aldebaran.",
 | 
			
		||||
		"Ich hab auch nur für die Fächer was getan, die mich interessiert haben – gab dann nur Einsen oder Dreien.",
 | 
			
		||||
		"Eine Zeit meiner Sammlertätigkeit begann.",
 | 
			
		||||
		"Ab meinem 14 Lebensjahr verfügte ich bereits über eine beachtliche geologische und gestaltete an Schulen entsprechende Ausstellungen, welche eine hohe Resonanz hatten.",
 | 
			
		||||
		"Seit meinem 15. Lebensjahr wohnte ich in der Reichshauptstadt Berlin.",
 | 
			
		||||
		"Während dieser Zeit besuchte ich zwei Jahre lang die Abendschule, 11. und 12. Klasse, so mal nebenbei.",
 | 
			
		||||
		"Da bin ich übrigens auch Mitglied, Prä-Astronautik- Äntschiens Äh... Ästronaut Society, mit Urkunde (...) und leitete die Uranier-Gruppe Astrophysik.",
 | 
			
		||||
		"Aber man latscht nur einmal auf die Harke.",
 | 
			
		||||
		"In der Kruste! Nicht die innere Hohlwelt! Das ist ein großer Unterschied!",
 | 
			
		||||
		"Mindestens sind das reine Vegetarier, was mir schon sympathisch ist.",
 | 
			
		||||
		"Die ganzen Darwinismus-Lügen.. vergesst es!",
 | 
			
		||||
		"Ja aus´n Negern! (…) Aus Schwarz wird nicht weiß!",
 | 
			
		||||
		"Zu viel Flüssigkeit.. der Regen, der reicht schon.",
 | 
			
		||||
		"Mindcontrol, Bewusstseinskontrolle, versklavte Gehirne und so weiter und so fort.",
 | 
			
		||||
		"Das sind natürlich dann schon fast Superbomben.",
 | 
			
		||||
		"Das sind einzigartige militärische Anwendungen.",
 | 
			
		||||
		"Meine Temperaturen sind 40 Grad plus und 100% Luftfeuchtigkeit.",
 | 
			
		||||
		"Das nennt man KALTE FUSION!",
 | 
			
		||||
		"Die Zusammenhänge sind glasklar!",
 | 
			
		||||
		"Klar?!",
 | 
			
		||||
		"Muss mann wissen!",
 | 
			
		||||
		"Vergessen Sies!",
 | 
			
		||||
		"Bekannt ja?",
 | 
			
		||||
		"Alles andere ist unnötig.",
 | 
			
		||||
		"Wer weiß das? Wieder keiner!",
 | 
			
		||||
		"Sehr Gut!",
 | 
			
		||||
		"Klar, ne?!",
 | 
			
		||||
		"Silentium!",
 | 
			
		||||
		"Ruhe!",
 | 
			
		||||
		"Schwarze Sonne, bekannt!",
 | 
			
		||||
		"So einfach ist das.",
 | 
			
		||||
		"Es gibt keine Zufälle!",
 | 
			
		||||
		"Die Erde ist ja hohl.",
 | 
			
		||||
		"Die lachen uns aus!",
 | 
			
		||||
		"Gemeint ist das organische Germanium 32.",
 | 
			
		||||
		"Unsere Energiegruppe ist in der Lage das künstlich herzustellen.",
 | 
			
		||||
		"Mikrowelle, Skalarwelle!",
 | 
			
		||||
		"Physik, Mathematik, Philosophie.",
 | 
			
		||||
		"Wie sagte noch Napoleon:",
 | 
			
		||||
		"Gibt´s interessante Fachliteratur.",
 | 
			
		||||
		"Flugscheibenkonstrukteur!",
 | 
			
		||||
		"Da werden Sie staunen!",
 | 
			
		||||
		"Muss man natürlich wissen.",
 | 
			
		||||
		"Wissen auch die Wenigsten.",
 | 
			
		||||
		"Den Leuten wird speiübel, die fallen um.",
 | 
			
		||||
		"Gibt es, darf man nicht außer Acht lassen.",
 | 
			
		||||
		"Wie mein Templerbruder vom Altodern Nobert Jürgen-Ratthofer zu sagen pflegte:",
 | 
			
		||||
		"Wisst Ihr was das heißt? Eine Million Jahre?",
 | 
			
		||||
		"Da haben wirs mit einem Satz!",
 | 
			
		||||
		"Ja.. summ summ summ.",
 | 
			
		||||
		"Ich weiß auch mittlerweile auch, wo die Vril Odin (hinge?)startet ist - zum Aldebaran.",
 | 
			
		||||
		"Geht in eine kalte Fusion.",
 | 
			
		||||
		"Und der wurde vom Finanzjudentum auch nur ausgenutzt.",
 | 
			
		||||
		"Dafür musste er sterben.",
 | 
			
		||||
		"Das hat auch die Blawatzki erkannt.",
 | 
			
		||||
		"Die Wurzel aus -1 ist lösbar.",
 | 
			
		||||
		"Was ist denn da wieder los? Wo ist meine Panzerfaust?",
 | 
			
		||||
		"Du erinnerst dich, Peter!?",
 | 
			
		||||
		"Was wir haben, die himmlischen Flugscharen, ne?",
 | 
			
		||||
		"Die weiße Rasse stammt vom Aldebaran, vergesst das nicht!",
 | 
			
		||||
		"Wenn ich jetzt an Yellowstonepark denke, kann bald passieren, herrlich! Ich liebe ja Katastrophen.",
 | 
			
		||||
		"Ich finde Erdbeben schön.",
 | 
			
		||||
		"Wenn sich Risse auftun, ganze PKWs versinken, hehe – herrlich!",
 | 
			
		||||
		"Alles, auch das Universum, ist rhythmisch, zyklisch aufgebaut.",
 | 
			
		||||
		"Es gibt einen energetischen Frühling.",
 | 
			
		||||
		"So muss das sein!",
 | 
			
		||||
		"Alles nur störende Mikrowellen.",
 | 
			
		||||
		"Nagelneue Flugscheiben.",
 | 
			
		||||
		"Mit Mikrowelle runterholen!",
 | 
			
		||||
		"Nach Möglichkeit mit wenig Blutvergiessen, vergesst das bitte nicht!",
 | 
			
		||||
		"Eine Art Monarchie oder weiß der Geier was.",
 | 
			
		||||
		"Das ist eine Aufkraft!",
 | 
			
		||||
		"Kraftlose Schwätzer, die werden untergehen.",
 | 
			
		||||
		"Die kann man erwerben gegen 2 Euro.",
 | 
			
		||||
		"Das sind Schmutzfinkjournalisten, die gehören an den Galgen.",
 | 
			
		||||
		"Das ist geheimes Templerwissen.",
 | 
			
		||||
		"Das ist keine mongolische Mikroelektronik sondern deutsche Hochtechnologie!",
 | 
			
		||||
		"Mikrowelle, Skalarwelle!",
 | 
			
		||||
		"Daher die vielen Rassen, die unmöglich alle von dieser Erde stammen können.",
 | 
			
		||||
		"Wenn man seine Katze in den Mikrowellenherd zum Trocknen reinschiebt sieht man die Wirkung am Besten.",
 | 
			
		||||
		"Man kann davon ausgehen, dass in jedem Neubaublock einer mit Mikrowelle experimentiert.",
 | 
			
		||||
		"Gegen Skalarwellen haben sie die Arschkarte - also die goldene.",
 | 
			
		||||
		"Unsinnige Talkshows, wenn ich das schon sehe - Uääääh!",
 | 
			
		||||
		"Es kommen gigantische Umwälzungen auf uns.",
 | 
			
		||||
		"Ist das bekannt HAARP, Alaska, Wetterkriegsführung?",
 | 
			
		||||
		"Stärke 9, das ist der Daumen Gottes.",
 | 
			
		||||
		"Magnetohydrodynamik!",
 | 
			
		||||
		"Alles ist nur Bewegung oder Geschwindigkeit oder Schwingung!",
 | 
			
		||||
		"Rotwein ist gesund - Templerwein!",
 | 
			
		||||
		"Irrtum, Gezielte Desinformation!",
 | 
			
		||||
		"Bis auf 200 Meter tief und mehr werden alle Hohlräume ausradiert",
 | 
			
		||||
		"Repetitio est mater studiorum!",
 | 
			
		||||
		"Dissonanzen - Eine Dissonanz jagt die andere!",
 | 
			
		||||
		"Bayern ist der Schlüsselpunkt!",
 | 
			
		||||
		"Ja Kevin! Da ist was im Busch!",
 | 
			
		||||
		"Die Erdkruste ist ja weltweit ein Gangsystem.",
 | 
			
		||||
		"Eine Million Reichsdeutsche leben dort unten, in der inneren Hohlwelt.",
 | 
			
		||||
		"Dort leben ja mehrere Zivilisationen, nicht nur eine. Ich hab Karten darüber.",
 | 
			
		||||
		"Ich halte mich auch kurz, denn in der Kürze liegt die Würze.",
 | 
			
		||||
		"PETER! Das betrifft auch dich!",
 | 
			
		||||
		"Nuklear oder nicht-nuklear ist egal. Hauptsache alles ist zerstört.",
 | 
			
		||||
		"Wenn es heißt: Den Stecker ziehen! Dann wird ein bestimmtes Gebiet zerbröselt, plattgemacht - Flächenbombardements!",
 | 
			
		||||
		"Apropos unterirdische Bauwerke: Das Verhältnis von oberirdisch zu unterirdisch ist 1 zu 4!",
 | 
			
		||||
		"Ich erinnere noch einmal daran, dass mindestens rund eine Million reichsdeutscher Patente in alliierte Hände verschwand!",
 | 
			
		||||
		"Mathematisch bedeutet das, dass mindestens einfache trigonometrische Gleichungen gelöst werden.",
 | 
			
		||||
		"Ich weiß auch, wie man sowas bauen kann - Mikrowellenterror und dergleichen mehr.",
 | 
			
		||||
		"Peverse Gehirne sind das, die sich sowas ausdenken.",
 | 
			
		||||
		"Klaus, denk auch an Chemtrails!",
 | 
			
		||||
		"Haarp-Projekt Alaska und anderes lässt grüßen.",
 | 
			
		||||
		"Absichtlich, richtig Mario!",
 | 
			
		||||
		"Übrigens, Spannung... Millionen von Volt - um das mal zu verdeutlichen!",
 | 
			
		||||
		"Vier-dimensionale Räume, gibt es!",
 | 
			
		||||
		"Es gibt auch nen Vier-dimensionalen Würfel.",
 | 
			
		||||
		"Die sind den Amis um mehrere Nasenlängen voraus.",
 | 
			
		||||
		"Ähnliches ist ja auch in Deutschland geplant, Vorsicht!",
 | 
			
		||||
		"Irgendwann ist Schluss mit lustig!",
 | 
			
		||||
		"Ein Kamerad von mir musste da sein Leben lassen.",
 | 
			
		||||
		"Es handelt sich demnach um einen deutlichen und jederzeit reproduzierbaren Beweis für Homöopathie.",
 | 
			
		||||
		"Bei Freimaurern, Illuminaten sagen wir mal (...) hat das alles eine Bedeutung.",
 | 
			
		||||
		"Mathematik mein lieber Mario, hö?!",
 | 
			
		||||
		"Wird natürlich totgeschwiegen.",
 | 
			
		||||
		"Die hatten mehr Verluste als in Pearl Harbour, hihi.",
 | 
			
		||||
		"Finanzdienstleistungen – alles son Schnullifax, da weiß ich, wie die Verbrecher arbeiten.",
 | 
			
		||||
		"Durch jenen Verlag, und das ist jetzt ganz wichtig, gelangte ich an Schriften und Videos zum Thema Reichsdeutsche Hochtechnologie.",
 | 
			
		||||
		"Flugscheiben mit non-konventionellen Antrieben, Elektrogravitation und Gravitationsabschirmung und Überlichteffekt.",
 | 
			
		||||
		"Ich muss nur dazu sagen, in Naturwissenschaften kenne ich mich überall sehr gut aus, da macht mir so schnell keiner was vor.",
 | 
			
		||||
		"Im erstgenannten Buch, Hochtechnologie im Dritten Reich, habe ich nicht nur physikalisch, mathematisch reichsdeutsche Technologien beschrieben, sondern räumte auch die hörigen alliierten Lügen gegen das Deutsche Reich auf.",
 | 
			
		||||
	},
 | 
			
		||||
	{
 | 
			
		||||
		"Ja was sind denn das? Das sind Umschlagplätze für Drogen, Waffenhandel und Rotlicht-Milieu, mehr ist das nicht.",
 | 
			
		||||
		"Damit haben Sie die Eigenschaft die Zeit der Zellen quasi zurückzudrehen.",
 | 
			
		||||
		"Überall hat man dann die goldene Arschkarte.",
 | 
			
		||||
		"Auch für dich wichtig, Mario - für deine Experimente.",
 | 
			
		||||
		"Merkt ihr die Korrelation? Nachdenken!",
 | 
			
		||||
		"Ich habs gesehen, Fata Morgana, Namib Wüste.",
 | 
			
		||||
		"Denn Hunger und Durst macht böse.",
 | 
			
		||||
		"Übrigens gibt es kein Gut und kein Böse in dem Sinne.",
 | 
			
		||||
		"Die armen Kinder, was aus denen werden soll - ja Mutanten, da hab ich auch kein Mitleid mehr!",
 | 
			
		||||
		"Man steckt erst richtig drin, wenn man auch der letzten Klofrau erklären kann, was Zeitreisen sind.",
 | 
			
		||||
		"Schmeiß das aus dem Fenster!",
 | 
			
		||||
		"Hähä!",
 | 
			
		||||
		"Ein Wahnsinn ja.",
 | 
			
		||||
		"Bazillus Dummheit sag ich nur.",
 | 
			
		||||
		"Das muss man begreifen, ist ja wirklich leicht.",
 | 
			
		||||
		"So lange ich lebe wird mein Kampf gegen die Alliierten anhalten.", "Wer das begreift, der weiß schon sehr viel.",
 | 
			
		||||
		"Levitation! Mein Gott, die indischen Gurus machen uns das vor.",
 | 
			
		||||
		"Aber steigtert euch nicht zu tief hinein - ich denke da an die Zahl 23 und was es alles gibt.",
 | 
			
		||||
		"Kevin du beschäftigst dich damit hoffentlich (...) - du, ich frag Dir das ab sonst.",
 | 
			
		||||
		"Richtig Mario - siehste Mario denkt mit, das gefällt mir an dir!",
 | 
			
		||||
		"Man muss das dazu auch mal philosophisch betrachten.",
 | 
			
		||||
		"Die sehr gefährliche amerikanische Lanzenviper (...) und der Mensch stirbt elendig innerhalb von 20 Minuten.",
 | 
			
		||||
		"Ja, Heil!",
 | 
			
		||||
		"Nuklearbomben sind Flöhe dagegen.",
 | 
			
		||||
		"Das sind kranke Gehirne, aber es ist so.",
 | 
			
		||||
		"Formeln sind viel besser zu Handhaben, ist wie ein Krimi.",
 | 
			
		||||
		"Aus tausend Seiten mach ich euch eine.",
 | 
			
		||||
		"Anschließend machen wir 'ne Raucherpause.",
 | 
			
		||||
		"Die Inselaffen hasse ich sowieso!",
 | 
			
		||||
		"Wir Physiker sprechen vom sogenannten Dirac-Meer.",
 | 
			
		||||
		"Die muss man anzapfen entsprechend einem Implosions-Strudel.",
 | 
			
		||||
		"Das heisst eine logarithmische Spirale raum-zeitlich betrachtet nach Innen.",
 | 
			
		||||
		"Nicht umsonst ist ja eines meiner Bücher ein Bestseller.",
 | 
			
		||||
		"Sie ist ein Perpetuum Mobile!",
 | 
			
		||||
		"Das ist die menschliche Zelle im Schnitt!",
 | 
			
		||||
		"Das Wort Zufall ist aus meinem Wortschatz gestrichen.",
 | 
			
		||||
		"Muss man schon dann kümmern, wenn man dran kommen will!",
 | 
			
		||||
		"Das ist kein Science Fiction!",
 | 
			
		||||
		"So einfach ist das, wenn man um die neue Physik weiß!",
 | 
			
		||||
		"Und die sind zum Pluto, dem erdfernsten Planeten gestartet.",
 | 
			
		||||
		"Für mich ist das der Elektro-Jude.",
 | 
			
		||||
		"Ne schöne Waffe, sollte man mal gegen die Loveparade einsetzen.",
 | 
			
		||||
		"Ein versteckter Hinweis, dass der Mond in reichsdeutscher Hand nämlich ist.",
 | 
			
		||||
		"Zack, einfach ist das.",
 | 
			
		||||
		"Kein Problem!",
 | 
			
		||||
		"Da staunt ihr, was?",
 | 
			
		||||
		"Mein Gott!",
 | 
			
		||||
		"Ich nehme auch an, dass da auch das galaktische Imperium Aldebaran eine wesentliche Rolle spielt.",
 | 
			
		||||
		"Wir dürfen nicht mit irdischen Maßnahmen herangehen Leute, vergesst das nicht!",
 | 
			
		||||
		"Mit KRAFT!",
 | 
			
		||||
		"Das A&O in der freien - in der Physik.",
 | 
			
		||||
		"Na, wer hat Warsteiner bestellt?",
 | 
			
		||||
		"Die doofen Amis, die trauen sich da nicht ran, ist doch klar.",
 | 
			
		||||
		"So lebt man ruhiger und energetischer.",
 | 
			
		||||
		"Hatten wir auch schon im 3. Reich.",
 | 
			
		||||
		"So einfach ist das, muss man nur wissen.",
 | 
			
		||||
		"Da bleibt von den Plattenbauten auch nichts mehr.",
 | 
			
		||||
		"Dabei denke ich an die Allee der Gehenkten.",
 | 
			
		||||
		"Knüppel aus dem Sack!",
 | 
			
		||||
		"Ein zweischeidiges Schwert,ne?",
 | 
			
		||||
		"Auch nachzulesen in meinem Bestseller-Buch.",
 | 
			
		||||
		"Ich sage nur Bipolarität des Universums.",
 | 
			
		||||
		"Spass muss sein.",
 | 
			
		||||
		"Das erfordert natürlich etwas Gehirnschmalz.",
 | 
			
		||||
		"Die Meisten begreifen es leider nicht, darauf kann ich natürlich keine Rücksicht nehmen.",
 | 
			
		||||
		"Oder ich lass die Fackelmänner los!",
 | 
			
		||||
		"Und da braucht man sich nicht zu wundern, über die vielen Mutanten, die rumlaufen.",
 | 
			
		||||
		"Nur Dreck, Nur Dreck, und der Bürger sieht sich das an!",
 | 
			
		||||
		"Man nennt das eine so genannte skalare Haubitze!",
 | 
			
		||||
		"Das hole ich locker wieder rein mit meinen Schriften.",
 | 
			
		||||
		"Da brauche ich keine Nuklearwaffen - nichtmal Mikrowelle.",
 | 
			
		||||
		"Das arme Tier, naja gut - was solls?",
 | 
			
		||||
		"Das ist eine stehende Welle, die ist sofort da.",
 | 
			
		||||
		"Eine Welt voller Mutanten und Zombies mit einem IQ geringer als eine Dillgurke.", "Scheiße gesellt sich zu scheiße!",
 | 
			
		||||
		"Und zur Not hilft eben ein Marsch. Fußmarsch, Wolfsangelmarsch.",
 | 
			
		||||
		"Vulkanausbrüche - was Schönes!",
 | 
			
		||||
		"Zisch - Aus, weg war det - ein schöner Tod.",
 | 
			
		||||
		"Das ist auch gegen Krebs und alles mögliche.",
 | 
			
		||||
		"Alles ist vorhersehbar.",
 | 
			
		||||
		"Das kann nur die Dritte Macht gewesen sein.",
 | 
			
		||||
		"Genau das haben die meisten nicht begriffen - naja, was soll man von Mutanten erwarten?",
 | 
			
		||||
		"Dort einzudringen würde ich nicht empfehlen! Nirgendwo!",
 | 
			
		||||
		"Peter Fitzek (…), der kennt wieder die Leute meiner Energiegruppen.",
 | 
			
		||||
		"Nach dem Motto: Was nicht sein darf, nicht sein kann.",
 | 
			
		||||
		"Hat noch jemand einen Beitrag zu liefern, Claus?",
 | 
			
		||||
		"Eins ist aber jeden Fall ist Fakt, dass gewisse Kräfte versuchen die Rechte Szene (…) auseinanderzuplautzen.",
 | 
			
		||||
		"Alles vermeidbare Risiken!",
 | 
			
		||||
		"Kontinent Mu – die Südhemisphäre.",
 | 
			
		||||
		"Welch ein geistiger Dünnschiss saggich da nur!",
 | 
			
		||||
		"Such is life.",
 | 
			
		||||
		"Wir machen´s wie mit der Schiebewurst - das Beste immer zum Schluss.",
 | 
			
		||||
		"Da findet man auch Skelette von 8 Metern Länge, humanoid und andere Sachen... Flugscheiben Vimanas und dergleichen mehr.",
 | 
			
		||||
		"Naja.. bescheuert.",
 | 
			
		||||
		"Demnach ist die weiße Rasse, also sprich atlantische Imperium, eine Kolonie, eine aldebaranische Kolonie.",
 | 
			
		||||
		"Ich denke ja ganzheitlich vernetzt, nicht wahr?",
 | 
			
		||||
		"Besser ist immer der persönliche Kontakt, statt da den Elektrojuden zu nutzen.",
 | 
			
		||||
		"Da muss man natürlich die Kräfte erkennen.",
 | 
			
		||||
		"Die Meinungen divergieren sehr sehr stark.",
 | 
			
		||||
		"Dann folgt nach der Polarrasse, die hyperboreische Rasse, auch auf die Nordhemisphäre beschränkt.",
 | 
			
		||||
		"Ich beobachte die Szene aber weiter.",
 | 
			
		||||
		"Muss auch militärische Ordnung herrschen!",
 | 
			
		||||
		"Nech, die Blawatzki... die Blawatski spricht ja von Wurzelrasse.",
 | 
			
		||||
		"Sonst krieg ich quadratische Augen!",
 | 
			
		||||
		"Das ist wie mit der Drehscheibe, man lernt Leute kennen – hochinteressant muss ich sagen!",
 | 
			
		||||
		"Ich halt es mit Napoleons Worten: Angst und Unmöglichkeit sind aus meinem Wortschatz gestrichen!",
 | 
			
		||||
		"Das ist ausgestoßene, überschüssige Geschwindigkeit! Mehr ist das nicht Leute!",
 | 
			
		||||
		"Wir sind die Top-Ten, auf der ganzen Erde.",
 | 
			
		||||
		"Gesamtberlin, wissen auch die wenigsten: 4 mal mehr - Unterdirdisch! Alles verzweigt!",
 | 
			
		||||
		"Man muss schon wirklich zwischen Dichtung und Wahrheit differenzieren können!",
 | 
			
		||||
		"Wissenschaftlich, technologisch war das Deutsche Reich den Alliierten um mindestens 100 Jahre voraus, (...) moralisch um 1.000 Jahre voraus.",
 | 
			
		||||
		"Prä-Astronautik macht der.",
 | 
			
		||||
		"Darf er nicht drüber erzählen, sonst würde er kein Geld mehr bekommen für seine kostspieligen Reisen.",
 | 
			
		||||
		"Das ist ein ganz einfacher Algorithmus.",
 | 
			
		||||
		"Ich muss auch dazu sagen, ich bin auch Sternbild Skorpion – da gibt es keine Grauzonen, nur Schwarz oder Weiß.",
 | 
			
		||||
		"Entscheidend ist die Länge des Frauenhaares als Sender und Empfänger.",
 | 
			
		||||
		"Die sind sehr empfänglich für Müll.",
 | 
			
		||||
		"Aber das Frauenhaar, das müssen Sie begreifen, ist magnetisch, das hat ein anderes Magnetfeld.",
 | 
			
		||||
		"Kann man ablesen, siehe Victor Schauberger.",
 | 
			
		||||
		"Für die Nichtwissenden mag das wie Glockengeläut in den Ohren klingen.",
 | 
			
		||||
		"Wer kann das, außer mir?",
 | 
			
		||||
		"Nun wisst ihr auch, wie man künstlich Erdbeben auslöst.",
 | 
			
		||||
		"Solche seltenen Wetter-Skalar-Interferometer könnten Kugelblitze produzieren.",
 | 
			
		||||
		"Mit Überlichtgeschwindigkeit, ich betone: ÜBERLICHTGESCHWINDIGKEIT!",
 | 
			
		||||
		"Wer die Lüge kennt und trotzdem nichts unternimmt, macht sich mitschuldig.",
 | 
			
		||||
		"Zerlegen macht Spaß!",
 | 
			
		||||
		"Heute ist Deutschland ein Entwicklungsland.",
 | 
			
		||||
		"Es gibt noch andere bösartige Elemente, subversive Elemente – Volksschädlinge!",
 | 
			
		||||
		"Wir werden verfolgt, vernichtet – von Isaak Krummbold.",
 | 
			
		||||
		"Der war sehr gut.",
 | 
			
		||||
		"Die Erde ist ein lebender Organismus.",
 | 
			
		||||
		"Die sind nicht weg, die haben sich ins Erdinnere verkrochen.",
 | 
			
		||||
		"Spaß muss sein, Leute!",
 | 
			
		||||
		"Das muss man natürlich alles wissen, alles das was reichsdeutsche Hochtechnologie vermag.",
 | 
			
		||||
		"Alles andere... Schrott!",
 | 
			
		||||
		"Es gibt auch keine Missing Links. (…) Alles ein Schwachsinn!",
 | 
			
		||||
		"Das äußerliche dieser Wesenheiten ist uns völlig schleierhaft, (..) Medusen, was weiß ich.",
 | 
			
		||||
		"Ich fürchte, wir müssen völlig umdenken!",
 | 
			
		||||
		"Dann haste die diamantene Arschkarte.",
 | 
			
		||||
		"Mich wundert... kann nix mehr erschüttern.",
 | 
			
		||||
		"Wir leben in einer sehr interessanten Zeit.",
 | 
			
		||||
		"Viele Ökosysteme spielen heute schon verrückt.",
 | 
			
		||||
		"Nichts einfacher als das.",
 | 
			
		||||
		"Das ist jetzt das, was Sie sich merken sollten.",
 | 
			
		||||
		"Die werden erhitzt und gehen kaputt.",
 | 
			
		||||
		"Die knallen durch!",
 | 
			
		||||
		"Ist ne stehende Welle, junge Dame.",
 | 
			
		||||
		"Und dann Himmel, Arsch und Zwirn!",
 | 
			
		||||
		"Es funktioniert ja immer wieder - es gibt ja genug Verblödete.",
 | 
			
		||||
		"Mögen sie in ihrem eigenen Blut erSAUFEN!",
 | 
			
		||||
		"Macht es subversiv, geht damit nicht an die Öffentlichkeit, schon gar nicht ins Internet.",
 | 
			
		||||
		"Informetrisches Feld und informetrische Felder, Pluralis.",
 | 
			
		||||
		"Muss ich noch deutlicher werden? Ich glaube nicht!",
 | 
			
		||||
		"Das ist nämlich das A und O des Universums.",
 | 
			
		||||
		"Wir sind nicht umsonst hier hineininkarniert oder hineingeboren.",
 | 
			
		||||
		"Das hab ich extern so neben... aus dem Ärmel gemacht.",
 | 
			
		||||
		"Dort war ich kein geringer als Hauptstrahlenschutzbeauftragter für die gesamte ehemalige DDR.",
 | 
			
		||||
		"Eine ganz ekelhafte Waffe.",
 | 
			
		||||
		"Das hatte die deutsche Luftwaffe (…) rechtzeitig erkannt.",
 | 
			
		||||
		"Liegt im Krankenhaus, ich nehm an, dass sie ihn da mit Mikrowelle traktiert haben.",
 | 
			
		||||
		"Es gibt keine Zufälle.",
 | 
			
		||||
		"Bis auf die Haunebu I, die war nur zu 60% Weltall-tauglich, nebenbei bemerkt.",
 | 
			
		||||
		"Sprache beherrsche ich – mehrere Fremdsprachen, ist für mich aber nur Mittel zum Zweck.",
 | 
			
		||||
		"Meine Meinung – dazu stehe ich!",
 | 
			
		||||
		"Letztlich war er aber nur eine zweibeinige Ertragsmaschine – man muss das mal so knallhart sagen.",
 | 
			
		||||
		"Aber ich schätze mal, wir stehen kurz vor einem Wendepunkt.",
 | 
			
		||||
		"Darauf setze ich einen Haufen.",
 | 
			
		||||
	},
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
var sayCh chan string
 | 
			
		||||
 | 
			
		||||
func Init(ch chan string) {
 | 
			
		||||
	sayCh = ch
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func HandleMessage(m *irc.Message) {
 | 
			
		||||
	tok := strings.Split(m.Trailing, " ")
 | 
			
		||||
	if len(tok) < 1 {
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	if tok[0] == "!stoll" {
 | 
			
		||||
		line := ""
 | 
			
		||||
		for i := 0; i < 3; i++ {
 | 
			
		||||
			line += quotes[i][random(0, len(quotes[i]))]
 | 
			
		||||
			line += " "
 | 
			
		||||
		}
 | 
			
		||||
		line += "[Dr. Axel Stoll, promovierter Naturwissenschaftler]"
 | 
			
		||||
		sayCh <- fmt.Sprintf("%s\n%s", "*", line)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func random(min, max int) int {
 | 
			
		||||
	rand.Seed(time.Now().Unix())
 | 
			
		||||
	return rand.Intn(max-min) + min
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										10
									
								
								newsfeeds.conf
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								newsfeeds.conf
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,10 @@
 | 
			
		|||
https://robertsspaceindustries.com/comm-link/rss
 | 
			
		||||
http://starcitizenbase.de/feed/
 | 
			
		||||
https://www.youtube.com/feeds/videos.xml?channel_id=UCVlBNk1uHmMX93SvotZPfbQ
 | 
			
		||||
http://imperialnews.network/feed/
 | 
			
		||||
http://www.pointofgaming.com/feed/
 | 
			
		||||
http://il2sturmovik.com/news/feed/
 | 
			
		||||
http://newsfeed.eveonline.com/en-US/44/articles/page/1/20
 | 
			
		||||
https://www.shroudoftheavatar.com/?feed=rss2&cat=11
 | 
			
		||||
https://www.shroudoftheavatar.com/?feed=rss2&cat=12
 | 
			
		||||
http://camelotunchained.com/en/feed/
 | 
			
		||||
							
								
								
									
										33
									
								
								util/util.go
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										33
									
								
								util/util.go
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,33 @@
 | 
			
		|||
// vim:ts=4:sts=4:sw=4:noet:tw=72
 | 
			
		||||
 | 
			
		||||
package util
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"bytes"
 | 
			
		||||
	"strconv"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func NumberToString(n int, sep rune) string {
 | 
			
		||||
	start := 0
 | 
			
		||||
	var buf bytes.Buffer
 | 
			
		||||
 | 
			
		||||
	s := strconv.Itoa(n)
 | 
			
		||||
	if n < 0 {
 | 
			
		||||
		start = 1
 | 
			
		||||
		buf.WriteByte('-')
 | 
			
		||||
	}
 | 
			
		||||
	l := len(s)
 | 
			
		||||
	ci := 3 - ((l - start) % 3)
 | 
			
		||||
	if ci == 3 {
 | 
			
		||||
		ci = 0
 | 
			
		||||
	}
 | 
			
		||||
	for i := start; i < l; i++ {
 | 
			
		||||
		if ci == 3 {
 | 
			
		||||
			buf.WriteRune(sep)
 | 
			
		||||
			ci = 0
 | 
			
		||||
		}
 | 
			
		||||
		ci++
 | 
			
		||||
		buf.WriteByte(s[i])
 | 
			
		||||
	}
 | 
			
		||||
	return buf.String()
 | 
			
		||||
}
 | 
			
		||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue