From 33f801bc5e05e216a13847c8747b0e584f04a9d1 Mon Sep 17 00:00:00 2001 From: Christine Dodrill Date: Sat, 28 Nov 2015 22:42:25 -0800 Subject: [PATCH] initial commit --- .gitignore | 12 + LICENSE | 7 + README.md | 35 + core/db.py | 14 + core/main.py | 199 +++ core/reload.py | 161 ++ env.sh | 7 + main.py | 67 + plugins/bobross.py | 15 + plugins/compliment.py | 9 + plugins/data/bobross.json | 166 ++ plugins/data/opname_prefix.txt | 2574 ++++++++++++++++++++++++++++++++ plugins/data/opname_suffix.txt | 1229 +++++++++++++++ plugins/data/plinkett.txt | 16 + plugins/ddate.py | 8 + plugins/derpiback.py | 11 + plugins/hack.py | 315 ++++ plugins/log.py | 103 ++ plugins/opname.py | 26 + plugins/plinkett.py | 12 + plugins/pony.py | 53 + plugins/ponyapi.py | 84 ++ plugins/printerfact.py | 19 + plugins/quote.py | 193 +++ plugins/remember.py | 189 +++ plugins/shibe.py | 51 + plugins/shitposting.py | 30 + plugins/source.py | 10 + plugins/suggest.py | 29 + plugins/tinyurl.py | 9 + plugins/urbit.py | 28 + plugins/urlhistory.py | 80 + plugins/util/__init__.py | 0 plugins/util/hook.py | 108 ++ plugins/util/http.py | 173 +++ plugins/util/timesince.py | 102 ++ plugins/util/urlnorm.py | 133 ++ plugins/xeserv.py | 21 + requirements.txt | 10 + 39 files changed, 6308 insertions(+) create mode 100644 .gitignore create mode 100644 LICENSE create mode 100644 README.md create mode 100644 core/db.py create mode 100644 core/main.py create mode 100644 core/reload.py create mode 100755 env.sh create mode 100644 main.py create mode 100644 plugins/bobross.py create mode 100644 plugins/compliment.py create mode 100644 plugins/data/bobross.json create mode 100644 plugins/data/opname_prefix.txt create mode 100644 plugins/data/opname_suffix.txt create mode 100644 plugins/data/plinkett.txt create mode 100644 plugins/ddate.py create mode 100644 plugins/derpiback.py create mode 100644 plugins/hack.py create mode 100644 plugins/log.py create mode 100644 plugins/opname.py create mode 100644 plugins/plinkett.py create mode 100644 plugins/pony.py create mode 100644 plugins/ponyapi.py create mode 100644 plugins/printerfact.py create mode 100644 plugins/quote.py create mode 100644 plugins/remember.py create mode 100644 plugins/shibe.py create mode 100644 plugins/shitposting.py create mode 100644 plugins/source.py create mode 100644 plugins/suggest.py create mode 100644 plugins/tinyurl.py create mode 100644 plugins/urbit.py create mode 100644 plugins/urlhistory.py create mode 100644 plugins/util/__init__.py create mode 100644 plugins/util/hook.py create mode 100644 plugins/util/http.py create mode 100644 plugins/util/timesince.py create mode 100644 plugins/util/urlnorm.py create mode 100644 plugins/xeserv.py create mode 100644 requirements.txt diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..487acd8 --- /dev/null +++ b/.gitignore @@ -0,0 +1,12 @@ +.*.swp +*.pyc +*.orig +persist +config +pep8.py +.project +.pydevproject +*.db +web +env +config.yml \ No newline at end of file diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..b34b603 --- /dev/null +++ b/LICENSE @@ -0,0 +1,7 @@ +Copyright 2015 Christine Dodrill + +Usage of the works is permitted provided that this instrument is retained +with the works, so that any entity that uses the works is notified of +this instrument. + +DISCLAIMER: THE WORKS ARE WITHOUT WARRANTY. \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..b889a3d --- /dev/null +++ b/README.md @@ -0,0 +1,35 @@ +h2 +== + +Or + +H: revenge of the trolls + +The matrix version of the shitposting utility bot you won't be able to live without. + +Setup +----- + +- Install the virtualenv and all of the deps with the handy `env.sh` script. +- Create a https://matrix.org account and add it to the config: + +```yaml +me: + user: >- + @h:matrix.org + password: OMITTED HERE YOU HACKERS + homeserver: https://matrix.org + +masters: +- >- + @Xena:matrix.org +``` + +- Save this as config.yml +- Kick off `main.py` + +Notes / Known Bugs +------------------ + +- This must already be joined to channels and cannot join them +- This is really janky and could fall over at any moment diff --git a/core/db.py b/core/db.py new file mode 100644 index 0000000..c2400db --- /dev/null +++ b/core/db.py @@ -0,0 +1,14 @@ +import os +import sqlite3 + + +def get_db_connection(conn, name=''): + "returns an sqlite3 connection to a persistent database" + + if not name: + name = '%s.%s.db' % (conn.nick, conn.server) + + filename = os.path.join(bot.persist_dir, name) + return sqlite3.connect(filename, timeout=10) + +bot.get_db_connection = get_db_connection diff --git a/core/main.py b/core/main.py new file mode 100644 index 0000000..07d78db --- /dev/null +++ b/core/main.py @@ -0,0 +1,199 @@ +import fuckit +import Queue +import thread +import traceback + +thread.stack_size(1024 * 512) # reduce vm size + +class Input(dict): + def __init__(self, conn, raw, prefix, command, params, + nick, user, host, paraml, msg): + chan = paraml[0].lower() + if chan == conn.nick.lower(): # is a PM + chan = nick + + def say(msg): + conn.msg(chan, msg) + + def reply(msg): + if chan == nick: # PMs don't need prefixes + self.say(msg) + else: + self.say('> ' + msg) + + def pm(msg, nick=nick): + conn.msg(nick, msg) + + def set_nick(nick): + conn.set_nick(nick) + + def me(msg): + self.say("\x01%s %s\x01" % ("ACTION", msg)) + + def notice(msg): + conn.cmd('NOTICE', [nick, msg]) + + def kick(target=None, reason=None): + conn.cmd('KICK', [chan, target or nick, reason or '']) + + def ban(target=None): + conn.cmd('MODE', [chan, '+b', target or host]) + + def unban(target=None): + conn.cmd('MODE', [chan, '-b', target or host]) + + + dict.__init__(self, conn=conn, raw=raw, prefix=prefix, command=command, + params=params, nick=nick, user=user, host=host, + paraml=paraml, msg=msg, server=conn.server, chan=chan, + notice=notice, say=say, reply=reply, pm=pm, bot=bot, + kick=kick, ban=ban, unban=unban, me=me, + set_nick=set_nick, lastparam=paraml[-1]) + + # make dict keys accessible as attributes + def __getattr__(self, key): + return self[key] + + def __setattr__(self, key, value): + self[key] = value + +#@fuckit +def run(func, input): + args = func._args + + if 'inp' not in input: + input.inp = input.paraml + + if args: + if 'db' in args and 'db' not in input: + input.db = get_db_connection(input.conn) + if 'input' in args: + input.input = input + if 0 in args: + out = func(input.inp, **input) + else: + kw = dict((key, input[key]) for key in args if key in input) + out = func(input.inp, **kw) + else: + out = func(input.inp) + if out is not None: + input.reply(unicode(out)) + + +class Handler(object): + '''Runs plugins in their own threads (ensures order)''' + def __init__(self, func): + self.func = func + self.input_queue = Queue.Queue() + thread.start_new_thread(self.start, ()) + + def start(self): + uses_db = 'db' in self.func._args + db_conns = {} + while True: + input = self.input_queue.get() + + if input == StopIteration: + break + + if uses_db: + db = db_conns.get(input.conn) + if db is None: + db = bot.get_db_connection(input.conn) + db_conns[input.conn] = db + input.db = db + + try: + run(self.func, input) + except: + traceback.print_exc() + + def stop(self): + self.input_queue.put(StopIteration) + + def put(self, value): + self.input_queue.put(value) + + +def dispatch(input, kind, func, args, autohelp=False): + for sieve, in bot.plugs['sieve']: + input = do_sieve(sieve, bot, input, func, kind, args) + if input == None: + return + + if autohelp and args.get('autohelp', True) and not input.inp \ + and func.__doc__ is not None: + input.reply(func.__doc__) + return + + if hasattr(func, '_apikey'): + key = bot.config.get('api_keys', {}).get(func._apikey, None) + if key is None: + input.reply('error: missing api key') + return + input.api_key = key + + if func._thread: + bot.threads[func].put(input) + else: + thread.start_new_thread(run, (func, input)) + + +def match_command(command): + commands = list(bot.commands) + + # do some fuzzy matching + prefix = filter(lambda x: x.startswith(command), commands) + if len(prefix) == 1: + return prefix[0] + elif prefix and command not in prefix: + return prefix + + return command + + +def main(conn, out): + inp = Input(conn, *out) + + # EVENTS + for func, args in bot.events[inp.command] + bot.events['*']: + dispatch(Input(conn, *out), "event", func, args) + + if inp.command == 'PRIVMSG': + # COMMANDS + bot_prefix = re.escape(bot.config.get("prefix", ".")) + if inp.chan == inp.nick: # private message, no command prefix required + prefix = r'^(?:(?:'+bot_prefix+')?|' + else: + prefix = r'^(?:'+bot_prefix+'|' + + command_re = prefix + inp.conn.nick + command_re += r'[:,]+\s+)(\w+)(?:$|\s+)(.*)' + + m = re.match(command_re, inp.lastparam) + + if m: + trigger = m.group(1).lower() + command = match_command(trigger) + + if isinstance(command, list): # multiple potential matches + input = Input(conn, *out) + input.reply("did you mean %s or %s?" % + (', '.join(command[:-1]), command[-1])) + elif command in bot.commands: + input = Input(conn, *out) + input.trigger = trigger + input.inp_unstripped = m.group(2) + input.inp = input.inp_unstripped.strip() + + func, args = bot.commands[command] + dispatch(input, "command", func, args, autohelp=True) + + # REGEXES + for func, args in bot.plugs['regex']: + m = args['re'].search(inp.lastparam) + if m: + input = Input(conn, *out) + input.inp = m + + dispatch(input, "regex", func, args) diff --git a/core/reload.py b/core/reload.py new file mode 100644 index 0000000..cd0e01d --- /dev/null +++ b/core/reload.py @@ -0,0 +1,161 @@ +import collections +import glob +import os +import re +import sys +import traceback + + +if 'mtimes' not in globals(): + mtimes = {} + +if 'lastfiles' not in globals(): + lastfiles = set() + + +def make_signature(f): + return f.func_code.co_filename, f.func_name, f.func_code.co_firstlineno + + +def format_plug(plug, kind='', lpad=0, width=40): + out = ' ' * lpad + '%s:%s:%s' % make_signature(plug[0]) + if kind == 'command': + out += ' ' * (50 - len(out)) + plug[1]['name'] + + if kind == 'event': + out += ' ' * (50 - len(out)) + ', '.join(plug[1]['events']) + + if kind == 'regex': + out += ' ' * (50 - len(out)) + plug[1]['regex'] + + return out + + +def reload(init=False): + changed = False + + if init: + bot.plugs = collections.defaultdict(list) + bot.threads = {} + + core_fileset = set(glob.glob(os.path.join("core", "*.py"))) + + for filename in core_fileset: + mtime = os.stat(filename).st_mtime + if mtime != mtimes.get(filename): + mtimes[filename] = mtime + + changed = True + + try: + eval(compile(open(filename, 'U').read(), filename, 'exec'), + globals()) + except Exception: + traceback.print_exc() + if init: # stop if there's an error (syntax?) in a core + sys.exit() # script on startup + continue + + if filename == os.path.join('core', 'reload.py'): + reload(init=init) + return + + fileset = set(glob.glob(os.path.join('plugins', '*.py'))) + + # remove deleted/moved plugins + for name, data in bot.plugs.iteritems(): + bot.plugs[name] = [x for x in data if x[0]._filename in fileset] + + for filename in list(mtimes): + if filename not in fileset and filename not in core_fileset: + mtimes.pop(filename) + + for func, handler in list(bot.threads.iteritems()): + if func._filename not in fileset: + handler.stop() + del bot.threads[func] + + # compile new plugins + for filename in fileset: + mtime = os.stat(filename).st_mtime + if mtime != mtimes.get(filename): + mtimes[filename] = mtime + + changed = True + + try: + code = compile(open(filename, 'U').read(), filename, 'exec') + namespace = {} + eval(code, namespace) + except Exception: + traceback.print_exc() + continue + + # remove plugins already loaded from this filename + for name, data in bot.plugs.iteritems(): + bot.plugs[name] = [x for x in data + if x[0]._filename != filename] + + for func, handler in list(bot.threads.iteritems()): + if func._filename == filename: + handler.stop() + del bot.threads[func] + + for obj in namespace.itervalues(): + if hasattr(obj, '_hook'): # check for magic + if obj._thread: + bot.threads[obj] = Handler(obj) + + for type, data in obj._hook: + bot.plugs[type] += [data] + + if not init: + print '### new plugin (type: %s) loaded:' % \ + type, format_plug(data) + + if changed: + bot.commands = {} + for plug in bot.plugs['command']: + name = plug[1]['name'].lower() + if not re.match(r'^\w+$', name): + print '### ERROR: invalid command name "%s" (%s)' % (name, + format_plug(plug)) + continue + if name in bot.commands: + print "### ERROR: command '%s' already registered (%s, %s)" % \ + (name, format_plug(bot.commands[name]), + format_plug(plug)) + continue + bot.commands[name] = plug + + bot.events = collections.defaultdict(list) + for func, args in bot.plugs['event']: + for event in args['events']: + bot.events[event].append((func, args)) + + if init: + print ' plugin listing:' + + if bot.commands: + # hack to make commands with multiple aliases + # print nicely + + print ' command:' + commands = collections.defaultdict(list) + + for name, (func, args) in bot.commands.iteritems(): + commands[make_signature(func)].append(name) + + for sig, names in sorted(commands.iteritems()): + names.sort(key=lambda x: (-len(x), x)) # long names first + out = ' ' * 6 + '%s:%s:%s' % sig + out += ' ' * (50 - len(out)) + ', '.join(names) + print out + + for kind, plugs in sorted(bot.plugs.iteritems()): + if kind == 'command': + continue + print ' %s:' % kind + for plug in plugs: + print format_plug(plug, kind=kind, lpad=6) + print diff --git a/env.sh b/env.sh new file mode 100755 index 0000000..70f9620 --- /dev/null +++ b/env.sh @@ -0,0 +1,7 @@ +#!/bin/bash + +virtualenv env +. ./env/bin/activate + +pip install git+https://github.com/billpmurphy/hask +pip install -r requirements.txt diff --git a/main.py b/main.py new file mode 100644 index 0000000..61c21a8 --- /dev/null +++ b/main.py @@ -0,0 +1,67 @@ +import os +import sys +import traceback +import time + +from matrix_client.client import MatrixClient +from time import sleep +from yaml import load, dump + +class Bot(object): + def __init__(self): + self.conns = {} + self.persist_dir = os.path.abspath('persist') + if not os.path.exists(self.persist_dir): + os.mkdir(self.persist_dir) + +bot = Bot() + +sys.path += ['plugins'] + +# bootstrap the reloader +eval(compile(open(os.path.join('core', 'reload.py'), 'U').read(), + os.path.join('core', 'reload.py'), 'exec'), globals()) +reload(init=True) + +print "matrix has u" + +config = {} + +with open("./config.yml", "r") as fin: + config = load(fin.read()) + +client = MatrixClient(config["me"]["homeserver"]) +token = client.login_with_password(username=config["me"]["user"], password=config["me"]["password"]) + +rooms = client.get_rooms() + +def room_callback(event): + room = rooms[event[u'room_id']] + if u'user_id' in event and event[u'type'] == "m.room.message": + print room.name, "<"+event[u'user_id']+">", event[u'content'][u'body'] + if event[u'user_id'] == config["me"]["user"]: + return + else: + content = event[u'content'] + body = content[u'body'] + + if body.startswith("."): + body = body.replace(".", "", 1) + splitstuff = body.split() + command = splitstuff[0] + args = " ".join(splitstuff[1:]) + cmd = match_command(command) + if cmd in bot.commands: + room.send_text(bot.commands[cmd][0](args)) + else: + for func, args in bot.plugs["regex"]: + m = args['re'].search(body) + if m: + room.send_text(func(m)) + +for room in rooms: + rooms[room].add_listener(room_callback) + +while True: + client.listen_for_events() + sleep(0.25) diff --git a/plugins/bobross.py b/plugins/bobross.py new file mode 100644 index 0000000..5daf36b --- /dev/null +++ b/plugins/bobross.py @@ -0,0 +1,15 @@ +from util import hook +from random import choice + +import json + +quotes = [] + +with open("./plugins/data/bobross.json", "r") as fin: + print fin + quotes = json.load(fin) + +@hook.regex("^[Bb]ob [Rr]oss fact$") +@hook.command +def bobross(inp): + return choice(quotes) diff --git a/plugins/compliment.py b/plugins/compliment.py new file mode 100644 index 0000000..e3eea34 --- /dev/null +++ b/plugins/compliment.py @@ -0,0 +1,9 @@ +import re +import requests +from util import hook + +@hook.command +@hook.regex("^feel good fact$", re.IGNORECASE) +def compliment(inp): + r = requests.get("http://compliment.b303.me/") + return r.text diff --git a/plugins/data/bobross.json b/plugins/data/bobross.json new file mode 100644 index 0000000..4c9ce22 --- /dev/null +++ b/plugins/data/bobross.json @@ -0,0 +1,166 @@ +[ + "That's a crooked tree. We'll send him to Washington.", + "The only thing worse than yellow snow is green snow.", + "I like to beat the brush.", + "In painting, you have unlimited power. You have the ability to move mountains. You can bend rivers. But when I get home, the only thing I have power over is the garbage.", + "You need the dark in order to show the light.", + "Look around. Look at what we have. Beauty is everywhere you only have to look to see it.", + "Just go out and talk to a tree. Make friends with it.", + "There's nothing wrong with having a tree as a friend.", + "Trees cover up a multitude of sins.", + "They say everything looks better with odd numbers of things. But sometimes I put even numbers\u00e2\u20ac\u201djust to upset the critics.", + "How do you make a round circle with a square knife? That's your challenge for the day.", + "A thin paint will stick to a thick paint.", + "Just beat the devil out of it.", + "We don't make mistakes we just have happy little accidents.", + "We'll paint one happy little tree right here.", + "Just pretend you are a whisper floating across a mountain.", + "From all of us here, I want to wish you happy painting and God bless, my friends.", + "We tell people sometimes: we're like drug dealers, come into town and get everybody absolutely addicted to painting. It doesn't take much to get you addicted.", + "The secret to doing anything is believing that you can do it. Anything that you believe you can do strong enough, you can do. Anything. As long as you believe.", + "Water's like me. It's laaazy\u00c2 ... Boy, it always looks for the easiest way to do things", + "I really believe that if you practice enough you could paint the 'Mona Lisa' with a two-inch brush.", + "If I paint something, I don't want to have to explain what it is.", + "We artists are a different breed of people. We're a happy bunch.", + "I guess I'm a little weird. I like to talk to trees and animals. That's okay though; I have more fun than most people.", + "Let's get crazy.", + "I can't think of anything more rewarding than being able to express yourself to others through painting.", + "Exercising the imagination, experimenting with talents, being creative; these things, to me, are truly the windows to your soul.", + "All you need to paint is a few tools, a little instruction, and a vision in your mind.", + "I started painting as a hobby when I was little. I didn't know I had any talent. I believe talent is just a pursued interest. Anybody can do what I do.", + "Everyone is going to see things differently - and that's the way it should be.", + "No pressure. Just relax and watch it happen.", + "When you do it your way you can go anywhere you choose.", + "You can create beautiful things - but you have to see them in your mind first", + "It's so important to do something every day that will make you happy", + "Don't be afraid to make these big decisions. Once you start, they sort of just make themselves.", + "With something so strong, a little bit can go a long way.", + "You have to allow the paint to break to make it beautiful.", + "Think about a cloud. Just float around and be there.", + "In nature, dead trees are just as normal as live trees.", + "It's hard to see things when you're too close. Take a step back and look.", + "Only think about one thing at a time. Don't get greedy.", + "If you do too much it's going to lose its effectiveness.", + "Use absolutely no pressure. Just like an angel's wing.", + "You're meant to have fun in life.", + "In life you need colors.", + "It's a super day, so why not make a beautiful sky?", + "Just let go - and fall like a little waterfall.", + "It's beautiful - and we haven't even done anything to it yet.", + "Be careful. You can always add more - but you can't take it away.", + "Pretend you're water. Just floating without any effort. Having a good day.", + "When things happen - enjoy them. They're little gifts.", + "Take your time. Speed will come later.", + "It's amazing what you can do with a little love in your heart.", + "God gave you this gift of imagination. Use it.", + "Paint anything you want on the canvas. Create your own world.", + "That's what painting is all about. It should make you feel good when you paint.", + "You can do anything your heart can imagine.", + "With practice comes confidence.", + "This is happy place, little squirrels live here and play.", + "We have no limits to our world. We're only limited by our imagination.", + "Be so very light. Be a gentle whisper.", + "The least little bit can do so much.", + "All you have to do is let your imagination go wild.", + "Didn't you know you had that much power? You can move mountains. You can do anything.", + "If you don't like it - change it. It's your world.", + "There is immense joy in just watching - watching all the little creatures in nature.", + "Don't forget to tell these special people in your life just how special they are to you.", + "That is when you can experience true joy, when you have no fear.", + "We don't really know where this goes - and I'm not sure we really care.", + "Life is too short to be alone, too precious. Share it with a friend.", + "Work on one thing at a time. Don't get carried away - we have plenty of time.", + "If we're going to have animals around we all have to be concerned about them and take care of them.", + "Almost everything is going to happen for you automatically - you don't have to spend any time working or worrying.", + "Sometimes you learn more from your mistakes than you do from your masterpieces.", + "There are no limits in this world.", + "You can create anything that makes you happy.", + "You want your tree to have some character. Make it special.", + "In your world you have total and absolute power.", + "The man who does the best job is the one who is happy at his job.", + "Everything's not great in life, but we can still find beauty in it.", + "Don't hurry. Take your time and enjoy.", + "You're the greatest thing that has ever been or ever will be. You're special. You're so very special.", + "There is no right or wrong - as long as it makes you happy and doesn't hurt anyone.", + "Everyone needs a friend. Friends are the most valuable things in the world.", + "There are no mistakes. You can fix anything that happens.", + "That's why I paint - because I can create the kind of world I want - and I can make this world as happy as I want it.", + "It's life. It's interesting. It's fun.", + "Just think about these things in your mind - then bring them into your world.", + "In your imagination you can go anywhere you want.", + "That's what makes life fun. That you can make these decisions. That you can create the world that you want.", + "Go out on a limb - that's where the fruit is.", + "In this world, everything can be happy.", + "All you have to learn here is how to have fun.", + "Isn't it great to do something you can't fail at?", + "Anytime you learn something your time and energy are not wasted.", + "A tree cannot be straight if it has a crooked trunk.", + "You've got to learn to fight the temptation to resist these things. Just let them happen.", + "You create the dream - then you bring it into your world.", + "These things happen automatically. All you have to do is just let them happen.", + "You can do anything here. So don't worry about it.", + "This present moment is perfect simply due to the fact you're experiencing it.", + "Only God can make a tree - but you can paint one.", + "You can't make a mistake. Anything that happens you can learn to use - and make something beautiful out of it.", + "Put light against light - you have nothing. Put dark against dark - you have nothing. It's the contrast of light and dark that each give the other one meaning.", + "This is an example of what you can do with just a few things, a little imagination and a happy dream in your heart.", + "If what you're doing doesn't make you happy - you're doing the wrong thing.", + "Just relax and let it flow. That easy.", + "Every single thing in the world has its own personality - and it is up to you to make friends with the little rascals.", + "Trees grow however makes them happy.", + "Don't kill all your dark areas - you need them to show the light.", + "Everyone wants to enjoy the good parts - but you have to build the framework first.", + "A big strong tree needs big strong roots.", + "The light is your friend. Preserve it.", + "Everybody's different. Trees are different. Let them all be individuals.", + "We want to use a lot pressure while using no pressure at all.", + "Follow the lay of the land. It's most important.", + "We don't have anything but happy trees here.", + "Even trees need a friend. We all need friends.", + "Isn't it fantastic that you can change your mind and create all these happy things?", + "The first step to doing anything is to believe you can do it. See it finished in your mind before you ever start.", + "No worries. No cares. Just float and wait for the wind to blow you around.", + "It just happens - whether or not you worried about it or tried to plan it.", + "If it's not what you want - stop and change it. Don't just keep going and expect it will get better.", + "You can create the world you want to see and be a part of. You have that power.", + "How to paint. That's easy. What to paint. That's much harder.", + "We can always carry this a step further. There's really no end to this.", + "But we're not there yet, so we don't need to worry about it.", + "This is your creation - and it's just as unique and special as you are.", + "La- da- da- da- dah. Just be happy.", + "Just take out whatever you don't want. It'll change your entire perspective.", + "If you don't think every day is a good day - try missing a few. You'll see.", + "There isn't a rule. You just practice and find out which way works best for you.", + "Just let your mind wander and enjoy. This should make you happy.", + "We don't have to be committed. We are just playing here.", + "Remember how free clouds are. They just lay around in the sky all day long.", + "Any little thing can be your friend if you let it be.", + "The very fact that you're aware of suffering is enough reason to be overjoyed that you're alive and can experience it.", + "And that's when it becomes fun - you don't have to spend your time thinking about what's happening - you just let it happen.", + "This is probably the greatest thing to happen in my life - to be able to share this with you.", + "If there are two big trees, eventually there will be a little tree.", + "Everybody needs a friend.", + "You can do anything here - the only pre-requisite is that it makes you happy.", + "The more we do this - the more it will do good things to our heart.", + "Even the worst thing we can do here is good.", + "Absolutely no pressure. You are just a whisper floating across a mountain.", + "You have freedom here. The only guide is your heart.", + "Trees grow in all kinds of ways. They're not all perfectly straight. Not every limb is perfect.", + "We must be quiet, soft and gentle.", + "You can't have light without dark. You can't know happiness unless you've known sorrow.", + "Just let this happen. We just let this flow right out of our minds.", + "Just make a decision and let it go.", + "Everything is happy if you choose to make it that way.", + "You could sit here for weeks with your one hair brush trying to do that - or you could do it with one stroke with an almighty brush.", + "We're not trying to teach you a thing to copy. We're just here to teach you a technique, then let you loose into the world.", + "A tree needs to be your friend if you're going to paint him.", + "You have to make almighty decisions when you're the creator.", + "This is your world, whatever makes you happy you can put in it. Go crazy.", + "We don't have to be concerned about it. We just have to let it fall where it will.", + "We don't need any guidelines or formats. All we need to do is just let it flow right out of us.", + "Let all these little things happen. Don't fight them. Learn to use them.", + "I sincerely wish for you every possible joy life could bring.", + "We spend so much of our life looking - but never seeing.", + "Talent is a pursued interest. That is to say, anything you practice you can do.", + "Let's make some happy little clouds in our world" +] diff --git a/plugins/data/opname_prefix.txt b/plugins/data/opname_prefix.txt new file mode 100644 index 0000000..8576bd2 --- /dev/null +++ b/plugins/data/opname_prefix.txt @@ -0,0 +1,2574 @@ +aback +abaft +abandoned +abashed +aberrant +abhorrent +abiding +abject +ablaze +able +abnormal +aboard +aboriginal +abortive +abounding +abrasive +abrupt +absent +absorbed +absorbing +abstracted +absurd +abundant +abusive +acceptable +accessible +accidental +accurate +acid +acidic +acoustic +acrid +actually +ad hoc +adamant +adaptable +addicted +adhesive +adjoining +adorable +adventurous +afraid +aggressive +agonizing +agreeable +ahead +ajar +alcoholic +alert +alike +alive +alleged +alluring +aloof +amazing +ambiguous +ambitious +amuck +amused +amusing +ancient +angry +animated +annoyed +annoying +anxious +apathetic +aquatic +aromatic +arrogant +ashamed +aspiring +assorted +astonishing +attractive +auspicious +automatic +available +average +awake +aware +awesome +awful +axiomatic +bad +barbarous +bashful +bawdy +beautiful +befitting +belligerent +beneficial +bent +berserk +best +better +bewildered +big +billowy +bite-sized +bitter +bizarre +black +black-and-white +bloody +blue +blue-eyed +blushing +boiling +boorish +bored +boring +bouncy +boundless +brainy +brash +brave +brawny +breakable +breezy +brief +bright +bright +broad +broken +brown +bumpy +burly +bustling +busy +cagey +calculating +callous +calm +capable +capricious +careful +careless +caring +cautious +ceaseless +certain +changeable +charming +cheap +cheerful +chemical +chief +childlike +chilly +chivalrous +chubby +chunky +clammy +classy +clean +clear +clever +cloistered +cloudy +closed +clumsy +cluttered +coherent +cold +colorful +colossal +combative +comfortable +common +complete +complex +concerned +condemned +confused +conscious +cooing +cool +cooperative +coordinated +courageous +cowardly +crabby +craven +crazy +creepy +crooked +crowded +cruel +cuddly +cultured +cumbersome +curious +curly +curved +curvy +cut +cute +cute +cynical +daffy +daily +damaged +damaging +damp +dangerous +dapper +dark +dashing +dazzling +dead +deadpan +deafening +dear +debonair +decisive +decorous +deep +deeply +defeated +defective +defiant +delicate +delicious +delightful +demonic +delirious +dependent +depressed +deranged +descriptive +deserted +detailed +determined +devilish +didactic +different +difficult +diligent +direful +dirty +disagreeable +disastrous +discreet +disgusted +disgusting +disillusioned +dispensable +distinct +disturbed +divergent +dizzy +domineering +doubtful +drab +draconian +dramatic +dreary +drunk +dry +dull +dusty +dusty +dynamic +dysfunctional +eager +early +earsplitting +earthy +easy +eatable +economic +educated +efficacious +efficient +eight +elastic +elated +elderly +electric +elegant +elfin +elite +embarrassed +eminent +empty +enchanted +enchanting +encouraging +endurable +energetic +enormous +entertaining +enthusiastic +envious +equable +equal +erect +erratic +ethereal +evanescent +evasive +even +excellent +excited +exciting +exclusive +exotic +expensive +extra-large +extra-small +exuberant +exultant +fabulous +faded +faint +fair +faithful +fallacious +false +familiar +famous +fanatical +fancy +fantastic +far +far-flung +fascinated +fast +fat +faulty +fearful +fearless +feeble +feigned +female +fertile +festive +few +fierce +filthy +fine +finicky +first +five +fixed +flagrant +flaky +flashy +flat +flawless +flimsy +flippant +flowery +fluffy +fluttering +foamy +foolish +foregoing +forgetful +fortunate +four +frail +fragile +frantic +free +freezing +frequent +fresh +fretful +friendly +frightened +frightening +full +fumbling +functional +funny +furry +furtive +future +futuristic +fuzzy +gabby +gainful +gamy +gaping +garrulous +gaudy +general +gentle +giant +giddy +gifted +gigantic +glamorous +gleaming +glib +glistening +glorious +glossy +godly +good +goofy +gorgeous +graceful +grandiose +grateful +gratis +gray +greasy +great +greedy +green +grey +grieving +groovy +grotesque +grouchy +grubby +gruesome +grumpy +guarded +guiltless +gullible +gusty +guttural +habitual +half +hallowed +halting +handsome +handsomely +handy +hanging +hapless +happy +hard +hard-to-find +harmonious +harsh +hateful +heady +healthy +heartbreaking +heavenly +heavy +hellish +helpful +helpless +hesitant +hideous +high +highfalutin +high-pitched +hilarious +hissing +historical +holistic +hollow +homeless +homely +honorable +horrible +hospitable +hot +huge +hulking +humdrum +humorous +hungry +hurried +hurt +hushed +husky +hypnotic +hysterical +icky +icy +idiotic +ignorant +ill +illegal +ill-fated +ill-informed +illustrious +imaginary +immense +imminent +impartial +imperfect +impolite +important +imported +impossible +incandescent +incompetent +inconclusive +industrious +incredible +inexpensive +infamous +innate +innocent +inquisitive +insidious +instinctive +intelligent +interesting +internal +invincible +irate +irritating +itchy +jaded +jagged +jazzy +jealous +jittery +jobless +jolly +joyous +judicious +juicy +jumbled +jumpy +juvenile +kaput +keen +kind +kindhearted +kindly +knotty +knowing +knowledgeable +known +labored +lackadaisical +lacking +lame +lamentable +languid +large +last +late +laughable +lavish +lazy +lean +learned +left +legal +lethal +level +lewd +light +like +likeable +limping +literate +little +lively +lively +living +lonely +long +longing +long-term +loose +lopsided +loud +loutish +lovely +loving +low +lowly +lucky +ludicrous +lumpy +lush +luxuriant +lying +lyrical +macabre +macho +maddening +madly +magenta +magical +magnificent +majestic +makeshift +male +malicious +mammoth +maniacal +many +marked +massive +married +marvelous +material +materialistic +mature +mean +measly +meaty +medical +meek +mellow +melodic +melted +merciful +mere +messy +mighty +military +milky +mindless +miniature +minor +miscreant +misty +mixed +moaning +modern +moldy +momentous +motionless +mountainous +muddled +mundane +murky +mushy +mute +mysterious +naive +nappy +narrow +nasty +natural +naughty +nauseating +near +neat +nebulous +necessary +needless +needy +neighborly +nervous +new +next +nice +nifty +nimble +nine +nippy +noiseless +noisy +nonchalant +nondescript +nonstop +normal +nostalgic +nosy +noxious +null +numberless +numerous +nutritious +nutty +oafish +obedient +obeisant +obese +obnoxious +obscene +obsequious +observant +obsolete +obtainable +oceanic +odd +offbeat +old +old-fashioned +omniscient +one +onerous +open +opposite +optimal +orange +ordinary +organic +ossified +outgoing +outrageous +outstanding +oval +overconfident +overjoyed +overrated +overt +overwrought +painful +painstaking +pale +paltry +panicky +panoramic +parallel +parched +parsimonious +past +pastoral +pathetic +peaceful +penitent +perfect +periodic +permissible +perpetual +petite +petite +phobic +physical +picayune +pink +piquant +placid +plain +plant +plastic +plausible +pleasant +plucky +pointless +poised +polite +political +poor +possessive +possible +powerful +precious +premium +present +pretty +previous +pricey +prickly +private +probable +productive +profuse +protective +proud +psychedelic +psychotic +public +puffy +pumped +puny +purple +purring +pushy +puzzled +puzzling +quacking +quaint +quarrelsome +questionable +quick +quickest +quiet +quirky +quixotic +quizzical +rabid +racial +ragged +rainy +rambunctious +rampant +rapid +rare +raspy +ratty +ready +real +rebel +receptive +recondite +red +redundant +reflective +regular +relieved +remarkable +reminiscent +repulsive +resolute +resonant +responsible +rhetorical +rich +right +righteous +rightful +rigid +ripe +ritzy +roasted +robust +romantic +roomy +rotten +rough +round +royal +ruddy +rude +rural +rustic +ruthless +sable +sad +safe +salty +same +sassy +satisfying +savory +scandalous +scarce +scared +scary +scattered +scientific +scintillating +scrawny +screeching +second +second-hand +secret +secretive +sedate +seemly +selective +selfish +separate +serious +shaggy +shaky +shallow +sharp +shiny +shivering +shocking +short +shrill +shut +shy +sick +silent +silent +silky +silly +simple +simplistic +sincere +six +skillful +skinny +sleepy +slim +slimy +slippery +sloppy +slow +small +smart +smelly +smiling +smoggy +smooth +sneaky +snobbish +snotty +soft +soggy +solid +somber +sophisticated +sordid +sore +sore +sour +sparkling +special +spectacular +spicy +spiffy +spiky +spiritual +spiteful +splendid +spooky +spotless +spotted +spotty +spurious +squalid +square +squealing +squeamish +staking +stale +standing +statuesque +steadfast +steady +steep +stereotyped +sticky +stiff +stimulating +stingy +stormy +straight +strange +striped +strong +stupendous +stupid +sturdy +subdued +subsequent +substantial +successful +succinct +sudden +sulky +super +superb +superficial +supreme +swanky +sweet +sweltering +swift +symptomatic +synonymous +taboo +tacit +tacky +talented +tall +tame +tan +tangible +tangy +tart +tasteful +tasteless +tasty +tawdry +tearful +tedious +teeny +teeny-tiny +telling +temporary +ten +tender +tense +tense +tenuous +terrible +terrific +tested +testy +thankful +therapeutic +thick +thin +thinkable +third +thirsty +thirsty +thoughtful +thoughtless +threatening +three +thundering +tidy +tight +tightfisted +tiny +tired +tiresome +toothsome +torpid +tough +towering +tranquil +trashy +tremendous +tricky +trite +troubled +truculent +true +truthful +two +typical +ubiquitous +ugliest +ugly +ultra +unable +unaccountable +unadvised +unarmed +unbecoming +unbiased +uncovered +understood +undesirable +unequal +unequaled +uneven +unhealthy +uninterested +unique +unkempt +unknown +unnatural +unruly +unsightly +unsuitable +untidy +unused +unusual +unwieldy +unwritten +upbeat +uppity +upset +uptight +used +useful +useless +utopian +utter +uttermost +vacuous +vagabond +vague +valuable +various +vast +vengeful +venomous +verdant +versed +victorious +vigorous +violent +violet +vivacious +voiceless +volatile +voracious +vulgar +wacky +waggish +waiting +wakeful +wandering +wanting +warlike +warm +wary +wasteful +watery +weak +wealthy +weary +well-groomed +well-made +well-off +well-to-do +wet +whimsical +whispering +white +whole +wholesale +wicked +wide +wide-eyed +wiggly +wild +willing +windy +wiry +wise +wistful +witty +woebegone +womanly +wonderful +wooden +woozy +workable +worried +worthless +wrathful +wretched +wrong +wry +yellow +yielding +young +youthful +yummy +zany +zealous +zesty +zippy +zonked +abiding +accelerating +accepting +accomplishing +achieveing +acquiring +acting +activating +adapting +adding +addressing +administering +admiring +admitting +adopting +advising +affordable +agreeing +alerting +allowing +altering +amusing +analyzing +announcing +annoying +answering +anticipating +apologizing +appearing +applauding +applying +appointing +appraising +appreciating +approving +arbitrating +arguing +arisen +arranging +arresting +arriving +asking +assembling +assessing +assisting +assuring +attaching +attacking +attaining +attempting +attending +attracting +auditing +avoiding +awakening +backing +baking +balancing +banning +banging +batting +bathing +battling +beaming +bearing +beating +becoming +begging +beginning +behaving +beholding +belonging +bending +besetting +betting +bidding +binding +biting +bleaching +bleeding +blessing +blinding +blinking +blotting +blowing +blushing +boasting +boiling +bolting +bombing +boring +borrowing +bouncing +bowing +boxing +braking +branching +breaking +breathing +breeding +briefing +bringing +broadcasting +bruising +brushing +bubbling +budgeting +building +bumping +burning +bursting +burying +busting +buying +buzzing +calculating +calling +camping +caring +carrying +carving +casting +catching +causing +challenging +changing +charging +charting +chasing +cheating +checking +cheering +chewing +choking +choosing +chopping +claiming +clapping +clarifying +classifying +cleaning +clearing +clinging +clipping +closing +clothing +coaching +coiling +collecting +coloring +combing +coming +commanding +communicating +comparing +competing +compiling +complaining +completing +composing +computing +conceiving +concentrating +conceptualizing +concerning +concluding +conducting +confessing +confronting +confusing +connecting +conserving +considering +consisting +consolidating +constructing +consulting +containing +continuing +contracting +controlling +converting +coordinating +copying +correcting +correlating +costing +coughing +counseling +counting +covering +cracking +crashing +crawling +creating +creeping +critiquing +crossing +crushing +crying +curing +curling +curving +cutting +cycling +damning +damaging +dancing +daring +dealing +decaying +deceiving +deciding +decorating +defining +delaying +delegating +delighting +delivering +demonstrating +depending +describing +deserting +deserving +designing +destroying +detailing +detecting +determining +developing +devising +diagnosing +digging +directing +disagreeing +disappearing +disapproving +disarming +discovering +disliking +dispensing +displaying +disproving +dissecting +distributing +diving +diverting +dividing +doing +doubling +doubting +drafting +dragging +draining +dramatizing +drawing +dreaming +dressing +drinking +dripping +driving +dropping +drowning +drumming +dry ing +dusting +dwelling +earning +eating +editing +educating +eliminating +embarrassing +employing +emptying +enacting +encouraging +ending +enduring +enforcing +engineering +enhancing +enjoying +enlisting +ensuring +entering +entertaining +escaping +establishing +estimating +evaluating +examining +exceeding +exciting +excusing +executing +exercising +exhibiting +existing +expanding +expecting +expediting +experimenting +explaining +exploding +expressing +extending +extracting +facing +facilitating +fading +failing +fancying +fastening +faxing +fearing +feeding +feeling +fencing +fetching +fighting +filing +filling +filming +finalizing +financeing +finding +firing +fitting +fixing +flapping +flashing +fleeing +flinging +floating +flooding +flowing +flowering +flying +folding +following +fooling +forbiding +forcing +forecasting +foregoing +foreseeing +foretelling +forgetting +forgiving +forming +formulating +forsaking +framing +freezing +frightening +frying +gathering +gazing +generating +getting +giving +glowing +gluing +going +governing +grabbing +graduating +gratng +greasing +greeting +grinning +grinding +gripping +groaning +growing +guaranteeing +guarding +guessing +guiding +hammering +handing +handling +handwriting +hanging +happening +harassing +harming +hating +haunting +healing +heaping +hearing +heating +helping +hiding +hitting +holding +hooking +hopping +hoping +hovering +hugging +humming +hunting +hurrying +hurting +hypothesizing +identifying +ignoring +illustrating +imagining +implementing +impressing +improving +improvising +including +increasing +inducing +influencing +informing +initiating +injecting +injuring +inlaying +innovating +inputing +inspecting +inspiring +installing +instituting +instructing +insuring +integrating +intending +intensifying +interesting +interfering +interlaying +interpreting +interrupting +interviewing +introducing +inventing +investigating +inviting +irritating +itching +jailing +jamming +jogging +joining +joking +judging +juggling +jumping +justifying +keeping +kicking +killing +kissing +kneeling +knitting +knocking +knotting +knowing +labeling +landing +lasting +laughing +launching +laying +leading +leaning +leaping +learning +leaving +lecturing +lending +leveling +licensing +licking +lying +lifting +lighting +liking +listing +listening +living +loading +locating +locking +logging +longing +looking +losing +loving +maintaining +making +managing +manipulating +manufacturing +mapping +marching +marking +marketing +marrying +matching +mating +mattering +meaning +measuring +meddling +mediating +meeting +melting +melting +memorizing +mending +mentoring +milking +mining +misleading +missing +misspelling +mistaken +misunderstanding +mixing +moaning +modeling +modifying +monitoring +mooring +motivating +mourning +moving +mowing +muddling +mugging +multiplying +murdering +nailing +naming +navigating +needing +negotiating +nesting +nodding +nominating +normalizing +noting +noticing +numbering +obeying +objecting +observing +obtaining +occuring +offending +offering +officiating +opening +operating +ordering +organizing +orienting +originating +overcoming +overdoing +overdrawing +overflowing +overhearing +overtaking +overthrowing +packing +paddling +painting +parking +parting +participating +passing +pasting +patting +pausing +paying +pecking +pedaling +peeling +peeping +perceiving +perfecting +performing +permitting +persuading +photographing +picking +piloting +pinching +pining +pinpointing +pioneering +placing +planning +planting +playing +pleading +pleasing +plugging +pointing +poking +polishing +popping +possessing +posting +pouring +practicing +praising +praying +preaching +preceding +predicting +preferring +preparing +prescribing +presenting +preserving +presiding +pressing +pretending +preventing +pricking +printing +processing +procuring +producing +professing +programing +progressing +projecting +promising +promoting +proofreading +proposing +protecting +proving +providing +publicizing +pulling +pumping +punching +puncturing +punishing +purchasing +pushing +putting +qualifying +questioning +queuing +quitting +racing +radiating +raining +raising +ranking +raping +rating +reaching +reading +realigning +realizing +reasoning +receiving +recognizing +recommending +reconciling +recording +recruiting +reducing +referring +reflecting +refusing +regretting +regulating +rehabilitating +reigning +reinforcing +rejecting +rejoicing +relating +relaxing +releasing +relying +remaining +remembering +reminding +removing +rendering +reorganizing +repairing +repeating +replacing +replying +reporting +representing +reproducing +requesting +rescuing +researching +resolving +responding +restoring +restructuring +retiring +retrieving +returning +reviewing +revising +rhyming +riding +ringing +rinsing +rising +risking +robbing +rocking +rolling +rotting +rubbing +ruining +ruling +running +rushing +sacking +sailing +satisfying +saving +sawing +saying +scaring +scattering +scheduling +scolding +scorching +scraping +scratching +screaming +screwing +scribbling +scrubbing +sealing +searching +securing +seeing +seeking +selecting +selling +sending +sensing +separating +serving +servicing +setting +settling +sewing +shading +shaking +shaping +sharing +shaving +shearing +shedding +sheltering +shining +shivering +shocking +shooting +shopping +showing +shrinking +shrugging +shutting +sighing +signing +signaling +simplifying +sinning +sinful +singing +sinking +sipping +sitting +sketching +skiing +skipping +slapping +slaying +sleeping +sliding +slinging +slinking +slipping +slitting +slowing +smashing +smelling +smiling +smiting +smoking +snatching +sneaking +sneezing +sniffing +snoring +snowing +soaking +solving +soothing +soothsayer +sorting +sounding +sowing +sparing +sparking +sparkling +speaking +specifying +speeding +spelling +spending +spilling +spinning +spitting +splitting +spoiling +spotting +spraying +spreading +springing +sprouting +squashing +squeaking +squealing +squeezing +staining +stamping +standing +staring +starting +staying +stealing +steering +steping +sticking +stimulating +stinging +stinking +stirring +stitching +stopping +storing +strapping +streamlining +strengthening +stretching +striding +striking +stringing +striping +striving +stroking +structuring +studying +stuffing +subtracting +succeeding +sucking +suffering +suggesting +suiting +summarizing +supervising +supplying +supporting +supposing +surprising +surrounding +suspecting +suspending +swearing +sweating +sweeping +swelling +swimming +swinging +switching +symbolizing +synthesizing +systemizing +tabulating +taking +talking +taming +tapping +targeting +tasting +teaching +tearing +teasing +telephoning +telling +tempting +terrifying +testing +thanking +thawing +thinking +thriving +throwing +thrusting +ticking +tickling +ting +timing +tipping +tiring +touching +touring +towing +tracing +trading +training +transcribing +transfering +transforming +translating +transporting +trapping +traveling +treading +treating +trembling +tricking +tripping +trotting +troubling +troubleshooting +trusting +trying +tugging +tumbling +turning +tutoring +twisting +typing +undergoing +understanding +undertaking +undressing +unfastening +unifying +uniting +unlocking +unpacking +untidying +updating +upgrading +upholding +upseting +using +utilizing +vanishing +verbalizing +verifying +vexing +visiting +wailing +waiting +waking +walking +wandering +wanting +warming +warning +washing +wasting +watching +watering +waving +wearing +weaving +wedding +weeping +weighing +welcoming +wending +wetting +whining +whipping +whirling +whispering +whistling +winning +winding +winking +wiping +wishing +withdrawing +withholding +withstanding +wobbling +wondering +working +worrying +wrapping +wrecking +wrestling +wriggling +wringing +writing +x-raying +yawning +yelling +zipping +zooming +fucking +shitting +fornicating +shitted +fucked +oversexualized +skull-fucking +bitching +faggot +flaming +shitty +extra-fucky +murder/suicide +gay +bisexual +lesbian +asexual +omnisexual +transvestite +narcoleptic +paraplegic +quadraplegic +necrophiliac +lusty +stillborn +crippled +delusional +insane +cleptomaniac +fibrodysplasia-ossificans-progressiviac +fapping +cannibalistic +horny +pornographic +claustrophobic +lycanthropy +vampiric +religious +nude +fabulous +anuptaphobic +epileptic +seizure-inducing +exorcized +demonically-possessed +irreversible +legendary +world's worst +world's best +Seven years of +contagious +trigger-happy +explosive +nostalgic +civilian-devouring +endangered +overpriced +plastic +steel +iron +Expect No Mercy From Our +sexually ambiguous +permanent +republican +democratic +regretless +cruel +hysterical +earth-shattering +provoked +eternal +infinite +hungry +impending +perpetual +midnight +Grab Your Ankles and Prepare for Our +Grab Your Ankles and Prepare for +blind +humping +raping +fingering +necessary +It's Best To Avoid Our +unleashed +infallible +interjecting +pious +holy +bowel-loosening +irradiated +massive +jewish +african-american +asian +gentlemanly +midieval +destroy the +dastardly +selfish +mexican +indian +christian +islamic +buddhist +rambunctious +squiggly +squirrely +fangorious +touchy +underappreciated +beware of the +pants-shitting +prepare to be destroyed by our +prepare to be destroyed by +thrusting +you may want to stand back from our +you may want to stand back from +don't mess with our +suicidal +expect no mercy from our +pissed off +unknown +nerve-wracking +sometimes I think I failed as a(n) +sometimes I touch myself with a(n) +sometimes I pleasure myself with a(n) +faptastic +professor +doctor +drunk +high +baked +batshit-crazy +gut wrenching +snobbish +prodigal +culpable +gregarious +prostrated +Mr. +Mrs. +God-fearing +flat-footed +rapey +able-bodied +some people prefer being cuddled with our +some prefer being stabbed by our +there is no escabe from our +there is no escape from my +you dont have the motor skills required to skin my +the end has come for all +Lucian Frued-looking +That slut has my +Flip-flopping +fecal-tronic +everywhere, +you only need my +your head is like a +opposite of +spine-bending +nose like a +I can't help being afraid of +raised by +Immoral, Godless, +Ride on my magic +Yesterday's +Yesterday's burning +Yesterday's mole-infested +tomorrow's +tomorrow's black +Tomorrow's putrid +Worlds worst +Worlds shittiest +Worlds greatest shit +Worlds greatest +Worlds least impressive +Worlds most infuriating +Wolrds most apathetic +Clown shoed +Weird legged +Who is this +Hefty +Goofy Gus +Sour titted +blank faced +Saggy titted +Conjugated +Overwhelmingly flatulent +Anusy +Sinking like a +Skunky +Not Safe For Work +King of +Piss flavored +Humiliation +Assplay +This is a terrible +Get your own +Lets do this +standing at the end of a warf in a +Down east +Batman +Emotional processing +Dress up +Fancy top hat wearing +Shotgun weilding +Locked & Loaded +Is there an app for that +Barking mad +Immigrating +Emmigrating +Axe Body Spray scented +John Belushi's +Seven years of marital +Ceasless Bombardment of +Blood soaked +What was the name of that +Chocolate Covered +Dr. +Professor +Flame retardent +Racist +Murder-Suicide +Nose picking +Finger Blasting +Rock crushing +Skull cracking +Meat thirsty +Asian Dentistry +Cock Bending +Still born +Rocketing +Canabalizing +Diving naked into a +Streaking +Jaundiced +Devil's +Anti Semitic +Stealth +Tentacled +Blasphemous +Sutured +Impending +Grab your ankles and prepare for +Grab your ankles and prepare for our +Terse +World weary +Brined +Brained +Irradiated +Turd burgler +Jewy +Sonic +Dastardly +Swashbuckling +Underappreciated +Sometime I think I failed as a +Polack +Oriental +have you ever wondered why +when I think about you I touch +Interpretive +Synchronized +Penile +Anal +Oral +Nasal +Vaginal +Erectile +Malfunctioning +Arbitrary +Accidental +Bat-shit crazy +Ass ripping +Exfoliating +Blood curdling +Fart smelling +decoy +fake +undisclosed +perpetually +Granted I could have done +I wish I could quit +I aint gonna quit +Upper decked +Cyber +Greedy +Soul crushing +Anal gushing +sinking +fisting +crumbling +gag inducing +fag inducing +particularly grim +mismatched +I told you she wont my +unbelievably stank +particularly +probably a rapist +unsophisticated +low class +middle class +gutter class +skanky +skeezy +hoe slappin +surgical +forgetful +inevitable +invincible +shitty +respectable +multiple +swarming +buzzing +overrated +gaping +vindictive +theify +unscrupulous +eye gouging +grief stricken +fetal posed +fecal posed +out numbered +balls deep +grievously +just about an +god awful +scared +pontificated +verall +robotic +even more powerful +hillbilly +flaccid +novel +novelty +pointy +conjugal +potentially +unacceptable +inappropriate +unabashed +perplexing +smells like +tumultuous +melancholy +gravitational +some people call me +over +stank +headstrong +impractically +vilified +harvested +vestigial +unapologetic +in the end nothing could really kill +fungal +candid +shrinking +ginormous +guttural +gangly +she once was +look at that +all the way from +streets ahead +regularly apply +apply liberal +apply +touch and go +avoid the +isolated +never ending +but maybe not +after all +after all this +industry leading +secreting +scalding +diarrhetic +juxtaposed +infatuated +inflatuated +blatantly +smell bound +spell bound +disengaging +engaging +diabetic +comatose +erect +boat loads +retarded +point out the +make her say +placental +apocalyptic +hotpocalyptic +diseased +mangy +scurvied +coulda done +just face the +toothless +over the +gargling +gurgling +shitfilled +nebulous +spry +decimate +cosmopolitan \ No newline at end of file diff --git a/plugins/data/opname_suffix.txt b/plugins/data/opname_suffix.txt new file mode 100644 index 0000000..e9487b9 --- /dev/null +++ b/plugins/data/opname_suffix.txt @@ -0,0 +1,1229 @@ +Captain Planet +retard +savant +urethral discharge +vaginal discharge +anal discharge +oral discharge +nasal discharge +penile implant +penis +vagina +erectile disfunction +enzyte +viagra +claritin +account +achiever +acoustics +act +action +activity +actor +addition +adjustment +advertisement +advice +aftermath +afternoon +afterthought +agreement +air +airplane +airport +alarm +amount +amusement +anger +angle +animal +answer +ant +ants +apparatus +apparel +apple +apples +appliance +approval +arch +argument +arithmetic +arm +army +art +attack +attempt +attention +attraction +aunt +authority +babies +baby +back +badge +bag +bait +balance +ball +balloon +balls +banana +band +base +baseball +basin +basket +basketball +bat +bath +battle +bead +beam +bean +bear +bears +beast +bed +bedroom +beds +bee +beef +beetle +beggar +beginner +behavior +belief +believe +bell +bells +berry +bike +bikes +bird +birds +birth +birthday +bit +bite +blade +blood +blow +board +boat +boats +body +bomb +bone +book +books +boot +border +bottle +boundary +box +boy +boys +brain +brake +branch +brass +bread +breakfast +breath +brick +bridge +brother +brothers +brush +bubble +bucket +building +bulb +bun +burn +burst +bushes +business +butter +buttoncabbage +cable +cactus +cake +cakes +calculator +calendar +camera +camp +can +cannon +canvas +cap +caption +car +card +care +carpenter +carriage +cars +cart +cast +cat +cats +cattle +cause +cave +celery +cellar +cemetery +cent +chain +chair +chairs +chalk +chance +change +channel +cheese +cherries +cherry +chess +chicken +chickens +children +chin +church +circle +clam +class +clock +clocks +cloth +cloud +clouds +clover +club +coach +coal +coast +coat +cobweb +coil +collar +color +comb +comfort +committee +company +comparison +competition +condition +connection +control +cook +copper +copy +cord +cork +corn +cough +country +cover +cow +cows +crack +cracker +crate +crayon +cream +creator +creature +credit +crib +crime +crook +crow +crowd +crown +crush +cry +cub +cup +current +curtain +curve +cushion +dad +daughter +day +death +debt +decision +deer +degree +design +desire +desk +destruction +detail +development +digestion +dime +dinner +dinosaurs +direction +dirt +discovery +discussion +disease +disgust +distance +distribution +division +dock +doctor +dog +dogs +doll +dolls +donkey +door +downtown +drain +drawer +dress +drink +driving +drop +drug +drum +duck +ducks +dust +twat +faggot +batshit +ear +earth +earthquake +edge +education +effect +egg +eggnog +eggs +elbow +end +engine +error +event +example +exchange +existence +expansion +experience +expert +eye +eyes +face +fact +fairies +fall +family +fan +fang +farm +farmer +father +father +faucet +fear +feast +feather +feeling +feet +fiction +field +fifth +fight +finger +finger +fire +fireman +fish +flag +flame +flavor +flesh +flight +flock +floor +flower +flowers +fly +fog +fold +food +foot +force +fork +form +fowl +frame +friction +friend +friends +frog +frogs +front +fruit +fuel +piece of furniture +alley +game +garden +gate +ghost +giant +giraffe +girl +girls +glass +glove +glue +goat +gold +goldfish +good-bye +goose +government +governor +grade +grain +grandfather +grandmother +grape +grass +grip +ground +group +growth +guide +guitar +gun +hair +haircut +hall +hammer +hand +hands +harbor +harmony +hat +hate +head +health +hearing +heart +heat +help +hen +hill +history +hobbies +hole +holiday +home +honey +hook +hope +horn +horse +hose +hospital +hot +hour +house +houses +humor +hydrant +ice +icicle +idea +impulse +income +increase +industry +ink +insect +instrument +insurance +interest +invention +iron +island +jail +jam +jar +jeans +jelly +jellyfish +jewel +join +joke +journey +judge +juice +jump +kettle +key +kick +kiss +kite +kitten +kittens +kitty +knee +knife +knot +knowledge +laborer +lace +ladybug +lake +lamp +land +language +laugh +lawyer +lead +leaf +learning +leather +leg +legs +letter +letters +lettuce +level +library +lift +light +limit +line +linen +lip +liquid +list +lizards +loaf +lock +locket +look +loss +love +low +lumber +lunch +lunchroom +orgasm +broken penis +fetus +abortion clinic failure +machine +magic +maid +mailbox +man +manager +map +marble +mark +market +mask +mass +match +meal +measure +meat +meeting +memory +men +metal +mice +middle +milk +mind +mine +minister +mint +minute +mist +mitten +mom +money +monkey +month +moon +morning +mother +motion +mountain +mouth +move +muscle +music +nail +name +nation +neck +need +needle +nerve +nest +net +news +night +noise +north +nose +note +notebook +number +nut +oatmeal +observation +ocean +offer +office +oil +operation +opinion +orange +oranges +order +organization +ornament +oven +owl +owner +page +pail +pain +paint +pan +pancake +paper +parcel +parent +park +part +partner +party +passenger +paste +patch +payment +peace +pear +pen +pencil +person +pest +pet +pets +pickle +picture +pie +pies +pig +pigs +pin +pipe +pizzas +place +plane +planes +plant +plantation +plants +plastic +plate +play +playground +pleasure +plot +plough +pocket +point +poison +police +polish +pollution +popcorn +porter +position +pot +potato +powder +power +price +print +prison +process +produce +profit +property +prose +protest +pull +pump +punishment +purpose +push +public +quarter +quartz +queen +question +quicksand +quiet +quill +quilt +quince +quiver +rabbit +rabbits +rail +railway +rain +rainstorm +rake +range +rat +rate +ray +reaction +reading +reason +receipt +recess +record +regret +relation +religion +representative +request +respect +rest +reward +rhythm +rice +riddle +rifle +ring +rings +river +road +robin +rock +rod +roll +roof +room +root +rose +route +rub +rule +run +sack +sail +salt +sand +scale +scarecrow +scarf +scene +scent +school +science +scissors +screw +sea +seashore +seat +secretary +seed +selection +self +sense +servant +shade +shake +shame +shape +sheep +sheet +shelf +ship +shirt +shock +shoe +shoes +shop +show +side +sidewalk +sign +silk +silver +sink +sister +sisters +size +skate +skin +skirt +sky +slave +sleep +sleet +slip +slope +smash +smell +smile +smoke +snail +snails +snake +snakes +sneeze +snow +soap +society +sock +soda +sofa +son +song +songs +sort +sound +soup +space +spade +spark +spiders +sponge +spoon +spot +spring +spy +square +squirrel +stage +stamp +star +start +statement +station +steam +steel +stem +step +stew +stick +sticks +stitch +stocking +stomach +stone +stop +store +story +stove +stranger +straw +stream +street +stretch +string +structure +substance +sugar +suggestion +suit +summer +sun +support +surprise +sweater +swim +swing +system +table +tail +talk +tank +taste +tax +teaching +team +teeth +temper +tendency +tent +territory +test +texture +theory +thing +things +thought +thread +thrill +throat +throne +thumb +thunder +ticket +tiger +time +tin +title +toad +toe +toes +tomatoes +tongue +tooth +toothbrush +toothpaste +top +touch +town +toy +toys +trade +trail +train +trains +tramp +transport +tray +treatment +tree +trees +trick +trip +trouble +trousers +truck +trucks +tub +turkey +turn +twig +twist +umbrella +uncle +underwear +unit +use +vacation +value +van +vase +vegetable +veil +vein +verse +vessel +vest +view +visitor +voice +volcano +volleyball +voyage +walk +wall +war +wash +waste +watch +water +wave +waves +wax +way +wealth +weather +week +weight +wheel +whip +whistle +wilderness +wind +window +wine +wing +winter +wire +wish +woman +women +wood +wool +word +work +worm +wound +wren +wrench +wrist +writer +writing +yak +yam +yard +yarn +year +yoke +zebra +zephyr +zinc +zipper +zoo +dragon +marsupial +jihad +Morgan Freeman +cheetah +supernova +liberty +fap session +masturbation +wife +above ground pool +urinary tract +skin condition +Bloody stool +Bloody urine +Poop shoes +apple computers +linoleic acid +apples and grapes +Pant suit Industry +Face +JFK +Rape baby +Sharks +Batman +Baren Wasteland +Drunk Uncle +Kids today +Ballot Measure +State of denial +Windows 8 +Hoarder +Electoral College +Raving lunatic +Pedophile +Bleached Anus +Giant Black Cock +Jim Belushi +Ape tit +Marshal Law +Bold face print +Ellen degeneres +Weird Daycare +Jesus Crystler +Dr. Seus +Dr. Phil +Oprah Winfrey +Bulldoser +Constitutional Amendment +Abortion Clinic +Asia +Nude painting +Finger Bang +Charlie Sheen +Corn puppet +Monicle +Mr. Peanut +Rape Dungeon +Skull Fuckery +Clogged Arteries +Baconator +Necrophiliac +Penis eating hate tunnel +Stone man syndrome +Skid mark +Track marks +Sledge hammer +Sarin gas attack +Avacado +Devilry +Euthinasia +Statutory rape +Statutory rapist +Furby +Swamp water +Rectal trauma +Like you wouldnt believe +Magnum Opus +Jew +Queef +Apartide +Holocaust +KGB Agent +Scatter bomb +Fire bomb +Dancer +swimming +Anti Freeze +Diharea +implant +disfunction +defusion +Osmosis +Guano +Kaiser Permanente +Orgasm +Amuse Bouche +myself +Anwar Sadat +Bro Rape +bellhop +pygmy +upper decker +Cheese goblet +entrails +all that jazz +but it probably wasnt my fault +retribution +mammy +bitch be trippin +good-ol dick +Oil refinery +gugonzos +Gadzukes +under new managment +under old management +nothing has changed +rape van +big rapist patrick +forever yogurt +man yogurt +spewdom +lady boy +Nicaragua +Mike Dicka +Da bears +Guerrilla warfare +Jammies +slut sock +poop sock +desire +pretty much everything +fondle +blast doors +oven mit +wok +beef +beef supreme +pork +multiple personality disorder +Baboon +Gibboon +Giantism +Elephantitis +mardi gras +theft +terracotta army +wax figurines +doll heads +doll hairs +beefaroni +blood sport +moral dilema +dirigible +duodenum +fetal position +fecal position +taint +taint meat +electric fence +plattitudes +veteran +robots +Super robots +slop hole +fun button +hillbilly +tongue punch +novelty item +great grape rape ape +stick +gull +meat whistle +cad +hype +bitch tits +skank +gag order +toenail +like the predator +like the terminator +pus +putrifaction +flotsam +jetsam +rape whistle +maven +as needed +merry go round +place to die +place to get fondled +fun bags +enzimes +diabetes +diabetus +the betus +bettle juice +Janga +Apple tart +fart box +taco stand +funions +slaughterhosen +suicide +lederhosen +loincloth +coma +jamboree +afterbirth +placenta +wolverine +bandicoot +tazmania +scurvy +japanese game show +demagogue +throat +lady pillows +vestibule +biggotry +hootenanny +as a motherfucker +Sarah Palin +dakimura +Obongo +Obama +raptor assault +economy +as fuck \ No newline at end of file diff --git a/plugins/data/plinkett.txt b/plugins/data/plinkett.txt new file mode 100644 index 0000000..8d7f6d3 --- /dev/null +++ b/plugins/data/plinkett.txt @@ -0,0 +1,16 @@ +This guy Lucas has got us all by the balls. His fingers are in our wallets. Get your finger out of my ass wallet! +The Millennium Falcon is safe. It was not raped. Where would you rape the Millennium Falcon anyway? +I'm gonna fuck my cat and eat my cat and I'm gonna kidnap a hooker, and it'll help me fuck the pain away. +Now I've analyzed this movie with a team of cheerleaders, who all came to one unanymous conclusion: that if I let them go, they won't tell nobody. +What red-blooded male wouldn't want to dock his canoe in Natalie's port, man? +Empire pulled this off perfectly, of course. 'Cause I love Empire so much I fuck it. +Oh, my pizza rolls is done. You want some pizza rolls? Are ya sure? They're really good pizza rolls. They're hot and pizza-y. +This is what they call filler, and it's nowhere near as good as the kind they put in Twinkies. Mmmmm...I like to fuck my cat. +Paging Dr. Plinkett. Dr. Plinkett is in, I'm here. Somebody pass the Vicodin. No, wait, we need Ambien. Well, we sure need some-thien. +And someone even said it was the bestest movie ever because it had lava in it. Aw, ain't he cute? His name is Johnny. I adopted him, from a grocery store parking lot. +Even Ray Charles could see that coming, and he doesn't know anything about Star Wars. +There are two types of people in this world: people that understand what I'm saying, and people that like the Star Wars prequels. +Now, is General Grievous supposed to be funny? Cause they said he was a villain, not a comedian, like Larry Seinfeld. But rather a creepy weirdo, like Jerry Flint. I'm so confused. +Baby's Day Out is about as interesting as my taint. +When will I get my merkins in the mail? +Anybody wanna help me milk my cock? http://i.imgur.com/vvfu4Y5.jpg diff --git a/plugins/ddate.py b/plugins/ddate.py new file mode 100644 index 0000000..a6cf2f8 --- /dev/null +++ b/plugins/ddate.py @@ -0,0 +1,8 @@ +from util import hook +from ddate.base import DDate + +import datetime + +@hook.command +def ddate(inp): + return str(DDate()) diff --git a/plugins/derpiback.py b/plugins/derpiback.py new file mode 100644 index 0000000..02fd64a --- /dev/null +++ b/plugins/derpiback.py @@ -0,0 +1,11 @@ +from util import hook + +import requests + +@hook.command +def derpiback(pls): + r = requests.get("https://derpibooru.org") + if "J6-eVNTVvMk" in r.text: + return "nope derpibooru is still down for maintenance, at soonest it will be tomorrow" + + return "yep" diff --git a/plugins/hack.py b/plugins/hack.py new file mode 100644 index 0000000..e6166cf --- /dev/null +++ b/plugins/hack.py @@ -0,0 +1,315 @@ +#!/usr/bin/python + +import sys, os +import random +import string +import re + +choice = random.choice +randint = random.randint + +def dc(n, m=20): + return n < randint(0, m-1) + +base_noun = [ + 'TCP', 'IP', 'UDP', 'BGP', 'DNS', 'ARP spoof', 'ARP', 'JavaScript', + 'HTML', 'CSS', 'XML', 'SOAP', 'REST', 'SSL', 'socket', 'BSD', 'linux', + 'MPI', 'OpenMP', 'SYN/ACK', 'kernel', 'ELF', 'COFF', '68000', 'x86', + 'MIPS', 'ethernet', 'MAC', 'C', 'C++', 'Java', 'JSON', 'ruby', + 'python', 'linked list', 'radix trie', 'hash table', 'SQL', 'makefile', + '/proc', '/dev/null', 'tty', 'regex', 'sed', 'vim', 's/// operation', + 'operation', 'port scanner', 'port scan', 'lookup table', 'anti-', + ' manual', ' config', 'IRC', 'IRC bot', 'bootloader', + 'GNU/', +] + + +# I suppose it would be easier to create rules for a lot of these, but +# I think LUTs are fine. + +base_verb = [ + ( 'compile', '-s', '-d', '-r', 'compiling' ), + ( 'link', '-s', '-ed', '-er', '-ing' ), + ( 'assemble', '-s', '-d', '-r', 'assembling' ), + ( 'load', '-s', '-ed', '-er', '-ing' ), + ( 'boot', '-s', '-ed', '-er', '-ing' ), + ( 'reset', '-s', 'reset', '-ter', '-ting' ), + ( 'remove', '-s', '-d', '-r', 'removing' ), + ( 'decompile', '-s', '-d', '-r', 'decompiling' ), + ( 'unlink', '-s', '-ed', '-er', '-ing' ), + ( 'disassemble', '-s', '-d', '-r', 'disassembling' ), + ( 'unload', '-s', '-ed', '-er', '-ing' ), + ( 'parse', '-s', '-d', '-r', 'parsing' ), + ( 'archive', '-s', '-d', '-r', 'archiving' ), + ( 'cherry-pick', '-s', '-ed', '-er', '-ing' ), + ( 'overwrite', '-s', 'overwrote', '-r', 'overwriting' ), + ( 'edit', '-s', '-ed', '-or', '-ing' ), + ( 'compute', '-s', '-d', '-r', 'computing' ), + ( 'release', '-s', '-d', '-r', 'releasing' ), + ( 'transmit', '-s', '-ted', '-ter', '-ting' ), + ( 'receive', '-s', '-d', '-r', 'receiving' ), + ( 'analyze', '-s', '-d', '-r', 'analyzing' ), + ( 'print', '-s', '-ed', '-er', '-ing' ), + ( 'save', '-s', '-d', '-r', 'saving' ), + ( 'erase', '-s', '-d', '-r', 'erasing' ), + ( 'install', '-s', '-ed', '-er', '-ing' ), + ( 'scan', '-s', '-ned', '-ner', '-ning' ), + ( 'port scan', '-s', '-ned', '-ner', '-ning' ), + ( 'nmap', '-s', '-ped', '-per', '-ping' ), + ( 'DDOS', '-es', '-sed', '-ser', '-sing' ), + ( 'exploit', '-s', '-ed', '-er', '-ing' ), + ( 'send', '-s', 'sent', '-er', '-ing' ), + ( 'write', '-s', 'wrote', '-r', 'writing' ), + ( 'detect', '-s', '-ed', '-or', '-ing' ), + ( 'sniff', '-s', '-ed', '-er', '-ing' ), + + ( 'look up', 'looks up', 'looked up', 'looker upper', 'looking up' ), + ( 'check out', 'checks out', 'checked out', 'checker outer', 'checking out' ), + ( 'query', 'queries', 'queried', 'querier', 'querying' ), +] + +base_service = [ + 'Google', 'Amazon', 'Stack Overflow', 'Freenode', 'EFnet', 'Usenet', + 'this old GeoCities page', 'my website', '\'s website', +] + +base_hack_object = [ + 'the ', 'a(n) ', 'the victim\'s ', 'some ', + 'a(n) from ', '\'s ', + 'the freeware ', 'a configurable ', 'a working ', + 'a pre- ', +] + +base_tool = [ + ' ', + ' ', + '', + ' for ', + ' ', + 'thing that ', + 'thing for ', + 'pre- ', + 'anti- ', + ' tool', + ' subsystem', + 'professional ', + '- hybrid', +] + +base_tools = [ + ' s', + ' ', + 's', + ' ', + 'things for ', + 'pre- s', +] + +base_person = [ + 'Linus Torvalds', + 'Alan Cox', + 'Con Colivas', + 'Ingo Molnar', + 'Hans Reiser', + 'Ulrich Drepper', + 'Larry Wall', + 'William Pitcock', + 'Bill Gates', + 'Ken Thompson', + 'Brian Khernigan', + 'Dennis Ritchie', + 'Eric S. Raymond', + 'Richard M. Stallman', + 'DPR', + 'Sabu', +] + +base_system = [ + 'Amiga', 'C-64', 'IBM PC', 'Z80', 'VAX', 'the PDP-8', +] + +base_time = [ + 'way back', 'a few years ago', 'in the early 90\'s I think', + 'when everybody had a(n) ', + 'before anybody knew who was', +] + +# is intransitive +# is singular + +base_advice = [ + 'Try .', + 'Did you first?', + 'Read up on .', + 'Check for a(n) .', + 'See if the has already.', + 'Did you check the config?', + 'Hm, sounds like a problem with the .', + 'Doesn\'t look like the is .', + 'Check the "" wiki.', + 'You probably didn\'t .', + 'Check the "" website.', + ', then send me the output.', + 'Pastebin your config.', + 'I think my has a(n) , try that.', + ' worked for me.', + 'Did you enable the ?', + 'No, the . You want a(n) .', + 'Do you have a(n) installed?', + 'A(n) is needed to .', + ' claims you can .', + 'I heard when that happens.', + 'I saw on , you can .', + 'A(n) might do the trick.', + 'Make sure to delete your . That stuff is illegal.', + 'Did you before you ?', + 'Where did you the to?', + 'I don\'t know. Ask the guy who wrote your . I think ?', + 'Was this with a(n) or a(n) ?', + 'Please use the official .', + 'That won\'t work. You can\'t just .', + ', , and THEN . Sheesh.', + 'No, don\'t . recently published a CVE about that.', + ', , . This is our motto.', + 'Don\'t think too hard about . The will do that.', + 'There\'s a(n) exploit floating around somewhere. Check .', + 'Simple cannot . You need a good, solid .', + 'I had a(n) for